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


13

当我们进行k倍交叉验证时,是否应该仅使用测试准确性最高的分类器?通常,从交叉验证中获得分类器的最佳方法是什么?


我认为这个问题很大程度上取决于用于确定“最佳方法”的指标。可量化地有很多人使用准确性,但是根据数据集,可以使用其他指标,例如F1-Score之类的谐波平均值。因此,指标选择同样重要。
内森·麦考伊

@NathanMcCoy假设我们选择准确性,那么我们会选择测试准确性最高的分类器吗?
Armon Safai

当然!只是想提一下其他要考虑的问题:)
内森·麦考伊

Answers:


15

当您要执行以下两项操作时,可以进行交叉验证:

  • 选型
  • 模型的误差估计

选择模型的情况可能不同:

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

(请注意,如果同时选择一种算法-更好地称其为模型-并且还进行超参数搜索,则需要进行嵌套交叉验证。Nested-CV真的有必要吗?

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

如前所述,您绝不能一概而论。相反,您必须使用完整的数据集(被拆分为折叠的数据集)重建模型。如果您有单独的测试集,则可以使用它来测试最终模型,从而获得与CV相似的错误(并且肯定会更高)。但是,您应该依靠CV过程给出的估计误差。

在使用不同模型(算法组合等)执行CV之后,选择了在错误及其折数方差方面表现更好的模型。您将需要使用整个数据集重建模型。这在术语上引起了一个普遍的混乱:我们通常指的是模型选择,认为模型是建立在数据之上的易于预测的模型,但在这种情况下,它指的是您所应用的算法与预处理过程的组合。因此,要获得进行预测/分类所需的实际模型,您需要使用整个数据集中的获胜者组合来构建模型。

最后要注意的是,如果您要进行任何类型的预处理,则必须使用类信息(功能选择,LDA降维等),这必须进行多次,而不是以前对数据进行。这是一个关键方面。如果应用的预处理方法涉及数据的直接信息(PCA,规范化,标准化等),则应做同样的事情。但是,您可以应用不依赖数据的预处理(根据专家的意见删除变量,但这很明显)。该视频可以朝这个方向提供帮助:以正确和错误的方式简历

在这里,关于这个主题的最终解释很不错:简历和模型选择


我知道,您真的需要单独的测试数据吗?还是因为我们已经进行了交叉验证并获得了模型的近似测试误差,您是否可以对所有数据中的100%训练分类器?
Armon Safai

+1代表“选择一个在错误及其在倍数间的方差方面表现更好的人”。选择模型时,每个人似乎都忽略了折数之间的差异。
stmax

如果只关心CV错误,为什么还要关心测试错误?我之所以问是因为您写了“真的是关于CV程序给出的估计误差”的。
HelloWorld '09

另一个问题。如果为整个数据集构建CV的最佳模型不是最佳模型怎么办?
HelloWorld '09

1
您在100%的数据上建立模型,这意味着在用于交叉验证的100%的数据上建立模型。如果您之前将原始数据分割为80%-20%进行训练和进一步测试,那么您将对80%进行CV,选择模型并在整个80%上重新训练。在这种情况下有一个测试集(20%)仅允许您查看新的看不见的数据的行为方式(您可以将其视为将来可用的数据),但是您使用的错误估计来自CV 。如果它是一个好的模型(20%或实际上是新数据),希望它将对新数据产生类似的错误。@ArmonSafai
Javierfdr

8

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

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


我认为k倍交叉验证会创建k个不同的模型,因为有10套不同的训练数据。
Armon Safai

查看我最新的答案。我对其进行了改进,以更直接地解决该问题,并举例说明。
tuomastik

我知道了,所以当您最终训练分类器时,从交叉验证中选择算法后,您是否使用所有数据来训练分类器
Armon Safai

是的,如果您不想执行任何进一步的分析,例如超参数优化,则需要嵌套的交叉验证,其中内部CV循环负责进行超参数调整,而外部CV循环则以最佳的方式评估独立数据集上的模型性能超参数。
tuomastik

1

因此,让我们假设您接受了培训,其中80%用作培训,其余20%用作验证数据。我们可以训练80%的人,然后测试其余的20%的人,但是我们拿走的20%可能与实际的测试数据不符,后者可能表现不佳。因此,为了防止这种情况,我们可以使用k倍交叉验证。

因此,假设您有不同的模型,并且想知道哪种模型在您的数据集上表现更好,那么k折交叉验证效果很好。您可以知道有关k验证性能的验证错误,然后根据该错误选择更好的模型。这通常是k倍交叉验证的目的。

仅涉及一种模型,如果您要进行k折交叉验证,则可以得到测试数据误差的近似值,但是when you are actually training it finally, you can use the complete training data。(因为此处假定整个数据的整体性能要优于部分数据有时可能并非如此,但这是一般假设。)


那么当我们进行交叉验证时,我们只是选择具有最高测试精度的模型吗?
Armon Safai

说测试,是指验证数据集的测试正确吗?
Hima Varsha

是的,这就是我的意思
Armon Safai

一旦我们使用交叉验证选择了性能更好的模型(例如,您有2个模型-线性回归或神经网络),我们就会在所有数据上训练该模型(无论是线性回归还是神经网络)
Hima Varsha

1
@HimaVarsha,因此,如果我们决定取平均值,我们将如何选择“平均分类器”?
Armon Safai
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.