集成学习-Voting

2023-11-09

 

一、什么是集成学习

       集成学习是使用一系列学习器进行学习,并使用某种规则把各个学习结果进行整合从而获得比单个学习器更好的学习效果的一种机器学习方法。一般情况下,集成学习中的多个学习器都是同质的"弱学习器"。

      上面的描述来自百度百科,看定义的话知道是基于‘弱学习器’的,很多讲集成学习的教程都会先讲决策树,然后讲到随机森林和GBDT,也就是bagging和boosting,其实还有更简单的集成学习思路,也就是voting,也就是投票原则,可能太简单了,很少见人讨论过,觉得对于实际的业务来讲作用应该蛮好的,所以总结下。

 二、具体思想

       少数服从多数,假定有5个分类器,有3个分类为正样本,2个分类为负样本,按照HardVoting的思想就是投票,你的正样本多就是你了,与之思想不太一样的就是Soft Voting,也就是每个人投票的权重不一样,在基于概率的分类模型中,如果一个模型有90%的概率判定为正样本,另一个模型有40%的概率判定为正样本,这2个模型的加权投票概率就是65%(也就是求个平均)。

      

三、Hard Voting的简单例子

1、首先,写入数据集,然后看下数据的大致分布

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])
plt.show()

from sklearn.model_selection import train_test_split

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

2、,然后,先用逻辑回归尝试下

from sklearn.linear_model import LogisticRegression

#这里使用默认的参数
log_clf = LogisticRegression()
log_clf.fit(X_train,y_train)
log_clf.score(X_test,y_test)

结果:0.824

3、再用SVM跑下

from sklearn.svm import SVC

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

结果是:0.88

4、再用决策树跑下

from sklearn.tree import DecisionTreeClassifier

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

结果:0.832

5、我们把3个结果汇总起来,取2个相同的

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')

from sklearn.metrics import accuracy_score

accuracy_score(y_test, y_predict)

结果是:0.88

6、这里的结果有一点提升(虽然并不是很明显)

然后我们用sklearn封装好的模块来跑一下,这里的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)

这里我的结果是:0.88,和自己计算的结果是一样的,这个结果不是太好

四、Soft Voting简单例子(前提是每一个模型都能估计概率)

前提:分类器都可以计算分类概率

对于SVM也可以计算概率,(这点我是不太懂),具体使用是调整下面这个参数为True

probablility:boolean,optional(default=False)

http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html

下面我们使用Soft Voting

from sklearn.ensemble import VotingClassifier

#决策树这里加个随机种子是为了每次跑的结果保持一致
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)

结果是:0.856

这就是voting的大致过程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

集成学习-Voting 的相关文章

  • 会话及会话技术、Cookie对象、Session对象 详解

    会话及会话技术 当用户通过浏览器访问Web应用时 通常情况下 服务器需要对用户的状态进行跟踪 例如 用户在网站结算商品时 Web服务器必须根据 请求用户的身份 找到该用户所购买的商品 在Web开发中 服务器跟踪用户信息的技术称为会话技术 下
  • SQL Incorrect syntax near 错误

    案例分析 在我进行Top数据查询的时候用到如下SQL语句 select top TopCount from MD DataCubeDataDetail2 nolock Where 1 1 and seqno gt BeginSeqno an
  • 分布式事务的典型处理方式:2PC、TCC、异步确保和最大努力型

    分布式事务的典型处理方式 2PC TCC 异步确保和最大努力型 标签 分布式事务处理方式2PCTCC异步确保 2017 04 23 16 49 2617人阅读 评论 0 收藏 举报 分类 Java Web 195 目录 1 柔性事务和刚性事
  • O(n)RMQ四毛子

    有一种ST表 叫做 1ST表 这种ST表可以在 O n O n O n 的时刻内完成建树 其本质就是分块 大块为整除的ST表 小块的差分数组种类不多 完全可以预处理 现在考虑推广到普通的ST表里 我们发现我们真正关心的是数之间的大小关系 但

