当前位置: 首页 > news >正文

【机器学习】Sklearn 集成学习-投票分类器(VoteClassifier)

前言

在【机器学习】集成学习基础概念介绍中有提到过,集成学习的结合策略包括: 平均法、投票法和学习法。sklearn.ensemble库中的包含投票分类器(Voting Classifier) 和投票回归器(Voting Regressor),分别对回归任务和分类任务的机器学习模型进行投票。

本文分成两个部分:
1)VoteClassifier:介绍软、硬两种投票方法的原理;
2)详细的代码示例,使用鸢尾花数据集展示如何通过投票分类器提高整体模型的表现。


VoteClassifier

VotingClassifier背后的想法是组合概念上不同的机器学习分类器,并使用多数投票或平均预测概率(软投票)来预测类别标签。这样的分类器可以用于一组性能同样良好的模型,以平衡它们各自的弱点。

#定义投票分类器
model= VotingClassifier(estimators=[('lr',LR), ('rf', RF), ('gnb', GNB)], #指定需要投票的学习器,这里lr\rf\gnb代表3中不同的模型。voting='soft', #选择投票方式,有soft和hardweights=[2,10,1])  #权重设置#使用投票分类器训练模型
model.fit(X,y)

硬投票(Majority/Hard Voting)

  • 多数投票法,也叫硬投票,根据少数服从多数的原则 (Majority Class Labels),。
  • 若是有并列的最高票,则会按照升序排序顺序选择。举例如下:

例子1:会被标记为class 1, 因为三个分类器中有两个投了"class 1"。
classifier 1 -> class 1
classifier 2 -> class 1
classifier 3 -> class 2

例子2:按照结果升序排列,最终标记为class 1。
classifier 1 -> class 2
classifier 2 -> class 1

软投票(Soft Voting):

  • 加权投票法,增加了权重weight参数, 使用加权平均概率(Weighted Average Probabilities)
  • 该方法要求分类器支持predict_proba方法,即可以输出每个实例属于每一类的概率。
  • 如下图所示, 有三个分类器(classifier 1、classifier 2、classifier 3)和三个分类(class1,2,3) ,我们分别给3个分类器都设置相同的权重,即:w1=1, w2=1, w3=1。class2的平均概率是最高的(0.4>0.37>0.23),所以该实例最后的分类为class 2。
    在这里插入图片描述

详细代码示例

1. 导入包和数据准备

数据集使用的是鸢尾花数据集。

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 VotingClassifier
import pandas as pd
import numpy as np
import warnings 
warnings.filterwarnings("ignore")#数据提取
iris = datasets.load_iris()
#设置X、y
X, y = iris.data[:, 1:3], iris.target#格式转换,整合成表格 
iris_data = pd.DataFrame(np.hstack((X, y.reshape(-1, 1))),index = range(X.shape[0]),columns=['petal_length_cm','petal_width_cm','class'] )

2.基础分类器建模

这里使用了逻辑回归、随机森林、朴素贝叶斯三个模型作为基础的分类器

#逻辑回归
LR = LogisticRegression(random_state=1)
LR.fit(X,y)
iris_data['LR']=LR.predict(X)#随机森林
RF = RandomForestClassifier(n_estimators=50, random_state=1)
RF.fit(X,y)
iris_data['RF']=RF.predict(X)#朴素贝叶斯
GNB = GaussianNB()
GNB.fit(X,y)
iris_data['GNB']=GNB.predict(X)

3.VotingClassifier

集成学习使用硬投票、软投票以及设定权重后的软投票法。

#硬投票
hard_vote = VotingClassifier(estimators=[('lr',LR), ('rf', RF), ('gnb', GNB)],voting='hard')
hard_vote.fit(X,y)
iris_data['hard_vote']=hard_vote.predict(X)# 软投票
soft_vote = VotingClassifier(estimators=[('lr',LR), ('rf', RF), ('gnb', GNB)],voting='soft')
soft_vote.fit(X,y)
iris_data['soft_vote']=soft_vote.predict(X)# 软投票自定义权重
soft_weight_vote = VotingClassifier(estimators=[('lr',LR), ('rf', RF), ('gnb', GNB)],voting='soft',weights=[2,10,1])  #权重设置
soft_weight_vote.fit(X,y)
iris_data['soft_weight_vote']=soft_weight_vote.predict(X)

3.结果查看

查找结果不同的实例:

  • 通过对比RF、soft_vote和soft_weight_vote, 后者因为权重的设置增加了RF分类器的权重,所以soft_weight_vote 的结果和RF一致。
  • hard_vote是根据LR、RF、GNB中的多数结果。
#查看结果
#iris_data.tail(10)
#iris_data.head(10)
iris_data[iris_data['RF']!=iris_data['soft_vote']]

在这里插入图片描述
仅这个实例而言,通过计算accuracy 对比模型效果:

  • 三个基础模型的准确率差异较大;
  • 三个投票分类器的准确率都在0.95,表明集成算法的准确性最高、也更稳定。
#查看各个模型表现
for clf, label in zip([LR, RF, GNB, hard_vote,soft_vote,soft_weight_vote], ['Logistic Regression', 'Random Forest', 'naive Bayes', 'Ensemble(hard)','Ensemble(soft_weight)']):scores = cross_val_score(clf, X, y, scoring='accuracy', cv=5)print("Accuracy: %0.2f (+/- %0.2f) [%s]" % (scores.mean(), scores.std(), label))

在这里插入图片描述

参考链接
https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.VotingClassifier.html#sklearn.ensemble.VotingClassifier
https://scikit-learn.org/stable/auto_examples/ensemble/plot_voting_probas.html#sphx-glr-auto-examples-ensemble-plot-voting-probas-py

相关文章:

【机器学习】Sklearn 集成学习-投票分类器(VoteClassifier)

前言 在【机器学习】集成学习基础概念介绍中有提到过,集成学习的结合策略包括: 平均法、投票法和学习法。sklearn.ensemble库中的包含投票分类器(Voting Classifier) 和投票回归器(Voting Regressor),分别对回归任务和分类任务的…...

Day892.MySql读写分离过期读问题 -MySQL实战

MySql读写分离过期读问题 Hi,我是阿昌,今天学习记录的是关于MySql读写分离过期读问题的内容。 一主多从架构的应用场景:读写分离,以及怎么处理主备延迟导致的读写分离问题。 一主多从的结构,其实就是读写分离的基本…...

无线蓝牙耳机哪个品牌音质好?性价比高音质好的蓝牙耳机排行榜

其实蓝牙耳机购买者最担忧的就是音质问题,怕拿到手的蓝牙耳机低频过重又闷又糊,听歌闷耳的问题,但从2021年蓝牙技术开始突飞猛进后,蓝牙耳机的音质、连接甚至是功能都发生了很大的变化,下面我分享几款性价比高音质的蓝…...

店铺微信公众号怎么创建?

有些小伙伴问店铺微信公众号怎么创建,在解答这个问题之前,先简单说说店铺和微信公众号关系: 店铺一般是指小程序店铺,商家通过小程序店铺来卖货;微信公众号则是一个发布信息的平台。但是两者之间可以打通,…...

goLang Mutex用法案例详解

Golang以其并发性Goroutines而闻名。不仅是并发,还有更多。 因此,在这种情况下,我们必须确保多个goroutines不应该同时试图修改资源,从而导致冲突。 为了确保资源一次只能被一个goroutine访问,我们可以使用一个叫做sync.Mutex的东西。 This concept is called mutual ex…...

java常见的异常

异常分类 Throwable 是java异常的顶级类,所有异常都继承于这个类。 Error,Exception是异常类的两个大分类。 Error Error是非程序异常,即程序不能捕获的异常,一般是编译或者系统性的错误,如OutOfMemorry内存溢出异常等。 Exc…...

从0开始学python -33

Python3 输入和输出 -1 在前面几个章节中,我们其实已经接触了 Python 的输入输出的功能。本章节我们将具体介绍 Python 的输入输出。 — 输出格式美化 Python两种输出值的方式: 表达式语句和 print() 函数。 第三种方式是使用文件对象的 write() 方法&#xff…...

ModuleNotFoundError: No module named ‘glfw‘ 解决方案

错误描述 env gym.make(env_id) File "/opt/conda/envs/WNPG/lib/python3.8/site-packages/gym/envs/registration.py", line 619, in make env_creator load(spec_.entry_point) File "/opt/conda/envs/WNPG/lib/python3.8/site-packages/gym/envs/r…...

RadZen运行和部署,生成业务web应用程序

RadZen运行和部署,生成业务web应用程序 快速简单地生成业务web应用程序,可视化地构建和启动web程序,而我们为您创建新代码。 从信息开始 连接到数据库。Radzen推断您的信息并生成一个功能完备的web应用程序。支持MSSQL REST服务。 微调 添加页面或编辑生…...

分享7个比B站更刺激的老司机网站,别轻易点开

俗话说摸鱼一时爽,一直摸一直爽,作为一个程序员老司机了,一头乌黑浓密的头发还时不时被同事调侃,就靠这10个网站让我健康生活,不建议经常性使用,因为还有一句俗话,那就是“摸鱼一时爽&#xff0…...

浅析:如何在Vue3+Vite中使用JSX

目录 0. Vue3,Vite,JSX 三者的关系 JSX介绍 在 Vue3 中使用 JSX 安装插件(vitejs/plugin-vue-jsx) 新建 jsx 文件 语法 补充知识:注意事项 0. Vue3,Vite,JSX 三者的关系 Vue3、Vite 和 …...

开发小程序需要什么技术?

小程序是一种新的开发能力,相比于原生APP 开发周期短,开发者可以快速地开发一个小程序。小程序可以在微信内被便捷地获取和传播,同时具有出色的使用体验。 开发小程序需要什么技术? 前端技术基础:html、js、css。具体到小程序&a…...

7个营销人员常见的社交媒体问题以及解决方法

在如今的数字营销时代,许多营销人员都害怕在社交媒体上犯错。他们担心他们的社交媒体中的失误会演变成一场公关危机。面对一些常见的社交媒体问题,您需要知道如何避免和解决。对于数字营销人员来说,在现在这个信息互通,每时每刻都…...

BFC 是什么

在页面布局的时候,经常出现以下情况: 这个元素高度怎么没了?这两栏布局怎么没法自适应?这两个元素的间距怎么有点奇怪的样子?...... 原因是元素之间相互的影响,导致了意料之外的情况,这里就涉及…...

07 react+echart+大屏

reactechart大屏大屏ECharts 图表实际步骤React Typescript搭建大屏项目,并实现屏幕适配flexible rem实现适配1. 安装插件对echarts进行的React封装,可以用于React项目中,支持JS、TS如何使用完整例子官网参考大屏 ECharts 图表 ECharts 图…...

Linux/Ubuntu安装部署Odoo15仓管系统,只需不到十步---史上最成功

sudo apt-get update sudo apt install postgresql -y sudo apt-get -f install sudo dpkg -i /home/ubuntu/odoo_15.0.latest_all.deb —报错再次执行上一条命令再执行 —安装包地址:http://nightly.odoo.com/15.0/nightly/deb/–翻到最下面 sudo apt-get ins…...

Python奇异值分解

当AAA是方阵时,可以很容易地进行特征分解:AWΣW−1AW\Sigma W^{-1}AWΣW−1,其中Σ\SigmaΣ是AAA的特征值组成的对角矩阵。如果WWW由标准正交基组成,则W−1WTW^{-1}W^TW−1WT,特征分解可进一步写成WTΣWW^T\Sigma WWTΣ…...

AWS攻略——子网

文章目录分配子网给Public子网分配互联网网关创建互联网网关附加到VPC给Public子网创建路由表关联子网打通Public子网和互联网网关创建Public子网下的EC2进行测试配置Private子网路由给Private子网创建路由表附加在Private子网创建Private子网下的EC2进行测试创建实例在跳板机上…...

java面试 - mq

RocketMq和RabbitMq的优缺点 1、RabbitMQ 优点:rabbitMq 几万级数据量,基于erlang语言开发,因此响应速度快些,并且社区活跃度比较活跃,可视化界面。 缺点:数据吞吐量相对与小一些,并且是基于er…...

PTP GPTP芯片资料翻译88E6352

88E6352应用 网关 车载信息娱乐 车身域控制器 PTP PTP通过周期型地交换控制包实现 选择其中网络最佳质量时钟元素,作为PTP网络中Grand Master.没有Grand Master 节点变成PTP slave节点。PTP节点从Grand Master节点获得他们驱动频率和时间信息。 基本观念是PTP帧…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...

centos 7 部署awstats 网站访问检测

一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

【JVM】- 内存结构

引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...

条件运算符

C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂&#xff…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

基于Springboot+Vue的办公管理系统

角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...