当前位置: 首页 > 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帧…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

【单片机期末】单片机系统设计

主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中&#xff0…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...