如何将cross_val_score与random_state一起使用

max*_*moo 6 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]
Run Code Online (Sandbox Code Playgroud)

Nic*_*eli 7

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

random_state在这两个StratifiedKFoldRandomForestClassifier需要是相同序,以产生交叉验证的分数等于阵列。

插图:

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]
Run Code Online (Sandbox Code Playgroud)

解决它的另一种方法是不random_state同时为RFC和SKF 提供args。但是,只需np.random.seed(value)在开头提供即可创建随机整数。这些也会在输出处创建相等的数组。

  • 哈哈,是的,我想这是名字的提示,它不叫`DeterministicForestClassifier`吗? (2认同)