XgBoost
GBDT 和 XGBoost
决策树
选择最优划分属性;
-
熵
信息熵是衡量样本集合纯度的常用指标。假设当前样本集合中第\(k\)类所占的比例为 \(p_k\),则 \(D\) 的信息熵为:
\[\operatorname{Ent}(D)=-\sum_{k=1}^{ | \mathcal{Y |}} p_{k} \log _{2} p_{k}\]\(Ent(D)\)越小,纯度越高;最小为0,最大为 \(log_2|y|\)
-
信息增益 ( ID3 )
假定离散属性 \(a\) 有 \(V\) 个可能的取值 \(\{a^1,a^2,\cdots,a^V\}\),若使用属性 \(a\) 进行划分,则获得的信息增益为
\[\operatorname{Gain}(D, a)=\operatorname{Ent}(D)-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \operatorname{Ent}\left(D^{v}\right)\]信息增益越大,使用属性\(a\)进行划分所获得的纯度提升越大;
缺点: 对取值较多的属性有所偏好 -
增益率 ( C4.5 )
减少信息增益的缺点
\[Gain\_ratio(D, a)=\frac{\operatorname{Gain}(D, a)}{\operatorname{IV}(a)}\]其中
\[\mathrm{IV}(a)=-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \log _{2} \frac{\left|D^{v}\right|}{|D|}\]相当于加了一个惩罚因子
缺点: 会偏向于取值较少的属性。
因此采用启发式方法:先从候选属性中找出信息增益高于平均值的属性,然后选择增益率最高的。 -
基尼系数 ( CART )
基尼值定义为
\[\begin{aligned} \operatorname{Gini}(D) &=\sum_{k=1}^{|\mathcal{Y}|} \sum_{k^{\prime} \neq k} p_{k} p_{k^{\prime}} \\ &=1-\sum_{k=1}^{|\mathcal{Y}|} p_{k}^{2} \end{aligned} \]基尼值直观地反应了从数据集中随机抽取两个样本,其类别标记不一致地概率。
基尼指数定义为\[Gini\_index(D, a)=\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \operatorname{Gini}\left(D^{v}\right) \]选择基尼指数最小的属性作为最优划分属性。
集成学习分类
- boosting
Boosting算法的工作机制是首先从训练集用初始权重训练出一个弱学习器1,根据弱学习的学习误差率来更新训练样本的权重,使得之前弱学习器1学习误差率高的训练样本点的权重变高,使得这些误差率高的点在后面的弱学习器2中得到更多的重视。然后基于调整权重后的训练集来训练弱学习器2.,如此重复进行,直到弱学习器数达到事先指定的数目T,最终将这T个弱学习器通过集合策略进行整合,得到最终的强学习器。引用自刘建平博客
包括AdaBoost和提升树。 - bagging
bagging的个体弱学习器的训练集是通过随机采样得到的。通过T次的随机采样,我们就可以得到T个采样集,对于这T个采样集,我们可以分别独立的训练出T个弱学习器,再对这T个弱学习器通过集合策略来得到最终的强学习器。引用自刘建平博客
包括随机森林
AdaBoost
前一个基本分类器分错的样本会得到加强,加权后的全体样本再次被用来训练下一个基本分类器。
随机森林
属于bagging类别,弱学习器都是决策树。在bagging的基础上,既有样本随机采样,也有特征随机采样。
GBDT
梯度提升决策树(Gradient Boosting Decision Tree,GBDT)是Boosting算法。
基本思想:
根据当前模型损失函数的负梯度信息来训练新加入的弱分类器,然后将训练好的弱分类器以累加的形式结合到现有模型中。GBDT每一次的计算是都为了减少上一次的残差,进而在残差减少(负梯度)的方向上建立一个新的模型。原理就是所有弱分类器的结果相加等于预测值,然后下一个弱分类器去拟合误差函数对预测值的梯度/残差。它里面的弱分类器的表现形式就是各棵树。
GBDT是利用残差训练的,在预测的过程中,我们需要把所有树的预测值加起来,得到最终的预测结果。
优点:
- 预测阶段速度快,可以在树与树之间进行并行操作;
- 在稠密数据集上表现良好;
- 使用决策树作为弱学习器使得模型有较好的解释性和鲁棒性,不需要进行归一化操作;
缺点:
- 在高维稀疏数据集上,表现不如支持向量机和神经网络;
- 处理文本特征表现不佳;
- 训练需要串行(每次都是对上一次的残差进行修正),速度慢;
问题:这里的梯度提升和梯度下降的关系
两者都是在每 一轮迭代中,利用损失函数相对于模型的负梯度方向的信息来对当前模型进行更新,只不过在梯度下降中,模型是以参数化形式表示,从而模型的更新等价于参数的更新。而在梯度提升中,模型并不需要进行参数化表示,而是直接定义在函数空间中,从而大大扩展了可以使用的模型种类。
XgBoost
XGBoost是GBDT算法的实现,并在此基础上加入了优化;其次,GBDT在模型训练时只使用了代价函数的一阶导数信息,XGBoost对代价函数进行二阶泰勒展开,可以同时使用一阶和二阶导数;
原始GBDT直接使用经验损失函数的负梯度来构建新的决策树,在完成构建后对树进行剪枝操作,而XGBoost在决策树构建阶段就加入了正则项:
其中,树的结构化正则项为:
参考:《机器学习》
参考:《百面机器学习》