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相关工具

0 0
原创粉丝点击