如何将cross_val_score与random_state一起使用

时间:2016-09-30 01:14:27

标签: python machine-learning scikit-learn

我为不同的跑步获得了不同的价值......我在这里做错了什么:

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

1 个答案:

答案 0 :(得分:6)

您犯的错误是调用RandomForestClassifier,其默认arg,random_state为无。因此,它拾取np.random生成的种子以产生随机输出。

StratifiedKFoldrandom_state中的RandomForestClassifier需要相同才能生成相等的交叉验证分数数组。

<强>插图:

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 args。但是,只需提供np.random.seed(value)即可在开头创建随机整数。这些也会在输出端创建相同的数组。