我试图用大ish数据集运行一个简单的RandomForestClassifier()。我通常首先使用train_test_split
进行交叉验证,然后开始使用cross_val_score
。scikit-learn - train_test_split和ShuffleSplit产生非常不同的结果
在这种情况下,虽然这两种方法的结果非常不同,但我无法弄清楚原因。我的理解这些是这两个片段应该做同样的事情:
cfc = RandomForestClassifier(n_estimators=50)
scores = cross_val_score(cfc, X, y,
cv = ShuffleSplit(len(X), 1, 0.25),
scoring = 'roc_auc')
print(scores)
>>> [ 0.88482262]
这:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25)
cfc = RandomForestClassifier(n_estimators=50)
cfc.fit(X_train, y_train)
roc_auc_score(y_test, cfc.predict(X_test))
>>> 0.57733474562203269
然而分数差别很大。 (分数非常具有代表性,我在许多次跑步中观察到相同的行为)。
任何想法,为什么这可能是?我很想信任cross_val_score
结果,但我想,以确保我不是搞乱了地方..
** **更新
我注意到,当我逆转的参数roc_auc_score
顺序,我得到了类似的结果:
roc_auc_score(cfc.predict(X_test), y_test)
但文件明确规定,第一要素应该是实际值,而第二个目标。
你尝试用相同的随机状态眼看交叉验证?您的数据是否预先洗牌,甚至是跨班级? –