首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LightGBM中的交叉验证

LightGBM中的交叉验证
EN

Stack Overflow用户
提问于 2017-09-28 04:07:09
回答 3查看 19.2K关注 0票数 19

我们应该如何使用lightgbm.cv的字典输出来改进我们的预测呢?

下面是一个例子--我们使用下面的代码训练我们的简历模型:

代码语言:javascript
复制
cv_mod = lgb.cv(params, 
                d_train, 
                500, 
                nfold = 10, 
                early_stopping_rounds = 25,
                stratified = True)

我们如何使用从上述代码的最佳迭代中找到的参数来预测输出?在这种情况下,cv_mod没有像lightgbm.train那样的“预测”方法,并且lightgbm.cv的字典输出在lightgbm.train.predict(..., pred_parameters = cv_mod)中使用时会抛出错误。

我是不是错过了一个重要的转变步骤?

EN

回答 3

Stack Overflow用户

发布于 2018-05-13 21:01:38

通常,CV的目的是而不是来进行超参数优化。目的是对建模过程的性能进行评估。

基本训练/测试拆分在概念上与1折CV相同(具有自定义拆分大小,与k折CV中的1/K序列大小形成对比)。进行更多分裂(即k>1 CV)的优势是获得有关泛化误差估计的更多信息。在获得误差+统计不确定性的意义上,有更多的信息。有一个很好的discussion on CrossValidated (从添加到问题中的链接开始,这些链接涵盖了相同的问题,但以不同的方式表达)。它涵盖了嵌套的交叉验证,绝对不是简单的。但是,如果你在总体上理解了这个概念,这将在各种重要的情况下对你有所帮助。你必须放弃的想法是: CV的目的是评估模型构建过程的性能。

记住这个想法,一般情况下如何进行超参数估计(不仅仅是在LightGBM中)?

  • 你想要在一些数据上用一组参数训练一个模型,并在一个独立的(验证)集上评估模型的每个变体。然后,您打算通过选择给出您选择的最佳评估度量的变量来选择最佳参数。
  • 此可以通过简单的训练/测试拆分来完成。但是,评估的性能,以及因此最佳模型参数的选择,可能只是特定拆分的波动。
  • 因此,可以评估这些模型中的每个模型,在几个训练/测试拆分上进行统计上更稳健的平均评估,即k-折叠CV。

然后,您可以更进一步,假设您有一个额外的坚持集,它是在超参数优化开始之前分离的。这样,您就可以在该集合上评估所选的最佳模型,以测量最终的泛化误差。然而,你可以更进一步,而不是只有一个测试样本,你可以有一个外部CV循环,这会给我们带来嵌套的交叉验证。

从技术上讲,lightbgm.cv()只允许您使用固定的模型参数评估k折拆分的性能。对于超参数调优,您需要在循环中运行它,提供不同的参数,并重新编码平均性能,以选择最佳参数集。在循环完成之后。此界面不同于sklearn,后者为您提供了在CV循环中进行超参数优化的完整功能。就我个人而言,我建议使用lightgbm的sklearn-API。它只是原生lightgbm.train()功能的包装器,因此速度并不慢。但它允许您使用全套sklearn工具包,这将使您的工作变得更加轻松。

票数 27
EN

Stack Overflow用户

发布于 2018-05-09 22:49:28

如果你对你的简历结果感到满意,你只需要使用这些参数来调用'lightgbm.train‘方法。就像@pho所说的,CV通常只是为了调整参数。您不使用实际的CV对象进行预测。

票数 1
EN

Stack Overflow用户

发布于 2017-11-17 06:23:29

您应该使用CV进行参数优化。

如果您的模型在所有折叠上都表现良好,请使用这些参数在整个训练集上进行训练。然后在外部测试集上评估该模型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46456381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档