集成学习——先自己看视频了解集成学习的框架。全部将其完成。

集成学习

顾名思义,机器学习是指将多个学习器进行有效的结合,组建一个学习器委员会,其中每个学习器担任委员会成员并进行投票表决权,使得委员会更能最后决定更能够四方造福普渡众生,即泛化性能要优于其中任何一个学习器。

个体和集成

集成学习器的基本结构:先产生一组个体学习器,在使用某种策略将其结合在一起,集成模型如下图所示:
在这里插入图片描述

在上图集成模型中,若个体学习器都属于同一类别,例如都是决策树或神经网络,则称该集成为同质的,若个体学习器包含多种类型的学习算法,例如即有决策树又有神经网络,则称该集成为异质的,
同质集成:个体学习器称为基学习器,对应的学习算法为基学习算法。
异质集成:个体学习器称为组建学习器,或直称为个体学习器。
上面我们已经提到要让集成学习的泛化性能比单个学习器都要好,虽说团结力量大,但也有 木桶短板理论调皮捣蛋,那如何做到呢?
这就引出了集成学习的两个重要概念,准确性和多样性(diversity),
准确性是指个体学习器不能太差,要有一定的准确度,多样性是指个体学习器之间的输出更具有差异性,通过下面这三个例子可以很容易看出这一点,准确度较高,差异度也较高,可以较好地提升集成性能。

现在考虑二分类的简单情形,假设基分类学习器之间相互独立,(能提供较高的差异度),且错误率相等为 ε \varepsilon ε,则可以将集成学习器预测看作一个伯努利实验,容易知道,当所有分类器中不足一半预测正确的情况下,集成预测错误,所以集成器的错误率可以计算为:
H ( x ) = s i g n ( ∑ i = 1 T h i ( x ) ) H(x) = sign(\sum^T_{i = 1}h_i(x)) H(x)=sign(i=1Thi(x))
在这里插入图片描述

P ( H ( x ) ≠ f ( x ) ) = ∑ k = 0 T / 2 ( T k ) ( 1 − ε ) k ε T − k < = e x p ( − 1 2 T ( 1 − ε ) 2 ) P(H(x) \not =f(x)) = \sum^{T/2}_{k = 0}\binom{T}{k}(1 - \varepsilon)^k\varepsilon^{T-k} \\ <=exp(-\frac{1}{2}T(1 - \varepsilon)^2) P(H(x)=f(x))=k=0T/2(kT)(1ε)kεTk<=exp(21T(1ε)2)

此时集成错误率随着基分类器个数的增加呈指数下降,但前提是基分类器之间相互独立,在实际情形中,显然是不可能的,假设训练有 A A A B B B两个分类器,对于某个测试样本,显然满足:
P ( A = 1 ∣ B = 1 ) > P ( A = 1 ) P(A = 1|B=1)>P(A=1) P(A=1∣B=1)>P(A=1),因为A和B是为了解决相同问题而训练的,因此,在预测新样本时存在很大联系,因此,个体学习器的准确性和差异性本身都是一对矛盾的变量,准确性高意味着牺牲多样性,
所以产生好而不同的个体学习器正是集成学习研究的核心,现阶段有三种主流的集成学习方法。Boosting、Bagging以及随机森林(Random Forest)。

Boosting

Boosting是一种串行的工作机制,即个体学习器的训练存在依赖关系,必须一步一步序列化进行,其基本思想是:增加前一个基学习器在训练过程中预测错误样本的权重,使得后续基学习器更加关注这些打标错误的训练样本,尽可能纠正这些错误。一直向下串行直至产生需要 T T T个学习器,Boosting最终对这个学习器进行加权结合,产生学习器委员会。
Boostin族算法最著名,使用最为广泛的都是AdaBoost,因此,下面需要对AdaBoost算法进行介绍,该算法使用的是指数损失函数,因此,AdaBoost的权值与样本分布的更新都是围绕着最小化损失函数的指数进行的,看到这里回想以下之前的机器学习算法。
不难发现机器学习算法大部分带参数模型,只是改变了最优化目标中的损失函数,如果是Square loss,那就是最小二乘了,如果Hinge Loss,那就是著名的SVM,如果时Log-Loss,那就是著名的Logistric Regression啦。
定义集学习器的集成为加权结合,则有:
H ( x ) = ∑ t = 1 T α t h t ( x ) H(x) = \sum^T_{t = 1}\alpha_th_t(x) H(x)=t=1Tαtht(x)
AdaBoost算法指数函数定义为:

