目录
什么是boosting
- 随着学习的积累从弱到强
- 简⽽⾔之:每新加⼊⼀个弱学习器,整体能⼒就会得到提升
- 代表算法:Adaboost,GBDT,XGBoost,LightGBM
实现过程
1.训练第⼀个学习器
2.调整数据分布
3.训练第⼆个学习器
4.再次调整数据分布
5.依次训练学习器,调整数据分布
6.整体过程实现
bagging集成与boosting集成的区别
- Bagging主要⽤于提⾼泛化性能(解决过拟合,也可以说降低⽅差)
- Boosting主要⽤于提⾼训练精度 (解决⽋拟合,也可以说降低偏差)
AdaBoost介绍
构造过程细节
- 步骤⼀:初始化训练数据权重相等,训练第⼀个学习器。
- 该假设每个训练样本在基分类器的学习中作⽤相同,这⼀假设可以保证第⼀步能够在原始数据上学习基 本分类器H1(x)
- 步骤⼆:AdaBoost反复学习基本分类器,在每⼀轮m = 1, 2, …, M顺次的执⾏下列操作:
-
(a) 在权值分布为Dt的训练数据上,确定基分类器;
-
(b) 计算该学习器在训练数据中的错误率: εt = P(ht (xt ) ≠ yt )
-
(c) 计算该学习器的投票权重:
-
(d) 根据投票权重,对训练数据重新赋权
-
将下⼀轮学习器的注意⼒集中在错误数据上 重复执⾏a到d步,m次;
- 步骤三:对m个学习器进⾏加权投票
案例
给定下⾯这张训练数据表所示的数据,假设弱分类器由xv产⽣,其阈值v使该分类器在训练数据集上的分类误差率最 低,试⽤Adaboost算法学习⼀个强分类器。
问题解答:
- 步骤⼀:初始化训练数据权重相等,训练第⼀个学习器:
- D1 = (w11, w12, …, w110,)
- w1i = 0.1, i = 1, 2, …, 10
- 步骤⼆:AdaBoost反复学习基本分类器,在每⼀轮m = 1, 2, …, M顺次的执⾏下列操作:
- 当m=1的时候:
-
(a)在权值分布为D1的训练数据上,阈值v取2.5时分类误差率最低,故基本分类器为: 6, 7 , 8被分错
-
(b)计算该学习器在训练数据中的错误率:ε1 = P(h (x1 ) ≠ y1 ) = 0.3
-
(c)计算该学习器的投票权重:
-
- 当m=1的时候:
-
-
- (d)根据投票权重,对训练数据重新赋权:
-
D2 = (w21 , w22 , …, w210 ,)
-
根据下公式,计算各个权重值
-
经计算得,D2 的值为: D2 = (0.07143, 0.07143, 0.07143, 0.07143, 0.07143, 0.07143, 0.16667, 0.16667, 0.16667, 0.07143)
-
计算过程: H1(x) = sign[0.4236 * h1(x)]
- 分类器H (x)在训练数据集上有3个误分类点。
- - (d)根据投票权重,对训练数据重新赋权:
-
-
- 当m=2的时候:
-
(a)在权值分布为D2 的训练数据上,阈值v取8.5时分类误差率最低,故基本分类器为: 3,4,5被分错
-
(b)计算该学习器在训练数据中的错误率:ε2 = P(h2 (x2 ) ≠ y2 ) = 0.2143
-
(c)计算该学习器的投票权重:
-
- 当m=2的时候:
-
-
- (d)根据投票权重,对训练数据重新赋权:
- 经计算得,D3 的值为:
- D3 = (0.0455, 0.0455, 0.0455, 0.1667, 0.1667, 0.1667, 0.1060, 0.1060, 0.1060, 0.0455)
- H2(x) = sign[0.4236 * h1 (x) + 0.6496 * h2(x)]
- 分类器H2(x)在训练数据集上有3个误分类点。
- 经计算得,D3 的值为:
- (d)根据投票权重,对训练数据重新赋权:
-
-
- 当m=3的时候:
-
(a)在权值分布为D 的训练数据上,阈值v取5.5时分类误差率最低,故基本分类器为:
-
(b)计算该学习器在训练数据中的错误率:ε3 = 0.1820
-
(c)计算该学习器的投票权重:α3 = 0.7514
-
(d)根据投票权重,对训练数据重新赋权:
- 经计算得,D4的值为: D4 = (0.125, 0.125, 0.125, 0.102, 0.102, 0.102, 0.065, 0.065, 0.065, 0.125)
- H3(x) = sign[0.4236 * h1(x) + 0.6496 * h2(x) + 0.7514 * h3(x)]
- 分类器H3(x)在训练数据集上的误分类点个数为0。
-
- 当m=3的时候:
-
步骤三:对m个学习器进⾏加权投票,获取最终分类器
- H3(x) = sign[0.4236 * h1(x) + 0.6496 * h2(x) + 0.7514 * h3(x)]
GBDT介绍
Decision Tree:CART回归树
- GBDT使⽤的决策树是CART回归树,⽆论是处理回归问题还是⼆分类以及多分类,GBDT使⽤的决策树通通都 是都是CART回归树。
回归树⽣成算法(复习)
-
输⼊:训练数据集D:
-
输出:回归树f(x).
-
在训练数据集所在的输⼊空间中,递归的将每个区域划分为两个⼦区域并决定每个⼦区域上的输出值,构建⼆叉决 策树:
- (1)选择最优切分特征 j 与切分点 s,求解
遍历特征 j,对固定的切分特征j扫描切分点s,选择使得上式达到最⼩值的对(j, s).
- (2)⽤选定的对(j, s)划分区域并决定相应的输出值:
- (3)继续对两个⼦区域调⽤步骤(1)和(2),直⾄满⾜停⽌条件。
- (4)将输⼊空间划分为M个区域R , R , , , , , , , , R , ⽣成决策树:
- (1)选择最优切分特征 j 与切分点 s,求解
Gradient Boosting: 拟合负梯度
先来个通俗理解:
- 假如有个⼈30岁,我们⾸先⽤20岁去拟合,发现损失有10岁,
- 这时我们⽤6岁去拟合剩下的损失,发 现差距还有4岁,
- 第三轮我们⽤3岁拟合剩下的差距,差距就只有⼀岁了。
- 如果我们的迭代轮数还没有完,可以继续迭代 下⾯,每⼀轮迭代,拟合的岁数误差都会减⼩。
- 最后将每次拟合的岁数加起来便是模型输出的结果。
提升树算法:
- (1)初始化f0(x) = 0
- (2)对m = 1,2,…,M
- (a)计算残差rmi = yi − f(m-1) (x), i = 1, 2, , , , , , , N
- (b)拟合残差rmi 学习⼀个回归树,得到hm(x)
- (c)更新fm(x) = f(m-1) (x) + hm(x)
- (3)得到回归问题提升树
上⾯伪代码中的残差是什么?
-
在提升树算法中,
- 假设我们前⼀轮迭代得到的强学习器是:f(t-1) (x)
- 损失函数是:L(y, f(t-1) (x))
- 我们本轮迭代的⽬标是找到⼀个弱学习器:ht(x)
- 最⼩化让本轮的损失:L(y, ft(x)) = L(y, f(t-1) (x) + ht(x))
- 当采⽤平⽅损失函数时:
这⾥,r = y − f(t-1) (x)是当前模型拟合数据的残差(residual)。
负梯度为:
此时我们发现GBDT的负梯度就是残差,所以说对于回归问题,我们要拟合的就是残差。
GBDT算法原理
-
上⾯两节分别将Decision Tree和Gradient Boosting介绍完了,下⾯将这两部分组合在⼀起就是我们的GBDT了。
-
(1)初始化弱学习器
-
(2)对m=1,2,…,M有:
-
(a)对每个样本i=1,2,…,N,计算负梯度,即残差
-
(b)将上步得到的残差作为样本新的真实值,并将数据(xi, rim),i = 1, 2, …N作为下棵树的训练数据,得到⼀ 颗新的回归树fm(x)其对应的叶⼦节点区域为Rjm, j = 1, 2, …, J。其中J为回归树t的叶⼦节点的个数。
-
(c)对叶⼦区域j=1,2,…J计算最佳拟合值
-
(d)更新强学习器
-
-
(3)得到最终学习器