集成学习入门之soft voting classifier和hard voting classifier

集成学习

通过构建并结合多个学习器来完成学习任务,一般是先产生一组“个体学习器”,再用某种策略将它们结合起来,有很多种形式,像是投票,概率比较等等,像是投票就是少数服从多数

生活中经常遇到这种思路,比如看一下一个东西的好坏,可能会问多个人或者查找多个评价,如果多数觉得不错,那可能你也会认为不错,即便是没有使用过

又好像一个数据的预测结果不确定的时候,就可以使用很多个算法来一起跑一遍,然后选取数据相同的比较多的那个结果作为预测结果

在sklearn中有voting classifier这种投票方式的集成学习分类器

具体实现

(在notebook中)

加载好要用的类库,然后使用make_moons创建一个虚拟测试数据集,设置500个样本点,噪音(标准差)0.3,随机种子为42,然后绘制出数据情况

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
X,y = datasets.make_moons(n_samples=500,noise=0.3,random_state=42)
plt.scatter(X[y==0,0],X[y==0,1])
plt.scatter(X[y==1,0],X[y==1,1])

图像如下

进行数据的分割

from sklearn.model_selection import train_test_split

X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=666)

首先使用逻辑回归的训练方式,在训练完以后进行分类准确度的求解

from sklearn.linear_model import LogisticRegression

log_clf = LogisticRegression()
log_clf.fit(X_train,y_train)
log_clf.score(X_test,y_test)

结果如下

使用SVM的训练方式,在训练完以后进行分类准确度的求解

from sklearn.svm import SVC

svm_clf = SVC()
svm_clf.fit(X_train,y_train)
svm_clf.score(X_test,y_test)

结果如下

使用决策树的训练方式,在训练完以后进行分类准确度的求解

from sklearn.tree import DecisionTreeClassifier

dt_clf = DecisionTreeClassifier()
dt_clf.fit(X_train,y_train)
dt_clf.score(X_test,y_test)

结果如下

将三种算法预测出的结果都进行保存,三种结果相加以后得到一个向量,如果结果大于等于2,这就代表了至少有两个模型,至多有三个模型认为这个结果等于1,此时就认为结果为1,反之为0,再将其转换成整形向量,这就是少数服从多数的情况,然后看一下综合三个算法少数服从多数的结果的前十项是什么样的

y_predict1 = log_clf.predict(X_test)
y_predict2 = svm_clf.predict(X_test)
y_predict3 = dt_clf.predict(X_test)
y_predict = np.array((y_predict1 + y_predict2 + y_predict3)>=2,dtype='int')
y_predict[:10]

结果如下

然后计算一下这个综合的结果的准确度

from sklearn.metrics import accuracy_score

accuracy_score(y_test,y_predict)

结果如下(正常应该是比前三个高,这里是随机种子设置的不好,可以进行修改以实现真正要表达的情况)

在sklearn中可以直接使用VotingClassifier这个类来实现集成学习的操作,传入参数estimators,其就是一个估计器列表,过程和管道很像,将三个模型都传入其中并进行实例化,使voting等于hard,然后对训练数据集进行训练,并求解准确度

from sklearn.ensemble import VotingClassifier

voting_clf = VotingClassifier(estimators=[
('log_clf',LogisticRegression()),
('svm_clf',SVC()),
('dt_clf',DecisionTreeClassifier())],voting='hard') voting_clf.fit(X_train,y_train)
voting_clf.score(X_test,y_test)

结果如下

结果和前面手动模拟的结果是一样的,使用算法的时候是可以直接调参将算法调节到最好的情况

上面使用的是hard voting classifier,那么有hard voting classifier就相应的还存在Soft Voting Classifier

Soft Voting Classifier

hard voting classifie就是少数服从多数的方式,在很多情况下少数服从多数并不是合理的,比如民主暴政(完全民主的结果就是多数人对于少数人的暴政)的情况,这种得出的结果很多时候是不合理的,那么更合理的投票方式应该带有权值属性,即对于不同的投票人,分值权重不一样,有的高一些,有的低一些,比如投票通过一个经济决定,普通民众,女权带师和经济学出身的专家如果投票的比重是一样的话,那很明显,这个结果可能不会是好的结果

因此对于数据的权重占比,在投票中设置好这个权值是很重要的,在soft voting classifier中,就将每个模型的相应的分类的概率作为权值,计算就需要将每个模型对应的类别的概率取平均值,然后对比不同的类别的结果,最后得出最终结果,也就是说在soft voting classifier中,不仅要看有多少票,还要看对应的类别由多少的概率确认分给这个类别

这就可以发现,在这种方法下,要求集合中的每一个模型都可以估计概率,不然没法算,只要函数predict_proba参数的算法就是可以计算概率的,像是逻辑回归算法,KNN算法,SVM算法和决策树算法都是可以计算概率的

具体使用实现

(在notebook中)

熟悉的布置环境和上面一模一样,绘制出来的图像如下

在对数据集进行分割以后(设置随机种子为10),在sklearn中可以直接使用VotingClassifier这个类来实现集成学习的操作,不过这里是hard voting classifier,代码和上面一模一样,可以得出结果,结果如下

对于soft voting classifier来说,和hard voting classifier是一样的,只不过将voting改为soft,然后将三个模型传入其中,实例化SVC的时候传入参数probability以实现概率计算,实例化DecisionTreeClassifier的时候传入随机种子666,然后训练分类器,之后计算准确度

voting_clf2 = VotingClassifier(estimators=[
('log_clf',LogisticRegression()),
('svm_clf',SVC(probability=True)),
('dt_clf',DecisionTreeClassifier(random_state=666))
],voting='soft') voting_clf2.fit(X_train,y_train)
voting_clf2.score(X_test,y_test)

