我有训练样本X_train
,还有Y_train
用来训练和X_estimated
。
我的任务是使分类器尽可能准确地学习,然后预测X_estimated
上的结果向量,以得出与Y_estimated
接近的结果(我现在已经掌握,我必须尽可能地精确)可以)。如果我将训练数据拆分为75/25进行训练和测试,则可以使用sklearn.metrics.accuracy_score
和混淆矩阵获得准确性。但是我丢失了25%的样本,这会使我的预测更加准确。
有没有办法,我可以使用100%的数据进行学习,并且仍然能够看到准确性得分(或百分比),因此我可以对其进行多次预测并保存最佳(%)结果? 我正在使用具有500个估计量的随机森林,通常获得90%的准确度。我想为任务尽可能地保存最佳预测向量,而不拆分任何数据(不浪费任何数据),但仍然能够通过多次尝试来计算准确性(因此我可以保存最佳预测向量)(随机森林总是显示不同的结果)
谢谢
答案 0 :(得分:2)
拆分数据对于评估至关重要。 除非扩展数据集,否则您不可能在100%的数据上训练模型并能够获得正确的评估准确性。我的意思是,您可以更改训练/测试的划分方式,或尝试以其他方式优化模型,但我想对您问题的简单答案是“否”。
答案 1 :(得分:1)
根据您的要求,您可以尝试K Fold Cross Validation。如果您将其拆分为90 | 10,即用于Train | Test。
不可能获取100%的数据进行训练,因为您必须测试数据,然后才能对模型的质量进行相同的验证。 K Fold CV在每次折叠中都会考虑整个火车数据,并从火车数据中随机抽取测试数据样本。
最后,通过对所有折叠的总和来计算准确性。最后,您可以使用10%的数据来测试准确性。
您可以阅读更多here和here
K折叠交叉验证
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。通过这种方式,您可以在模型训练中完全使用数据。