机器学习-集成学习(Boosting算法-梯度提升树(GBDT))
一,算法介绍
算法流程转自(李航(统计学方法)):
二,实例
下面我们举一个实例,数据也采用(李航《统计学方法》):
我们假定使用的损失函数为均方差损失函数:
(1)初始化
根据公式:
(1)
我们要求得其最小值,需要对上公式进行求导,当导数为0时,获得最小值:
根据公式(1)计算得到f0(x)=7.307。
(2)构建树
利用公式:
得到:
残差表如下:
我们考虑切分点如下:
得到如下数据:
当S=6.5时为最佳分割点,得到两个节点x={1,2,3,4,5,6}和x={7,8,9,10},然后我们根据
进行计算得到:
更新回归树为:
然后,再重复上述步骤,计算:
得到如下数据:
得到最佳分割点为3.5
如下表所示:一组数据,特征为年龄、体重,身高为标签值。共有5条数据,前四条为训练样本,最后一条为要预测的样本。
我们假定使用的损失函数为均方差损失函数:
第一步,初始化,对损失函数求导获得极小值:
得到=y,所以初始化时,
取值为所有训练样本标签值的均值,为1.475。
得到:
第二步,进行迭代
利用公式:
此时将残差作为样本的真实值训练f1(x),即下表数据
接着,寻找回归树的最佳划分节点,遍历每个特征的每个可能取值。从年龄特征的5开始,到体重特征的70结束,分别计算方差,找到使方差最小的那个划分节点即为最佳划分节点。
以年级7为例,方差= (1.1-1.1)^2/1+[(1.3-1.6)^2+(1.7-1.6)^2+(1.8-1.6)^2]/3=0.46666
以上划分点是的总方差最小为0.0125有两个划分点:年龄21和体重60,所以随机选一个作为划分点,这里我们选年龄21。
此时还需要做一件事情,给这两个叶子节点分别赋一个参数,来拟合残差。
这里其实和上面初始化学习器是一个道理,平方损失,求导,令导数等于零,化简之后得到每个叶子节点的参数ΥΥ,其实就是标签值的均值。
根据上述划分节点:
样本1,2为左叶子节点,(x1,x2∈R11),所以11=(−0.375−0.175)/2=−0.275。
样本3,4为左叶子节点,(x3,x4∈R11),所以21=(0.225+0.325)/2=0.275。
此时可更新强学习器
继续迭代,迭代轮数m=2,3,4,5,…,M: 循环迭代M次,M是人为控制的参数,迭代结束生成M棵树
第四步,得到最后的强学习器:
为了方别展示和理解,我们假设M=1,根据上述结果得到强学习器:
第五步,预测样本5:
样本5在根节点中(即初始学习器)被预测为1.475,样本5的年龄为25,大于划分节点21岁,所以被分到了右边的叶子节点,同时被预测为0.275。此时便得到样本5的最总预测值为1.75。
三,常用损失函数
对于分类算法,其损失函数一般有对数损失函数和指数损失函数两种:
a) 如果是指数损失函数,则损失函数表达式为:
L(y, f(x)) = exp(-yf(x))
b)如果是对数损失函数,分为二元分类和多元分类两种:
二分类
L(y, f(x)) = log(1+ exp(-yf(x)))
多分类
其中
对于回归算法,常用损失函数有如下4种:
a)均方差,这个是最常见的回归损失函数:
L(y, f(x)) =(y-f(x))^2
b)绝对损失,这个损失函数也很常见:
L(y, f(x)) =|y-f(x)|
对应的负梯度误差为:
c)Huber损失,它是均方差和绝对损失的折衷产物,对于远离中心的异常点,采用绝对损失,而中心附近的点采用均方差。这个界限一般用分位数点度量。损失函数如下:
对应的负梯度误差为:
d) 分位数损失。它对应的是分位数回归的损失函数,表达式为:
其中θ为分位数,需要我们在回归前指定。对应的负梯度误差为:
对于Huber损失和分位数损失,主要用于健壮回归,也就是减少异常点对损失函数的影响。
转载的连接分别为https://blog.****.net/zpalyq110/article/details/79527653
https://www.cnblogs.com/pinard/p/6140514.html