集成学习

集成学习是将多个基学习器(模型)相结合来完成学习任务。

随机森林:

随机森林是一种常见的集成学习方式。
前面我们学习了决策树,决策树生成后,我们可以利用同样的方法对训练集构建多棵决策树;
构建多棵决策树使用了数据样本随机和属性随机

  • 构建多棵决策树的过程中,对于构建一棵决策树我们可以规定每次随机取训练集的n%个数据,这样可以减少异常值点对构建随机森林造成的影响;
  • 在选择属性(特征)时也随机选择多个构建一棵决策树。(样本随机性,特征(属性)随机性),即在当前节点选择一个属性子集来选择最优属性,通常一个属性子集选择 k = l o g 2 d k=log_2d k=log2d个属性,而不是将所有的属性计算熵来选择最优属性构造节点。
    对于回归问题,测试集可以取这些决策树结果的均值,即平均法,分类问题,测试结果可以取其中分类概率最大的类别(分类结果最多,若相同,则可随机选择一个),即投票法

Bagging

Bootstrping:有放回采样,即一个盒子里面有10个白球,每次取三个球后将球放回,下次取还是这十个球。
Bagging:有放回n个样本一起建立分类器
Bagging和随机森林都是并行式集成学习的代表,即各个基学习器之间的训练没有关系,可同时训练,Bagging使用的是自助采样法(即有放回的取部分样本进行基学习器的训练),假设取样得到T组样本,每组m个,我们可以单独使用每组样本进行学习器的训练,可以得到T个基学习器,然后将这些学习器进行组合就是Bagging的基本思想。
Bagging通常也可以采用简单平均法和投票法决定最终的结果。
基本过程如下:
在这里插入图片描述
其中 D b s D_{bs} Dbs是自助采样产生的样本分布, Y \mathcal Y Y表示样本的真实标记集合。 H ( x ) = a r g m a x y ∈ Y ∑ t = 1 T I ( h t ( t ) = y ) H(x)=arg\quad max_{y\in{\mathcal Y}}\sum_{t=1}^TI(h_t(t)=y) H(x)=argmaxyYt=1TI(ht(t)=y)即选择使得预测正确最高的结果。
Bagging还有一个特性,在自助采样的过程中,有可能有的样本被多次选取,但有些样本可能一次都未被选取,因此我们可以在采样过程中将样本进行标记,训练结束后,可以使用这些未被选取训练的样本做为验证集,来测试模型的好坏。
Bagging注重关注降低方差,它在不剪枝决策树、神经网络等容易受样本扰动的学习器上效果更明显。下面是基于Bagging的决策树的不同规模的集成和分类边界的结果。
在这里插入图片描述

Boosting

和前面随机森林和Bagging的并行式学习不一样,Boost是串行式的学习,即每一步的学习器由前一步的学习器迭代产生。
大致算法:先从训练集中训练出一个基学习器,根据基学习器的表现对样本的分布进行调整,增加识别错误的样本的权重,使这些样本更加被重视,经过样本分布的调整后来训练下一个基学习器,重复进行,达到事先预定的T轮后停止,然后将这T个学习器进行加权结合。
一次更新的结果如下:
在这里插入图片描述

u u u是每次更新的权重,在第一次时将每个样本的权重初始化,经过一次学习调高错误样本的权值,降低正确样本的权值,与一般学习器的损失函数相比它的损失函数只是加上了权值。 f ( x n ) f(x^n) f(xn)表示第n个样本的预测值, y ^ n \hat{y}^n y^n表示第n个样本的实际值。那么权重的变化应该遵循怎样的规律呢,常见的有Adaboost来更新权重。

Adaboost

(原始的Adaboost算法只适用于二分类问题。)
Adaboost常见的形式:
H ( x ) = ∑ t = 1 T α t h t ( x ) H(\bm x)=\sum_{t=1}^T\alpha_th_t(\bm x) H(x)=t=1Tαtht(x)
是基学习器的线性组合。

