sklearn快速入门教程:(五)集成学习
sklearn快速入门教程–(五)集成学习
一、集成学习简述
集成学习是目前各类竞赛和工程中应用最广泛的模型提升方法。比如在kaggle中就有关于集成学习的介绍(Kaggle模型融合原文)。这里所谓的模型融合实际上主要就是集成学习方法。
常见的集成学习有以下几种:
- Boosting
- Bagging
- Stacking
其中boosting和bagging应用最多。比如目前流行的xgboost就是(gradient)boosting的一种,而random forest则是bagging的一种。
二、集成学习的两种主要思路
各种集成学习的思路不尽相同,尤其对于初学者通常一看到集成学习的理论都会很头疼。那么要快速学会集成学习的使用,就先要对其关键的思路有所了解。
顾名思义,集成学习是将多个模型放在一起,通过某种方式将其组合起来,从而得到一个统一的预测模型。自然地,在集成之前就要有基本的模型用于集成。目前所用的集成学习模式主要分为两种:
- 采用同一基模型,在样本的不同子集上进行训练,从而得到对应的多个不同的具体模型。这类学习方法的代表就是boosting, bagging。
- 采用多种基模型,在同一样本上进行训练,将多个模型组合起来得到具体模型。voting和stacking都是采用这类方式。
明白这一点之后其实就很容易分析sklearn中的对应方法了,对单一模型对应的方法,它的语法通常是这样:
ensemble_method(estimator,**args)
这里estimator
是指sklearn中的基模型,比如Tree
,LinearRegression
等都属于这一类型,而**args
则表示其它参数。结合上一教程中的内容不难想到,这个estimator
实际上就是一种通用模式,也就是说它只要属于这一类型,其它的方面就可以完全自由设定。比如我想用一个SVC
来进行集成,同时又想指定它的核函数,那么就可以直接将SVC(kernel='rbf')
传入函数。这种灵活的操作方式会给我们各类改进和提升提供便利。
而对于多个模型通常是这样:
ensemble_method(estimators,**args)
注意这里是estimators
,也就是多个模型。那么很自然地想到多个模型肯定是以集合的形式输入。事实上在sklearn中,这里是用列表表示多个模型,而每个模型则由其名称和实体类型来表示。比如:
estimators = [('lr', RidgeCV()),('svr', LinearSVR(random_state=42))]
可想而知,如果有更多的模型,则直接在列表中继续加入即可。
三、单一模型集成 - - 以Adaboost为例
这里我们以iris
数据集作为样本,将100个Logistic Regression模型用Adaboost集成起来。
from sklearn.model_selection import cross_val_score
from sklearn.datasets import load_iris
from sklearn.ensemble import AdaBoostClassifier
from sklearn.linear_model import LogisticRegressionX, y = load_iris(return_X_y=True)
clf = AdaBoostClassifier(LogisticRegression(), n_estimators=100)
clf.fit(X,y)
clf.predict(X)
运行结果:
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2,2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 1, 1, 2, 2, 2, 2,2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2])
可以看到,在sklearn中实现这样的集成学习是非常简单的,只需要一句代码即可。训练和预测和直接使用机器学习模型是完全一样的语法。这一点也是sklearn中一个亮点,它尽最大可能减小了程序员去背工具模式的工作,从而可以将更多精力集中在问题本身。
四、多模型集成 - - 以Voting例
Voting是一种多模型集成的常用方法,它先将多个模型进行投票,再按照投票结果对模型进行组合。这里我们以iris数据集为基础,将Logistic Regression, 高斯朴素贝叶斯和随机森林进行集成。
from sklearn import datasets
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import GaussianNB
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import VotingClassifieriris = datasets.load_iris()
X, y = iris.data[:, 1:3], iris.targetclf1 = LogisticRegression(random_state=1)
clf2 = RandomForestClassifier(n_estimators=50, random_state=1)
clf3 = GaussianNB()eclf = VotingClassifier(estimators=[('lr', clf1), ('rf', clf2), ('gnb', clf3)],voting='hard')for clf, label in zip([clf1, clf2, clf3, eclf], ['Logistic Regression', 'Random Forest', 'naive Bayes', 'Ensemble']):scores = cross_val_score(clf, X, y, scoring='accuracy', cv=5)print("Accuracy: %0.2f (+/- %0.2f) [%s]" % (scores.mean(), scores.std(), label))
运行结果:
Accuracy: 0.95 (+/- 0.04) [Logistic Regression]
Accuracy: 0.94 (+/- 0.04) [Random Forest]
Accuracy: 0.91 (+/- 0.04) [naive Bayes]
Accuracy: 0.95 (+/- 0.04) [Ensemble]
如上文所述,在sklearn中对多个模型进行集成时是将多个模型实例传给集成方法,源码中的第16行即是如此。
五、小结
本文简要介绍了sklearn中集成学习的使用方法,从基模型的角度上可以简单地将方法分为两类,从而快速掌握两类方法的基本使用。以下小结了sklearn中对应的方法和模型类型:
方法名称 | 基模型 |
---|---|
Adaboost | 单个模型 |
Bagging | 单个模型 |
Gradient boost | 决策树 |
Voting | 多个模型 |
Staking | 多个模型 |
在本文的基础上,强烈建议再去学习Kaggle模型融合原文 ,此时在文中提到的各类集成方法其实都可以用sklearn中的方法进行实现了。而仔细学完这篇文章,参加各类竞赛的入门级标准也就基本达到了。
sklearn的快速入门到此就结束。当然这个系列只是一个简单的入门教程,涉及的模型和方法都非常有限,要想掌握更多的方法,更有效地解决自己的问题,则需要耐心地长期积累。
sklearn快速入门教程:(一)准备工作
klearn快速入门教程:(二)线性回归
sklearn快速入门教程:(三)机器学习的通用模式及实现方法
sklearn快速入门教程:(四)模型自动调参
sklearn快速入门教程:(五)集成学习相关推荐
- sklearn快速入门教程:(四)模型自动调参
上个教程中我们已经看到在sklearn中调用机器学习模型其实非常简单.但要获得较好的预测效果则需要选取合适的超参数.在实际的项目中其实也有不少参数是由工程师借助其经验手动调整的,但在许多场景下这种方式 ...
- sklearn快速入门教程:(三)机器学习的通用模式及实现方法
一.从线性回归总结机器学习的通用模式 从上篇博客我们详细讲述了线性回归的实现方式.线性回归的调用方式实际上是sklearn的典型方式,在掌握这个方法之后我们继续进一步深入,探索其它的模型的使用. 回顾 ...
- sklearn快速入门教程:(二)线性回归
文章目录 一.从本文起学会快速阅读和学习 二.线性回归的原理回顾及官方文档 三.官方文档的分析 四.举一反三 五.小结 一.从本文起学会快速阅读和学习 本来是想把关于快速阅读的说明写在前一节,但最后还 ...
- sklearn快速入门教程:(一)准备工作
sklearn快速入门教程 – 准备工作 1. 前言 sklearn全称 scikit-learn,它是一个集成了目前市面上最常用的机器学习模型的库,使用起来非常轻松简单,因此获得了广泛的应用. 从官 ...
- sklearn快速入门教程:补充内容 -- sklearn模型评价指标汇总(聚类、分类、回归)
sklearn集成了大多数模型评价指标,这可以很大程度上方便我们的使用,尤其在对进行进行自动调参时可以方便我们进行选择. 做下这个笔记主要是为了补充之前的内容:sklearn快速入门教程:(四)模型自 ...
- sklearn快速入门教程 -- 机器学习工具的快速入门指引
本系列教程旨在提供一个直观.快速的入门指引,从应用的角度进行阐述,提供框架性的理解方式. 全程共5篇教程.若抛开下载和安装的过程,应在2小时左右全部阅读和动手测试完成. (一)准备工作 (二)线性回归 ...
- sklearn 快速入门教程
本教程使用于对理论知识具有一定的了解但编码能力稍弱且对sklearn不太了解的同学 本文为转载文章,原文地址:https://www.cnblogs.com/lianyingteng/p/781112 ...
- sklearn快速入门教程:独热编码
import pandas as pd data = pd.read_csv(r"D:\本科\kaggle数据挖掘\titanic\train.csv", index_col = ...
- sklearn快速入门教程:处理分类型数据
许多特征不是用数字来表达的,而是文字语言,如:北京.上海.广州.深圳.为了适应算法和库,要将文字型数据转换成数值型. import pandas as pd data = pd.read_csv(r& ...
最新文章
- 5793. 【NOIP2008模拟】小S练跑步
- 六、OpenStack配置计算结点
- 如何从完整的文件路径中分离文件名和路径名?
- TensorFlow深度学习实战---循环神经网络
- 计算机考研数学基础知识点,2019计算机考研数学复习:打好基础是必须的啊喂!...
- node作为java中间间_node作为中间服务层如何发送请求(发送请求的实现方法详解)...
- 矩阵字符串配置任意合并表格布局
- AB=C型向量分解思路思考
- CAPL学习之路-SOME/IP相关函数
- Oracle 数据去重sql
- 离散数学_量词分配等值式
- 浅谈京东静态html原理,京东首页前端架构设计.ppt
- 关于python机器学习cross_val_score()交叉检验的参数cv实际默认为5这件事,你怎么看?
- 2021年电工(初级)考试内容及电工(初级)考试总结
- 百度地图 Api v3.0 自定义信息窗体样式
- telnet 正在连接127.0.0.1:9123...无法打开到主机的连接。 在端口 23: 连接失败
- 推荐一部环保电影--难以忽视的真相
- un ange frappe a ma porte
- 按键精灵基础开发流程
- (十三)深入理解蓝牙BLE之“Linux系统搭建zephyr和dongle的环境”
热门文章
- 5位无符号阵列乘法器设计_可变位宽的大规模矩阵乘法方法
- 20190703 关于如何驱动
- HTML/CSS[收藏]
- LeetCode 508. Most Frequent Subtree Sum
- For循环中不可以嵌套RDD操作
- iOS toolchain based on clang for linux
- Android 5.1 修改系统默认语言
- 高通 8x12 添加 TP和按键
- Windows Mobile和Wince(Windows Embedded CE)的字符集问题
- ginkgo php,【行业资讯】PHP 开发框架 ginkgo v0.1.2 发布