最近有人告诉我,我遵循的过程(MS 论文的组成部分)可能被视为过度拟合。我希望对此有更好的理解,看看其他人是否同意。
本文这部分的目标是
在数据集上比较梯度提升回归树与随机森林的性能。
查看最终选择的模型(GBM 或 RF)的性能。
R 中的gbm
和randomForest
包与
caret
.
随后的过程如下:
- 数据的初步预处理(例如,用称为“缺失”的不同类别插入名义预测变量的缺失值)。没有考虑任何预处理(非常少)的目标变量。
- 为每个算法的元参数创建一个值网格(例如 GBM 的迭代次数)。
- 创建数据集的 25 个随机拆分(65% 训练和 35% 测试)。
对 GBM 重复以下 25 次(每次使用随机训练/测试拆分之一。每次,哪个训练和测试集是“当前”当然会发生变化 - 这是重复的离开组交叉验证):
- 使用 5 折交叉验证通过网格搜索找到算法的“最佳”参数设置。当前运行中根本没有使用先前运行的任何内容。
- 一旦确定,将模型拟合到完整的“当前”训练集并预测“当前”测试集。搁置此运行的性能度量。
一旦以这种方式获得了 25 个性能度量(实际上是特定领域的度量,但将其视为准确性),遵循完全相同的过程,使用完全相同的独立训练和测试样本,对于 RF(相同的过程,只是使用不同的当然是网格搜索)。
现在,我从 GBM 和 RF 的当时“当前”测试集中获得了 25 项性能指标。我使用 Wilcoxon 符号秩检验和置换检验对它们进行比较。我发现GBM更胜一筹。我还声称 GBM 的这 25 次运行的性能度量分布是最终 GBM 分类器的预期性能。
我没有做的是从一开始就抽出一个随机测试集并将其放在一边,以便与从所有训练数据构建的最终 GBM 模型进行比较。我认为我所做的实际上要好得多,因为我在保留过程中重复了拆分数据/调整模型/测试 25 次,而不是仅一次。
这里有过拟合吗?由于 25 次运行用于选择 GBM 与 RF,这是否意味着从过程中获得的性能度量不能用作完整模型的性能估计?
编辑 为了回应韦恩的评论,以下是 25 次运行中的每一次运行:
- 为第 i 个训练集 (i=1,..,25) 采样的数据被分成 5 个大小相同的组。使用 5 个组中的 4 个来拟合模型,将 GBM 参数(例如迭代次数)设置为等于第 j 个 (j=1,..,18) 网格中的值。
- 使用该模型计算第 5 组的表现。
- 步骤 1 和 2 再重复 4 次(常规的旧 k 倍 CV,k=5)。性能是 5 个子运行的平均值,这构成了具有特定参数值集的 GBM 的预期性能。
- 对网格中的其他 17 个“行”重复步骤 1 -3。
完成后,确定上述练习的最佳参数值,并使用这些参数值和完整的第 i 个训练集拟合 GBM。它的性能是在第 i 个测试集上估计的。
一旦整个过程完成 25 次,GBM 就有 25 种性能指标可用。然后他们以完全相同的方式被收集起来用于射频。
在比较和选择 GBM 之后,我查看了这 25 个性能指标,并采用平均值和标准误差来确定 GBM 模型在此数据上的置信区间。