概述
GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的结论累加起来做最终答案。
GBDT是机器学习算法中非常重要的一个算法,公认泛化能力较强的算法。
名词解释
均方差
均方差的意思是差的平方的平均值,表示为:
∑
i
=
1
n
(
f
(
x
i
)
−
f
(
x
i
,
)
)
n
\frac{\sum_{i=1}^n(f(x_i) -f(x_i^,))}{n}
n∑i=1n(f(xi)−f(xi,))
其中
f
(
x
i
)
−
f
(
x
i
,
)
f(x_i) -f(x_i^,)
f(xi)−f(xi,) 表示实际值与预测值的差。
均方差是一种损失函数,在GBDT中作为策略树分支的依据,分支的目的就是使均方差向着最小发展。
基本原理
GBDT使用决策树模型进行计算,基于上一个决策树的计算结果,继续使用决策树进行优化,直到达到指定的阈值或优化效果提升效果不明显的时候结束。
决策树计算逻辑
GBDT中的决策树属于回归树,每个节点上所有样本的平均值作为该节点的预测值,分支的依据是均方差,即分支的时候要保持均方差尽量的小,当决策树达到最大树深度或最大叶子节点等限制条件时,停止分裂,这样就完成了一颗决策树的构建。
迭代过程
通过一颗决策树是不能得到计算结果的,需要使用多棵树进行迭代。
一颗决策树构建完成后,每个叶子节点都会有一个预测值,把实际值与预测值的差(残差)取出来,作为新决策树的输入样本,继续进行决策树的计算。不断迭代,直到达到设定的限定条件为止。
GBDT的迭代过程是一个不断优化的过程,每次走一小步逐渐逼近结果的效果,要比每次迈一大步很快逼近结果的方式更容易避免过拟合。
示例
我们以预测人的年龄为例,来看看GBDT的计算过程。
简单起见训练集只有4个人,A,B,C,D,他们的年龄分别是14,16,24,26。其中A、B分别是高一和高三学生;C,D分别是应届毕业生和工作两年的员工。
第一棵决策树:
树中有3个节点,根节点是4个人的年龄,根节点的预测值是所有人的平均年龄:20.
左节点有两个人,预测值是AB两个人的平均年龄15;右节点有两个人,预测值是CD两个人的平均年龄25.
这时候就可以计算出ABCD4个人的残差,残差计算公式为:实际值-预测值。
- A的残差=14-15=-1.
- B的残差=16-15=1.
- C的残差=24-25=-1.
- D的残差=26-25=1.
这样第一棵树就计算完成了。
第二棵决策树:
把第一颗树的输出作为输入,进行第二课决策树的构建:
可以看到,树根节点是预测值为:-1+1±+1=0.
树左节点的预测值为-1;树右节点的预测值为1.计算ABCD的残差为:
- A的残差:-1-(-1)=0
- C的残差:-1-(-1)=0
- B的残差:1-1=0
- D的残差:1-1=0
这样第二棵树就计算完成了。
预测结果计算
到第二棵树发现ABCD的残差都已经为0了,所以可以结束迭代,进行最终的预测了。预测的公式为: ∑ i = 1 n P \sum_{i=1}^nP ∑i=1nP,P代表每棵策略树的预测结果,所以ABCD的年龄分别为:
- A:15 - 1 = 14.
- B:15 + 1 = 16.
- C:25 - 1 = 24.
- D:25 + 1 = 26.
适用场景
GBDT可以应用于绝大多数的回归问题,包括线性/非线性,也可以应用在分类问题上,通过设置阈值的方式。
拓展
xgboost:是一个非常流行的提升算法。
lightGBM:微软开源的提升算法,相对于前两个算法的优势为:
- 更快的训练效率
- 低内存使用
- 更高的准确率
- 支持并行化学习
- 可以处理大规模数据