关键词:
如果需要完整代码可以关注下方公众号,后台回复“代码”即可获取,阿光期待着您的光临~
文章目录
- 一、集成学习
- 二、AdaBoost算法
- 1.Boosting提升方法
- 2.AdaBoost算法思想
- 3.AdaBoost原理解释
- 4.构造损失函数,求解参数
- 5.前向分步算法
2021人工智能领域新星创作者,带你从入门到精通,该博客每天更新,逐渐完善机器学习各个知识体系的文章,帮助大家更高效学习。
一、集成学习
我们平常使用的大多数模型都为单模型方式,有时单模型方式可能会造成误判或者过拟合的现象,所以我们就像能不能有一种方式可以融合多个模型,这就产生了集成学习的概念。
集成学习通过构建多个分类器来完成学习任务,有时被称为多分类器系统,它是基于多个分类器共同完成模型的生成,集成学习一般情况为模型内部集成了多个小的模型,有时也叫做个体学习器,举个例子,我们的决策树是一个过拟合非常严重的模型,所以只使用一棵树进行拟合数据不太靠谱,所以我们考虑使用多颗树进行建模,模型的最终结果参考多颗树模型的结果。
集成学习有种3个臭皮匠顶个诸葛亮的感觉,比如对于一个复杂的事情,如果我们只听取一个人的意见往往可能做出错误的判断,所以我们需要参考多个人的意见。
一般情况下集成学习内部的学习器都为弱学习器,所谓的弱学习器就是单独进行建模的准确率不是特别高,但是要高于盲猜,强学习器就是一般不适用集成学习,就自己建模也会产生很好的拟合效果,但是大多数情况下,我们集成学习内部使用的是弱学习器,而不是强学习器,这是因为强学习器往往会产生过拟合的现象,如果又是集成学习,多个强学习器共同作用,那么过拟合则为更加严重,所以我们使用弱学习器作为基分类器,我们希望的是每个基分类器能够学习到数据的不同特征,术业有专攻。
比如我们组建一支队伍时,我们希望每个队员都可以有自己较为厉害的能力,而不是每个人都掌握相同的能力,我们的集成学习算法也是如此,我们希望每个基分类器能够学习数据不同特征,然后进行组合这些分类器,然后就可以产生一个强分类器来拟合整个数据集。
如果集成模型要获得好的性能,需要我们每个个体学习器应该有各自的特点,即多样性。
现在目前的集成学习方法大概分为两类:
- Boosting:个体学习器之间存在强依赖关系、必须串行生成的序列化方法,典型算法:AdaBoost、GBDT
- Bagging:个体学习器不存在强依赖关系、可同时生成的并行化方法,典型算法:随机森林
本篇着重讲解采用Boosting提升方法的AdaBoost。
二、AdaBoost算法
1.Boosting提升方法
对于分类问题而言,我们的集成学习方式采用了多个基学习器,我们会使用这些基学习器先去拟合数据,然后组合这些弱分类器,构成一个强分类器,然而在学习基学习器的过程中,我们希望每个基学习器尽可能不同,如果每个基学习器学习的模型相似,那么我们的集成学习就没什么意义了,所以我们要让每个基学习器尽可能学习到不同的数据。
那么对于Boosting提升算法就会衍生两个问题:
一是如何训练不同的分类器,二是如何组合这些弱分类器组成强分类器。
对于第一个问题,提升算法采用的是更改数据权值(概率分布),你比如说我们使用第一个基学习器学习样本时,肯定会有分错的样本数据,所以我们会加大分错样本的权重,降低分类正确的样本权重,然后让下个分类器学习时更加注重上次分类错误的数据,我们的提升方法就是妙在这里,能够不断修正分类错误样本的权值,使我们的模型能够根据分类重点重视分类错误的数据,其实适当增大样本的概率和增多该样本的数量效果一样,错误样本概率越大,我们后面的模型就会越重视它,而如果错误样本越多,那么我们学习器学习更多的数据都是上次分错的样本,其实本质是一样的。
对于第二个问题,如何组合这些弱分类器进而组成一个强分类器,Boosting一般采用加权多数表决的方式,它会线性组合按照一定的权重组合多个弱分类器,误差率小的弱分类器的权重会很大,使其在总的表决中起较大的作用。
2.AdaBoost算法思想
假设我们数据为二分类,类别为+1,-1,AdaBoost的设计思想就是从每轮的训练数据中学习一个基学习器,最终将这些弱分类器组合为一个强分类器。
算法流程:
1.初始化每个样本的权重,第一次训练时每个样本的权重相同都为
2.对m=1,2,3,…,m ,m对应弱分类器个数
(a)使用带有权重的训练集去训练弱分类器
(b)计算 弱分类器在训练集上的误差率
(c)计算 弱分类器的权重
(d)根据分类正确和分类错误样本更新样本权重
3.由弱分类器线性组合为一个强分类器
3.AdaBoost原理解释
上面我们大体概括了AdaBoost整个算法流程,接下来我们具体讲解每部为什么这么做。
首先针对于第一步我们初始化了整个样本权重,由于这是第一个学习器需要学的,所以我们不需要修正权重,只需要让每个样本权重相等即可,即使用
第二步是要训练m个基学习器,训练每个基学习器的大概流程为:
1.训练基学习器
2.计算该学习器在训练数据上的误差,用于确定模型线性组合的权重
3.根据误差率计算模型线性组合的权重
4.更新新的学习器需要训练的样本权重,增大上一个学习器分错的样本权重
首先训练基学习器就不用多说了,使用不同的基学习器学习方式不同,和个体学习一样。
我们可以看到计算误差的式子为:
我们就是计算分类错误样本的概率,也就是分类错误样本所对应的权重,我们知道一个模型的误差率越小,该模型的可信程度越大,他们两个成负相关的关系,所以我们定义该分类器的权重为:
由该式我们可以看到,模型的误差率越大,模型的权重
对于上面我们训练好了第一个基学习器,而对于该学习器来说,我们肯定会有分类错误的样本的,所以我们希望更新样本的权重,用于下一个学习器进行训练,我们要使第一个分类器分类错误的样本数据的权重增大,分类正确的适当减小。
我们先不看分母,他为一个常数,用于规范化的,看指数括号内的 :
而我们的权重 为大于0的数,所以分类正确时指数函数的幂数为小于0的数, 函数当x小于0时,y小于1,所以此时的 小于1,那么对应该样本之前的权重
而如果分类错误的话,对应的y大于1,所以此时新的样本权重会被放大。
分母上除以 是为了更新完每个样本的权重后,保持每个样本权重之和为1。
训练好m个分类器后,我们获得了这m个分类器和相对应的权重,之后我们就可以使用线性组合的方式将多个弱分类器组成一个强分类器。
这里还有个注意的地方就是,我们每次更新样本的权重之和为1,而这些若分类器的权重之和是不为1的。
4.构造损失函数,求解参数
针对于整个模型的算法流程已经设计好了,接下来的问题就是如何求出每个弱分类器的参数,以及各个的权重,我们第一时间就是想到首先构造一个模型整体的损失函数,其次使用优化方法对该损失函数进行求解,一般对于连续值使用均方误差作为损失函数,对于分类问题使用交叉熵,然后优化方法使用梯度下降法进行求解各个参数,但是AdaBoost算法没有使用该方法,原因如下:
如果要构造损失函数,一般形式为:
其中的
所以我们考虑使用一种新的方式进行优化:前向分布算法。
5.前向分步算法
上面说过使用梯度下降单次迭代需要优化的参数太多不容易优化,所以我们想每次优化的参数能不能减少一点,一次不优化那么多的参数,显然可以,正巧我们的AdaBoost算法是串行模型组合,所以我们考虑能不能一个一个学习器模型进行学习,而不是直接学习总的损失函数。
因为AdaBoost是加法模型,所以我们能够从前向后,每一步只学习一个基函数及其系数,逐步逼近优化目标函数式,这样就可以简化优化的复杂程度,每次优化的参数就可以少很多。
我们每一步只需要优化如下的损失函数:
算法流程:
1.初始化
2.对m=1,2,…,M
(a)极小化损失函数
(b)更新模型
3.得到加法模型
其实这个算法的意思就是首先定义 为0,然后训练第一个分类器,然后求解第一个模型的最优参数,然后将这个弱分类器模型更新到整个模型
这样,前向分步算法将同时求解从 到M所有参数 的优化问题简化为逐次求解各个
写在最后
一键三连”哦!!!
机器学习集成学习(boosting)——梯度提升树(gbdt)算法(理论+图解+公式推导)
机器学习算法:boosting集成原理和实现过程
学习目标知道boosting集成原理和实现过程了解GBDT实现流程了解XGBoost实现流程1.boosting集成原理1.1什么是boosting 随着学习的积累从弱到强简而言之:每新加入一个弱学习器,整体能力就会得到提升代表算法:Adaboost,... 查看详情
机器学习集成学习(boosting)——提升树算法(bdt)(理论+图解+公式推导)
...创作者,带你从入门到精通,该博客每天更新,逐渐完善机器学习各个知识体系的文章,帮助大家更高效学习。Boosting提升树Boosting思想主要是采用将模型进行串行组合的思想,利用多个弱学习器来学习我们的 查看详情
机器学习集成学习(boosting)——adaboost提升算法(理论+图解+公式推导)
...创作者,带你从入门到精通,该博客每天更新,逐渐完善机器学习各个知识体 查看详情
机器学习:集成方法之bagging和boosting(代码片段)
集成方法(ensemblemethod)通过组合多个学习器来完成学习任务,颇有点“三个臭皮匠顶个诸葛亮”的意味。基分类器一般采用的是弱可学习(weaklylearnable)分类器,通过集成方法,组合成一个强可学习(strongly... 查看详情
5.集成学习(ensemblelearning)gbdt
1.前言如果读了我之前的几篇集成学习的博文,相信读者们已经都对集成学习大部分知识很有了详细的学习。今天我们再来一个提升,就是我们的集大成者GBDT。GBDT在我们的Kaggle的比赛中基本获得了霸主地位,大部分的问题GBDT都... 查看详情
集成学习算法总结----boosting和bagging
1、集成学习概述1.1集成学习概述集成学习在机器学习算法中具有较高的准去率,不足之处就是模型的训练过程可能比较复杂,效率不是很高。目前接触较多的集成学习主要有2种:基于Boosting的和基于Bagging,前者的代表算法有Adab... 查看详情
机器学习模型的集成方法总结:bagging,boosting,stacking,voting,blending(代码片段)
...解惑答疑1、Voting2、Bagging3、Boosting4、Stacking5、Blending总结机器学习是人工智能的一个分支领域,致力于构建自动学习和自适应的系统,它利用统计模型来可视化、分析和预测数据。一个通用的机器学习模型包括一个数据... 查看详情
机器学习-gbdt算法理解
GBandAdaBoost梯度提升(Gradientboosting)是一种用于回归、分类和排序任务的机器学习技术,属于Boosting算法族的一部分。Boosting是一族可将弱学习器提升为强学习器的算法,属于集成学习(ensemblelearning)的范畴。Boosting方法基于 查看详情
机器学习集成学习算法(代码片段)
目录1集成学习算法简介1.1什么是集成学习1.2机器学习的两个核心任务1.3集成学习中boosting和Bagging1.4小结2Bagging和随机森林2.1Bagging集成原理2.2随机森林构造过程2.3包外估计2.3.1包外估计的定义2.3.2包外估计的用途2.4随机森林api介绍2... 查看详情
机器学习:集成方法之bagging和boosting(代码片段)
集成方法(ensemblemethod)通过组合多个学习器来完成学习任务,颇有点“三个臭皮匠顶个诸葛亮”的意味。基分类器一般采用的是弱可学习(weaklylearnable)分类器,通过集成方法,组合成一个强可学习(strongly... 查看详情
机器学习bagging与boosting算法原理小结
...; 集成学习(EnsembleLarning)本身不是一个单独的机器学习算法,是通过构建并结合多个机器学习器来完成学习任务的思想。通常的集成学习的方法指的是同质个体学习器。同质个体学习器使用最多的模型是CART决策树和... 查看详情
笔记︱集成学习ensemblelearning与树模型bagging和boosting
...锏?》基本内容与分类见上述思维导图。 . .一、机器学习元算法随机森林:决策树+bagging=随机森林 梯度提升树:决策树Boosting=GBDT .1、随机森林博客: R语言︱决策树族——随机森 查看详情
机器学习—集成学习
1、boosting与bagging的区别: (1)bagging:从原始数据中随机抽样得到S个同样大小的数据集,来训练S个基学习器,各学习器之间互不依赖。是一种并行的方法。 各分类器的权重都是相等的。分类结果是用这S个分类... 查看详情
集成学习注意要点
集成学习是一种机器学习的框架,它会创建多个子模型,通过集成这些子模型的预测结果共同提升学习效果。集成学习主要分为三种类型:bagging、boosting和stacking。集成学习中Bagging方法是将训练集自动抽样,产生出用于构建子模... 查看详情
机器学习笔记之四adaboost算法
本文结构:什么是集成学习?为什么集成的效果就会好于单个学习器?如何生成个体学习器?什么是Boosting?Adaboost算法?什么是集成学习集成学习就是将多个弱的学习器结合起来组成一个强的学习器。这就涉及到,先产生一组&lsq... 查看详情
集成学习(ensemblelearning)
集成学习是机器学习中一个非常重要且热门的分支,是用多个弱分类器构成一个强分类器,其哲学思想是“三个臭皮匠赛过诸葛亮”。一般的弱分类器可以由决策树,神经网络,贝叶斯分类器,K-近邻等构成。已经有学者理论上... 查看详情
2.集成学习(ensemblelearning)bagging
...赖关系,Stacking的特点是在多个学习器的基础上再加一个机器学习算法进行预测。2.Bagging原理Bagging的原理可以通过下图清楚的看到。Bagging的原理是随机采样,就是在我们的 查看详情