集成思想主要分为两大流派,Boosting一族通过将弱学习器提升为强学习器的集成方法来提高预测精度,而另一类则为Bagging,即通过自主采样的方法生成众多并行的分类器,通过“少数服从多数”的原则来确定最终的结果。
-
bagging
原理:从原始数据集中自助有放回的抽取样本,n次抽取得到n个独立的训练集,每次使用一个训练集得到一个模型,分类问题通过投票进行分类,回归问题将均值做为最后的结果。 -
randomforest (实际上是更先进的bagging方法)
原理:也是自助有放回的抽取样本,但是得到的训练集要远远多于以决策树作为基本分类器的bagging。与bagging法最关键的区别是在生成每棵树的时候 ,每个节点的变量都仅仅在随机选出的少数变量中产生。 -
boosting
原理:Boosting的方式是每次都使用全部的样本,每次训练改变样本的权重,下一次训练的目标是找到一个合适的函数f(x)来拟合上一轮的残差,当残差足够小或者训练达到最大次数的时候则停止。Boosting会减小上一轮训练正确样本的权重,增大错误样本的权重。
bagging和boosting的区别
bagging | boosting | |
---|---|---|
样本选择 | 自助有放回抽样 | 全部样本 |
样本权重 | 均匀取样、样本等权 | 根据每轮的预测结果调整样本权重 |
预测函数 | 并行生成 | 顺序生成,后一轮的模型参数需参考上一轮的模型结果 |
分类器 | 各个分类器等权 | 误差小的分类器权重大,误差大的分类器权重小 |
GBDT和XGboost介绍
GBDT(Gradient Boosting Decision Tree)是一种基于迭代所构造的决策树算法,它又可以简称为MART或GBRT,该算法将决策树与集成算法进行了有效的集合,属于Boosting一族。几乎可以用于所有的回归问题(线性/非线性的),亦可用于二分类问题。GBDT迭代决策树入门教程
主要由三个概念组成:Regression Decision Tree(回归决策树)、Gradient Boosting(梯度提升)和Shrinkage(缩减)。
(1)回归决策树:从根节点出发,穷举每个属性特征的每个阈值找到最小化均方差的那个分割点进行分枝,每个节点得到的是一个预测值(所有值的平均数),直到每个叶节点上的值都唯一或达到预设的终止条件。
(2)梯度提升:沿着梯度方向,构造一系列的弱分类器函数,并以一定权重组合起来,形成最终决策的强分类器。而每个弱分类器所学习的是之前所有弱分类的结论和残差,这个残差就是一个加预测值后能得到真实值的累加量。比如:A的真实年龄是18岁,第一棵树的预测值是12岁,则残差是6岁,那么在第二棵树里把A的年龄设为6岁去学习,如果正好分在了6岁的叶节点里,则累加两棵树的结论,A的年龄预测值就是18岁。
(3)缩减:每次走一小步逐渐逼近结果的效果,要比每次迈一大步很快逼近结果的方式更容易避免过拟合。缩减的思想不完全信任每一棵残差树,它认为每棵树只学到了真理的一小部分,累加的时候只累加一小部分,只有通过多学几棵树才能弥补不足。Shrinkage为每棵树设置了一个weight,累加时乘以这个weight,这个weight就是step。
优点:
- 预测精度高
- 适合低维数据
- 能处理非线性数据
缺点: - 并行麻烦(因为上下两棵树由联系)
- 如果数据维度较高时会加大算法的计算复杂度
XGBoost相比GBDT有什么区别(在性能和计算量上更合适大数据)
- 为了防止过拟合,加入了正则项
- XGBoost损失函数的误差部分时二阶泰勒展开,GBDT时一阶泰勒展开,损失函数更加精准
- 对特征进行采样,降低计算量
- 增加了处理缺失值的方案
- 对每个特征进行分块并排序,在寻找最佳分裂点时并行化计算
- 设置合理的block大小,充分利用CPU缓存进行读取加速