机器学习入门 --- 集成算法

集成算法

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=1Mfm(x)

全称: Bootstrap Aggregation

经典代表算法:随机森林

  • 随机:数据采样随机,特征选择随机
    数据采样随机:为了多个决策树模型的训练结果的多样性,要随机抽取一定的百分比的数据传入决策树模型中
    特征选择随机:随机抽取一定的百分比的特征传入决策树模型中
  • 森林:很多个决策树并行放在一起

总的来讲,就是对不同的树模型的训练数据,进行数据随机采样、特征随机采样,各个树模型是并行的,不会存在相互影像,独立训练,最后再取个平均结果。

随机森林优势

  1. 它能够处理很高维度(feature很多)的数据,并且不用做特征选择
  2. 在训练完后,它能够给出哪些特征比较重要
    评分方法:
    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+DmodelError1,得到一个 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+DmodelError2,得到一个 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 Error2Error1,则 B B B 特征对全局训练不重要;若 E r r o r 2 ≫ E r r o r 1 Error_2\gg Error_1 Error2Error1,则 B B B 特征对全局训练很重要。
  3. 容易做成并行化方法,速度比较快
  4. 可以进行可视化展示,便于分析

对于树模型的集成数量,理论上越多的树效果会越好,但实际上基本超过一定数量就差不多上下浮动了

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)=Fm1(x)+argminhi=1nL(yi,Fm1(xi)+h(xi))

F m − 1 ( x ) F_{m-1}(x) Fm1(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)) argminhi=1nL(yi,Fm1(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,Fm1(xi)+h(xi)),计算一下 前一轮模型 F m − 1 ( x i ) F_{m-1}(x_i) Fm1(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 1000950=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 1000980=20 的残差,以此类推…
最终的预测结果是 A + B + C + . . . A+B+C+... A+B+C+...

Stacking(堆叠模型)

聚合多个分类或回归模型

它可以堆叠各种各样的分类器(KNN,SVM,RF等等),并且是分阶段训练的:在第一阶段,每个分类器得出各自结果,第二阶段再用一种分类器,将前一阶段结果作为数据输入进行训练,得到最终结果。

各种分类器堆叠在一起确实能使得准确率提升,但是速度是个问题,非常耗时间,这样的集成算法是竞赛与论文神器,但在现实中并不是特别适用!

你可能感兴趣的:(python,机器学习,算法,决策树,机器学习)