这种建模方法是否过度拟合


11

最近有人告诉我,我遵循的过程(MS论文的组成部分)可能被认为过拟合。我希望对此有更好的了解,看看其他人是否同意。

本文这一部分的目的

  • 在数据集上比较梯度提升回归树与随机森林的性能。

  • 查看所选最终模型(GBM或RF)的性能。

正在使用R中的gbmrandomForest软件包以及
caret

遵循的过程如下:

  • 数据的初步预处理(例如,将名义上的预测变量的缺失值插入称为“缺失”的不同类别)。没有考虑任何预处理的目标变量(这是非常小的)。
  • 为每种算法的元参数创建值的网格(例如,GBM的迭代次数)。
  • 创建数据集的25个随机分割(65%训练和35%测试)。

对GBM重复以下步骤25次(每次使用随机训练/测试分组之一。每次,训练和测试集都是课程更改的“当前”,这是重复的离开组交叉验证):

  • 使用5倍交叉验证在网格搜索上找到算法的“最佳”参数设置。当前运行中没有使用先前运行中的任何东西。
  • 确定后,将模型拟合到完整的“当前”训练集并预测“当前”测试集。保留此运行的性能指标。

一旦以这种方式获得了25个性能指标(实际上是特定于领域的指标,但将其视为准确性),请使用完全相同的过程,使用完全相同的独立训练和测试样本进行RF(相同过程,只是使用不同的方法)当然是网格搜索)。

现在,我从当时针对GBM和RF的“当前”测试集中获得了25种性能指标。我使用Wilcoxon符号秩检验和排列检验比较它们。我发现GBM更好。我还声称,GBM的这25次运行中的性能指标分布是最终GBM分类器的预期性能。

我没有做的是从一开始就抽取一个随机测试集,并将其放在一边,以便与根据所有训练数据构建的最终GBM模型进行比较。我认为我所做的实际上要好得多,因为我在保持过程中重复了拆分数据/调优模型/测试25次,而仅重复了一次。

这里有过度拟合吗?由于使用了25个运行来选择GBM与RF,这是否意味着从流程中获取的性能指标不能用作完整模型的性能估算?

编辑 为了回应韦恩的评论,这是在25次运行中的每一次运行的过程:

  1. 第i个训练集(i = 1,..,25)的采样数据分为5个大小相等的组。使用5组中的4组拟合模型,并将GBM参数(例如,迭代数)设置为等于第j个网格(j = 1,..,18)中的值。
  2. 使用此模型计算第五组的表现。
  3. 步骤1和步骤2再重复4次(常规旧k倍CV,k = 5)。该性能是从5个子运行中平均得出的,这用特定的一组参数值组成了GBM的预期性能。
  4. 对网格中的其他17个“行”重复执行步骤1-3。

一旦完成,就可以确定上述练习中的最佳参数值,并使用这些参数值和完整的第i个训练集拟合GBM。它的性能是在第i个测试集上估计的。

一旦整个过程完成25次,GBM就有25种性能指标。然后他们以完全相同的方式收集到RF。

在比较和选择GBM之后,我查看了这25个性能指标,并采用均值和标准差来确定该数据上GBM模型的置信区间。


我想在您的第一个要点中看到更多详细信息,“重复以下25次...”部分。哪些数据是5倍的数据,并且该数据如何用于每组元参数?
韦恩

@Wayne,请参阅我的编辑。
B_Miner

Answers:


5

想象一下,不只是选择GBM与RF,而是在100个不同的GBM分类器中进行选择(假设GBM训练使用某种随机性,并为它们分配1到100的随机种子)。然后,您将选择这100个GBM中的一个作为最佳GBM。但是几乎可以肯定的是,您选择的100个模型之一很幸运地击败了它的99个兄弟姐妹,因此您的性能估计将是乐观的。

您只使用了两个学习器,并且没有使用相同的算法进行训练,因此您的单个GBM可能没有太大的选择压力(尤其是如果它显着优于RF),但是您的错误估计仍将是有点乐观。


如果一旦选择GBM作为最终模型(并假设我从一开始就抽取了一个测试集),我将获取所有训练数据并为其拟合GBM(再次使用CV选择算法参数)然后我给这个测试集打分。您真的会认为该测试集上的错误度量比我从25次重新抽样中得到的结果更好吗?这是我努力的一部分。是不是您不能使用相同的数据进行模型选择(RF上的GBM或GBM对比100个其他选择),并使用由此产生的误差测量?
B_Miner

我得到不使用训练数据来评估绩效的过程中的想法,但这种情况似乎不同,有效....
B_Miner

@B_Miner我认为这是一个非常小的违规行为,但我不在您的论文委员会中:P
rrenaud

由于存在违规,您是否将其归因于“使用相同的数据进行模型选择(RF上的GBM或GBM对比100个其他选择),并使用由此产生的误差度量?”
B_Miner 2013年

3

听起来您好像尝试过混合使用两种技术,每种技术都是合法的,但是这样做的感觉就像是最终将导致案例之间的数据泄漏。

在较低级别,您似乎正确使用了CV。这表明最高级别也应该是CV,从而导致嵌套的CV,但是您的最高级别不是CV。

在顶层,听起来您可能想要进行引导验证,在这种情况下,双引导适用于顶层和较低层,但是您的顶层不是适当的引导。

您可能想看看这篇stackexchange文章。以及与之链接的文章,甚至可能将您的顶级职位重组为简历。另外,请注意,除了Frank Harrell以外,其他人都在该线程中发帖,并建议将CV重复一遍。(我很震惊,以为应该重复一次。)


您所说的最高级别是什么-重复离开小组的25次迭代?
B_Miner

我读了哈雷尔博士的评论。我认为其中一些建议与数据挖掘(大数据)之间存在脱节。我完成的25次迭代花了4天的时间,这在很大程度上要对否定案例进行抽样。
B_Miner
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.