具体来来说,整个AdaBoost迭代算法为3步:

  • 初始化训练数据的权值分布。如果有N个样本,则每一个训练样本最开始时都被赋予相同的权值:1/N。
  • 训练弱分类器。具体训练过程中,如果某个样本点已经被准确地分类,那么在构造下一个训练集中,它的权值就被降低;相反,如果* 某个样本点没有被准确地分类,那么它的权值就得到提高。然后,权值更新过的样本集被用于训练下一个分类器,整个训练过程如此迭代地进行下去
  • 将各个训练得到的弱分类器组合成强分类器。各个弱分类器的训练过程结束后,加大分类误差率小的弱分类器的权重,使其在最终的* 分类函数中起着较大的决定作用,而降低分类误差率大的弱分类器的权重,使其在最终的分类函数中起着较小的决定作用
    整个AdaBoost算法流程如下:
    在这里插入图片描述

可以看出AdaBoost的核心步骤就是在计算基学习器权重和样本权重分布,那为何时上述计算公式呢?这就涉及了,我们之前说的大部分带参的机器学习算法只是改变了损失函数,就是因为大部分模型的参数都是通过最优化损失函数(可能还加个规则项)而计算(梯度下降,坐标下降等)得到,这里正是通过最优化指数损失函数从而得到这两个参数的计算公式,具体的推导过程此处不进行展开。
Boosting算法要求基学习器能对特定分布的数据进行学习,即每次都更新样本分布权重,这里书上提到了两种方法:“重赋权法”(re-weighting)和“重采样法”(re-sampling),书上的解释有些晦涩,这里进行展开一下:
(重新赋权,和重采样)
重赋权法:
对每个样本附加一个权重,这时涉及到样本属性和标签的计算,都需要乘上一个权值。
重采样法:
对于一些无法接受带权样本的及学习算法,适合用**“重采样法**”进行处理。方法大致过程是,根据各个样本的权重,对训练数据进行重采样,初始时样本权重一样,每个样本被采样到的概率一致,每次从N个原始的训练样本中按照权重有放回采样N个样本作为训练集,然后计算训练集错误率,然后调整权重,重复采样,集成多个基学习器。

从偏差-方差分解来看,该方法主要用来降降低误差,每轮迭代都关注于训练过程中的预测错误样本,将弱学习提升为强学习器,从AdaBoost算法来看,标准的AdaBoost只适用于二分类问题。在此,当选为数据挖掘十大算法之一的AdaBoost介绍到这里,能够当选正是说明这个算法十分婀娜多姿,背后的数学证明和推导充分证明了这一点,限于篇幅不再继续展开

Bagging 与Random Forest

相比之下,Bagging与随机森林算法就简洁了许多,上面已经提到产生**“好而不同”的个体学习器是集成学习研究的核心**,即在保证基学习器准确性的同时增加基学习器之间的多样性。而这两种算法的基本思(tao)想(lu)都是通过“自助采样”的方法来增加多样性。(自助采样算法)

Bagging

Bagging是一种并行式的集成学习方法即基学习器的训练之间没有前后顺序可以同时进行,Bagging使用**“有放回”采样的方式选取训练集,对于包含m个样本的训练集**,进行m次有放回的随机采样操作,从而得到m个样本的采样集,这样训练集中有接近36.8%的样本没有被采到。按照相同的方式重复进行,我们就可以采集到T个包含m个样本的数据集,从而训练出T个基学习器,最终对这T个基学习器的输出进行结合
lim ⁡ x → ∞ ( 1 − 1 m ) m → 1 e = 0.368 \lim\limits_{x\rightarrow\infty}(1 - \frac{1}{m})^m \rightarrow \frac{1}{e} = 0.368 xlim1m1)me1=0.368

Boosting算法流程如下:

可以看出Bagging主要通过样本的扰动来增加基学习器之间的多样性,因此Bagging的基学习器因为那些对训练集十分敏感的不稳定学学习算法,例如:神经网络与决策树等,从偏差-方差分解来看,该算法主要关注于降低方差,即通过多次重复训练提高稳定性,不同于AdaBoost可以十分简单的移动到多分类,回归等问题,总的说起来则是:AdaBoost关注于降低偏差,而Bagging则关注于降低方差。

随机森林

随机森林(Random Forest)是Bagging的一个拓展体,它的基学习器固定为决策树,多棵树也就组成了森林,而“随机”则在于选择划分属性的随机,随机森林在训练基学习器时,也采用有放回采样的方式添加样本扰动,同时它还引入了一种属性扰动,即在基决策树的训练过程中,在选择划分属性时,RF先从候选属性集中随机挑选出一个包含 K K K个属性的子集,再从这个子集中选择最优划分属性,一般推荐K=log2(d)。(有放回采样方式添加样本扰动),(属性扰动)

