概述
目的:让机器学习效果更好,单个不行,集成多个
集成算法
Bagging:训练多个分类器取平均
f
(
x
)
=
1
/
M
∑
m
=
1
M
f
m
(
x
)
f(x)=1/M\sum^M_{m=1}{f_m(x)}
f(x)=1/M∑m=1Mfm(x)
Boosting:从弱学习器开始加强,通过加权来进行训练
F
m
(
x
)
=
F
m
−
1
(
x
)
+
a
r
g
m
i
n
h
∑
i
=
1
n
L
(
y
i
,
F
m
−
1
(
x
i
)
+
h
(
x
i
)
)
F_m(x)=F_{m-1}(x)+argmin_h\sum^n_{i=1}L(y_i,F_{m-1}(x_i)+h(x_i))
Fm(x)=Fm−1(x)+argminh∑i=1nL(yi,Fm−1(xi)+h(xi))
(加入一棵树,新的树更关注之前错误的例子)
Stacking:聚合多个分类或回归模型(可以分阶段来做)
Bagging模型(随机森林)
全称: bootstrap aggregation(说白了就是并行训练一堆分类器)
最典型的代表就是随机森林,现在Bagging模型基本上也是随机森林。
随机:数据采样随机,每棵树只用部分数据;数据有多个特征(属性)组成,每棵树随机选择部分特征。随机是为了使得每个分类器拥有明显差异性。
森林:很多个决策树并行放在一起
如何对所有树选择最终结果?分类的话可以采取少数服从多数,回归的话可以采用取平均值。
构造树模型
由于二重随机性,使得每个树基本上都不会一样,最终的结果也会不一样。
树模型:
随机性
之所以要进行随机,是要保证泛化能力,如果树都一样,那就没意义了!
如下图所示,当每个弱分类器分类错误的样本各不相同时,则能得到一个效果优异的集成模型。
随机森林优势
它能够处理很高维度的数据,即数据拥有很多特征(属性),并且不用做特征选择(集成算法自动选择了重要的特征)。
在训练完后,它能够给出哪些feature比较重要。
可以进行可视化展示,便于分析。
容易做成并行化方法,速度比较快。
解答:为什么随机森林能够给出哪些feature比较重要。
假如有四个分类器
A
,
B
,
C
,
D
A,B,C,D
A,B,C,D,他们对应关注(随机选择到)的属性为
a
,
b
,
c
,
d
a,b,c,d
a,b,c,d
取
A
,
B
,
C
,
D
A,B,C,D
A,B,C,D的结果并且按少服从多数(也可以去平均等决策策略)得到错误了
e
r
r
o
r
1
error_1
error1
之后我们给
B
B
B制作假数据,把之前真的数据结果打乱或者换成不合理的值,得到
B
′
B'
B′,之后
取
A
,
B
′
,
C
,
D
A,B',C,D
A,B′,C,D的结果并且按少服从多数(也可以去平均等决策策略)得到错误了
e
r
r
o
r
2
error_2
error2
如果
e
r
r
o
r
2
≈
e
r
r
o
r
1
error_2\approx error_1
error2≈error1,则说明属性
B
B
B并不重要。
如果
e
r
r
o
r
2
≫
e
r
r
o
r
1
error_2 \gg error_1
error2≫error1,则说明属性
B
B
B非常重要,对结果造成了巨大影响。
关于树的个数
理论上越多的树效果会越好,但实际上基本超过一定数量就差不多上下浮动了。
Boosting模型(提升算法模型)
概述:
F
m
(
x
)
=
F
m
−
1
(
x
)
+
a
r
g
m
i
n
h
∑
i
=
1
n
L
(
y
i
,
F
m
−
1
(
x
i
)
+
h
(
x
i
)
)
F_m(x)=F_{m-1}(x)+argmin_h\sum^n_{i=1}L(y_i,F_{m-1}(x_i)+h(x_i))
Fm(x)=Fm−1(x)+argminh∑i=1nL(yi,Fm−1(xi)+h(xi))
假如有三个分类器
A
,
B
,
C
A,B,C
A,B,C,这个时候正如公式所示,
A
,
B
,
C
A,B,C
A,B,C有种串联的感觉。
假如有1000条数据,
A
A
A仅分类正确900条,之后
B
B
B就关注错误的100条数据,仅那100条作为数据预测(这个做法有点极端,也可以拿小部分900条里面的数据),之后
B
B
B正确预测出50条,那么
C
C
C就那拿剩下的50条错误的数据用来给
C
C
C预测。
典型代表: AdaBoost, Xgboost
AdaBoost模型
Adaboost会根据前一次的分类效果调整数据权重,如果某一个数据在这次分错了,那么在下一次我就会给它更大的权重。
最终的结果:每个分类器根据自身的准确性来确定各自的权重,再合并结果。
Adaboost工作流程
每一次切一刀,最终合在一起,弱分类器效果就更好了
Stacking模型
堆叠:很暴力,拿来一堆分类器直接上
可以堆叠各种各样的分类器( KNN,SVM,RF等等)
为了刷结果,不择手段!
分阶段:第一阶段得出各自结果,第二阶段再用前一阶段结果训练
堆叠在一起确实能使得准确率提升,但是速度是个问题。