集成算法
Bagging
此算法是并行训练多个分类器后取平均
f ( x ) = 1 M ∑ m = 1 M f m ( x ) f(x) = \frac{1}{M}\sum_{m=1}^{M}f_m(x) f(x)=M1m=1∑Mfm(x)
全称: Bootstrap Aggregation
经典代表算法:随机森林
- 随机:数据采样随机,特征选择随机
数据采样随机:为了多个决策树模型的训练结果的多样性,要随机抽取一定的百分比的数据传入决策树模型中
特征选择随机:随机抽取一定的百分比的特征传入决策树模型中 - 森林:很多个决策树并行放在一起
总的来讲,就是对不同的树模型的训练数据,进行数据随机采样、特征随机采样,各个树模型是并行的,不会存在相互影像,独立训练,最后再取个平均结果。
随机森林优势:
- 它能够处理很高维度(feature很多)的数据,并且不用做特征选择
- 在训练完后,它能够给出哪些特征比较重要
评分方法:
1)根据节点的位置,越靠近根节点的位置的所参考的分类特征评分越高
2)假设有 A B C D ABCD ABCD 四个特征,我们想要判断B的特征在全局训练中是否重要:①使用特征的原始数据进行建模学习 A + B + C + D → m o d e l E r r o r 1 A+B+C+D\overset{model}{\rightarrow}Error_1 A+B+C+D→modelError1,得到一个 E r r o r 1 Error_1 Error1;②将B特征中的数据进行破坏(乱序或加入噪点)得到 B ′ {B}' B′,使得不能发挥原有的作用,再次进行建模学习 A + B ′ + C + D → m o d e l E r r o r 2 A+{B}'+C+D\overset{model}{\rightarrow}Error_2 A+B′+C+D→modelError2,得到一个 E r r o r 2 Error_2 Error2。对 E r r o r Error Error进行对比,若 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_{i=1}^{n}L(y_i,F_{m-1}(x_i)+h(x_i))
Fm(x)=Fm−1(x)+argminhi=1∑nL(yi,Fm−1(xi)+h(xi))
F m − 1 ( x ) F_{m-1}(x) Fm−1(x)表示前一轮总模型
a r g m i n h ∑ i = 1 n L ( y i , F m − 1 ( x i ) + h ( x i ) ) argmin_h\sum_{i=1}^{n}L(y_i,F_{m-1}(x_i)+h(x_i)) argminh∑i=1nL(yi,Fm−1(xi)+h(xi))表示当前一轮模型
但不是所有的新一轮树模型都能加进来的,要严格遵守加入一棵树至少要比原来的强才可以,评判标准就是看 L ( y i , F m − 1 ( x i ) + h ( x i ) ) L(y_i,F_{m-1}(x_i)+h(x_i)) L(yi,Fm−1(xi)+h(xi)),计算一下 前一轮模型 F m − 1 ( x i ) F_{m-1}(x_i) Fm−1(xi) 与当前一轮模型 h ( x i ) h(x_i) h(xi) 的和与 y i y_i yi 的一个比较值,即损失函数,如果损失函数可以下降,就加进来,否则不可加进来。
经典代表算法:AdaBoost, Xgboost
Adaboost:
此模型会根据前一次的分类效果调整数据权重
解释:如果某一个数据在这次分错了,那么在下一次我就会给它更大的权重,最后每个分类器根据自身的准确性来确定各自的权重,再合体
Xgboost:
例:假设一个物品价格的预测,这个物品的实际价格是1000
使用提升算法来做,就是讲,当前建立第一课树,称为
A
A
A ,他要预测这个物品的价格,假设它只预测到了
950
950
950,那么就有了第二棵树
B
B
B,
B
B
B 树的目的不是预测整个物品的价格,而是看
A
A
A 树还有多少没做好,再对
A
A
A 树的现阶段的问题进行修改,弥补这
1000
−
950
=
50
1000-950=50
1000−950=50 的残差,假设
B
B
B 树预测到了
30
30
30,一定程度上弥补了
A
A
A 树带来的问题,但是还会有
20
20
20 没有预测出来。那么接下来的一步就是再进来一个
C
C
C 树,对于
C
C
C 树来讲,它的前面没有
A
A
A 树
B
B
B 树,而是将
A
B
AB
AB 树看作为一个整体,
C
C
C 树来弥补这
1000
−
980
=
20
1000-980=20
1000−980=20 的残差,以此类推…
最终的预测结果是
A
+
B
+
C
+
.
.
.
A+B+C+...
A+B+C+...
Stacking(堆叠模型)
聚合多个分类或回归模型
它可以堆叠各种各样的分类器(KNN,SVM,RF等等),并且是分阶段训练的:在第一阶段,每个分类器得出各自结果,第二阶段再用一种分类器,将前一阶段结果作为数据输入进行训练,得到最终结果。
各种分类器堆叠在一起确实能使得准确率提升,但是速度是个问题,非常耗时间,这样的集成算法是竞赛与论文神器,但在现实中并不是特别适用!