xgboost笔记
来源:互联网 发布:科勒橱柜 知乎 编辑:程序博客网 时间:2024/06/02 00:25
已经在公司用上了xgboost,但是知识作为黑盒在用。有必要深入了解下?以下分为几个部分进行总结:基础原理,使用方法,最佳实践。
1. 基础原理
了解xgboost的工作原理,为什么运行快,效果还好。
1.1 原理
Introduction to Boosted Trees 这个文章降低非常浅显易懂,首先摆出训练时的优化函数=偏差+复杂度,我们要在减少偏差和减少复杂度之间寻求平衡,先讲了CART的结构,然后讲BT是一步步添加树的,然后讲到每次添加一棵树的时候,是如何从众多树里面寻找到最好的那颗树,这里面就是刚刚说的优化函数。最后在讲了单颗的训练过程中也可以尽量去优化。感觉大致懂了,有时间再去深究里面的一些东西吧。
论文 XGBoost: A Scalable Tree Boosting System
1.2 代码实现
https://github.com/dmlc/xgboost
1.3 其他模型对比
2. 使用方法
2.1 DMLC xgboost使用
不管三七二十一,先上手在说。训练集+参数得到模型,模型+测试集得到预测结果。
https://xgboost.readthedocs.io/en/latest/get_started/
2.2 参数
Notes on Parameter Tuning 里面讲到几个调参的原则:理解样本偏差,控制过拟合,处理不平衡的数据集。
XGBoost Parameters 这些参数不太懂:gamma 、 max_delta_step、colsample_bylevel、alpha、lambda、 b。
个人理解所有的GB,学出来的都是tree,本质上就是用特征将目标进行分类。一颗树学习得太浅,所以会学出很多颗tree,然后加权到一起,这样可以学得更精细一点,可以对一个特征进行更多次切分,可以试验多种特征组合。
然后由于用于训练的样本是有限的,训练样本级与实际总样本之间可能存在偏差,而我们学到的森林其实是对我们的样本集的统计学特性的模拟,和样本拟合得太匹配,就越容易拟合到其中的偏差部分。所以会通过控制树的深度、叶子节点的样本最小数量等控制精度,以免学得太过了。
由于样本收集的时候可能存在一些不随机的部分,就是有偏差。我们在样本集的基础上,做一些处理,来消除这个不随机的部分。一种是随机的抽一部分样本(随机样本子集),一种是训练的时候只训练一部分特征(随机特征子集)。
还有一种就是我们学习的时候,不要学得太像这个样本了,就是所谓的学习率调低一点,学习得更模糊一点。
另一方面因为是GB,就是梯队推进,就是走一段路看一下调整方向,然后继续继续往前走一步。这个过程中,如果每次走的路短一点,就是增加了对齐方向的次数,就越不容易出现偏差,就不容易过拟合。
如果样本集的正负样本数量差距太大,可能导致正样本被埋没了,所以有必要增加正样本的权重。
3. 最佳实践
3.1 xgboost使用经验
3.2 xgboost相关工具
- xgboost笔记
- XGBoost笔记
- XGBoost笔记
- XGboost文献学习笔记
- XGBoost学习笔记
- 笔记-GBDT&Xgboost
- 机器学习----xgboost学习笔记
- 学习笔记:XGBoost原理解析
- XGBoost代码走读分析笔记
- xgboost
- xgboost
- xgboost
- xgboost
- xgboost
- xgboost
- xgboost
- XGBoost
- xgboost
- Codeforces 363C Fixing Typos 贪心+字符串模拟
- 以singleTask启动的activity会直接调用OnActivityResult()方法
- Introduction to Model View Presenter on Android
- 高效团队
- ESB
- xgboost笔记
- C#81课的主要内容
- mybatis调存储过程返回输出参数
- NAVICATE 修改存储过程提示PROCEDURE _Navicat_Temp_Stored_Proc already exists 解决方法
- java对象实例化顺序
- 3. Longest Substring Without Repeating Characters
- Linux系统编程的学习路线,你了解吗?
- nginx的安装
- [Leetcode] 53. Maximum Subarray 解题报告