基于数据点子集的准确度得分的泛化

数据挖掘 分类 准确性
2022-03-06 03:34:37

我有一个多类问题,我正在为其构建分类器。我有 N 个我想预测的总数据点。如果我改为在 n < N 个数据点上进行预测并获得准确度分数,有没有办法我可以说(有一定程度的信心)我认为同一模型在剩余数据点上的准确度得分是多少?

有人可以给我指出一篇讨论这个的文章,或者建议一个研究公式吗?

2个回答

通常在处理分类问题时,会尝试拥有 3 个数据子集:

  • 一个训练集:这个子集通常是最大的一个,可以占用大约 80% 的可用数据。它用于训练所选算法,使用每个数据样本的已知标签。
  • 验证集:这个子集要小得多。它通常是可用数据的 5-10%。它用于评估在训练集上训练的算法的性能。通常,人们会调整算法的参数以在验证集上达到最佳性能。
  • 一个测试集:这个子集的大小顺序与验证集相同或更大。非常重要:它不应该用于培训目的!一旦使用训练集和验证集对模型进行训练和调整,测试集就可以让人们获得看不见的数据的准确性(或任何其他性能指标)。如果模型泛化得很好,分数将接近验证集上的分数,通常会差一点。

为了使其正常工作,重要的是所有子集都代表可用数据。例如,每个类别的比例在子集中大致相同。

鉴于这种广泛使用的过程,我们可以看到大多数算法都在一小部分可用数据上进行了调整和测试。只要使用的测试集以类似于训练集和验证集的方式进行平衡,并且在模型的训练/调整过程中根本没有使用它,那么性能分数就没有理由不能泛化以及测试集中使用的 N > n 个样本。

使用交叉验证。在这里,您将数据拆分为 K 个子集,并每次使用不同的数据子集对所有数据进行 K 次训练和测试以进行验证。与您在训练、验证和测试最终模型时使用的标准 80/10/10 拆分相比,平均交叉验证分数通常可以更好地估计模型在看不见的数据上的性能。

许多机器学习库,例如 Python 的 scikit-learn,都有一个用于此目的的模块。