集成学习,顾名思义,把多个学习算法结合起来,以达到比单一学习算法更优秀,泛化性能更好的学习算法。
不过,把好的学习器和不好的结合在一起,按常理来说会产生一个不好不坏的,为了使结合起来的算法比单一算法更优秀,就需要单一算法是“好而不同”,也就是不同的算法需要有多样性,同时又要有一定的准确性,这样结合起来后,才能达到互补的状态。但同时,准确性与多样性不能兼具,调整这个度非常重要。
boosting
boosting的本质是对学习器之前预测错的样本给予更多关注(即权重),形式是每次改变权重都生成一个新学习器(基学习器),直到基学习器达到指定数量T。最终得到的就是由T个学习器加权结合的集成算法。
那么要解决的问题就是:
- 在每一轮如何改变训练数据的权值或概率分布?
- 通过什么方式来组合基学习器?
用boosting中代表的adaboost举例:
- 采集m个样本,初始化第一个基学习器中每个样本权重为$\frac{1}{m}$
- 用给定算法训练样本
- 计算误差,超过0.5误差率的学习器就舍弃掉(因为小于0.5准确率的学习器结合只会变得更差),误差率小于0.5的更新权重参数$\alpha_{t}=\frac{1}{2}ln\left(\frac{1-\varepsilon _{t}}\varepsilon _{t}\right)$
- 更新样本权重:预测正确的样本权重更新为$exp(-\alpha_{t})$,预测错误的与样本权值更新为$exp(\alpha_{t})$,并对更新之后的样本权值规范化(使权值和为1,确保样本是一个概率分布)。
- 重复2-4T次,或者直到收集到T个基学习器(被抛弃掉的学习器可以进行重新采样)
- 以$\alpha_{t}$为每个基学习器的权重参数输出加法结合的集成学习器
boosting每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。boosting是一种串行式学习方法,因为后一个模型参数受前一个的影响
bagging
与boosing相对,是一种并行式学习方法,是有放回的拿取数据集中的样本m个,这样形成的基学习器之间没有先后关系。
bagging的算法过程:
- 采集样本
- 训练样本
- 重复T次得到T个模型
- 对于分类问题,通过投票的方式,票数最多的就是分类结果;对于回归问题,通过取均值的方式得出结果
由于bagging采样时会有一部分(36.8%)的样本没有被采集到,这些样本还可以用作验证集来验证模型的性能,并优化算法。例如当训练时使用的学习算法是决策树时,可以用来剪枝。
随机森林:引入了bagging的随机性的决策树变体。
随机森林从原本决策树的节点中随机选择一个包含k个类别,$1\leq k\leq d$(d为节点所有样本包含的类别数)的子集,用这个子集来进行决策树划分。一般$k=log_{2}d$