对于机器学习分类,我使用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
此精度与上述精度不匹配。 怎么解释呢? 非常感谢。
答案 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))?
非常感谢。 西奥