交叉验证后如何选择分类器?

数据挖掘 机器学习 交叉验证
2021-09-14 03:01:55

当我们做k-fold交叉验证时,我们应该只使用测试准确率最高的分类器吗?从交叉验证中获取分类器的最佳方法通常是什么?

3个回答

当你想做以下两件事时,你要做交叉验证:

  • 型号选择
  • 模型的误差估计

模型选择可以出现在不同的场景中:

  • 针对特定问题/数据集选择一种算法与其他算法
  • 为特定问题/数据集选择特定算法的超参数

(请注意,如果您既要选择一种算法(最好称其为模型)又要进行超参数搜索,则需要进行嵌套交叉验证。Nested-CV 真的有必要吗?

交叉验证在某种程度上确保了误差估计与该模型的泛化误差最接近(尽管这很难近似)。在观察折叠之间的平均误差时,您可以很好地预测基于完整数据集构建的模型的预期误差。观察预测的方差也很重要,即误差在折叠之间变化多少。如果变化太高(值相差很大),则模型将趋于不稳定。从这个意义上说,自举是另一种提供良好近似的方法。我建议仔细阅读“统计学习要素”一书的第 7 节,可在以下网址免费获得:ELS-Standford

正如之前提到的,您不能将已构建的模型放在任何折叠处。相反,您必须使用完整的数据集(被拆分为折叠的数据集)重建模型。如果您有一个单独的测试集,您可以使用它来尝试这个最终模型,获得与 CV 获得的错误相似(并且肯定更高)的错误。但是,您应该依赖 CV 程序给出的估计误差。

在使用不同的模型(算法组合等)执行 CV 后,选择在误差及其折叠之间的方差方面表现更好的模型。您将需要使用整个数据集重建模型。这里有一个常见的混淆:我们通常提到模型选择,认为模型是建立在数据上的可预测模型,但在这种情况下,它是指您应用的算法+预处理程序的组合。因此,要获得进行预测/分类所需的实际模型,您需要使用整个数据集上的获胜者组合来构建它。

最后要注意的是,如果您正在应用任何类型的预处理,则使用类信息(特征选择、LDA 降维等),这必须在每个折叠中执行,而不是以前在数据上执行。这是一个关键方面。如果您正在应用涉及数据直接信息(PCA、标准化、标准化等)的预处理方法,则应该做同样的事情。但是,您可以应用不依赖于数据的预处理(根据专家意见删除变量,但这有点明显)。该视频可以帮助您朝这个方向发展:CV 正确和错误的方式

在这里,关于这个主题的最后一个很好的解释:CV and model selection

不,您不会选择在 k 折交叉验证期间构建的任何 k 个分类器。首先,交叉验证的目的不是提出预测模型,而是评估预测模型在实践中的准确度。其次,为了论证,假设您要使用 k=10 的 k 折交叉验证来找出三种不同分类算法中的哪一种最适合解决给定的分类问题。在这种情况下,数据被随机分成 k 个大小相等的部分。其中一部分保留用于测试,其余 k-1 部分将用于训练。交叉验证过程重复 k(折叠)次,以便在每次迭代中使用不同的部分进行测试。运行交叉验证后,您会查看每个折叠的结果,并想知道哪种分类算法(不是任何经过训练的模型!)最合适。您不想选择在 10 次迭代之一中具有最高测试精度的算法,因为可能只是随机发生,该特定迭代上的测试数据包含非常简单的示例,从而导致高测试精度。您要做的是选择产生最佳准确性的算法 然后导致高测试精度。您要做的是选择产生最佳准确性的算法 然后导致高测试精度。您要做的是选择产生最佳准确性的算法平均所有 k 折现在您已经选择了算法,您可以使用整个训练数据对其进行训练,并开始在野外进行预测。

这超出了这个问题的范围,但您还应该优化模型的超参数(如果有)以充分利用所选算法。人们通常使用交叉验证来执行超参数优化。

因此,让我们假设您进行了培训,其中您使用 80% 作为训练,其余 20% 作为验证数据。我们可以在 80% 上进行训练并在剩余的 20% 上进行测试,但我们所采用的 20% 可能与实际测试数据不相似,并且后者可能表现不佳。因此,为了防止这种情况,我们可以使用 k 折交叉验证。

因此,假设您有不同的模型,并且想知道哪个模型在您的数据集上表现更好,k-fold 交叉验证效果很好。您可以了解 k 验证性能的验证错误,并据此选择更好的模型。这通常是 k 折交叉验证的目的。

仅使用一个模型,如果您使用 k 折交叉验证进行检查,您可以获得测试数据错误的近似值,但是when you are actually training it finally, you can use the complete training data.(因为这里假设整个数据一起表现得比其中的一部分更好.有时可能并非如此,但这是一般假设。)