机器学习入门|集成学习(boosting,bagging)

集成学习,顾名思义,把多个学习算法结合起来,以达到比单一学习算法更优秀,泛化性能更好的学习算法。

不过,把好的学习器和不好的结合在一起,按常理来说会产生一个不好不坏的,为了使结合起来的算法比单一算法更优秀,就需要单一算法是“好而不同”,也就是不同的算法需要有多样性,同时又要有一定的准确性,这样结合起来后,才能达到互补的状态。但同时,准确性与多样性不能兼具,调整这个度非常重要。

boosting

boosting的本质是对学习器之前预测错的样本给予更多关注(即权重),形式是每次改变权重都生成一个新学习器(基学习器),直到基学习器达到指定数量T。最终得到的就是由T个学习器加权结合的集成算法。

那么要解决的问题就是:

  1. 在每一轮如何改变训练数据的权值或概率分布?
  2. 通过什么方式来组合基学习器?

用boosting中代表的adaboost举例:

  1. 采集m个样本,初始化第一个基学习器中每个样本权重为$\frac{1}{m}$
  2. 用给定算法训练样本
  3. 计算误差,超过0.5误差率的学习器就舍弃掉(因为小于0.5准确率的学习器结合只会变得更差),误差率小于0.5的更新权重参数$\alpha_{t}=\frac{1}{2}ln\left(\frac{1-\varepsilon _{t}}\varepsilon _{t}\right)$
  4. 更新样本权重:预测正确的样本权重更新为$exp(-\alpha_{t})$,预测错误的与样本权值更新为$exp(\alpha_{t})$,并对更新之后的样本权值规范化(使权值和为1,确保样本是一个概率分布)。
  5. 重复2-4T次,或者直到收集到T个基学习器(被抛弃掉的学习器可以进行重新采样)
  6. 以$\alpha_{t}$为每个基学习器的权重参数输出加法结合的集成学习器

boosting每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。boosting是一种串行式学习方法,因为后一个模型参数受前一个的影响

bagging

与boosing相对,是一种并行式学习方法,是有放回的拿取数据集中的样本m个,这样形成的基学习器之间没有先后关系。

bagging的算法过程:

  1. 采集样本
  2. 训练样本
  3. 重复T次得到T个模型
  4. 对于分类问题,通过投票的方式,票数最多的就是分类结果;对于回归问题,通过取均值的方式得出结果

由于bagging采样时会有一部分(36.8%)的样本没有被采集到,这些样本还可以用作验证集来验证模型的性能,并优化算法。例如当训练时使用的学习算法是决策树时,可以用来剪枝。

随机森林:引入了bagging的随机性的决策树变体。

随机森林从原本决策树的节点中随机选择一个包含k个类别,$1\leq k\leq d$(d为节点所有样本包含的类别数)的子集,用这个子集来进行决策树划分。一般$k=log_{2}d$

上一篇:.Net Core 使用 Swagger 提供API文档


下一篇:《新编计算机科学概论》一1.3 非数值信息的编码