不同的运行得到不同的值。我哪里做错了?
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
产生的种子产生随机输出。
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) # 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)
来创建随机整数。这也将在输出处创建相等的数组。