网站首页 > 技术文章 正文
集成学习的思想
在机器学习的有监督学习算法中,我们的目标是学习出一个稳定的且在各个方面表现都较好的模型,但实际情况往往不这么理想,有时我们只能得到多个有偏好的模型(弱监督模型,在某些方面表现的比较好)。集成学习就是组合这里的多个弱监督模型以期得到一个更好更全面的强监督模型,集成学习潜在的思想是即便某一个弱分类器得到了错误的预测,其他的弱分类器也可以将错误纠正回来。
集成方法是将几种机器学习技术组合成一个预测模型的元算法,以达到减小方差(bagging)、偏差(boosting)或改进预测(stacking)的效果。
集成学习在各个规模的数据集上都有很好的策略
- 数据集大:划分成多个小数据集,学习多个模型进行组合
- 数据集小:利用Bootstrap方法(Boostrap是一种有放回的抽样方法,其抽样策略是简单的随机抽样)进行抽样,得到多个数据集,分别训练多个模型再进行组合
集成方法可分为两类:
- 序列集成方法:参与训练的基础学习器按照顺序生成(例如 AdaBoost)。序列方法的原理是利用基础学习器之间的依赖关系。通过对之前训练中错误标记的样本赋值较高的权重,可以提高整体的预测效果。
- 并行集成方法:参与训练的基础学习器并行生成(例如 Random Forest)。并行方法的原理是利用基础学习器之间的独立性,通过平均可以显著降低错误。
集成学习中需要解决的两个问题:
- 1)怎么训练每个算法?
- 2)怎么融合每个算法?
下面简要介绍一下集成学习的几个方法:Bagging,Boosting以及Stacking。
Bagging(bootstrap aggregating,装袋)
Bagging即套袋法,又叫Boostrap Aggregating,其中,bootstrap称为自助法,它是一种有放回的简单随机抽样方法,目的为了得到统计量的分布以及置信区间
1、算法的思想:
对于数据集训练多个模型
- 对于分类问题,可以采用投票的方法,选择票数最多的类别作为最终的类别
- 对于回归问题,可以采用取均值的方法,取得的均值作为最终的结果
其算法过程如下:
- A)从原始样本集中抽取训练集。每轮从原始样本集中使用Bootstraping的方法抽取n个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中)。共进行k轮抽取,得到k个训练集。(k个训练集之间是相互独立的)
- B)每次使用一个训练集得到一个模型,k个训练集共得到k个模型。(注:这里并没有具体的分类算法或回归方法,我们可以根据具体问题采用不同的分类或回归方法,如决策树、感知器等)
- C)对分类问题:将上步得到的k个模型采用投票的方式得到分类结果(所有模型的重要性相同,基于平均的ensemble)
- 对回归问题,计算上述模型的均值作为最后的结果(所有模型的重要性相同,基于投票的ensemble)
2、为了让更好地理解bagging方法,这里提供一个例子:
X 表示一维属性,Y 表示类标号(1或-1)测试条件:当x<=k时,y=?;当x>k时,y=?;k为最佳分裂点
下表为属性x对应的唯一正确的y类别:
现在进行5轮随机抽样,结果如下:
每一轮随机抽样后,都生成一个分类器,然后再将五轮分类融合,如下所示:
对比"符号"和"实际类",我们可以发现:在该例子中,Bagging使得准确率可达90%
3、基于Bagging思想的学习算法:
随机森林算法就是基于Bagging思想的学习算法。在随机森林中,集成中的每棵树都是由从训练集中抽取的样本(即 bootstrap 样本)构建的。另外,与使用所有特征不同,这里随机选择特征子集,从而进一步达到对树的随机化的目的。因此,随机森林产生的偏差略有增加,但是由于对相关性较小的树计算平均值,估计方差减小了,导致模型的整体效果更好。
4、总结bagging方法:
- ① Bagging通过降低基分类器的方差,改善了泛化误差
- ② 其性能依赖于基分类器的稳定性;如果基分类器不稳定,bagging有助于降低训练数据的随机波动导致的误差;如果稳定,则集成分类器的误差主要由基分类器的偏差引起
- ③ 由于每个样本被选中的概率相同,因此bagging并不侧重于训练数据集中的任何特定实例
Boosting
在上述的Bagging方法中,其特点在于随机化抽样,通过反复的抽样训练新的模型,最终在这些模型的基础上取平均。而在对多个模型的预测结果做加权平均则是通过加法模型将弱分类器进行加权的线性组合,这就是Boosting的核心思想。
1、算法的思想:
在Boosting算法中,初始化时对每个训练样本赋予相等的权重,如1/n,然后用该学习算法对训练集训练G轮,每次训练后,对训练失败的训练样本赋予更大的权重,也就是让学习算法在后续的学习中几种对比较难学的训练样本进行学习,从而得到一个预测函数序列 {h_1,h_2,...,h_G},其中每个h_i 都有一个权重,预测效果好的预测函数的权重较大。最终的预测函数为 H 对于分类和回归问题可采用如下的两种方法:
- 分类问题:有权重的投票方式
- 回归问题:加权平均
2、基于Boosting思想的学习算法:
AdaBoost和GBDT(Gradient Boosting Decision Tree)是基于Boosting思想的两个最著名的算法
- AdaBoost(Adaptive boosting):刚开始训练时对每一个训练例赋相等的权重,然后用该算法对训练集训练G轮,每次训练后,对训练失败的训练例赋以较大的权重,也就是让学习算法在每次学习以后更注意学错的样本,从而得到多个预测函数。通过拟合残差的方式逐步减小残差,将每一步生成的模型叠加得到最终模型。
- GBDT(Gradient Boost Decision Tree),每一次的计算是为了减少上一次的残差,GBDT在残差减少(负梯度)的方向上建立一个新的模型。
3、Bagging,Boosting二者之间的区别:
- 1)样本选择上:
Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。
Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。
- 2)样例权重:
Bagging:使用均匀取样,每个样例的权重相等
Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。
- 3)预测函数:
Bagging:所有预测函数的权重相等。
Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。
- 4)并行计算:
Bagging:各个预测函数可以并行生成
Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。
————————————————————————————————分界线
个人感觉下面的这个可以简要地概括集成学习,对于集成学习中使用的不同方法可以见上面的见解。同时这个是针对于分类的,针对回归也一样,将下面的"分"改成"回归"理解
集成学习在分类方面的特点:
- ① 将多个分类方法聚集在一起,以提高分类的准确率。(这些算法可以是不同的算法,也可以是相同的算法。)
- ② 集成学习法由训练数据构建一组基分类器,然后通过对每个基分类器的预测进行投票来进行分类
- ③ 严格来说,集成学习并不算是一种分类器,而是一种分类器结合的方法。
- ④ 通常一个集成分类器的分类性能会好于单个分类器
- ⑤ 如果把单个分类器比作一个决策者的话,集成学习的方法就相当于多个决策者共同进行一项决策。
参考:https://www.cnblogs.com/zongfa/p/9304353.html
参考:https://blog.csdn.net/google19890102/article/details/46507387
猜你喜欢
- 2024-10-01 机器学习100天-Day1803随机森林 随机森林算法详解
- 2024-10-01 「机器学习」自动调参器设计实现 自动调参法
- 2024-10-01 boosting 原理 boost模型原理
- 2024-10-01 机器学习入门精讲,这40个知识点不可错过(一)
- 2024-10-01 Python 数据分析实例——集成方法
- 2024-10-01 机器学习入门精讲,这40个知识点不可错过(1)
- 2024-10-01 集成学习,集成算法 Ensemble methods
- 2024-10-01 人工智能科普|机器学习入门精讲,这40个知识点不可错过(1)
- 2024-10-01 「五分钟机器学习」集成学习——Ensemble Learning
- 2024-10-01 Ensemble Learning(集成学习) 集成学习ensemble learning
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)