今天小编就来告诉大家lightgbm中如何进行k折交叉验证,一起来看看吧。
工具/原料
lightgbm
方法/步骤
1、一般来说,CV的目的在于不进行超参数优化.目的是评估模型构建过程的性能.基本的训练/测试分裂在概念上与1倍CV相同(具有分割的自定义大小,与k倍CV中的1/K训练大小相反).进行更多分裂(即k>1CV)的优点是获得有关泛化误差估计的更多信息.在获得错误统计不确定性的意义上有更多信息。
2、有一个很好的discussiononCrossValidated(从问题中添加的链接开始,它涵盖相同的问题,但以不同的方式制定).它涵盖了嵌套交叉验证,绝对不是直截了当的.但是如果你总体上围绕这个概念,这将有助于你在各种非平凡的情况下.你必须要带走的想法是:CV的目的是评估模型构建过程的性能。
3、记驽怛判涮住这个想法,一般如何处理超参数估计(不仅仅是在LightGBM中)?>您希望在某些数据上使用一组参数训练模型,并在独立(验证)集上评估模型的每个变体.然后,您打算通过选择提供所选最佳评皙网胪阵估指标的变量来选择最佳参数.>这可以通过简单的列车/测试拆分来完成.但是评估的性能以及最佳模型参数的选择可能只是特定分裂的波动。
4、>因此,您可以评估这些模型中的每一个在几个列车/测试分组上的统计上稳健的平均评估,即k倍CV。
5、然后,您可以更进一步,并说您有一个额外的保留集,在超参数优化开始之前已分离.通过这种方式,您可以评估该集合上选择的最佳模型,以测量最终的泛化误差.但是,您可以更进一步,而不是只有一个测试样本,您可以有一个外部CV循环,这使我们进行嵌套交叉验证。
6、从技术上讲,lightbgm.罕铞泱殳cv()仅允许您使用固定模型参数评估k折分割的性能.对于超参数调整,您需要寄噢剪飕在提供不同参数的循环中运行它并重新编码平均性能以选择最佳参数集.循环完成后.此接口与sklearn不同,后者为您提供了在CV循环中执行超参数优化的完整功能.就个人而言,我建议使用lightgbm的sklearn-API.它只是本机lightgbm.train()功能的包装器,因此它并不慢.但它允许您使用完整堆栈的sklearn工具包,这使您的生活更轻松。