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

机器算法验证 机器学习 数据挖掘 预测模型
2022-03-15 00:50:22

最近有人告诉我,我遵循的过程(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. 使用该模型计算第 5 组的表现。
  3. 步骤 1 和 2 再重复 4 次(常规的旧 k 倍 CV,k=5)。性能是 5 个子运行的平均值,这构成了具有特定参数值集的 GBM 的预期性能。
  4. 对网格中的其他 17 个“行”重复步骤 1 -3。

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

一旦整个过程完成 25 次,GBM 就有 25 种性能指标可用。然后他们以完全相同的方式被收集起来用于射频。

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

2个回答

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

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

听起来您已经尝试混合使用两种技术,每种技术都是合法的,但是您这样做的方式感觉就像您最终会在案例之间泄露数据。

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

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

您可能想查看这篇 stackexchange 文章。以及它链接到的文章,也许还可以将您的顶层重新构建为简历。另外,请注意,除了 Frank Harrell 之外,没有其他人在该线程中发帖,并建议将 CV 重复很多次。(我很震惊,认为应该重复一次。)