首页 > 解决方案 > xgb.cv 似乎只使用训练数据进行 xfold 验证?

问题描述

我对 R 中的 ml 相当陌生,并且正在尝试构建一个 10 倍交叉验证的 xgboost 模型。我在这里遇到了文档:

https://www.rdocumentation.org/packages/xgboost/versions/1.1.1.1/topics/xgb.cv

然而,在示例中,它纯粹使用训练数据,没有地方指定测试集或测试拆分。这对任何人都有意义吗?任何使用过该软件包的人都可以帮助我了解这个交叉验证模型是如何测试的吗?

谢谢

标签: rcross-validationxgboost

解决方案


xgboost 包允许您选择是要使用内置的交叉验证方法还是指定您自己的交叉验证。

当然,你可以两者都做,看看有什么不同!

如果您将 xgb.cv 方法链接到“详细信息”的页面向下扫描,您将看到一些关于如何从已完成模型中提取信息的简要详细信息。

10 折交叉验证方法意味着 xgboost cv 算法在内部对数据进行连续拆分,比例为 10% 用于测试,90% 用于训练,以便依次使用所有数据。该算法的这种使用实际上生成并评估了十个不同的模型,并向您展示了结果。您可以手动或通过网格搜索调整各种超参数以改进您的模型。

如果您想进行自己的数据拆分而不是使用内置的交叉验证方法,请使用算法的“香草”形式:

model <- xgboost(data = ......etc) # in R

我认为 xgb.cv 公式的一个优点是它可以让您访问更多的超参数来调整。

使用您自己的训练/测试拆分而不是内置 cv 版本的普通 xgboost(....) 模型在某些情况下可能更好甚至必不可少,例如在您的数据具有时间敏感结构的情况下。假设您对过去 10 年的销售数据感兴趣,最好将前 9 年的数据用于训练并使用最后一年作为您的测试集。

我所做的是从“香草”公式开始,并使用默认参数构建模型。这成为我用于比较目的的基准模型。可以构建更复杂的连续模型,并将它们的性能与此基线进行比较。


推荐阅读