集成算法

集成算法,用多个分类器来提高准确率

问题:

集成算法有哪几种?

各自的方式是什么样的

 

集成算法,分为三种:Bagging、Boosting、Stacking

并行,提升和堆叠

从字面上就可以大概知道他们的意思:

Bagging 并行:并行训练多个模型,最后综合多个模型的结果,得出最后的结果

这里的并行训练,是指让多个分类器各自训练,互不影响。

Bagging 的代表:随机森林

随机森林,随机和 森林来理解

随机就是每个分类器的数据采样和选择特征都是随机的,但是数量都是一样的,而且都是有放回的选取

例如,每个分类器采集的数据样本数量都是60条,选择特征的数量都是3个

森林,就是用之前提过的决策树,用多个决策树也就构成了森林。

(为什么不用KNN其他的分类器呢,这是因为用决策树并行训练的效果是好过其他的分类器的,所以经常使用的是树)

然后分类器自己进行训练,最后测试的时候同样每个分类器自己测试

需要输出结果的时候,如果是分类,则用众数得出最后结果;如果是回归,则应该用平均数

随机森林优点:

1.易处理高维数据(特征很多的数据),不需要进行特征的选择

2.可以得出特征重要性 Feature Importance

3.速度快

4.可视化

这里要解释一下的是特征重要性 Feature Importance。

用随机森林可以帮助我们分析特征,

而在bagging中,sklearn分析特征是都选择了同样的特征,要知道某个特征的重要性的时候会对该特征进行破坏——给它赋予随机值、乱序值,让这个特征没有什么意义。

那为什么不直接赋予0(同样的值)呢?如果是赋予同样的值,可以直接杀掉。

我们需要保留这个特征,但是弱化这个特征的作用

因此也就能从最后的预测结果判断出特征重要性

 

Boosting 串行:以一个弱学习器开始,然后不断加上学习器,以权重参数表示其重要性

串行也就是像初中物理中的串行电路,多个学习器串在一起

举个例子:第一个学习器能分析出1000条数据中的900条,那么第二个学习器就去学识别剩下的100条,第二个学习器能识别70条,那么第三个学习器就去学习识别30条,最后能识别出20条,那么最后以权重来表示他们的重要性,那么整个学习器最后能识别1000条数据中的990条数据了。

Boosting例子:AdaBoost、Xgboost

以AdaBoost为例子。AdaBoost,不仅仅对学习器分配权重,还会对数据也分配权重。

比如把数据分为5大份了,哪一个识别的效果最差,那么这一份数据的权重也就越大,意味着对数据更加重视。

在训练过程中也不断调整每个学习器的权重,直到没怎么变化了

最后就是每个学习器根据自身准确性来确定各自权重,完成模型的建立。

 

Stacking 堆叠:聚合使用多个分类器

使用多个分类器各自独立进行第一轮的的训练,然后测试得到第一轮的结果,

紧接着以第一轮的结果作为第二轮训练的输入,以某一个分类器 如KNN,进行训练,最后得出结果

Stacking很明显综合使用了多个分类器,能使准确率提高, 但是同样速度也会慢下来,

而且因为第一轮中多个分类器独立训练,这样有助于避免过拟合的现象出现。

Stacking更关注结果如何,可在竞赛和论文当中使用

你可能感兴趣的:(机器学习)