这样随机森林中基学习器的多样性,不仅来自样本扰动,还来自属性扰动,从而进一步提升了基学习器之间的差异度,相比决策树的Bagging集成,随机森林的起始性能较差,(由于属性扰动,基决策树的准确性能有所下降),但随着基学习器的数目增多,随机森林往往会收敛到更低的泛化误差, 同时不同于Bagging中的决策树,从所有属性集中选择最优划分属性,随机森林只在一个子集中选择划分属性,因此,训练效率更高。
在这里插入图片描述

结合策略

结合策略指的是在训练好基学习器后,如何将这些基学习器的输出结合起来产生集成模型的最终输出,下面将介绍一些常用的结合策略:(将学习器的输出结合起来产生模型的最终输出)

平均法(回归问题)

  • 简单平均法
    H ( x ) = 1 T ∑ i = 1 T h i ( x ) H(x) = \frac{1}{T}\sum^T_{i = 1}h_i(x) H(x)=T1i=1Thi(x)
  • 加权平均 法
    H ( x ) = ∑ i = 1 T w i h i ( x ) 通常要求: w i > = 0 ∑ i = 1 T w i = 1 H(x) = \sum^T_{i = 1}w_ih_i(x) 通常要求:w_i>= 0 \sum^T_{i = 1}w_i = 1 H(x)=i=1Twihi(x)通常要求:wi>=0i=1Twi=1

容易知道简单平均法时加权平均法的一种特例子,加权平均法可以认为是集成学习研究的基本出发点,由于各个基学习器的权重在训练中得出,一般而言,在个体学习器性能相差较大时使用加权平均法,在个体学习器性能较小时,容易采用简单平均法。

投票法

  • 加权投票法
    在这里插入图片描述
  • 相对多数投票法
  • ![
  • ](https://img-blog.csdnimg.cn/7080b9e72aa148bca21716df601bb544.png)
  • 绝对多数投票法

绝对多数投票法提供了拒绝选项,这在可靠性要求很高的学习任务中是一个很好的机制,同时,对于分类任务,各个基学习器的输出值有两种类型,分别为类标记和类概率。

一些在产生类别标记的同时,也生成置信度额学习器,置信度可以转换为类概率使用,一般基于类概率进行结合往往比基于类标记进行结合的效果更好,需要注意的是对于异质集成,其类概率不能直接进行比较,此时需要将类概率转换为类标记输出,然后再投票。

学习法

学习法是一种更高级的结合策略,即学习出一种**“投票”的学习器,Stacking是学习法的典型代表**。Stacking的基本思想是:首先训练出 T T T个基学习器,对于一个样本它们会产生 T T T个输出,将这 T T T个基学习器的输出与该样本的真实标记作为新的样本,m个样本就会产生一个m*T的样本集,来训练一个新的“投票”学习器。投票学习器的输入属性与学习算法对Stacking集成的泛化性能有很大的影响,书中已经提到:投票学习**器采用类概率作为输入属性,选用多响应线性回归(MLR)**一般会产生较好的效果。

在这里插入图片描述

多样性

在集成学习中**,基学习器之间的多样性是影响集成器泛化性能的重要因素。因此增加多样性对于集成学习研究十分重要**,一般的思路是在学习过程中引入随机性,常见的做法主要是对数据样本、输入属性、输出表示、算法参数进行扰动。

  • 数据样本扰动,即利用具有差异的数据集来训练不同的基学习器。例如:有放回自助采样法,但此类做法只对那些不稳定学习算法十分有效,例如:决策树和神经网络等,训练集的稍微改变能导致学习器的显著变动。
  • 输入属性扰动,即随机选取原空间的一个子空间来训练基学习器。例如:随机森林,从初始属性集中抽取子集,再基于每个子集来训练基学习器。但若训练集只包含少量属性,则不宜使用属性扰动。
  • 输出表示扰动,此类做法可对训练样本的类标稍作变动,或对基学习器的输出进行转化
  • 算法参数扰动,通过随机设置不同的参数,例如:神经网络中,随机初始化权重与随机设置隐含层节点数

学习心得

集合着代码,给决策树啥的都好好研究一下。
会将各种算法全部将其搞定都行啦理由,尤其是集成学习啥的全部将其搞定,各种树模型都将其搞定都行啦的理由!全部都将其搞定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

big_matster

您的鼓励,是给予我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值