举例: u i u^i ui表示权重, ( x i , y ^ i ) (x^i,\hat{y}^i) (xi,y^i)表示样本。 y ^ i \hat{y}^i y^i表示实际标记。下标表示某次迭代(第几个基学习器)
在这里插入图片描述
更新权重:

  • 如果第一次 x i x^i xi的样本分类错误,即 f ( x i ) ≠ y ^ i f(x^i) \quad \ne \hat{y}^i f(xi)̸=y^i,我们更新样本的权重 u 2 i = d 1 ∗ u 1 i u_2^i=d_1*u_1^i u2i=d1u1i;提升样本的权重,使得分类错误的样本更容易被重视。
  • 如果分类正确,则 u 2 i = u 1 i / d 1 u_2^i=u_1^i/d_1 u2i=u1i/d1,即降低样本的权重。
  • d 1 = ( 1 − ϵ 1 ) / ϵ 1 > 1 d_1=\sqrt{(1-\epsilon_1)/\epsilon_1}>1 d1=(1ϵ1)/ϵ1 >1
    调整权重的推导过程:
    对于错误率 ϵ 1 \epsilon_1 ϵ1是第一个基学习器产生的结果,我们希望通过调整错误样本的权重使得此时的 ϵ = 0.5 \epsilon=0.5 ϵ=0.5(大于0.5时,学习器还不如随机过程,没有意义),使得错误样本在下一次的训练中得到重视,然后进行下一个学习器的训练,因此有下面的过程:
    在这里插入图片描述
    经过上面的代换可得到:
    在这里插入图片描述
    将分子分母颠倒:
    在这里插入图片描述
    所以: ∑ f 1 ( x n ) = y ^ n u 1 n / d 1 ∑ f 1 ( x n ) ≠ y ^ n u 1 n d 1 = 1 , 即 : ∑ f 1 ( x n ) = y n u 1 n / d 1 = ∑ f 1 ( x n ) ≠ y ^ n u 1 n d 1 \frac{\sum_{f_{1}\left(x^{n}\right)=\hat y^{n}} u_{1}^{n} / d_{1}}{\sum_{f_{1}\left(x^{n}\right) \neq \hat y^{n}} u_{1}^{n} d_{1}}=1,\quad即:\sum_{f_{1}\left(x^{n}\right)=y^{n}} u_{1}^{n} / d_{1}=\sum_{f_{1}\left(x^{n}\right) \neq \hat y^{n}} u_{1}^{n} d_{1} f1(xn)̸=y^nu1nd1f1(xn)=y^nu1n/d1=1,f1(xn)=ynu1n/d1=f1(xn)̸=y^nu1nd1
    即: 1 d 1 ∑ f 1 ( x n ) = y ^ n u 1 n = d 1 ∑ f 1 ( x n ) ≠ y n u 1 n \frac{1}{d_{1}} \sum_{f_{1}\left(x^{n}\right)=\hat{y}^{n}} u_{1}^{n}=d_{1} \sum_{f_{1}\left(x^{n}\right) \neq y^{n}} u_{1}^{n} d11f1(xn)=y^nu1n=d1f1(xn)̸=ynu1n
    因为 ϵ 1 = ∑ f 1 ( x n ) ≠ y ^ n u n Z 1 \epsilon_1=\frac{\sum_{f_1(x^n)\neq\hat y^n}u^n}{Z_1} ϵ1=Z1f1(xn)̸=y^nun,所以上式可代换: Z 1 ( 1 − ϵ 1 ) / d 1 = Z 1 ϵ 1 d 1 Z_1(1-\epsilon_1)/d_1=Z_1\epsilon_1d_1 Z1(1ϵ1)/d1=Z1ϵ1d1
    所以: d 1 = ( 1 − ϵ 1 ) / ϵ 1 > 1 d_1=\sqrt{(1-\epsilon_1)/\epsilon_1}>1 d1=(1ϵ1)/ϵ1 >1

举例:
第一次迭代:
在这里插入图片描述
改变样本权重,进行第二次迭代:
在这里插入图片描述
重复上面的过程:
在这里插入图片描述
经过三轮后,将上面的三个学习器进行加权结合,产生分类结果:
在这里插入图片描述
其中:
在这里插入图片描述

Boosting主要注重降低偏差,因此Boosting能基于泛化性能相当弱(容易过拟合)的学习器构建强的集成。
在集成各个基学习器的过程中,一般而言,在个体学习器性能相差较大时宜使用加权平均法结合基学习器,在个体学习器性能相近时,使用简单平均法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值