回顾下Adaboost,我们是利用前一轮迭代弱学习器的误差率来更新训练集的权重,这样一轮轮的迭代下去。
gbdt 的算法的流程
gbdt通过多轮迭代,每轮迭代产生一个弱分类器,每个分类器在上一轮分类器的梯度(如果损失函数是平方损失函数,则梯度就是残差值)基础上进行训练。弱分类器一般会选择为CART TREE(也就是分类回归树)
- 但是其实我们真正关注的,1.是希望损失函数能够不断的减小,2.是希望损失函数能够尽可能快的减小。所以如何尽可能快的减小呢?
- 让损失函数沿着梯度方向的下降。这个就是gbdt 的 gb的核心了。 利用损失函数的负梯度在当前模型的值作为回归问题提升树算法中的残差的近似值去拟合一个回归树。gbdt 每轮迭代的时候,都去拟合损失函数在当前模型下的负梯度。
- 这样每轮训练的时候都能够让损失函数尽可能快的减小,尽快的收敛达到局部最优解或者全局最优解。
gbdt 如何选择特征
ID3信息增益
ID4.5 信息增益率
CART 基尼系数:
回归:变量分支后的均方差减少最大的那个特征作为先分裂特征
分类:变量分支后的信息增益减少最大的那个特征作为先分裂特征
gbdt 如何特征排名
特征i的全局重要度i通过特征i在单颗树中的重要度的平均值来衡量
gbdt 的损失函数
分类损失函数:
二分类对数似然损失函数:
多分类对数似然损失函数:
回归损失函数:
均方差:
绝对损失函数:
Huber损失:
回归树 Regression Decision Tree
GBDT中的树都是回归树,不是分类树
决策树分类:按照该标准分枝得到两个新节点,用同样方法继续分枝直到所有人都被分入性别唯一的叶子节点,或达到预设的终止条件,若最终叶子节点中的性别不唯一,则以多数人的性别作为该叶子节点的性别。
决策树回归:以年龄为例,该预测值等于属于这个节点的所有人年龄的平均值。分枝时穷举每一个feature的每个阈值找最好的分割点,但衡量最好的标准不再是最大熵,而是最小化均方差--即(每个人的年龄-预测年龄)^2 的总和 / N,
GB:梯度迭代 Gradient Boosting
让损失函数沿着梯度方向的下降。这个就是gbdt 的 gb的核心。gbdt 每轮迭代的时候,都去拟合损失函数在当前模型下的负梯度。(如果损失函数使用的是平方误差损失函数,则这个损失函数的负梯度就可以用残差来代替,以下所说的残差拟合,便是使用了平方误差损失函数)
GBDT分类的例子