boosting
提升方法
核心思路:‘三个臭皮匠顶一个诸葛亮’,通过集成多个弱学习器达到强学习器的作用。
弱学习器:学习的正确率仅仅比随机猜测好,对于二分类问题,随机猜测的正确率为
1
2
\frac{1}{2}
21
强学习器:分类的正确率较高
Adaboost算法
介绍adaboost对于二分类问题的处理流程:
假设给定一个二分类的训练数据集:
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
n
,
y
n
)
}
T= \lbrace (x_1,y_1),(x_2,y_2),...,(x_n,y_n) \rbrace
T={(x1,y1),(x2,y2),...,(xn,yn)},其中每个样本点由特征与类别组成。特征
x
i
∈
χ
⊆
R
n
x_i \in \chi \subseteq R^n
xi∈χ⊆Rn,类别
y
i
∈
Y
y_i \in Y
yi∈Y={−1,+1},
χ
\chi
χ 是特征空间,Y是类别集合,输出最终分类器 𝐺(𝑥) 。Adaboost算法如下:
(1) 初始化训练数据的分布:
D
1
=
(
w
11
,
.
.
.
,
w
1
i
,
.
.
.
,
w
1
n
)
D_1=(w_{11},...,w_{1i},...,w_{1n})
D1=(w11,...,w1i,...,w1n)
(2) 对于m=1,2,…,M使用具有权值分布
D
m
D_m
Dm的训练数据集进行学习,得到基本分类器:
G
m
(
x
)
G_m(x)
Gm(x),输入为特征x,输出为正一或负一,
e
m
e_m
em为分类错误率,
G
m
(
x
)
G_m(x)
Gm(x)的系数
α
m
=
1
2
ln
1
−
e
m
e
m
\alpha_m=\frac{1}{2} \ln \frac{1-e_m}{e_m}
αm=21lnem1−em
(3) 更新训练数据集的权值分布
D
m
+
1
=
(
w
m
+
1
,
1
,
.
.
.
,
w
m
+
1
,
i
,
.
.
.
,
w
m
+
1
,
N
)
D_{m+1}=(w_{m+1,1},...,w_{m+1,i},...,w_{m+1,N})
Dm+1=(wm+1,1,...,wm+1,i,...,wm+1,N),其中,
w
m
+
1
,
i
=
w
m
i
Z
m
e
x
p
(
−
α
m
y
i
G
m
(
x
i
)
)
w_{m+1,i}=\frac{w_{mi}}{Z_m}exp(- \alpha_my_iG_m(x_i))
wm+1,i=Zmwmiexp(−αmyiGm(xi)),
Z
m
=
∑
i
=
1
N
w
m
i
e
x
p
(
−
α
m
u
i
G
m
(
x
i
)
)
Z_m=\sum _{i=1} ^N w_{mi} exp(- \alpha _m u_i G_m(x_i))
Zm=∑i=1Nwmiexp(−αmuiGm(xi))
(4)构建线性模型,
f
(
x
)
=
∑
m
=
1
M
α
m
G
m
(
x
)
f(x)=\sum _{m=1} ^M \alpha _mG_m(x)
f(x)=∑m=1MαmGm(x)
(5)最终的分类器
G
(
x
)
=
s
i
g
n
(
f
(
x
)
)
=
s
i
g
n
(
∑
m
=
1
M
α
m
G
m
(
x
)
)
G(x)=sign(f(x))=sign(\sum _{m=1} ^M \alpha _mG_m(x))
G(x)=sign(f(x))=sign(∑m=1MαmGm(x))
说一说对以上过程一些参数的理解:
1.
α
m
\alpha _m
αm表示
G
m
(
x
)
G_m(x)
Gm(x)的重要性,通过
e
m
e_m
em计算得到,由于是弱分类器,
e
m
e_m
em必定小于1/2,
α
m
\alpha _m
αm随着
e
m
e_m
em的减小而增大,也就是分类器错误率越低越中重要。
2.
w
m
+
1
,
i
=
w
m
i
Z
m
e
x
p
(
−
α
m
y
i
G
m
(
x
i
)
)
w_{m+1,i}=\frac{w_{mi}}{Z_m}exp(- \alpha_my_iG_m(x_i))
wm+1,i=Zmwmiexp(−αmyiGm(xi)),根据
e
x
e^x
ex性质,x>0,起到放大的作用,x<0,起到缩小的作用,这一步实现了将误分类样本权重提高将正确分类样本缩小的作用。
前向分布算法
这个算法还是比较难理解,在迭代的过程中,每一次迭代找到最优的 β m , γ m \beta _m,\gamma _m βm,γm,在迭代完成之后将模型相加,得到最优的模型。
GBDT
就是令前向分布算法的f(x)为树模型,通过决策树模型拟合残差的数据。
梯度提升
负梯度作为残差的近似值,将GBDT中的残差值用梯度值代替。
作业
1.GBDT的算法思路在笔记中已介绍过
2.adaboost和GBDT的区别联系(参考了一些网上的回答):
关于GBDT与Adaboost的区别与联系,它们都属于boosting提升方法,只是损失函数不同:AdaBoost 是通过提升错分数据点的权重来定位模型的不足,而Gradient Boosting是通过算梯度(残差)来定位模型的不足。
GBDT分为两种:
(1)残差版本
残差其实就是真实值和预测值之间的差值,在学习的过程中,首先学习一颗回归树,然后将“真实值-预测值”得到残差,再把残差作为一个学习目标,学习下一棵回归树,依次类推,直到残差小于某个接近0的阀值或回归树数目达到某一阀值。其核心思想是每轮通过拟合残差来降低损失函数。总的来说,第一棵树是正常的,之后所有的树的决策全是由残差来决定;
(2)梯度版本
与残差版本把GBDT说成一个残差迭代树,认为每一棵回归树都在学习前N-1棵树的残差不同,Gradient版本把GBDT说成一个梯度迭代树,使用梯度下降法求解,认为每一棵回归树在学习前N-1棵树的梯度下降值。总的来说两者相同之处在于,都是迭代回归树,都是累加每颗树结果作为最终结果(Multiple Additive Regression Tree),每棵树都在学习前N-1棵树尚存的不足,从总体流程和输入输出上两者是没有区别的。
两者的不同主要在于每步迭代时,是否使用Gradient作为求解方法。前者不用Gradient而是用残差—-残差是全局最优值,Gradient是局部最优方向*步长,即前者每一步都在试图让结果变成最好,后者则每步试图让结果更好一点。
3.Boosting和bagging的区别(参考网上的回答),如何提升模型的精度:
1)样本选择上:
Bagging:采用bootsraps的抽样方式,训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。
Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。
2)预测函数:
Bagging:所有预测函数的权重相等。
Boosting:每个弱分类器都有相应的权重,如adaboost算法中的
α
m
\alpha _m
αm,对于分类误差小的分类器会有更大的权重。
3)并行计算:
Bagging:各个预测函数可以并行生成
Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。
5)bagging是减少variance,而boosting是减少bias
High variance是模型过于复杂,过拟合,记住太多细节噪声数据的信息;high bias是拟合度过低,模型过于简单,cost function不够好。