如何在没有交叉验证的情况下检查机器学习准确性

时间:2019-11-20 23:26:28

标签: python machine-learning scikit-learn neural-network random-forest

我有训练样本X_train,还有Y_train用来训练和X_estimated。 我的任务是使分类器尽可能准确地学习,然后预测X_estimated上的结果向量,以得出与Y_estimated接近的结果(我现在已经掌握,我必须尽可能地精确)可以)。如果我将训练数据拆分为75/25进行训练和测试,则可以使用sklearn.metrics.accuracy_score和混淆矩阵获得准确性。但是我丢失了25%的样本,这会使我的预测更加准确。

有没有办法,我可以使用100%的数据进行学习,并且仍然能够看到准确性得分(或百分比),因此我可以对其进行多次预测并保存最佳(%)结果? 我正在使用具有500个估计量的随机森林,通常获得90%的准确度。我想为任务尽可能地保存最佳预测向量,而不拆分任何数据(不浪费任何数据),但仍然能够通过多次尝试来计算准确性(因此我可以保存最佳预测向量)(随机森林总是显示不同的结果)

谢谢

5 个答案:

答案 0 :(得分:2)

拆分数据对于评估至关重要。 除非扩展数据集,否则您不可能在100%的数据上训练模型并能够获得正确的评估准确性。我的意思是,您可以更改训练/测试的划分方式,或尝试以其他方式优化模型,但我想对您问题的简单答案是“否”。

答案 1 :(得分:1)

根据您的要求,您可以尝试K Fold Cross Validation。如果您将其拆分为90 | 10,即用于Train | Test。
不可能获取100%的数据进行训练,因为您必须测试数据,然后才能对模型的质量进行相同的验证。 K Fold CV在每次折叠中都会考虑整个火车数据,并从火车数据中随机抽取测试数据样本。
最后,通过对所有折叠的总和来计算准确性。最后,您可以使用10%的数据来测试准确性。 您可以阅读更多herehere

  

K折叠交叉验证

enter image description here

Skearn提供了执行K折交叉验证的简单方法。只需在该方法中不传递任何折痕即可。但是请记住,更多的褶皱需要花费更多的时间来训练模型。您可以查看更多here

答案 2 :(得分:0)

没有必要一直对数据进行75 | 25分割。 75 | 25现在有点老了。这在很大程度上取决于您拥有的数据量。例如,如果您有10亿个句子用于训练语言模型,则无需为测试保留25%的空间。

此外,我第二次尝试了K折交叉验证。附带说明一下,您也可以考虑查看其他指标,例如精度和召回率。

答案 3 :(得分:0)

通常,拆分数据集对于评估至关重要。因此,我建议您始终这样做。

说,从某种意义上讲,有些方法可以让您训练所有数据,并且仍然可以估算出性能或估算归纳准确性。 一种特别杰出的方法是利用基于引导的随机模型样本,即RandomForests。

from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(n_estimators=100, bootstrap=True, oob_score=True)
rf.fit(X, y)
print(rf.oob_score_)

答案 4 :(得分:0)

如果要进行分类,请始终使用分层的k倍cv(https://machinelearningmastery.com/cross-validation-for-imbalanced-classification/)。 如果要进行回归,则可以使用简单的k折cv,也可以将目标划分为bin,然后进行分层的k折cv。通过这种方式,您可以在模型训练中完全使用数据。