我的训练分数 mean_train_score 或 mean_test_score 是多少?

数据挖掘 机器学习 scikit-学习 交叉验证 模型选择
2022-02-28 19:02:28

我正在使用 sklearn 来训练一些模型(随机森林、决策树)。对于培训,我使用RandomsearchCV和 Stratified k-fold 作为交叉验证。然后我对测试集进行预测并计算测试分数。

但是,我想将测试分数与训练分数进行比较。我假设我可以使用来自RandomseachCVcv_results_报告的 mean_train_score 作为模型的训练分数,因为我认为它会显示针对 k 折叠的 hould-out-fold 的验证。但是,我对此不确定,因为还有mean_test_score

我正在寻找mean_train_scoremean_test_score的解释。我知道这些分数也适用于单折。但是这些分数是如何计算的呢?其中之一是我的训练分数吗,它显示了我的模型在训练期间的表现?

我找到了一种解释方法,但对我来说太肤浅了:GridSearch mean_test_score vs mean_train_score

2个回答

mean_test_score实际上是每个折叠的验证步骤的平均分数。sklearn如果您想区分验证和测试,那么在这种情况下可能不会很好地选择“测试”一词。

但是,我认为您还没有完全完成这里,因此您不应该mean_train_score与测试核心进行比较。

实际上,交叉验证阶段为您提供了最佳超参数集(具有最大“测试”分数的情况,实际上是验证分数),但您不应该保留相应的模型,尤其是(但不仅)如果训练集几乎没有观察或折叠很少。
相反,您应该最后一次重新训练您的模型,使用这组超参数,但在整个训练集上(不仅是k1k交叉验证期间使用的案例)。这个经过训练的模型将为您提供训练分数(在整个训练集上)和测试分数(在测试集上)。

奥秘在于 K 折交叉验证的内部工作,它实际上将整个数据按特定比例分成 K 次训练和测试数据。有关它的工作原理的更多信息,请参阅此处 在训练集上计算的平均分数是 mean_train_score,而在测试集上计算的平均分数是 mean_test_score。

根据您的问题,您的训练分数应该是:mean_train_error