Caret - 重复 K 折交叉验证与嵌套 K 折交叉验证,重复 n 次

机器算法验证 交叉验证 插入符号
2022-01-31 00:07:37

caret包是一个出色的R 库,用于构建多个机器学习模型,并具有多个用于模型构建和评估的功能。对于参数调整和模型训练,caret 包提供了“repeatedcv”作为方法之一。

作为一种好的做法,可以使用嵌套的 K 折交叉验证来执行参数调整,其工作原理如下:

  1. 将训练集划分为“K”个子集
  2. 在每次迭代中,取“K-1”个子集进行模型训练,并保留 1 个子集(保留集)用于模型测试。
  3. 进一步将“K-1”训练集划分为“K”个子集,并迭代使用新的“K-1”子集和“验证集”进行参数调整(网格搜索)。此步骤中确定的最佳参数用于测试步骤 2 中的保留集。

另一方面,我假设,重复的 K 折交叉验证可能会重复步骤 1 和 2,因为我们选择查找模型方差的次数相同。

但是,通过插入符号手册中的算法,除了重复交叉验证之外,“repeatedcv”方法似乎还可以执行嵌套的 K 折交叉验证。

插入符号训练算法 https://topepo.github.io/caret/training.html

我的问题是:

  1. 我对插入符号“repeatedcv”方法的低估是否正确?
  2. 如果没有,您能否举一个使用嵌套 K 折交叉验证的示例,以及使用 caret 包的“repeatedcv”方法?

编辑:

在这篇方法论文章中解释和比较了不同的交叉验证策略。

Krstajic D、Buturovic LJ、Leahy DE 和 Thomas S选择和评估回归和分类模型时的交叉验证陷阱化学信息学杂志 2014 6(1):10。doi:10.1186/1758-2946-6-10

我对使用 caret 包的“算法 2:重复分层嵌套交叉验证”“算法 3:用于变量选择和参数调整的重复网格搜索交叉验证”感兴趣。

1个回答

提出的(嵌套)算法没有任何问题,事实上,它可能会在不同数据集上的偏差方差问题上表现良好,并具有良好的鲁棒性。但是,您从未说过,读者应该假设您使用的功能是最“最佳的”,因此,如果这是未知的,则必须首先解决一些功能选择问题。

特征/参数选择

一个较小的偏见方法是永远不要让分类器/模型接近与特征/参数选择远程相关的任何东西,因为您不希望狐狸(分类器,模型)成为鸡的守卫(特征,参数)。您的特征(参数)选择方法是wrapper- 特征选择捆绑在分类器/模型执行的迭代学习中。相反,我总是使用一个功能filter它采用了一种与分类器/模型相去甚远的不同方法,试图最小化特征(参数)选择偏差。在特征选择期间查找包装与过滤和选择偏差 (GJ McLachlan)。

总是存在一个主要的特征选择问题,解决方案是调用对象划分(折叠)的方法,其中对象被划分为不同的集合。例如,模拟一个具有 100 行和 100 列的数据矩阵,然后在另一列中模拟一个二进制变量 (0,1)——称之为分组变量。接下来,使用二进制 (0,1) 变量作为分组变量对每一列运行 t 检验。100 个 t 检验中的几个仅凭偶然性就很重要;但是,只要将数据矩阵分成两部分D1D2, 其中每一个都有n=50,显着测试的数量下降。在您可以通过确定参数选择期间使用的最佳折叠数来解决数据的这个问题之前,您的结果可能是可疑的。因此,您需要建立某种 bootstrap-bias 方法来评估保留对象的预测准确性,作为每个训练折叠中使用的不同样本大小的函数,例如,π=0.1n,0.2n,0,3n,0.4n,0.5n(即,增加学习期间使用的样​​本量)结合使用的不同数量的 CV 折叠,例如 2、5、10 等。

优化/最小化

您似乎真的在解决函数逼近的优化或最小化问题,例如,y=f(x1,x2,,xj),例如使用回归或带有参数的预测模型,并且y是连续缩放的。鉴于此,并且鉴于需要尽量减少预测中的偏差(选择偏差、偏差方差、从测试对象到训练对象的信息泄漏等),您可能会考虑在使用群体智能方法期间使用 CV,例如粒子群优化 (PSO)、蚁群优化等 PSO(参见 Kennedy & Eberhart, 1995)为粒子在学习期间飞过参数空间时在粒子之间进行社会和文化信息交换添加了参数。一旦你熟悉了群体智能方法,你就会发现你可以克服参数确定中的许多偏差。最后,我不知道是否存在用于函数逼近的随机森林(RF,参见 Breiman, Journ. of Machine Learning)方法,但如果存在,