sklearn学习07——集成学习
sklearn学习07——集成学习
- 前言
- 一、集成学习
- 1.1、什么是集成学习?
- 1.2、Boosting 算法
- 二、AdaBoost算法及实现
- 2.1、AdaBoost算法
- 2.2、调sklearn库实现Adaboost算法
- 总结
前言
集成学习是目前各类竞赛(比如Kaggle,天池等)和工程中应用最广泛的模型提升方法。它确实也取得了不错的效果,在保证准确度的同时也提升了模型防止过拟合的能力。下面我们通过这篇文章了解一下集成学习的原理、具体有哪些方法、以及对其中一种方法 AdaBoost 的展开,同样,使用sklearn实现此方法达到深入理解的效果。
一、集成学习
1.1、什么是集成学习?
集成学习方法是指组合多个模型,以获得更好的效果,使集成的模型具有更强的泛化能力。对于多个模型,如何组合这些模型(就是下图中的个体学习器),主要有Boosting、Bagging、Stacking等几种方法。
集成学习大致过程如下图:
集成学习就是组合这里的多个弱监督模型以期得到一个更好更全面的强监督模型,集成学习潜在的思想是即便某一个弱分类器得到了错误的预测,其他的弱分类器也可以将错误纠正回来。
根据个体学习器的生成方式,将集成学习分为两类:
- 个体学习器间存在强依赖关系、必须串行生成的序列化方法,如 Boosting。
- 个体学习器间不存在强依赖关系、可同时生成的并行化方法,如 Bagging 和 “随机森林”(Random Forest)。
下面展开Boosting算法以及这一族中代表性的算法:AdaBoost算法。
1.2、Boosting 算法
Boosting是一族可将弱学习器提升为强学习器的算法。
该算法工作机制:
(1)从初始训练集训练出一个基学习器;
(2)根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续得到更多关注;
(3)基于调整后的样本分布来训练下一个基学习器;
(4)重复上述步骤,直到基学习器数目达到事先指定的值 T ;
(5)最后,将这 T 个基学习器进行加权结合。
即采用同一基模型,在样本的不同子集上进行训练,从而得到对应的多个不同的具体模型。
Boosting族算法最著名的代表算法是AdaBoost算法。
二、AdaBoost算法及实现
2.1、AdaBoost算法
AdaBoost(Adaptive boosting)是一种迭代算法。其核心思想是:针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。
Adaboost算法本身是通过改变数据分布来实现的,它根据每次训练集之中每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值。将修改过权值的新数据集送给下层分类器进行训练,最后将每次得到的分类器最后融合起来,作为最后的决策分类器。
AdaBoost算法如何做到在一次次迭代过程中,对先前基学习器做错的训练样本更加关注呢?
答:刚开始训练时对每一个训练样本赋相等的权重,然后用该算法对训练集训练 t 轮,每次训练后,对训练失败的训练例赋以较大的权重,也就是让学习算法在每次学习以后更注意学错的样本,从而得到多个预测函数。
此外,对于基分类器的要求是:要有 多样性,例如:一个判断是否为男性的任务,弱分类器1侧重从鼻子、耳朵这些特征判断是否是男人,分类器2侧重脸和眼睛等等,把这些分类器结合起来就有了所有用来判断是否男性的特征,并且adaboost还可以给每个基分类器赋值不同的权重,比如从脸比鼻子更能判断是否为男性,就可以把分类器2的权重调高一些,这也是adaboost需要学习的内容。
AdaBoost算法流程:
这里的公式推导不再详细解释,如果想深入研究,可以参考 周志华-西瓜书 + 谢文睿-南瓜书。
2.2、调sklearn库实现Adaboost算法
代码如下:
from sklearn.ensemble import AdaBoostClassifier
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn import metricsiris = datasets.load_iris()
X = iris.data
y = iris.targetX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)print(f"训练数据量:{len(X_train)},测试数据量:{len(X_test)}")# 定义模型
model = AdaBoostClassifier(n_estimators=50,learning_rate=1.5)
# 训练
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
acc = metrics.accuracy_score(y_test, y_pred) # 准确率
print(f"准确率:{acc:.2}")
总结
关于集成学习的方法,这里只介绍了一种Boosting算法族中一个代表性的——AdaBoost算法,除此之外,Bagging算法是另一类的集成学习方法,Bagging是并行式集成学习方法最著名的代表。随机森林(Random Forest,RF)是Bagging的一个扩展变体。RF在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择,其优点是简单、容易实现、计算开销小;有兴趣也可以深入研究。
sklearn学习07——集成学习相关推荐
- 集成学习-Boosting集成学习算法GBDT
GBDT算法的核心为:先构造一个(决策)树,然后不断在已有模型和实际样本输出的残差上再构造一颗树,依次迭代. 目录 Decistion Tree(决策树) Gradient Boosting(梯度提升 ...
- Datawhale组队学习之集成学习——Task 6 Boosting
Datawhale组队学习之集成学习--Task 6 Boosting 一.Boosting方法的基本思路 二.Adaboost算法 1.Adaboost基本原理 2.使用sklearn对Adaboo ...
- Java学习-07 IO学习
Java学习-07 IO学习 I : 即input,代表读取.O:即output,代表输出. 1.File 主要字段: 示例: System.out.println(File.pathSeparato ...
- 深度学习网络大杀器之Dropout(II)——将丢弃学习视为集成学习之我见
原帖:阿里云云栖社区: https://yq.aliyun.com/articles/110002 关于dropout的分析,可以见博主的另外一篇文章: <深度学习网络大杀器之Dropout-- ...
- Datawhale组队学习之集成学习——Task 8 案例学习
集成学习案例二 (蒸汽量预测) 背景介绍 火力发电的基本原理是:燃料在燃烧时加热水生成蒸汽,蒸汽压力推动汽轮机旋转,然后汽轮机带动发电机旋转,产生电能.在这一系列的能量转化中,影响发电效率的核心是锅炉 ...
- DataWhale集成学习Task15 集成学习案例二 (蒸汽量预测)
集成学习案例二 (蒸汽量预测) 文章目录 集成学习案例二 (蒸汽量预测) 1 整体思路 1.1 整体步骤 1.2 评价指标 2 实战演练 导入package 加载数据 探索数据分布 特征工程 模型构建 ...
- 多核学习、多视图学习、多任务学习和集成学习的区别和联系
多核学习既可以用在多任务学习,也可以用在多视图学习,也有研究同时对多任务和多视图同时采用多核的,目前已经有通用多任务多核学习方法.如果将多核用在多任务学习,相当于不同任务共享子空间的同时,还有各自特有 ...
- 机器学习集成模型学习——Stacking集成学习(五)
stacking集成模型示例如下: stacking一般由2层堆叠构成 Stacking集成算法思路 上图为整体流程,思路如下: 把原始数据切分成两部分:训练集D-train与测试集D-test,训练 ...
- 集成学习-Bagging集成学习算法随机森林(Random Forest)
随机森林算法属性 随机森林顾名思义,是用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵决策树之间是没有关联的.在得到森林之后,当有一个新的输入样本进入的时候,就让森林中的每一棵决 ...
最新文章
- 我和大师Jeffrey Richter相约@北京
- 2亿美元投入+软硬件新服务!华为加速构建计算产业生态,侯金龙:要与开发者共成长...
- php new redis错误,解决PHP Redis扩展无法加载的问题(zend_new_interned_string in Unknown on line 0)...
- 【求解】未定义的析构函数
- 输入字符串统计字符串中每个字符出现的次数
- ExecuteScalar
- 用NuGet掌管你的Vi“.NET研究”sual Studio扩展
- 为什么那么多人转型做大数据
- xilinx7中管脚mrcc和srcc_Xilinx 7系列FPGA收发器架构之硬件设计指导(一)
- python读取配置文件获取所有键值对_python读取配置文件 变量 ConfigParser模块
- 生物界“AlphaGo”来了!蛋白结构预测AlphaFold大胜传统人类模型
- Java调用R与Python
- synchronize——对象锁和类锁
- 苹果中国官网新增蚂蚁花呗 24 期分期免息服务
- 树形结构的数据库表设计
- 2020游戏主播最爱五款蓝牙耳机推荐,低延迟吃鸡王者顺畅无压力
- firefox插件推荐
- Web Atoms Crack,JavaScript 桥接器
- 泛函分析的几个空间和平行四边形法则
- 185-186 抽象类+接口案例/运动员和教练
热门文章
- python canopen_CAN与CANOPEN在电机控制中的应用
- 300M无线路由器 TL-WR842N - TP-LINK官方网站
- 华为matepad切换电脑模式_华为matepadpro可以当电脑用吗,华为matepad pro怎么切换电脑模式...
- 疯狂天才乔治·霍兹:17岁黑掉苹果,22岁搞垮索尼,还是特斯拉、谷歌最可怕的对手!
- delphi tclientdataset字段显示type mismatch
- UE4_第三方库的引用
- R语言升级版本和迁移老版本中的包到新版本上的一些问题
- ruby的DIR.pwd
- html5 u3m8,U3M8短语.doc
- Netfilter IPv4日志