决策树与集成学习的结合——GBDT和XGBoost

这两个算法在面经中提到较多,故而整理一下。

1.集成学习(将多个弱学习器组合成为强学习器)

串行:Boosting,其中比较有名的是AdaBoost(后一个学习器训练依赖于前一个)

并行:bagging(样本扰动)、随机森林(样本扰动和属性扰动)

2.决策树

(1)最优属性划分

决策树的叶节点对应于决策成果,其他每个节点对应于一个属性测试。

可通过信息增益(ID3决策树)、增益率(C4.5)、基尼指数(CART)等策略来进行最优属性划分。

(2)剪枝策略

预剪枝:划分前估计能否带来精度提升(预留一部分数据集进行评估)

后剪枝:在完整的决策树上自底向上地对非叶节点考查,看替换为叶节点是否提升精度

(3)分类

分类决策树:上面提到的ID3/C4.5决策树(西瓜书)

回归决策树:它的作用在于数值预测,例如明天的温度、用户的年龄等等,而且对基于回归树所得到的数值进行加减是有意义的(例如10岁+5岁-3岁=12岁)。

3.GBDT(Gradient Boosting Decision Tree)

属于Boosting家族的一员,将决策树与集成思想进行了有效的结合。GBDT使用到了回归决策树,它将累加所有树的结果作为最终结果。在前一颗树的梯度方向生成下一颗树,每棵树都在学习前面树尚存的不足。

(1)梯度下降

(2)优缺点

优点:预测精度高、能处理非精度数据。

缺点:当数据集大且较为复杂时,迭代次数多,计算量大。

4.XGBoost

此算法是针对GBDT计算量大的缺点所做的改进,其优点有:

  • 正则项:XGBoost在目标函数里加入了正则项,用于控制模型的复杂度
  • 列抽样:XGBoost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算
  • 导数:传统的GBDT在优化时只用到一阶导数,XGBoost则对目标函数进行了二阶泰勒展开,同时用到了一阶和二阶导数
  • 分裂节点:枚举所有可能的分割点效率很低,XGBoost采用了一种近似的算法,根据百分位法列举几个可能成为分割点的候选者,然后从候选者中根据上面求分割点的公式计算找出最佳的分割点
  • 算法效率:考虑了当数据量比较大,内存不够时怎么有效的使用磁盘,主要是结合多线程、数据压缩、分片的方法

猜你喜欢

转载自blog.csdn.net/zhiman_zhong/article/details/88338394