cross_val_score的准确性差

时间:2020-03-05 15:55:57

标签: python python-3.x machine-learning cross-validation

对于机器学习分类,我使用10倍交叉验证:

kfold = StratifiedKFold(n_splits=10)

我拆分了火车/测试数据:

X_train, X_test, Y_train, Y_test = model_selection.train_test_split(X, y, test_size=0.3 )

对于分类器,可得到10倍的准确度平均值:

cross_val_score(classifier, X_train, y=Y_train, scoring='accuracy', cv=kfold, n_jobs=4))

这使我的平均精度为0.62。

为确认准确性值,我启动了一个预测:

Y_pred_train = classifier.predict(X_train)

print(metrics.classification_report(Y_train, Y_pred_train))

我得到了: 精确召回f1得分支持

       0       0.92      0.96      0.94      2523
       1       0.95      0.89      0.92      1923

accuracy                           0.93      4446

宏平均0.93 0.93 0.93 4446 加权平均0.93 0.93 0.93 4446

此精度与上述精度不匹配。 怎么解释呢? 非常感谢。

2 个答案:

答案 0 :(得分:1)

这里的问题是,您正在X_train上训练模型,然后在完全相同的数据集上运行预测:

Y_pred_train = classifier.predict(X_train)

由于该模型很适合训练数据,因此您显然会获得出色的分数。机器学习的重点在于处理以前看不见的数据,即概括训练时已知的数据。要解决此问题,只需运行预测并报告测试数据:

Y_pred_test = classifier.predict(X_test)

print(metrics.classification_report(Y_test, Y_pred_test))

答案 1 :(得分:0)

谢谢。 实际上,我想比较使用cross_val_score()和.predict()函数获得的精度值。 对我来说,在同一个火车数据集上,两者应该是相同的。

但是获得的精度值与cross_val_score()函数和predict()分类器函数不同。

看我在同一火车数据集上训练了cross_val_score()和predict()。 cross_val_score(,X_train,y = Y_train,得分='准确性',cv = kfold,n_jobs = 4)的精度值 =>给我0.62。

.predict(X_train)的精度值 =>给我0.92(在我为分类器搜索了最佳超级参数之后)。

当我调用时,默认的超级参数可以解释cross_val_score的低精度值吗 cross_val_score(,X_train,y = Y_train,评分='准确性',cv = kfold,n_jobs = 4))?

非常感谢。 西奥