集成学习

集成学习

集成学习_第1张图片

上图很好的总结了集成学习的基本思想,即通过将多个学习器进行结合,常可获得比单一学习器显著优越的泛化性能,这对‘弱学习器’尤为明显,因此集成学习的很多理论研究都是针对弱学习器的。有些类似常说的三个臭皮匠顶个诸葛亮。

根据个体学习器的生成方式不同,目前集成学习主要分为以下两类算法

  1. 个体学习器存在强依赖关系,必须串行生成的序列化方法。代表:Boosting(通俗讲,就是每个个体学习器的生成都要在上一个学习器生成完后进行)
  2. 个体学习器之间不存在强依赖关系,可同时生成的并行化方法。代表:Bagging和随机森林

Bagging与随机森林

Bagging

是并行式集成学习方法的著名代表,它基于自助采样法。关于自助采样法看这里:https://sumenpuyuan.github.io/2018/11/08/模型评估与选择/
照这样,我们可采样出T个含有m个样本的采样集,然后基于每个采样集训练出一个个体学习器,然后再将这些学习器进行结合,这就是Bagging的基本流程

因为采样导致了数据预测的多样性,所以Bagging是用高偏差换低方差,是用一堆高偏差,低方差的决策树去结合得到一个低偏差,低方差的分类器

随机森林
随机森林在bagging的基础上进一步加上了随机属性选择,具体来说,传统决策树在寻找最有属性划分时,需要遍历所有属性集合,二随机森林,对决策树的每个要划分的节点,从该节点的属性集合中随机选择一个属性的子集,然后再从这个子集中选择一个最优属性划分。这里k控制了随机性的引入程度,k=d,则随机森林与传统决策树相同,k=1,则随机选取一个属性进行划分,一般情况推荐\(k=log_2d\)

再一次用高偏差换低方差

Adaboost

booting算法系列最著名的算法就是Adaboost算法
这是Adaboost的一个直观介绍

集成学习_第2张图片 集成学习_第3张图片

假设弱分类器有x < v,x>v或y>v,y

从上述图片描述,我们可以看出Adaboost主要有两个点要注意

  1. 提高那些被前一轮弱分类器错误分类的样本的权值,而降低那些被正确分类的样本的权值
  2. 加大分类误差率小的弱分类器的权值,使其在表决中其较大的作用,减小分类误差率大的分类器的权值,使其在表决中其较小的作用

这是Adaboost的基本思想,下面给出Adabosot的一个算法

集成学习_第4张图片 集成学习_第5张图片

我们主要关注算法中两个点

  1. 权重的更新公式
    根据式子8.4可得出一下公式
    w m + 1 , i = { W m i Z m e − α m , G m ( x i ) = y i W m i Z m e α m , G m ( x i ) ≠ y i w_{m+1,i}= \begin{cases} \frac{ W_{mi}}{Z_m} e^{-\alpha_m}, & G_m(x_i)=y_i \\ \frac{ W_{mi}}{Z_m} e^{\alpha_m}, & G_m(x_i) \neq y_i \end{cases} wm+1,i={ZmWmieαm,ZmWmieαm,Gm(xi)=yiGm(xi)̸=yi
    正确分类与错误分类两项比较,错误分类样本放大了\( e^{2?_m }=\frac{e_m}{1-e_m} \) 倍
    体现了我们需要注意的第一个点
  2. 个体分类器前面的比例系数

由8.6式子可知,每个个体分类器前面有个比例权重\(\alpha=\frac{1}{2}log\frac{1-e_m}{e_m} \),em是分类错误率,可知em越小,\(\alpha越大\),体现了我们需要注意的第二点

Boosting Tree

我们先看一个直观的图介绍
集成学习_第6张图片
图中我们想要预测男人或者老人的年龄值,我们先用一颗回归树去拟合他们年龄,得到左侧的一颗树,发现男人预测年龄与真实年龄相差+2,老人预测年龄与真实年龄相差-1,接下来我们再去构造一颗回归树去拟合上一步得到的残差,直到满足停止条件,图中最后男孩预测就是2+0.9=2.9

提升树采用加法模型(即个体分类器的线性组合)与前向分布算法,以决策树为基函数的提升方法称为提升树0。算法如下
集成学习_第7张图片
我们举个例子进行说明,依旧是上面那个例子
集成学习_第8张图片
集成学习_第9张图片

GBDT(Gradient decent +Booting Tree)

提升树利用加法模型与前向分布算法实现学习的过程,当损失函数是平方损失函数和指数损失函数时,每一步的优化时很简单的,但对一般的损失函数而言,往往每一步优化并不那么容易,针对这一问题,Freidman提出了梯度提升方法
集成学习_第10张图片

为什么用负梯度替代残差

残差=真值-预测值,明明可以直接计算。
为什么要引入麻烦的梯度?有什么用吗?

知乎上一个比较令人信服的解释是:(1)可以扩展到更复杂的损失函数。因为我们一般采用结构风险最小化防止过拟合(在经验风险上加入正则项),所以此时的损失函数不是y^ =y时最小,所以我们需要计算损失函数的梯度,而不能用分模型来拟合残差[1]

链接地址:[1]https://www.zhihu.com/question/63560633

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