集成算法,用多个分类器来提高准确率
问题:
集成算法有哪几种?
各自的方式是什么样的
集成算法,分为三种: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更关注结果如何,可在竞赛和论文当中使用