【笔记】集成学习入门之soft voting classifier和hard voting classifier
集成学习入门之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的更多相关文章
- Python机器学习笔记 集成学习总结
集成学习(Ensemble learning)是使用一系列学习器进行学习,并使用某种规则把各个学习结果进行整合,从而获得比单个学习器显著优越的泛化性能.它不是一种单独的机器学习算法啊,而更像是一种优 ...
- 笔记︱集成学习Ensemble Learning与树模型、Bagging 和 Boosting
本杂记摘录自文章<开发 | 为什么说集成学习模型是金融风控新的杀手锏?> 基本内容与分类见上述思维导图. . . 一.机器学习元算法 随机森林:决策树+bagging=随机森林 梯度提升树 ...
- Nacos集成学习入门
微服务注册中心nacos学习:先尝试使用它,然后撸它源码搞懂它. 在这里整理一下自己之前集成nacos的内容. 我的github地址:https://github.com/mrxiaobai-wen/ ...
- 集成学习-Majority Voting
认识 集成学习(Ensemble Methods), 首先是一种思想, 而非某种模型, 是一种 "群体决策" 的思想, 即对某一特定问题, 用多个模型来进行训练. 像常见的单个模型 ...
- 每天成长一点---WEB前端学习入门笔记
WEB前端学习入门笔记 从今天开始,本人就要学习WEB前端了. 经过老师的建议,说到他每天都会记录下来新的知识点,每天都是在围绕着这些问题来度过,很有必要每天抽出半个小时来写一个知识总结,及时对一天工 ...
- Hadoop学习笔记(1) ——菜鸟入门
Hadoop学习笔记(1) ——菜鸟入门 Hadoop是什么?先问一下百度吧: [百度百科]一个分布式系统基础架构,由Apache基金会所开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序. ...
- ORMLite学习入门笔记
ORMLite学习入门笔记 使用原始的SQLiteHelper来操作维护数据库有点过于繁琐,重复工作量较大.所以会想到使用一个比较方便的ORM来维护我们本地的数据库,各位业界前辈都给我推荐了ORMLi ...
- iOS学习笔记-地图MapKit入门
代码地址如下:http://www.demodashi.com/demo/11682.html 这篇文章还是翻译自raywenderlich,用Objective-C改写了代码.没有逐字翻译,如有错漏 ...
- 机器学习笔记(九)---- 集成学习(ensemble learning)【华为云技术分享】
集成学习不是一种具体的算法,而是在机器学习中为了提升预测精度而采取的一种或多种策略.其原理是通过构建多个弱监督模型并使用一定策略得到一个更好更全面的强监督模型.集成学习简单的示例图如下: 通过训练得到 ...
随机推荐
- CentOS-Docker搭建GitLab
官方教程 下载镜像 $ docker pull gitlab/gitlab-ce:latest 创建相关目录 $ mkdir -p /home/gitlab/config /home/gitlab/l ...
- MyBatis:Mybatis逆向工程问题记录
近日我在搭建springboot+mybatis+mysql 的整合项目(自己测试玩)的时候用到了mybatis的逆向工程,来这里记录一下我的菜鸟编码过程 首先我在maven中引入这些依赖 <d ...
- 阿里云ECS问题 Login Incorrect , all available gssapi merchanisms failed
1.阿里云ECS无法登录 Login Incorrect 阿里云ECS密码包含2个密码: 1.重置密码(实例密码也就是我们SSH远程连接的密码): 2.修改远程连接密码(在阿里云网页控制台上远程连接的 ...
- Linux创建ftp并设置权限以及忘记ftp帐号(密码)修改 (转)
忘记ftp密码修改方法:1.登录服务器 cd /etc/vsftpdcat ftpusers找到对应的ftp用户名 (如果用户名也忘记了 那么 cd /etc 然后cat passwd 查看用户 ...
- php curl处理get和post请求
CURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP.FTP.TELNET等.最爽的是,PHP也支持 CURL 库.使用PHP的CURL 库可以简单和有效地去抓网页.你只 ...
- ubuntu16.04上编译android的可执行文件并调用本地so库
前言: 找了蛮多资料的,发现目前实现的编译方式大致就两种,一种是直接使用android源码中的编译工具链,另一种就是使用独立的交叉编译工具链,第二种我还在实现中,配置步骤挺多的 ,第一种实现方式挺方便 ...
- mybatis框架的第二天
一.mybatis的基础crud的操作 先在接口中,写对应的方法名称,返回类型,访问符. 之后在映射配置文件中,写具体的实现 二.mybati中crud的细节 1.模糊查询 这是接口中 这是xml中 ...
- STM32F103学习进程
软硬件下载程序和程序运行的相关问题和解决方案,以我自身买的STM32F103C8T6为例 (1) 硬件需要 1. 购买一个STM32F103XXX的板子.这是一个操作实践性非常强的一个学习过程,如果没 ...
- 脱离OBDeploy工具,手工部署OceanBase方法
[简介] OBDeploy是OceanBase集群部署的工具,可以通过简单的几行命令,就能快速的进行OceanBase部署.但对于初学者来讲,可能会比较困惑,Deploy到底做了哪些事情?里面的具体步 ...
- [004] - JavaSE面试题(四):JavaSE语法(2)
第一期:Java面试 - 100题,梳理各大网站优秀面试题.大家可以跟着我一起来刷刷Java理论知识 [004] - JavaSE面试题(四):JavaSE语法(2) 第1问:重载(overload) ...