XGboost学习总结

XGboost,全称Extrem Gradient boost,极度梯度提升,是陈天奇大牛在GBDT等传统Boosting算法的基础上重新优化形成的,是Kaggle竞赛的必杀神器。

XGboost属于集成学习的模型,在集成学习中主要有三个算法,Bagging,Boosting和Stacking,Bagging算法的优秀代表是RF(随机森林),Boosting算法的优秀代表有

Adaboosing,GBDT和XGboost,Stacking算法貌似没有什么优秀的代表,算是一种集成的思想,在Kaggle竞赛中用的比较多。

先来说一说XGboost的优点,用过的人就知道,它哪里都是优点。

1.损失函数

机器学习中常用的损失函数主要有:指数损失,合页损失,零一损失,交叉熵损失,平方损失等等,XGboost这方面有几个好处,首先XGboost可以自定义损失函数,你可以选择以上常用的损失函数,也可以根据实际问题的具体情况自定义损失函数,提供了极大的灵活性,对于解决实际问题非常有帮助;其次,在优化损失函数时,XGboost用泰勒公式对目标损失函数进行展开,二阶求导,一方面更加准确,另一方面将损失函数本身和优化方法分离开,可以在事先不指定具体的损失函数的情况下进行目标函数的优化,具有极大的灵活性。

2.正则化

XGboost在目标损失函数后面加了一个自定义的正则化项,这个正则化项是自定义的树的复杂度,正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和,这样做有效的控制了模型的复杂度。

3.Shrinkage(缩减)

Shrinkage(缩减)相当于学习速率(xgboost中的eta)。xgboost在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。实际应用中,一般把eta设置得小一点,然后迭代次数设置得大一点。

4.列采样

xgboost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算,这也是xgboost异于传统gbdt的一个特性

5.支持并行计算

XGboost在训练每一棵树的时候,是迭代式训练,是线性的,这是无法做到并行计算的,但是训练一棵树最费时间的是进行节点分裂时计算每个属性的增益,以及每一个属性的最佳切割点,XGboost在计算最佳分裂属性和最佳切割点时可以调用CPU进行多线程的并行计算,极大的节约了时间,加速了训练过程。

6.支持确实值的处理

对缺失值的处理,对于特征的值有缺失的样本,xgboost可以自动学习出它的分裂方向

7.非贪心算法

XGboost在确定最佳切割点时,并没有采用传统的贪心算法遍历每一个可能的分割点,而是先筛选出一个候选集和,然后在候选集合中确定最佳切割点。

。。。。。,当然还有别的,这里就不一一列举了。

在使用工具方面,XGboost可以和sklearn结合使用,xgboost可以接收普通的numpy数组形式的特征矩阵,也可以接收libsvm形式的稀疏距阵的压缩格式,当特征距阵比较稀疏时,后者更加节约内存空间。

模型可视化工具:graphviz

参数选择和调优:k折交叉验证和网格索搜:GridSearchCV

防止过拟合:earlystop,集成学习,正则化,交叉验证,增强数据

猜你喜欢

转载自www.cnblogs.com/tsdblogs/p/10184212.html