结果如下

可以发现这个准确度是比hard voting classifier的准确的要高的,这就是soft voting classifier的调用方式,使用起来很容易,而且很多时候效果是比hard voting classifier要好的

【笔记】集成学习入门之soft voting classifier和hard voting classifier的更多相关文章

  1. Python机器学习笔记 集成学习总结

    集成学习(Ensemble  learning)是使用一系列学习器进行学习,并使用某种规则把各个学习结果进行整合,从而获得比单个学习器显著优越的泛化性能.它不是一种单独的机器学习算法啊,而更像是一种优 ...

  2. 笔记︱集成学习Ensemble Learning与树模型、Bagging 和 Boosting

    本杂记摘录自文章<开发 | 为什么说集成学习模型是金融风控新的杀手锏?> 基本内容与分类见上述思维导图. . . 一.机器学习元算法 随机森林:决策树+bagging=随机森林 梯度提升树 ...

  3. Nacos集成学习入门

    微服务注册中心nacos学习:先尝试使用它,然后撸它源码搞懂它. 在这里整理一下自己之前集成nacos的内容. 我的github地址:https://github.com/mrxiaobai-wen/ ...

  4. 集成学习-Majority Voting

    认识 集成学习(Ensemble Methods), 首先是一种思想, 而非某种模型, 是一种 "群体决策" 的思想, 即对某一特定问题, 用多个模型来进行训练. 像常见的单个模型 ...

  5. 每天成长一点---WEB前端学习入门笔记

    WEB前端学习入门笔记 从今天开始,本人就要学习WEB前端了. 经过老师的建议,说到他每天都会记录下来新的知识点,每天都是在围绕着这些问题来度过,很有必要每天抽出半个小时来写一个知识总结,及时对一天工 ...

  6. Hadoop学习笔记(1) ——菜鸟入门

    Hadoop学习笔记(1) ——菜鸟入门 Hadoop是什么?先问一下百度吧: [百度百科]一个分布式系统基础架构,由Apache基金会所开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序. ...

  7. ORMLite学习入门笔记

    ORMLite学习入门笔记 使用原始的SQLiteHelper来操作维护数据库有点过于繁琐,重复工作量较大.所以会想到使用一个比较方便的ORM来维护我们本地的数据库,各位业界前辈都给我推荐了ORMLi ...

  8. iOS学习笔记-地图MapKit入门

    代码地址如下:http://www.demodashi.com/demo/11682.html 这篇文章还是翻译自raywenderlich,用Objective-C改写了代码.没有逐字翻译,如有错漏 ...

  9. 机器学习笔记(九)---- 集成学习(ensemble learning)【华为云技术分享】

    集成学习不是一种具体的算法,而是在机器学习中为了提升预测精度而采取的一种或多种策略.其原理是通过构建多个弱监督模型并使用一定策略得到一个更好更全面的强监督模型.集成学习简单的示例图如下: 通过训练得到 ...

随机推荐

  1. 学习/etc/group /etc/passwd 和 /etc/shadow

    /etc/passwd 管理用户信息的系统文件 /etc/shadow 管理用户密码信息的系统文件 /etc/group 管理用户组信息的系统文件 1./etc/group 将用户分组是Linux系统 ...

  2. Java实验项目二——小学生考试系统(简单四则运算)

    Program:设计实现一个小学生数学考试系统,完成随机出题(简单的四则运算),学生答题,自动判分的功能. Description:代码如下: 1 /* 2 * Description:面向考试系统建 ...

  3. HCNA Routing&Switching之动态路由协议RIP

    前文我们了解了动态路由的基本概念,以及动态路由和静态路由的区别,优缺点,动态路由的分类,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14995317.html ...

  4. mongodb,redis,mysql的区别和具体应用场景(转)

    一.MySQL 关系型数据库. 在不同的引擎上有不同 的存储方式. 查询语句是使用传统的sql语句,拥有较为成熟的体系,成熟度很高. 开源数据库的份额在不断增加,mysql的份额页在持续增长. 缺点就 ...

  5. SpringBoot自动装配原理之Configuration以及@Bean注解的使用

    Configuration以及Bean注解的使用 该知识点在Spring中应该学过,没有学过或者遗忘的的朋友需要预习或温习前置知识点.SpringBoot其实就是Spring的进一步简化,所以前置知识 ...

  6. 「CF986F」 Oppa Funcan Style Remastered

    「CF986F」 Oppa Funcan Style Remastered Link 首先发现分解成若干个 \(k\) 的因数很蠢,事实上每个因数都是由某个质因子的若干倍组成的,所以可以将问题转换为分 ...

  7. ZooKeeper 分布式锁 Curator 源码 03:可重入锁并发加锁

    前言 在了解了加锁和锁重入之后,最需要了解的还是在分布式场景下或者多线程并发加锁是如何处理的? 并发加锁 先来看结果,在多线程对 /locks/lock_01 加锁时,是在后面又创建了新的临时节点. ...

  8. MongoDB 基础学习

    1.MongoDB 概念解析 SQL术语/概念 MongoDB术语/概念 解释/说明 database database 数据库 table collection 数据库表/集合 row docume ...

  9. 微信小程序云开发-云存储-带图片的商品列表携带id跳转至商品详情

    一.商品列表页 1.wxml文件 在view中添加点击事件goToGoodDetail,绑定数据data-id <!-- 添加点击事件goToGoodDetail --> <view ...

  10. kafka单机环境配置以及基本操作

    安装地址(已亲测有效):https://www.linuxidc.com/Linux/2019-03/157650.htm