当我们进行k倍交叉验证时,是否应该仅使用测试准确性最高的分类器?通常,从交叉验证中获得分类器的最佳方法是什么?
当我们进行k倍交叉验证时,是否应该仅使用测试准确性最高的分类器?通常,从交叉验证中获得分类器的最佳方法是什么?
Answers:
当您要执行以下两项操作时,可以进行交叉验证:
选择模型的情况可能不同:
(请注意,如果同时选择一种算法-更好地称其为模型-并且还进行超参数搜索,则需要进行嵌套交叉验证。Nested-CV真的有必要吗?)
交叉验证可以最大程度地确保误差估计是该模型的泛化误差(尽管很难估算)。观察折线之间的平均误差时,对于完整数据集上构建的模型,可以很好地预测预期误差。观察预测的方差也很重要,也就是说,误差在折数之间变化了多少。如果变化太大(值相差很大),则模型将趋于不稳定。从这个意义上讲,自举是提供良好近似的另一种方法。我建议仔细阅读第7节“统计学习的要素”一书,该书可免费从以下网站获得:ELS-Standford
如前所述,您绝不能一概而论。相反,您必须使用完整的数据集(被拆分为折叠的数据集)重建模型。如果您有单独的测试集,则可以使用它来测试最终模型,从而获得与CV相似的错误(并且肯定会更高)。但是,您应该依靠CV过程给出的估计误差。
在使用不同模型(算法组合等)执行CV之后,选择了在错误及其折数方差方面表现更好的模型。您将需要使用整个数据集重建模型。这在术语上引起了一个普遍的混乱:我们通常指的是模型选择,认为模型是建立在数据之上的易于预测的模型,但在这种情况下,它指的是您所应用的算法与预处理过程的组合。因此,要获得进行预测/分类所需的实际模型,您需要使用整个数据集中的获胜者组合来构建模型。
最后要注意的是,如果您要进行任何类型的预处理,则必须使用类信息(功能选择,LDA降维等),这必须进行多次,而不是以前对数据进行。这是一个关键方面。如果应用的预处理方法涉及数据的直接信息(PCA,规范化,标准化等),则应做同样的事情。但是,您可以应用不依赖数据的预处理(根据专家的意见删除变量,但这很明显)。该视频可以朝这个方向提供帮助:以正确和错误的方式简历
在这里,关于这个主题的最终解释很不错:简历和模型选择
不。您不选择在k折交叉验证过程中构建的k个分类器中的任何一个。首先,交叉验证的目的不是要建立一个预测模型,而是要评估预测模型在实践中的执行准确性。第二,出于争论的原因,假设您要使用k倍为10的k倍交叉验证来找出三种不同分类算法中的哪一种最适合解决给定分类问题。在这种情况下,数据将随机分为相等大小的k个部分。其中一部分保留用于测试,其余k-1部分将用于培训。交叉验证过程重复k(倍)次,以便在每次迭代中使用不同的部分进行测试。运行交叉验证后,您将查看每个折叠的结果,并想知道哪种分类算法(不是任何训练有素的模型!)最合适。您不想选择在10次迭代之一中具有最高测试精度的算法,因为在特定迭代中的测试数据包含非常简单的示例,这可能只是随机发生的,因此会导致较高的测试精度。您要做的就是选择产生最佳准确性的算法 从而导致较高的测试精度。您要做的就是选择产生最佳准确性的算法 从而导致较高的测试精度。您要做的就是选择产生最佳准确性的算法平均所有k折。既然您已经选择了算法,就可以使用整个训练数据进行训练,并开始进行野蛮的预测。
这超出了此问题的范围,但是您还应该优化模型的超参数(如果有)以充分利用所选算法。人们通常使用交叉验证来执行超参数优化。
因此,让我们假设您接受了培训,其中80%用作培训,其余20%用作验证数据。我们可以训练80%的人,然后测试其余的20%的人,但是我们拿走的20%可能与实际的测试数据不符,后者可能表现不佳。因此,为了防止这种情况,我们可以使用k倍交叉验证。
因此,假设您有不同的模型,并且想知道哪种模型在您的数据集上表现更好,那么k折交叉验证效果很好。您可以知道有关k验证性能的验证错误,然后根据该错误选择更好的模型。这通常是k倍交叉验证的目的。
仅涉及一种模型,如果您要进行k折交叉验证,则可以得到测试数据误差的近似值,但是when you are actually training it finally, you can use the complete training data
。(因为此处假定整个数据的整体性能要优于部分数据有时可能并非如此,但这是一般假设。)