每次运行得到不同的值。我在这里做错了什么?
import numpy as npfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.model_selection import StratifiedKFold, cross_val_scoreX = 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
生成的种子来产生随机输出。
在StratifiedKFold
和RandomForestClassifier
中,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) # 在这里设置random_state不是必须的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)
来创建随机整数。这样也能在输出中产生相同的数组。