python - LightGBM - sklearnAPI 与训练和数据结构 API 以及 lgb.cv 与 gridsearchcv/randomisedsearchcv
问题描述
lightgbm 的 sklearnAPI(LGBMModel, LGBMClassifier etc) 和默认 API(lgb.Dataset, lgb.cv, lgb.train) 有什么区别?我应该更喜欢使用哪一个?
使用lightgbm时使用sklearn的lgb.cv还是gridsearchcv/randomisedsearchcv更好?
解决方案
这个答案在这里得到了很好的介绍
根据 Will Koehrsen 的这个笔记本,sklearn 交叉验证 API 不包括提前停止的选项。因此,如果您希望使用提前停止轮次(如果您想在给定数量的估计器的验证分数没有提高时停止训练,这将非常有用),最好使用 LightGBM 交叉验证(lgb.cv)功能。
此外,摘自 Mikhail Lisyovi 的回答- “从技术上讲,lightbgm.cv() 仅允许您评估具有固定模型参数的 k 倍拆分的性能。对于超参数调整,您需要在循环中运行它,提供不同的参数和重新编码平均性能以选择最佳参数集。循环完成后。这个接口不同于sklearn,它为您提供了在CV循环中进行超参数优化的完整功能。个人建议使用sklearn- lightgbm 的 API。它只是对原生 lightgbm.train() 功能的封装,因此它并不慢。但它允许您使用完整的 sklearn 工具包堆栈,这让您的生活更轻松。
因此,您最终使用哪种方法取决于问题的上下文以及哪些因素对您更重要 - early_stopping_rounds 或对不同参数的超参数优化的难易程度。
推荐阅读
- mysql - MariaDB:如何使用 STR_TO_DATE 考虑本地日期格式?
- rest - 现在使用 Ansible 将 CSV 附加到服务记录
- c# - 主窗口在打开新窗口时通过 Dispose 方法关闭
- ldap - 使用自定义属性过滤器进行 LDAP 搜索
- common-lisp - 通用 lisp 中的联合,保留原始列表中元素的顺序
- php - php-fpm 在 docker 中运行还是在没有 docker 的情况下运行的用户是什么?
- python - 为什么python中的命名参数具有一致的内存?
- javascript - 类型安全的嵌套属性查找
- postgresql - 如何在存储过程中使用 Postgres 11 COPY 命令 stdout stdin
- java - Hibernate Query,如何在 where 子句上使用 like 或 = 取决于传递的值