繁体   English   中英

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

[英]How to check machine learning accuracy without cross validation

我有训练样本X_trainY_train来训练和X_estimated 我的任务是让我的分类器尽可能准确地学习,然后预测X_estimated上的结果向量以获得接近Y_estimated的结果(我现在有,而且我必须尽可能精确)。 如果我将我的训练数据分成 75/25 来训练和测试它,我可以使用sklearn.metrics.accuracy_score和混淆矩阵来获得准确性。 但是我丢失了 25% 的样本,这将使我的预测更加准确。

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

谢谢

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

根据您的要求,您可以尝试K Fold Cross Validation 如果将其拆分为 90|10,即用于训练|测试。
实现 100% 的数据进行训练是不可能的,因为您必须测试数据然后才能验证 model 有多好。 K Fold CV 在每个折叠中都会考虑您的整个训练数据,并从训练数据中随机抽取测试数据样本。
最后通过对所有折叠求和来计算准确度。 最后,您可以使用 10% 的数据来测试准确性。 更多你可以在这里这里阅读

K折交叉验证

在此处输入图像描述

Searn 提供了执行 K 折交叉验证的简单方法。 只需在方法中传递 no 折叠即可。 但请记住,折叠越多,训练 model 就需要更多时间。 更多你可以在这里查看

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

另外,我支持之前尝试 K 折交叉验证的答案。 作为旁注,您可以考虑查看其他指标,例如精确度和召回率。

一般来说,拆分数据集对于评估至关重要 所以我建议你总是这样做。

也就是说,在某种意义上,有些方法可以让您在所有数据上进行训练,并且仍然可以估计您的性能或估计泛化精度。 一种特别突出的方法是利用基于自举的模型的袋外样本,即随机森林。

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

如果您总是在进行分类 go 与分层 k 折 cv( https://machinelearningmastery.com/cross-validation-for-imbalanced-classification/ )。 如果你正在做回归,那么 go 和简单的 k-fold cv 或者你可以将目标划分为 bin 并进行分层 k-fold cv。 通过这种方式,您可以在 model 训练中完全使用您的数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM