我们应该如何使用lightgbm.cv的字典输出来改进我们的预测呢?
下面是一个例子--我们使用下面的代码训练我们的简历模型:
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)中使用时会抛出错误。
我是不是错过了一个重要的转变步骤?
发布于 2018-05-13 21:01:38
通常,CV的目的是而不是来进行超参数优化。目的是对建模过程的性能进行评估。
基本训练/测试拆分在概念上与1折CV相同(具有自定义拆分大小,与k折CV中的1/K序列大小形成对比)。进行更多分裂(即k>1 CV)的优势是获得有关泛化误差估计的更多信息。在获得误差+统计不确定性的意义上,有更多的信息。有一个很好的discussion on CrossValidated (从添加到问题中的链接开始,这些链接涵盖了相同的问题,但以不同的方式表达)。它涵盖了嵌套的交叉验证,绝对不是简单的。但是,如果你在总体上理解了这个概念,这将在各种重要的情况下对你有所帮助。你必须放弃的想法是: CV的目的是评估模型构建过程的性能。
记住这个想法,一般情况下如何进行超参数估计(不仅仅是在LightGBM中)?
然后,您可以更进一步,假设您有一个额外的坚持集,它是在超参数优化开始之前分离的。这样,您就可以在该集合上评估所选的最佳模型,以测量最终的泛化误差。然而,你可以更进一步,而不是只有一个测试样本,你可以有一个外部CV循环,这会给我们带来嵌套的交叉验证。
从技术上讲,lightbgm.cv()只允许您使用固定的模型参数评估k折拆分的性能。对于超参数调优,您需要在循环中运行它,提供不同的参数,并重新编码平均性能,以选择最佳参数集。在循环完成之后。此界面不同于sklearn,后者为您提供了在CV循环中进行超参数优化的完整功能。就我个人而言,我建议使用lightgbm的sklearn-API。它只是原生lightgbm.train()功能的包装器,因此速度并不慢。但它允许您使用全套sklearn工具包,这将使您的工作变得更加轻松。
发布于 2018-05-09 22:49:28
如果你对你的简历结果感到满意,你只需要使用这些参数来调用'lightgbm.train‘方法。就像@pho所说的,CV通常只是为了调整参数。您不使用实际的CV对象进行预测。
发布于 2017-11-17 06:23:29
您应该使用CV进行参数优化。
如果您的模型在所有折叠上都表现良好,请使用这些参数在整个训练集上进行训练。然后在外部测试集上评估该模型。
https://stackoverflow.com/questions/46456381
复制相似问题