GBDT算法的核心为:先构造一个(决策)树,然后不断在已有模型和实际样本输出的残差上再构造一颗树,依次迭代。
目录
GBDT也是集成学习Boosting家族的成员,但是却和传统的Adaboost有很大的不同。
回顾下AdaBoost(集成学习-Boosting集成学习算法AdaBoost),我们是利用前一轮迭代弱学习器的误差率来更新训练集样本的权重,这样一轮轮的迭代下去。
GBDT也是迭代,但是是基于迭代累加的决策树算法,它通过构造一组弱的学习器(树),并把多颗决策树的结果累加起来作为最终的预测输出,弱学习器限定了只能使用CART回归树模型。GBDT这个算法有很多名字,但都是同一个算法:
GBRT (Gradient Boost Regression Tree) 渐进梯度回归树
GBDT (Gradient Boost Decision Tree) 渐进梯度决策树
MART (MultipleAdditive Regression Tree) 多决策回归树
GBDT算法主要由三个部分组成:
Decistion Tree(即DT 回归树)
Gradient Boosting(即GB 梯度提升)
Shrinkag(渐变)
Decistion Tree(决策树)
提起决策树(DT,Decision Tree) 绝大部分人首先想到的就是C4.5分类决策树。但如果一开始就把GBDT中的树想成分类树,那就是错误的认识,所以说千万不要以为GBDT是很多棵分类树。
决策树分为两大类,回归树和分类树。前者用于预测实数值,如明天的温度、用户的年龄、网页的相关程度;后者用于分类标签值,如晴天/阴天/雾/雨、用户性别、网页是否是垃圾页面。这里要强调的是,前者的结果加减是有意义的,如10岁+5岁-3岁=12岁,后者则无意义,如男+男+女=到底是男是女? GBDT的核心在于累加所有树的结果作为最终结果,就像前面对年龄的累加(-3是加负3),而分类树的结果显然是没办法累加的,所以GBDT中的树都是回归树,不是分类树,这点对理解GBDT相当重要(尽管GBDT调整后也可用于分类但不代表GBDT的树是分类树)。
分类树
分类树在每次分枝时,是穷举每一个特征的每一个特征值,找到使得熵最大的特征分裂方式,按照该标准分枝得到两个新节点,用同样方法继续分枝直到所有人都被分入性别唯一的叶子节点,或达到预设的终止条件,若最终叶子节点中的类别不唯一,则以多数人的类别作为该叶子节点的类别。
回归树
回归树总体流程也是类似,不过在每个节点(不一定是叶子节点)都会得一个预测值,以年龄为例,该预测值等于属于这个节点的所有人年龄的平均值。分枝时穷举每一个feature的每个阈值找最好的分割点,但衡量最好的标准不再是最大熵,而是最小化均方差,比如(每个人的年龄-预测年龄)^2 的总和 / N,或者说是每个人的预测误差平方和除以 N。这很好理解,被预测出错的人数越多,错的越离谱,均方差就越大,通过最小化均方差能够找到最靠谱的分枝依据。分枝直到每个叶子节点上人的年龄都唯一(这太难了)或者达到预设的终止条件(如叶子个数上限),若最终叶子节点上人的年龄不唯一,则以该节点上所有人的平均年龄做为该叶子节点的预测年龄。
分类树和回归树基本流程一致都是根据feature找阈值(分裂值),但是阈值的衡量标准不同,即选择的优化函数不同。分类树选择阈值的标准是实现每个分枝都尽可能只有一个分类,即性别分类中,男性分枝上尽可能多的是男性,女性尽可能少;女性分枝上尽可能多的是女性,男性尽可能少。用数学表示即男女比例原理1:1。回归树选择阈值的标准是实现预测值和真实值的最小化均方差。
回归和分类从实现上,分别用不同的方法实现了"动态确定样本权值"这一目标。回归是用拟合残差,分类是用错误率来调整样本权值。
Gradient Boosting(梯度提升)
提升的方法基于这样一个思想:对于一个复杂任务来说,将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独的判断好。这种在函数域的梯度提升观点对机器学习的很多领域有深刻影响。
提升是一个机器学习技术,可以用于