嵌套交叉验证(Nested cross-validation)

传统交叉验证和嵌套交叉验证的区别

在开始分享嵌套交叉验证前,首先以K-Fold为例,区分K-Fold交叉验证和嵌套K-Fold交叉验证的区别,这是我刚开示始学习时的困惑点:

(1)K-Fold交叉验证:只有一个loop(循环),即内层循环

(a) 将数据集切分为k-折叠;

(b) 对于任意,在第i个折叠上测试模型,并且在剩余的折叠上训练模型;

(c) 最后的结果是计算k个验证结果的均值。

(2)嵌套K-Fold交叉验证:有两个loops(循环),即内层循环和外层循环

(a) 对于在K-Fold中每一个i,都有一个嵌套的K-Fold交叉验证。

以上内容详见。

  1. 嵌套交叉验证简介

为什么需要嵌套的交叉验证:

在scikit-learn官方文档中指出:“嵌套交叉验证包含于交叉验证,并用在训练模型的步骤中,如果模型的超参数需要被优化,则应该选择嵌套交叉验证方法。

嵌套交叉验证是通过对基础模型泛化误差的估计来进行超参数的搜索,以得到模型最佳参数。” 内置的交叉验证是传统交叉验证法(这里常指K-Fold交叉验证)的延伸,传统的交叉验证仅是将数据集拆分为训练集和测试集,无法解决最优模型的选择及模型调参问题。

它的弊端主要有两个:其一、可能会造成信息泄漏;其二、由于是对相同数据进行误差估计,所以会导致较高的偏差(当用可能的模型最佳超参数对相同的训练集和测试集进行误差的计算时,模型是有偏的,会导致较大偏差) 。 模型选择看重偏差和方差,因此一个好的评估模型真实误差的方法应是结合无偏和低方差两个方面。

内置交叉验证的原理如下图所示,其运行流程包含两个循环,即外层循环和内层循环。内层循环是指带有搜索模型最佳超参数功能的交叉验证,目的是给外层循环提供模型的最佳超参数。例如,随机搜索或者网格搜索。而外层循环是给内层循环提供训练数据,同时保留部分数据,以作对内层循环模型的测试。通过这样的方式,可以防止数据的信息泄漏,以得到相对较低的模型评分偏差。

  1. 何时使用嵌套的交叉验证:

如果数据集非常大时,使用内置交叉验证法的计算成本会很高。如果你的数据集包涵几千个样本,你就会发现计算过程是较漫长的。 内置交叉验证的使用场景较为有限,尤其应用在数据量不会很大的领域,如生物领域(数据量不会很大,一般指小于几千个样本的数据)。

当计算成本不是很大时,需要考虑可以提供的硬件条件。 如果满足以上两个标准,就可以考虑使用嵌套交叉验证来计算数据,得到几乎无偏的估计误差,从而对比不同算法的表现。

  1. 下图演示了一个5折外层交叉沿则和2折内部交叉验证组成的嵌套交叉验证,也被称为5*2交叉验证:


    图片.png
  2. 总结: 在内部loop(循环)中,你选择最佳超参数可以通过在内层循环的训练折叠训练不同的超参数,用内层循环的测试折叠测试模型,以找到最佳超参数(每个模型的)。然后使用选定的最佳模型,在外部的测试集上测试模型。外循环的平均得分就是你模型表现的估计值。

你可能感兴趣的:(嵌套交叉验证(Nested cross-validation))