目录html
RandomForest、XGBoost、GBDT和LightGBM都属于集成学习。算法
集成学习经过构建并结合多个分类器来完成学习任务,也称为多分类系统,集成学习的目的是经过结合多个机器学习分类器的预测结果来改善基本学习器的泛化能力和鲁棒性。api
集成学习方法大体分为两类:多线程
基本学习器之间存在强依赖关系、必须串行生成的序列化方法,即Boosting提高方法。框架
基本学习器之间不存在强依赖关系、可同时生成的并行化方法,即Bagging方法。dom
RF原理:RF是Bagging的扩展变体,它在以决策树为基础学习器构建Bagging集成的基础上,进一步在决策树的训练过程当中引入了随机特征选择,其流程大概分为四个步骤:机器学习
随机选择样本(放回抽样)。函数
随机选择特征属性。性能
构建决策树。学习
随机森林投票(平均)。
所以防止过拟合能力更强,下降方差。
Bagging,即套袋法,算法过程以下:
从原始样本集中抽取训练集。每轮从原始样本集中使用Bootstraping的方法抽取n个训练样本,共进行k轮抽取,获得k个训练集。
每次使用一个训练集获得一个模型,k个训练集共获得k个模型。(模型能够根据具体问题具体选取,如决策树,SVM,感知机。)
对于分类问题:将上面获得的k个模型采用投票的方式获得分类结果;
对于回归问题:计算上述模型的均值做为最后的结果。(由于全部模型的重要性是相同的)
RF和Bagging对比: RF的起始性能较差,特别当只有一个基学习器时,随着学习器数目增多,随机森林一般会收敛到更低的泛化偏差。随机森林的训练效率也会高于Bagging,由于在单个决策树的构建中,Bagging使用的是‘肯定性’特征数,在选择特征划分结点时,要对全部的特征进行考虑,而随机森林使用的是‘随机性’特征数,只需考虑特征的子集。
\[Obj^{t} = \sum_{i=1}^{n} L(y_{i}, \hat{y}_{i}^{(t-1)} + f_{t}(x_{i})) + \Omega (f_{t}) + constant\]
其中\(\sum_{i=1}^{n} L(y_{i}, \hat{y}_{i}^{(t-1)})\)为损失函数,红色方框为正则项,包括L一、L2;红色圆圈为常数项。
L1正则化项:\[L(\omega) = \frac{1}{N} \sum_{i=1}^{N} (f(x_{i}) - y_{i})^{2} + \frac{\lambda}{2} ||\omega||^{1}\]
L2正则化项:\[L(\omega) = \frac{1}{N} \sum_{i=1}^{N} (f(x_{i}) - y_{i})^{2} + \frac{\lambda}{2} ||\omega||^{2}\]
XGBoost与GBDT算法的区别:
传统的GBDT在优化的时候只用到了一阶导数信息,而XGBoost则对代价函数进行了二阶泰勒展开,获得一阶和二阶导数,而且XGBoost在代价函数中加入了正则项,用于控制模型的复杂度。
另外XGBoost还支持线性分类器,经过在代价函数中加入正则项,下降了模型的方差,使学习出来的模型更加简单,避免过拟合。
GBDT的基本原理是Boosting里面的boosting tree(提高树),并使用gradient boost。其关键是利用损失函数的负梯度方向在当前模型的值做为残差的近似值,进而拟合一颗CART回归树(classification and regression tree)。
\[r_{ti} = -[\frac{\partial L(y_{i}, f(x_{i}))}{\partial f(x_{i})}]_{f(x)=f_{t-1}(x)}\]
\[c_{tj} = arg \ \min\limits_{c} \sum\limits_{x_{i} \in R_{tj}} L(y_{i}, f_{t-1}(x_{i}) + c)\]
直方图算法的基本思想是先把连续的浮点特征值离散化成k个整数,同时构造一个宽度为k的直方图。在遍历数据的时候,根据离散化后的值做为索引在直方图中累积统计量,当遍历一次数据后,直方图累积了须要的统计量,而后根据直方图的离散值,遍历寻找最优的分割点。
参考:
一、牛人:https://blog.csdn.net/zwqjoy/article/details/82150528
二、周志华《机器学习》
三、刘建平GBDT:http://www.javashuo.com/article/p-coowgizi-dv.html
四、大牛XGBoost:http://www.javashuo.com/article/p-wdqpjpms-hq.html