精华内容
下载资源
问答
  • 弱分类器 & 强分类器(弱学习器 & 强学习器)
    千次阅读
    2020-08-27 21:42:15

            一个分类器的分类准确率在60%-80%,即:比随机预测略好,但准确率却不太高,我们可以称之为“弱分类器”,比如CART(classification and regression tree分类与回归树)。

           反之,如果分类精度90%以上,则是强分类器。

     

     

    西瓜书上说:

          弱学习器常指泛化性能略优于随即猜测的学习器(例如在二分类问题上精度略高于50%的分类器)
     

     

    更多相关内容
  • 1.集成学习现实情景中,一个学习器的泛化性能可能有局限,而集成学习则可以通过构造多个学习器来完成学习任务,有时也被称为多分类器系统,集成学习的大致步骤是先生成一组‘个体学习器’,然后基于某种策略将学习器...

    1.集成学习

    现实情景中,一个学习器的泛化性能可能有局限,而集成学习则可以通过构造多个学习器来完成学习任务,有时也被称为多分类器系统,集成学习的大致步骤是先生成一组‘个体学习器’,然后基于某种策略将学习器结合起来,个体学习器同昌由现有的算法从训练数据产生,最常用的是决策树,还有神经网络,支持向量机等。根据集成学习中分类器的类别来看,如果集成学习器中的个体学习器都是相同的,则称为‘同质’集成,对应的个体学习器称为‘基学习算法’,而集成学习器中的个体学习器不同时,则称为‘异质集成’或‘组件学习器’。若根据个体学习器的生成方式来看,集成学习器大概分为两类,一类是个体学习器之间存在强依赖关系,必须串行生成的序列化方法,例如AdaBoost,以及个体学习器之间不存在强依赖关系,可同时生成的并行化方法,例如Bagging和随机森林。这篇将主要讲AdaBoost的生成过程。


    2.弱分类器

    集成学习器对多个学习器进行结合,常常获得比单一学习器更优的性能,这对弱学习器尤为明显,因此集成学习很多时候是针对弱学习器进行的,但并不是说集成学习一定要使用弱学习器,二者没有什么必然的因果关系.下面做一个简单的分析,考虑二分类问题,y∈{-1,1}和真实函数f,假设基分类器的错误率为ε,即对每个分类器hi有:

                                                                                

    假设集成学习通过简单投票法结合T个基分类器,若有超过半数的基分类器分类正确,则集成分类就正确:

                                                                                

    假设基分类器的错误率相互独立,由Hoeffding不等式,集成的错误率:

                                            

                                                                        

    上式表示,随着集成中个体学习分类器数目T的增加,集成的错误率将指数级别的下降,最终趋于0,这也是集成学习器可以提高泛化能力的一种解释,但也要结合前提条件。

    Proof:

    假设抛硬币正面向上的概率为p,反面朝上的概率为1-排,令H(n)代表抛n次硬币正面朝上的次数,则最多K次的概率为:

                                                                        

    对于,有Hoeffding不等式:

                                                                        

    利用上面的Hoeffding不等式证明我们的集成错误率。

    首先由集成错误率的形式得到:

                                                                                    

    由取整函数性质:x-1 < [x] ≤ x < [x]+1

                                                                    

    因为P = 1-ε ,得:

                                                                                

    带入到Hoeffding不等式即得到书中(8.3),即集成错误率的不等式.


    Tip:

    对于二分类而言,弱分类器的准确率可能比较低,例如60%,65%等等,但它们的最低要求是一定要大于50%即随机预测的准确率,如果一个分类器的准确率低于随机预测的准确率,AdaBoost会将其舍弃.


    3.AdaBoost

    Boosting是一族可将弱学习器提升为强学习器的过程,他的机制是先从训练集训练出一个基学习器,再根据基学习器的表现调整样本分布,使得之前分错的样本受到更多的关注,然后基于调整后的分布训练下一个基学习器,如此重复,直到学习器达到指定数目T或泛化错误率达到一定要求,最终将T个学习器加权结合,其中最著名的就是AdaBoost算法,它的第t+1个学习器的生成依赖第t个学习器,所以是串行生成的序列化方法,看一下具体是如何实现的。


    1)初始化训练数据权值分布

    T = {[x1,y1],[x2,y2]...[xn,yn]}  x为n维实向量,yi∈{-1,+1} 为初始数据

    初始化权值分布D1 = (w1,w2,...,wn) wi=1/N


    2)训练分类器,调整权值

    根据初始数据,选择基学习器错误率达到最低的阈值为分界点,建立弱学习器h(x),并计算相应的e1,α1

    对于分类器分错的样本,增加其权重,而对于分类正确的样本,则相应的减少其权重,根据D1,e1,α1推导新的权值分布D2

    for i in range(T):

    不断重复上述调整权值,计算ei,αi的过程,串行生成学习器h(x),得到T个训练分类器.


    3)加权组合T个学习器,提高泛化性能

    通过对上述学习器的加权组合,组成最终的分类器,并用符号函数sign预测最终的分类结果:

                                                                      



    上述过程的伪代码 by 西瓜书:

                            

    其中误分类样本加权之和ei:

                                                            

    分类器重要性度量α:

                                                                                

    权值更新公式:

                                                                    

    规范分布:

                                                                       


    总结:

    这一篇主要对集成学习,弱分类器集成提升泛化性能和AdaBoost的理论实现过程有了一些了解,主要就是不断地更新迭代权数,达到最终的标准,第五步判断大于0.5是在二分类情况下与随机预测准确率进行比较,如果一个学习器的准确率还不如随机猜测,理应将其舍弃。下一篇主要放在证明分类器重要性度量公式,权值公式,以及规范分布公式是如何得来的,为什么采用这样的更新方式.


    展开全文
  • 集成学习--基础概述

    千次阅读 2021-11-25 19:54:52
    集成学习概述 和传统学习方法训练一个学习器...实际上,集成学习之所以那么受关注,很大程度上是因为它们能够把比随机猜稍好的弱学习器变成可以精确预测的强学习器。因此,在集成学习中基学习器也称为弱学习器。 baggin

    1.集成学习概述

    简单来说,集成学习(Ensemble Learning)就是指采用多个弱分类器组成一个强分类器,然后,对数据进行预测,提高整个分类器的泛化能力。这里的弱分类器可以非常弱,只要其准确率大于50%就可以(即比随意猜的准确率大就可以)

    和传统学习方法训练一个学习器不同,集成学习方法训练多个学习器并结合它们来解决一个问题。通常,集成学习也被称为基于委员会的学习或多分类器系统。

    一个集成由多个基学习器构成,而基学习器由基学习算法在训练数据上训练获得,它们可以是决策树、神经网络或其他学习算法。下图给出一个通用的集成学习框架
    请添加图片描述
    通常,集成具有比基学习器更强的泛化能力。实际上,集成学习之所以那么受关注,很大程度上是因为它们能够把比随机猜稍好的弱学习器变成可以精确预测的强学习器。因此,在集成学习中基学习器也称为弱学习器。

    在集成学习中有两个主要的问题需要解决,第一是如何得到若干个基学习器,第二是如何选择一种结合策略,将若干个基学习器集成为一个强学习器.

    2.集成学习之基学习器

    对于如何得到基学习器,我们一般有两种选择:

    1. 第一种就是所有的基学习器都是一个种类的,或者说是同质的.比如基学习器都是决策树或者都是神经网络.
    2. 第二种是所有的基学习器不全是一个种类的,或者说是异质的.比如基学习器中包括支持向量机,逻辑回归,朴素贝叶斯等等.

    目前来说,同质集成的应用是最广泛的,一般我们常说的集成学习的方法都是指的同质基学习器.而同质个体学习器使用最多的模型是CART决策树和神经网络.

    根据基学习器的生成方式,集成学习方法有两种范式:

    1. 串行生成基学习器,基学习器之间存在强依赖关系.串行集成方法的基本动机是利用基学习器之间的相关性.代表算法是boosting系列算法,如Adaboost.
    2. 并行生成基学习器,基学习器之间不存在强依赖关系.并行集成方法的基本动机是利用基学习器之间的独立性.代表算法是bagging系列算法,如随机森林.

    3.Bagging

    Bagging采用自助采样法,通过随机改变训练集的分布产生新的训练子集,然后分别用不同的训练子集来训练生成基学习器,最后将其集成为一个整体.

    具体来讲,给定一个样本数为m的训练集合,它通过有放回的采用得到有m个训练样本的采样集.原始样本有的被选中多次,有的未被选中.重复过程T次,得到T个样本数目为m的训练子集,对每个训练子集使用基学习算法训练得到一个基分类器.

    bagging采用最常用的方法来聚合基学习器,即:在分类任务上投票,在回归任务上取均值.

    下面给出Bagging算法流程图:
    Bagging算法流程图

    4.Boosting

    Boosting算法是一种将弱学习器转换为强学习器的迭代方法,它通过增加迭代次数,产生一个表现接近完美的强学习器.其中,弱学习器是指分类效果只比随机猜测效果稍好的学习器,即分类准确率略高于50%. 在实际训练中,获得一个弱学习器比获得一个强学习器更加容易.

    下图给出Boosting算法流程图:
    在这里插入图片描述
    如图所示,Boosting算法反复运行一个弱学习器来处理不同分布的训练数据,然后按照顺序将每次产生的弱学习器组合成一个强学习器.

    5.结合策略

    5.1 均值法

    1. 简单平均法:直接对个体学习器的输出取均值来获取结合输出结果。
      H ( x ) = 1 T ∑ i = 1 T h i ( x ) H(x)=\frac{1}{T}\sum_{i=1}^T h_{i}(x) H(x)=T1i=1Thi(x)

    2. 加权平均法:通过对每一个学习器的输出结果赋予不同的重要性权重来获取结合结果。
      H ( x ) = ∑ i = 1 T w i h i ( x ) H(x)=\sum_{i=1}^T w_{i}h_{i}(x) H(x)=i=1Twihi(x)
      其中, w i w_{i} wi表示 h i h_{i} hi的权重,通常带有约束 w i ≥ 0 w_{i}\ge0 wi0 ∑ i = 1 T w i = 1 \sum_{i=1}^{T}w_{i}=1 i=1Twi=1

    5.2 投票法

    1. 绝对多数投票法

    绝对多数投票法是最常用的投票方法。其中,每个分类器都会给一个类别标记进行投票,最终的输出类别标记为获取票数过半的标记;如果所有类别标记获取票数均不过半,则拒绝预测。

    1. 相对多数投票法

    相对多数投票法仅需获胜方获取票数最多即可,如果平票则任选一个。

    1. 加权投票法

    当个体分类器的性能差别较大时,赋予性能强的分类器更高的权重是合理的。
    当赋予的权重合适时,加权投票法可以做到既优于最优的个体分类器,又优于绝对多数投票法。

    5.3 学习法

    前两种方法,均值法和投票法都相对比较简单,可能会存在误差较大的时候。于是就有了学习法,最具代表性的方法就是stacking。(有待完善)

    参考资料

    《机器学习》 – 周志华
    《集成学习》 – 周志华、李楠
    机器学习之集成学习(ensemble learning)
    集成学习(ensemble learning)原理详解

    展开全文
  • 基础通俗讲解集成学习算法

    千次阅读 2020-06-23 08:58:51
    来源:Datawhale 本文约6000字,建议阅读10+分钟 ...集成学习,即分类器集成,通过构建并结合多个学习器来完成学习任务。一般结构是:先产生一组“个体学习器”,再用某种策略将它们结合起来。结合策

    来源:Datawhale

    本文约6000字,建议阅读10+分钟

    本文以图文的形式对模型算法中的集成学习,以及对集中学习在深度学习中的应用进行了详细解读。

    标签:机器学习

    数据及背景

    阿里天池-零基础入门CV赛事:

    https://tianchi.aliyun.com/competition/entrance/531795/introduction

    集成学习

    集成学习,即分类器集成,通过构建并结合多个学习器来完成学习任务。一般结构是:先产生一组“个体学习器”,再用某种策略将它们结合起来。结合策略主要有平均法、投票法和学习法等。集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务,有时也被称为多分类器系统(multi-classifier system)、基于委员会的学习(committee-based learning)。

    集成学习是这样一个过程,按照某种算法生成多个模型,如分类器或者称为专家,再将这些模型按照某种方法组合在一起来解决某个智能计算问题。集成学习主要用来提高模型(分类,预测,函数估计等)的性能,或者用来降低模型选择不当的可能性。集成算法本身是一种监督学习算法,因为它可以被训练然后进行预测,组合的多个模型作为整体代表一个假设(hypothesis)。

    集成方法是将几种机器学习技术组合成一个预测模型的元算法,以达到减小方差(bagging)、偏差(boosting) 或改进预测(stacking) 的效果。

    分类器(Classifier)

    分类器是数据挖掘中对样本进行分类的方法的统称,包含决策树、逻辑回归、朴素贝叶斯、神经网络等算法。分类是数据挖掘的一种非常重要的方法。分类的概念是在已有数据的基础上学会一个分类函数或构造出一个分类模型(即分类器)。该函数或模型能够把数据库中的数据记录映射到给定类别中的某一个,从而可以应用于数据预测。

    分类器的构造和实施大体会经过以下几个步骤:

    • 选定样本(包含正样本和负样本),将所有样本分成训练样本和测试样本两部分。
    • 在训练样本上执行分类器算法,生成分类模型。
    • 在测试样本上执行分类模型,生成预测结果。
    • 根据预测结果,计算必要的评估指标,评估分类模型的性能。

    1. 决策树分类器

    构造这个分类器不需要任何领域的知识,也不需要任何的参数设置。因此它特别适合于探测式的知识发现。此外,这个分类器还可以处理高维数据,而且采用的是类似于树这种形式,也特别直观和便于理解。因此,决策树是许多商业规则归纳系统的基础。

    2. 朴素贝叶斯分类器

    素贝叶斯分类器是假设数据样本特征完全独立,以贝叶斯定理为基础的简单概率分类器。

    3. AdaBoost算法

    AdaBoost算法的自适应在于前一个分类器产生的错误分类样本会被用来训练下一个分类器,从而提升分类准确率,但是对于噪声样本和异常样本比较敏感。

    4. 支持向量机

    支持向量机是用过构建一个或者多个高维的超平面来将样本数据进行划分,超平面即为样本之间的分类边界。

    5. K近邻算法

    基于k近邻的K个样本作为分析从而简化计算提升效率,K近邻算法分类器是基于距离计算的分类器。

    集成学习方法

    集成学习有许多集成模型,例如自助法、自助聚合(Bagging)、随机森林、提升法(Boosting)、堆叠法(stacking)以及许多其它的基础集成学习模型。

    集成方法的思想是通过将这些个体学习器(个体学习器称为“基学习器”,基学习器也被称为弱学习器。)的偏置和/或方差结合起来,从而创建一个强学习器(或集成模型),从而获得更好的性能。

    我们可以用三种主要的旨在组合弱学习器的元算法:

    • 自助聚合(Bagging),该方法通常考虑的是同质弱学习器,相互独立地并行学习这些弱学习器,并按照某种确定性的平均过程将它们组合起来。
    • 提升法(Boosting),该方法通常考虑的也是同质弱学习器。它以一种高度自适应的方法顺序地学习这些弱学习器(每个基础模型都依赖于前面的模型),并按照某种确定性的策略将它们组合起来。
    • 堆叠法(Stacking),该方法通常考虑的是异质弱学习器,并行地学习它们,并通过训练一个 元模型 将它们组合起来,根据不同弱模型的预测结果输出一个最终的预测结果。

    非常粗略地说,我们可以说Bagging的重点在于获得一个方差比其组成部分更小的集成模型,而Boosting和Stacking则将主要生成偏置比其组成部分更低的强模型(即使方差也可以被减小)。

    1. 自助聚合(Bagging)

    在并行化的方法中,我们单独拟合不同的学习器,因此可以同时训练它们。最著名的方法是自助聚合(Bagging),它的目标是生成比单个模型更棒的集成模型。Bagging的方法实现。

    自助法:这种统计技术先随机抽取出作为替代的 B 个观测值,然后根据一个规模为 N 的初始数据集生成大小为 B 的样本(称为自助样本)。

    基础通俗讲解集成学习算法

     

    在某些假设条件下,这些样本具有非常好的统计特性:在一级近似中,它们可以被视为是直接从真实的底层(并且往往是未知的)数据分布中抽取出来的,并且彼此之间相互独立。因此,它们被认为是真实数据分布的代表性和独立样本(几乎是独立同分布的样本)。

    为了使这种近似成立,必须验证两个方面的假设:

    • 初始数据集的大小N应该足够大,以捕获底层分布的大部分复杂性。这样,从数据集中抽样就是从真实分布中抽样的良好近似(代表性);
    • 与自助样本的大小B相比,数据集的规模N应该足够大,这样样本之间就不会有太大的相关性(独立性)。注意,接下来我可能还会提到自助样本的这些特性(代表性和独立性),但读者应该始终牢记:这只是一种近似。

    举例而言,自助样本通常用于评估统计估计量的方差或置信区间。根据定义,统计估计量是某些观测值的函数。因此,随机变量的方差是根据这些观测值计算得到的。为了评估这种估计量的方差,我们需要对从感兴趣分布中抽取出来的几个独立样本进行估计。

    在大多数情况下,相较于实际可用的数据量来说,考虑真正独立的样本所需要的数据量可能太大了。然而,我们可以使用自助法生成一些自助样本,它们可被视为最具代表性以及最具独立性(几乎是独立同分布的样本)的样本。这些自助样本使我们可以通过估计每个样本的值,近似得到估计量的方差。

    基础通俗讲解集成学习算法

     

    2. 提升法(Boosting)

    在顺序化的方法中,组合起来的不同弱模型之间不再相互独立地拟合。其思想是迭代地拟合模型,使模型在给定步骤上的训练依赖于之前的步骤上拟合的模型。提升法(Boosting)是这些方法中最著名的一种,它生成的集成模型通常比组成该模型的弱学习器偏置更小。

    Boosting和Bagging的工作思路是一样的:我们构建一系列模型,将它们聚合起来得到一个性能更好的强学习器。然而,与重点在于减小方差的Bagging不同,Boosting着眼于以一种适应性很强的方式顺序拟合多个弱学习器:序列中每个模型在拟合的过程中,会更加重视那些序列中之前的模型处理的很糟糕的观测数据。

    直观地说,每个模型都把注意力集中在目前最难拟合的观测数据上。这样一来,在这个过程的最后,我们就获得了一个具有较低偏置的强学习器(我们会注意到,Boosting也有减小方差的效果)。和Bagging一样,Boosting也可以用于回归和分类问题。由于其重点在于减小偏置,用于Boosting的基础模型通常是那些低方差高偏置的模型。

    例如,如果想要使用树作为基础模型,我们将主要选择只有少许几层的较浅决策树。而选择低方差高偏置模型作为Boosting弱学习器的另一个重要原因是:这些模型拟合的计算开销较低(参数化时自由度较低)。实际上,由于拟合不同模型的计算无法并行处理(与Bagging不同),顺序地拟合若干复杂模型会导致计算开销变得非常高。

    一旦选定了弱学习器,我们仍需要定义它们的拟合方式和聚合方式。介绍两个重要的Boosting算法:自适应提升(adaboost)和梯度提升(gradient boosting)。

    简而言之,这两种元算法在顺序化的过程中创建和聚合弱学习器的方式存在差异。自适应提升算法会更新附加给每个训练数据集中观测数据的权重,而梯度提升算法则会更新这些观测数据的值。这里产生差异的主要原因是:两种算法解决优化问题(寻找最佳模型——弱学习器的加权和)的方式不同。

    基础通俗讲解集成学习算法

     

    2.1. 自适应adaboost

    在自适应adaboost中,我们将集成模型定义为L个弱学习器的加权和:

    其中为系数,为弱学习器寻找这种最佳集成模型是一个困难的优化问题。因此,我们并没打算一次性地解决该问题(找到给出最佳整体加法模型的所有系数和弱学习器),而是使用了一种更易于处理的迭代优化过程(即使它有可能导致我们得到次优解)。另外,我们将弱学习器逐个添加到当前的集成模型中,在每次迭代中寻找可能的最佳组合(系数、弱学习器)。换句话说,我们循环地将 定义如下:

    其中,和被挑选出来,使得是最适合训练数据的模型,因此这是对 的最佳可能改进。我们可以进一步将其表示为:

    基础通俗讲解集成学习算法

     

    其中,是给定模型的拟合误差,是损失/误差函数。因此,我们并没有在求和过程中对所有L个模型进行「全局优化」,而是通过「局部」优化来近似最优解并将弱学习器逐个添加到强模型中。

    更特别的是,在考虑二分类问题时,我们可以将 adaboost 算法重新写入以下过程:首先,它将更新数据集中观测数据的权重,训练一个新的弱学习器,该学习器重点关注当前集成模型误分类的观测数据。其次,它会根据一个表示该弱模型性能的更新系数,将弱学习器添加到加权和中:弱学习器的性能越好,它对强学习器的贡献就越大。

    因此,假设我们面对的是一个二分类问题:数据集中有N个观测数据,我们想在给定一组弱模型的情况下使用adaboost算法。在算法的起始阶段(序列中的第一个模型),所有的观测数据都拥有相同的权重1/N。然后,我们将下面的步骤重复L次(作用于序列中的L个学习器):

    • 用当前观测数据的权重拟合可能的最佳弱模型;
    • 计算更新系数的值,更新系数是弱学习器的某种标量化评估指标,它表示相对集成模型来说,该弱学习器的分量如何;
    • 通过添加新的弱学习器与其更新系数的乘积来更新强学习器计算新观测数据的权重,该权重表示我们想在下一轮迭代中关注哪些观测数据(聚和模型预测错误的观测数据的权重增加,而正确预测的观测数据的权重减小)。

    重复这些步骤,我们顺序地构建出L个模型,并将它们聚合成一个简单的线性组合,然后由表示每个学习器性能的系数加权。注意,初始adaboost算法有一些变体,比如LogitBoost(分类)或L2Boost(回归),它们的差异主要取决于损失函数的选择。

    基础通俗讲解集成学习算法

     

    3. 堆叠法(Stacking)

    堆叠法Stacking与Bagging和Boosting主要存在两方面的差异。首先,堆叠法通常考虑的是异质弱学习器(不同的学习算法被组合在一起),而Bagging和Boosting主要考虑的是同质弱学习器。其次,stacking堆叠法学习用元模型组合基础模型,而Bagging和Boosting则根据确定性算法组合弱学习器。

    正如上文已经提到的,堆叠法的概念是学习几个不同的弱学习器,并通过训练一个元模型来组合它们,然后基于这些弱模型返回的多个预测结果输出最终的预测结果。

    因此,为了构建Stacking模型,我们需要定义两个东西:想要拟合的L个学习器以及组合它们的元模型。例如,对于分类问题来说,我们可以选择KNN分类器、logistic回归和SVM作为弱学习器,并决定学习神经网络作为元模型。然后,神经网络将会把三个弱学习器的输出作为输入,并返回基于该输入的最终预测。所以,假设我们想要拟合由L个弱学习器组成的Stacking集成模型。我们必须遵循以下步骤:

    • 将训练数据分为两组;
    • 选择 L 个弱学习器,用它们拟合第一组数据;
    • 使 L 个学习器中的每个学习器对第二组数据中的观测数据进行预测;
    • 在第二组数据上拟合元模型,使用弱学习器做出的预测作为输入。

    在前面的步骤中,我们将数据集一分为二,因为对用于训练弱学习器的数据的预测与元模型的训练不相关。因此,将数据集分成两部分的一个明显缺点是,我们只有一半的数据用于训练基础模型,另一半数据用于训练元模型。

    为了克服这种限制,我们可以使用某种k-折交叉训练方法(类似于 k-折交叉验证中的做法)。这样所有的观测数据都可以用来训练元模型:对于任意的观测数据,弱学习器的预测都是通过在k-1折数据(不包含已考虑的观测数据)上训练这些弱学习器的实例来完成的。换句话说,它会在k-1折数据上进行训练,从而对剩下的一折数据进行预测。迭代地重复这个过程,就可以得到对任何一折观测数据的预测结果。这样一来,我们就可以为数据集中的每个观测数据生成相关的预测,然后使用所有这些预测结果训练元模型。

    基础通俗讲解集成学习算法

     

    十折交叉验证

    由于深度学习模型一般需要较长的训练周期,如果硬件设备不允许建议选取留出法,如果需要追求精度可以使用交叉验证的方法。

    十折交叉验证用来测试算法准确性。将数据集分成十份,轮流将其中九份作为训练数据,一份作为测试数据,进行试验。每次试验都会得出相应的正确率(或差错率)。十次的结果的正确率(或差错率)的平均值作为对算法精度的估计,一般还需要进行多次十折交叉验证(例如十次十折交叉验证),再求其均值,作为对算法准确性的估计。

    下面假设构建了十折交叉验证,训练得到十个CNN模型。

    基础通俗讲解集成学习算法

     

    那么在十个CNN模型可以使用如下方式进行集成:

    • 对预测的结果的概率值进行平均,然后解码为具体字符;
    • 对预测的字符进行投票,得到最终字符。

    深度学习中的集成学习

    此外在深度学习中本身还有一些集成学习思路的做法,值得借鉴学习:

    • 丢弃法Dropout
    • 测试集数据扩增TTA
    • Snapshot

    1. 丢弃法Dropout

    Dropout可以作为训练深度神经网络的一种技巧。在每个训练批次中,通过随机让一部分的节点停止工作。同时在预测的过程中让所有的节点都起作用。

    基础通俗讲解集成学习算法

     

    Dropout经常出现在在先有的CNN网络中,可以有效的缓解模型过拟合的情况,也可以在预测时增加模型的精度。加入Dropout后的网络结构如下:

    # 定义模型class SVHN_Model1(nn.Module):    def __init__(self):        super(SVHN_Model1, self).__init__()        # CNN提取特征模块        self.cnn = nn.Sequential(            nn.Conv2d(3, 16, kernel_size=(3, 3), stride=(2, 2)),            nn.ReLU(),            nn.Dropout(0.25),            nn.MaxPool2d(2),            nn.Conv2d(16, 32, kernel_size=(3, 3), stride=(2, 2)),            nn.ReLU(),            nn.Dropout(0.25),            nn.MaxPool2d(2),        )        #        self.fc1 = nn.Linear(32*3*7, 11)        self.fc2 = nn.Linear(32*3*7, 11)        self.fc3 = nn.Linear(32*3*7, 11)        self.fc4 = nn.Linear(32*3*7, 11)        self.fc5 = nn.Linear(32*3*7, 11)        self.fc6 = nn.Linear(32*3*7, 11)    def forward(self, img):        feat = self.cnn(img)        feat = feat.view(feat.shape[0], -1)        c1 = self.fc1(feat)        c2 = self.fc2(feat)        c3 = self.fc3(feat)        c4 = self.fc4(feat)        c5 = self.fc5(feat)        c6 = self.fc6(feat)        return c1, c2, c3, c4, c5, c6

    2. 测试集数据扩增TTA

    测试集数据扩增(Test Time Augmentation,简称TTA)也是常用的集成学习技巧,数据扩增不仅可以在训练时候用,而且可以同样在预测时候进行数据扩增,对同一个样本预测三次,然后对三次结果进行平均。

    基础通俗讲解集成学习算法

     

    def predict(test_loader, model, tta=10):   model.eval()   test_pred_tta = None   # TTA 次数   for _ in range(tta):       test_pred = []       with torch.no_grad():           for i, (input, target) in enumerate(test_loader):               c0, c1, c2, c3, c4, c5 = model(data[0])               output = np.concatenate([c0.data.numpy(), c1.data.numpy(),                  c2.data.numpy(), c3.data.numpy(),                  c4.data.numpy(), c5.data.numpy()], axis=1)               test_pred.append(output)       test_pred = np.vstack(test_pred)       if test_pred_tta is None:           test_pred_tta = test_pred       else:           test_pred_tta += test_pred   return test_pred_tta

    Snapshot

    本章的开头已经提到,假设我们训练了10个CNN则可以将多个模型的预测结果进行平均。但是加入只训练了一个CNN模型,如何做模型集成呢?

    在论文Snapshot Ensembles中,作者提出使用cyclical learning rate进行训练模型,并保存精度比较好的一些checkopint,最后将多个checkpoint进行模型集成。

    基础通俗讲解集成学习算法

     

    由于在cyclical learning rate中学习率的变化有周期性变大和减少的行为,因此CNN模型很有可能在跳出局部最优进入另一个局部最优。在Snapshot论文中作者通过使用表明,此种方法可以在一定程度上提高模型精度,但需要更长的训练时间。

    基础通俗讲解集成学习算法

     

    写到最后

    在不同的任务中可能会有不同的解决方案,不同思路的模型不仅可以互相借鉴,同时也可以修正最终的预测结果。

    在本次赛题中,可以从以下几个思路对预测结果进行后处理:

    • 统计图片中每个位置字符出现的频率,使用规则修正结果;
    • 单独训练一个字符长度预测模型,用来预测图片中字符个数,并修正结果。

    延伸阅读:

    • 书籍:《深度实践OCR:基于深度学习的文字识别》
    • 作者:刘树春 阿里巴巴本地生活研究院算法专家,前复旦七牛云联合实验室OCR算法负责人

    编辑:黄继彦

    校对:林亦霖

    —完—

    展开全文
  • 集成学习总结

    千次阅读 2019-01-05 23:05:26
    Boosting是一种基学习器间存在强依赖关系、必须串行生成的序列化方法。Bagging是一种基学习器间不存在强依赖关系、可同时生成的并行化方法,它的特点在“自助采样”。 想要得到泛化性能强的集成,基学习器应尽可能...
  • 机器学习入门笔记(六):集成学习

    千次阅读 多人点赞 2020-06-26 12:16:27
    集成学习(ensemble learning) 通过构建并结合多个学习器来完成学习任务,有时也被称为 多分类器系统(multi-classifier system)、基于委员会的学习(committee-based learning) 等。 这一章的内容大致如下: ...
  • 如何构造第一个分类(树桩) 先给每个样本一个初始的权重=1/样本总数 确定选用哪个特征:Gini系数 分别计算左右两边的纯度:1-(预测正确的比例)2-(预测错误的比例)2 然后加权平均 例如Chest Pa
  • Boosting是一族可将弱学习器提升为强学习器的算法。这族算法的工作机制类似:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注,...
  • 机器学习之提升方法Adaboost算法

    热门讨论 2021-12-19 10:52:58
    初始权重设为1/N,训练出弱学习器1,此时根据弱学习器1的学习误差率来更新样本权重,弱学习器1中误差高的样本权重变大。然后根据更新后的样本权值训练弱学习器2,依次进行迭代。 分类器权重: 分类器的权重是由最小...
  • 学习器------随机森林

    千次阅读 2017-07-31 10:42:02
    随机森林是一种多功能的机器学习算法,能够执行回归和分类的任务。同时,它也是一种数据降维手段,用于处理缺失值、异常值以及其他数据探索中的重要步骤,并取得了不错的成效。 1.随机森林拓扑图 由数据集生成多棵...
  • adaboost训练 之 分类训练原理

    万次阅读 2016-09-27 15:57:53
    其实,一个分类就是上述多个特征以CART的形式组成在一起,而训练一个最优分类过程就是寻找能使分类对所有样本判读误差最小的几个特征的各自合适阈值的过程。说起来有点拗口,分开来说就是针对样本的所有...
  • 前言:我们讲到了集成学习按照个体学习器之间是否存在依赖关系可以分为两类,第一个是个体学习器之间不存在强依赖关系,另一类是个体学习器之间存在强依赖关系。后者的代表算法就是是boosting系列算法。本文就对...
  • 作为监督学习的一种变体,多示例学习(MIL)试图从包中的示例中学习分类。在多示例学习中,标签与包相关联,而不是与单个示例相关联。包的标签是已知的,示例的标签是未知的。MIL可以解决标记模糊问题,但要解决带...
  • 深入理解GBDT回归算法

    千次阅读 多人点赞 2019-10-27 02:58:50
    微信公众号介绍: Microstrong(小强)同学主要研究机器学习、深度学习、计算机视觉、智能对话系统相关内容,分享在学习过程中的读书笔记!期待您的关注,欢迎一起学习交流进步! 我的知乎主页: ...
  • 机器学习 【 GBDT算法】 知识准备: arg 是变元(即自变量argument)的英文缩写。 arg min 就是使后面这个式子达到最小值时的变量的取值 arg max 就是使后面这个式子达到最大值时的变量的取值 例如 函数F(x,y): ...
  • 1.1. 决策树算法,是机器学习中的一个经典的监督式学习算法,被广泛应用F金融分析、生物学、天文学等多个领域 1.2. 本节首先介绍决策树的ID3、C4.5、 C5. 0、CART 等常用算法,然后讨论决策树的集成学习,包括装袋法...
  • 集成学习的目的是: 通过适当的学习方法将弱学习器转化为强学习器 方法要点为:优而不同 8.1个体与集成 1.集成学习概念和一般结构 集成学习概念 集成学习(多分类器系统/基于委员会的学习):生成一组个体学习器...
  • 集成学习算法

    千次阅读 2022-03-25 17:52:05
    2.Boosting算法(串行集成):从弱学习器开始加强,通过加权进行训练 ——数据权重 串行集成的步骤如下:假设一共有1000条数据,经过学习器A,预测正确的为950条,剩下错误的1000-950=50条输入到学习器B当中进行...
  •  集成学习器根据个体学习器的生成是否存在依赖关系,可以分为两类:个体学习器间存在强依赖关系,必须串行生成,代表算法是boosting系列算法;个体学习器之间不存在强依赖关系,可以并行生成,代表算法是bagging和...
  • 集成学习—Boosting、Bagging

    千次阅读 2018-09-28 17:45:53
    目录 集成学习 1、Boosting 1.1、AdaBoost 1.2、GBDT ...集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务,有时也被称为多分类器系统(multi-classifier system). 如下图,集成...
  • 深入理解GBDT二分类算法

    千次阅读 2020-02-28 20:04:54
    不使用的话就是第一轮迭代构建的弱学习器.如果没有先验的话就可以不用管 由于GBDT使用CART回归决策树。以下参数用于调优弱学习器,主要都是为了防止过拟合 max_feature:树分裂时考虑的最大特征数,默认为None,也...
  • 两者的主要区别是弱学习器权重的度量,SAMME使用了对样本集分类效果作为弱学习器权重,而SAMME.R使用了对样本集分类的预测概率大小来作为弱学习器权重。由于SAMME.R使用了概率度量的连续值,迭代一般比SAMME快,因此...
  • 转自:https://blog.csdn.net/hjimce/article/details/54411244
  • 个体学习器组合在一起形成的集成学习,常常能够使得泛化性能提高,这对于“弱学习器”的提高尤为明显。弱学习器指的是比随机猜想要好一些的学习器。在进行集成学习的时候,我们希望我们的基学习器应该是好而不同,这...
  • 集成学习(Ensemble Learning)

    千次阅读 2018-08-31 17:30:31
     集成学习是机器学习中一个非常重要且热门的分支,是用多个分类构成一个强分类,其哲学思想是“三个臭皮匠赛过诸葛亮”。一般的分类可以由决策树,神经网络,贝叶斯分类,K-近邻等构成。这些算法可以是...
  • Adaboost算法学习

    千次阅读 2015-12-18 14:38:25
    也正因为如此,它不需要任何关于弱学习器性能的先验知识,而且和Boosting算法具有同样的效率,所以在提出之后得到了广泛的应用。 首先,Adaboost是一种基于级联分类模型的分类器。级联分类模型可以用下图表示: ...
  • 一、boosting与bagging: (1)bagging:从原始数据中随机抽样得到多个同样大小的数据...(2)boosting:用所有的数据去训练基学习器,个体学习器之间存在依赖关系,每一个学习器都是基于之前训练的学习器的结果,集中
  • 集成学习 1.什么是Boosting 2.什么是Bagging 3.Bagging和Boosting的区别 ...集成学习通过构建并结合多个学习器来完成学习任务,有时也被称为多分类器系统(multi-抽拉式私服而 system)、基于委员会的学习(commit...
  • 以上是分类和强分类的全部内容,在云栖社区的博客、问答、云栖号、人物、课程等栏目也有分类和强分类的相关内容,欢迎继续使用右上角搜索按钮进行搜索opencv ,以便于您获取更多的相关知识。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 104,262
精华内容 41,704
关键字:

弱学习器