- Stacking
- 问题:随机森林中各个决策树的权重应该不同,权重也应该通过学习调整
- 解决:
- 两层的训练:基础分类器、元分类器
- 将每一个分类器(子分类器)的输出当作输入再放到一个分类器中,再训练一次生成一个新的分类器,由这个分类器做输出操作
- 得到的权重是训练出的结果(例如,子分类器输出是1、0、0、1时最后的输出应该是1),由这样的结果倒推回去,由C分类器学习每一个小分类器的权重大小应该是多少
- 类比:有点像感知机(神经元、输出、权重)
- 优点:提高了模型的准确度
- Boosting
- 过程:
- 在原始数据集中挑一些数据出来(可以用传统的方法,不用Bootstrap)
- 训练一个分类器(第一个分类器,定义为C1),是传统分类器,没什么特别之处
- 第二个分类器怎么训练取决于如何挑选训练样本
- 把C1分类器放在原数据集D上过一遍(Test),看看哪些样本分类正确、哪些分类错误。将分对的和分错的各挑出一部分,再拼成一个新的训练集(定义为D2),新训练集的好处是能够让后面的分类特意学习C1分类错误的样本(有目的性的)
- 将D2作为训练集,在某一种分类器上训练,得到模型C2
- 继续把C1、C2两个分类器都放回原始数据集D测试一下,找到C1和C2的分类结果不一致的样本,挑选出来组成一个新的数据集(定义为D3)
- 在D3上训练出某一分类器(定义为C3),C3专门用来学习、解决“争端”
- 此时输入分类未知的样本X,它属于哪一类呢?三个分类器全跑一遍(假设输出为O1、O2、O3)
- 若O1、O2一致,则直接输出O1或O2;若O1、O2不一致输出O3
- 基本思想
- 先训练一个分类器,根据误差(有的分类对、有的分类错),重新调整训练样本(调整就是“加权重”),原来是每个样本都有同样的机会作为训练样本,现在是“加权”
- 形象地说,“你在这个样本上犯错了,这个样本的权重就大,错误性质就严重,有些样本就不严重”
- 什么样的样本权重应该大?就是那些以前的分类器都在这个样本上犯错了,那么这个样本的权重会越来越大,因为这反映出此样本很难学习,为了让后面的分类器重点学习前面经常分错的样本,就需要将其权重增加
- 如果样本很简单,大家都分对了,就没有必要特地学习这些样本,就可以降低这些样本的权重
- Bagging & Boosting
- 和Bagging的区别:
- Bagging是并行的;Boosting是串行的,即根据第一个分类器的性能生成第二个、第三个...
- Bagging可能有几百个分类器;Boosting此示例中只有三个分类器(也可以有几百个,但是一般不会生成太多,一般50个就足够)
- Bagging致力于降低模型的方差,Boosting更专注于模型的准确度
- Boosting优点:
- 理论上可以证明:基础分类器可以不强大,如果是两分类问题,预测准确率大于50%即可
- 和Bagging的区别:
- Boosting宏观架构
- AdaBoost(十大算法之一)
- 第六行:修改每个样本的权重时,增加或减少多少权重(定义为“阿尔法”,同时也是模型本身的权重)
- 第7行:用D代表每一个样本的权重,第i个样本在第t+1时刻的新权重是多少?取决于:(系数一个大于1,一个小于1)
- 判断正确,乘以exp(-a)系数(小于1)
- 判断错误,乘以exp(a)系数(大于1)
- 最后除以Z,Z是所有样本原始的权重之和因为是概率分布,所以所有样本的权重加起来要保证等于1
- 注意:模型的训练误差和Z有很大关系
- Demo:Classifier 1
- 分类器1
- 分类器2
- 分类器3
- 合并各个分类器
- 分类器1
- 过程:
9.3环环相扣:Boosting
于 2023-12-16 14:08:15 首次发布