交叉验证在 R 的 gbm 包中如何工作?

机器算法验证 r 交叉验证 助推
2022-04-08 17:30:30

有人可以提供有关此的工作流程吗?例如,假设我正在做二进制分类,

对于算法的每次迭代:

  1. 随机采样k*N行,其中kbag.fractionNnrow(dataset)
  2. 使用这个训练样本构建一个分类器,假设我们在这里使用分类树。
  3. 预测终端节点类标签。

这就是在没有简历的情况下完成提升的方式。如果我想做一个 3-fold CV,我到底应该在哪里应用它?在第 1 步和第 2 步之间还是在第 3 步之后?

2个回答

如果要在预测新观测值时估计模型的误差及其相应的可变性,请在第 3 步之后。在拟合所有树之后。这里正在验证的模型是弱学习器的整体。但自然你也可以使用 CV 调整超参数。例如,提升树的最佳数量。在“dismo”包中,函数 gbm.step 正是这样做的。使用示例:

brtTuning<- gbm.step(data=yourData,
     gbm.x = 1:18,
     gbm.y = 19,
     family = "gaussian",
     tree.complexity = 5,
     learning.rate = 0.005,
     bag.fraction = 0.5)

如果您想调整然后验证我相信您需要进行嵌套交叉验证。

交叉验证通过随机(或通过其他方式)选择行K大小相等的近似平衡的折叠,训练分类器K折叠,对剩余折叠进行测试,然后计算预测损失函数。重复此操作,以便将每个折叠用作测试集。如果您为折叠随机抽样行,则可以根据需要重新抽样。在 R 中有许多包可以做到这一点,而且很容易自己编写代码。在 boosting 中使用某种形式的交叉验证有点复杂(我对 boosting 不是很熟悉)。不过,这个问题似乎提供了一些见解。