我试图了解sklearn交叉验证和评分的工作原理,并观察到一些奇怪的行为。
我实例化一个分类器,然后对其进行 4 折交叉验证,在 90% 准确率 +- 0.5% 范围内获得 4 个分数。
然后我在所有训练数据上重新拟合模型,并在测试数据上对其进行评分。我也在此代码中对训练数据进行评分,只是为了证明一点。
我在将数据拆分为测试集和训练集后运行此代码。
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.metrics import make_scorer, balanced_accuracy_score
gbc = GradientBoostingClassifier()
scores = cross_val_score(gbc, X_train, y_train, cv=4, scoring=make_scorer(balanced_accuracy_score))
print('cv scores: ', scores)
print('cv scores mean: ', scores.mean())
gbc.fit(X_train, y_train)
print('test score on test: ', balanced_accuracy_score(gbc.predict(X_test), y_test))
print('test score on train: ', balanced_accuracy_score(gbc.predict(X_train), y_train))
Run Code Online (Sandbox Code Playgroud)
打印:
cv scores: [0.89523728 0.90348769 0.90412818 0.89991599]
cv scores mean: 0.900692282366262
test score on test: 0.8684604909814304
test score on train: 0.874880530883581 …Run Code Online (Sandbox Code Playgroud) scikit-learn ×1