集成算法·随机森林的原理介绍(分析基础)
综述
整理一些关于数据分析的知识:本章为集成算法(随机森林)的原理介绍,具体的实现代码在下一章的titanic获救数据分析中具体讲述。
Ensemble Learning
- 目的:让机器学习的效果更好。例如:单个决策树模型预测的准确性不太高,如果我们同时采用50棵决策树时可能达到的效果就比较好了。
- 典型的两个模型:
1、Bagging:训练多个分类器取平均值f(x)=M1m=1∑Mfm(x)
2、Boosting:从弱学习器开始加强,通过加权来进行训练Fm(x)=Fm−1(x)+argminhi=1∑nL(Fm−1(xi)+h(xi))(加入一棵树后,效果上升)
3、Stacking:聚合多个分类或回归模型(简单来说就是用很多个预测模型对数据进行预测,再将所有的预测值与实际值做线性回归,得到各个预测模型的权重,最后使用整个预测系统进行预测的方式)
Bagging模型
- 全称:bootstrap aggregation (简单说就是并行的训练一堆分类器),最典型的代表就是随机森林
- 随机处理:为了使得每次分类器得到的结果都不一样,我们通常采用随机选取60%-80%的样本和一定数据的特征,作为一个分类器的分类输入。注意:同一个模型中样本选取比例相同,特征值选取的数量相同
- 森林:就是将多个分类器(决策树)并行放在一起,注意:并是树的数量越多越好有时候当数量达到一定值时,效果可能很难提升,甚至会下降
Random Forest
- 构造树模型:由于二重随机性,使得每次树基本上都不会一样,最终的结果也会有区别
- 树模型:每个树模型中我们都进行随机选取输入,是保证泛化能力,如果每棵树都一样就没有实际意义了。
- 模型优势:
1、它能处理很高纬度的数据,并且不用做特征选择(也可以做)
2、在训练完后,它能够给出重要性较高的feature
3、容易做成并行化方法,速度比较快
4、可以进行可视化操作(但是当树过于庞大时不建议) - 拓展部分(随机森林如何判断feature重要性)
现有A,B,C,D这4个特征这时候我们做随机森林的模型:A+B+C+D→E1
当我们需要判断A特征的重要性时,我们可以将A中的数据用噪音数据代替掉,我们用A′表示,在应用模型A′+B+C+D→E2
此时我们就得到了对于特征A的两个结果值,如果这两个结果值得偏差很小,那我们认为A对回归的作用是微乎其微的;反之,A有具体的作用。
KKN
该方法不太适合,使用这种方法很难去随机让模型的泛化能力变强。(具体介绍之后补充)
Boosting模型
该模型典型代表有Adaboost,Xgboost后者在以后哦的数据分析中具体说明。
Adaboost
Adaboost会根据前一次的分类效果调整数据的权重
- 具体实现方式:如果一个数据在这次分错了,那么在下一次我就会给它更大的权重
- 最终结果:每个分类器根据自身的准确性来确定各种的权重,再结合
- 实例:
0 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
0.2 | 0.2 | 0.2 | 0.2 | 0.2 |
开始我们给这些数据的权重是相同的,当进行预测后:
0 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
0.2 | 0.2 | 0.2 | 0.2 | 0.2 |
√ | × | √ | √ | √ |
发现 1 数据出错了,此时我们再调成权重:
0 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
0.1 | 0.6 | 0.1 | 0.1 | 0.1 |
大致上是这样一个思想。然后每个分类器都会有优劣,好的分类器权重越大,差的越小。
Stacking模型
- 堆叠思想:简单粗暴,直接用很多个回归模型套数据,分类器可以多种多样(KNN,SVM,RF等等)
- 分阶段:第一阶段每个模型得出各自的结果,第二阶段将用前一阶段结果进行训练得出模型。
大致思想: - 第一阶段:单独预测
model | 1 | 2 | 3 | 4 |
---|---|---|---|---|
RF | 1 | 0 | 1 | 0 |
LR | 1 | 0 | 1 | 0 |
SVM | 1 | 1 | 0 | 0 |
Xgboost | 0 | 0 | 1 | 0 |
第二阶段:结果训练
⎝⎜⎜⎛1110001011010000⎠⎟⎟⎞LR(1010)(2)
小结
如果数据分析时没有太好的方法做回归,推荐先使用随机森林看看效果。此外,集成算法看着比较高级,适合数学建模使用。具体的实现方式,在titanic分析中展示。