随机推荐

  • unl构件图与部署图

    构件是系统中可替换的物理部分 它包装了实现而且遵从并提供一组接口的实现 五个要素 规格说明 对于构件 必须有一个它所提供服务的抽象描述 通俗地说 每个构件都必须提供特定的服务 一个或多个实现 构件是一种物理概念 必须被一个或多个实现所支持
  • .NET 6 Linux 系统服务 Systemd (案例版)

    Net Core Windows 系统服务 之前已经写过了 但是 对于Linux的系统服务 却没有写过 主要是因为 大部分Linux的 Net服务都直接Docker了 当然 不排除有这种使用的 可能搞成启动执行了 也有可能用守护进程的方式搞
  • iOS开发学习之触摸事件和手势识别

    iOS的输入事件 触摸事件 手势识别 手机摇晃 一 iOS的输入事件 触摸事件 滑动 点击 运动事件 摇一摇 手机倾斜 行走 不需要人为参与的 远程控制事件 耳机控制手机声音 1 iOS事件对象都是UIEvent类的实例 UIEvent类对
  • 【Linux】重启后进入了紧急模式&应急模式(emergency mode)

    本章进行测试 复现问题 将 etc fstab 挂载 home 参数defaults写错 一般在编辑 etc fstab后都会去执行mount a 这里可以看到执行后并未出现错误 那么咱们重启测试一下 可以看到如图所示出现的错误信息 解决办
  • 系统移植部署开发阶段

    环境搭建 家目录下安装tftp服务器 实现linux系统对tftp目录得文件传输 准备文件 将uboot镜像文件 TF A镜像文件反在tftp目录下 开发板与linux系统得连接 在串口工具打印信息ums 0 mmc 0 将TF卡挂载到Ub
  • Zotero及其插件的安装及使用

    Zotero及其插件的安装及使用 对于学生而言 或多或少得看论文 现在市场上最流行的论文管理工具当属Zotero 作为一个开源的软件 其包括了获取文献 查看文献 文献分类 即时编写笔记等功能 此外还能利用不少插件方面学习 例如Zotero
  • java中将List数据平均切分成N份

    话不多说 直接上代码 直接用 public static
  • 栈与递归

    文章目录 递归 函数调用 递归工作栈 递归算法的效率分析 递归转换为非递归 递归算法优点 递归 若在一个函数 过程或数据结构定义的内部又直接 或间接 出现定义本身的应用 则称它们是递归 三种常使用递归的情况 定义是递归的 例1 阶乘函数 l
  • 网络安全(黑客)必备工具包

    1 NMap 作为Network Mapper的缩写 NMap是一个开源的免费安全扫描工具 可用于安全审计和网络发现 它适用于Windows Linux HP UX Solaris BSD变体 包括Mac OS 以及AmigaOS Nmap
  • PHP的pack/unpack

    前言 直接参照官网 PHP pack Manual PHP中文手册 PHP中国镜像 php 国内镜像 PHP官方网站 PHP unpack Manual PHP中文手册 PHP中国镜像 php 国内镜像 PHP官方网站 1 作用 1 pac
  • Cannot determine path to ‘tools.jar‘ library for openjdk-17

    idea错误 Cannot determine path to tools jar library for openjdk 17 解决方法 把project structure 1 7全部去掉 只留1 8 再运行tomcat7就不报错了
  • vue-cli3打包文件增加hash值

    vue config js中加入以下代码 module exports filenameHashing true 打包后为文件名增加hash值 chainWebpack config gt config output filename js
  • [Python]windows平台python第三方模块安装gcc failed with exit status 1问题的解决

    在windows平台命令行用pip install安装库的时候 经常遇到not found vcvarsall bat这种问题 手动下载源码自己编译 又经常有很多问题 1 在单位没有安装VS 安了mingw32 编译设置成python se
  • [转]增强型N沟道mos管(如si2300)开关条件

    增强型N沟道mos管 如si2300 开关条件 增强型N沟道mos管的S source源极 和 D drain漏极 导通条件取决与Vgs 即栅极和源极间的电压压差 只有当 Vgs gt 2 5V 也就是 Vg G极电压 Vs S极电压 gt
  • Qt类中使用函数指针数组

    接上文例子 将其改成函数指针数组 class Widget public QWidget public int add int x int y int mul int x int y int Widget func p 2 int x in
  • RN 使用第三方组件之react-native-image-picker(拍照/从相册获取图片)

    首先给个github地址 https github com react community react native image picker 英文不行的看下面这个笔记 该插件可以同时给iOS和Android两个平台下使用 但是需要配置下各
  • 京东如何处理数据中心网络对应用性能的影响

    随着现代数据中心规模的不断扩张 网络拓扑和路由转发变得越来越复杂 传统的数据中心使用大型机和小型机 网络规模相对较小 普通的机框式交换机就能满足网络的需求 随着CLOS集群架构的普及 标准的x86服务器集群以低成本和高扩展性逐渐取代大型机和
  • 解决:Failed to connect to repository : Error performing command: git.exe ls-remote -h xxxxxxx HEAD...

    在jenkins新建工程 配置源码管理时 发现输入gitlab的Repository URL 总会抛出一个错误 后来在网上各种百度 终于找到了一篇比较靠谱的文章 顺着文章的提示 去Manage Jenkins Global Tool Con
  • linux 新建文件夹命令

    今天学习了几个命令 是创建 删除文件和文件夹的 在linux里 文件夹是目录 下面说下我学习的命令 创建文件夹 mkdir 一 mkdir命令使用权限 所有用户都可以在终端使用 mkdir 命令在拥有权限的文件夹创建文件夹或目录 二 mkd
  • 集成学习-Voting

    一 什么是集成学习 集成学习是使用一系列学习器进行学习 并使用某种规则把各个学习结果进行整合从而获得比单个学习器更好的学习效果的一种机器学习方法 一般情况下 集成学习中的多个学习器都是同质的 弱学习器 上面的描述来自百度百科 看定义的话知道