如何使用cross_val_score和random_state



不同的运行得到不同的值。我哪里做错了?

import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import StratifiedKFold, cross_val_score
X = np.random.random((100,5))
y = np.random.randint(0,2,(100,))
cross_val_score = RandomForestClassifier()
cv = StratifiedKFold(y, random_state=1)
s = cross_val_score(cross_val_score, X, y,scoring='roc_auc', cv=cv)
print(s)
# [ 0.42321429  0.44360902  0.34398496]
s = cross_val_score(cross_val_score, X, y, scoring='roc_auc', cv=cv)
print(s)
# [ 0.42678571  0.46804511  0.36090226]

您正在犯的错误是调用RandomForestClassifier,其默认参数random_state为None。因此,它选取np.random产生的种子产生随机输出。

StratifiedKFoldRandomForestClassifier中的random_state必须相同,以便产生相等的交叉验证分数数组。

说明:

X=np.random.random((100,5))
y=np.random.randint(0,2,(100,))
clf = RandomForestClassifier(random_state=1)
cv = StratifiedKFold(y, random_state=1)        # Setting random_state is not necessary here
s = cross_val_score(clf, X,y,scoring='roc_auc', cv=cv)
print(s)
##[ 0.57612457  0.29044118  0.30514706]
print(s)
##[ 0.57612457  0.29044118  0.30514706]
另一种解决方法是不为RFC和SKF提供random_state参数。但是,只要在开始时提供np.random.seed(value)来创建随机整数。这也将在输出处创建相等的数组。

相关内容

  • 没有找到相关文章