集成学习-Voting

集成学习-Voting一、什么是集成学习集成学习是使用一系列学习器进行学习,并使用某种规则把各个学习结果进行整合从而获得比单个学习器更好的学习效果的一种机器学习方法。一般情况下,集成学习中的多个学习器都是同质的”弱学习器”。上面的描述来自百度百科,看定义的话知道是基于‘弱学习器’的,很多讲集成学习的教程都会先讲决策树,然后讲到随机森林和GBDT,也就是bagging和boosting,…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

集成学习-Voting

 

一、什么是集成学习

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

      上面的描述来自百度百科,看定义的话知道是基于‘弱学习器’的,很多讲集成学习的教程都会先讲决策树,然后讲到随机森林和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)

Jetbrains全家桶1年46,售后保障稳定

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的大致过程。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/230609.html原文链接:https://javaforall.net

(0)
上一篇 2025年6月19日 下午1:43
下一篇 2025年6月19日 下午2:15


相关推荐

  • 采用Fuel Gauge可能出现的几种电量现象及解释

    采用Fuel Gauge可能出现的几种电量现象及解释首先应该熟悉两个变量 bat volt check point 是 UI 上面显示的值 gFG capacity by C 库仑计计算的电量值 也等于 SOC 的值 公式 DOD1 DOD0 Car Qmax DOD1 对应当前的电量值 DOD0 对应初始的电量值 Car 为 t 时间内 流过 Rfg 电阻电流的电量 Qmax 为电池的容量 下面几种情况会更新 DOD0 的值

    2026年3月17日
    1
  • java递归生成树形菜单_java递归无限层级树

    java递归生成树形菜单_java递归无限层级树java递归实现权限树(菜单树)省市县多级结构

    2025年11月27日
    4
  • c++酒店管理系统源代码_c语言酒店管理系统实验报告

    c++酒店管理系统源代码_c语言酒店管理系统实验报告现今大多数宾馆所提供的服务样式都各式各样,规模大小也是各有不同,但是归总下来,不可或缺的两类模块还是顾客和工作人员。由于对宾馆行业内部没有很深刻的理解,此次系统设计包括数据库和功能模块都是根据网上收集到的材料和个人认知上,简单模仿和具体实现的。为满宾馆管理的实际需求,本系统主要实现以下功能:入住登记:登记所入住房间号码,登记顾客入住时间,退房时间,个人信息(身份证号,手机号,姓名)退房办理:输入已经入住的房间号,确认完毕即可退房。房间查询:管理员输入正确的密码后即可对房间状态查询,和具体入住信息查

    2026年3月4日
    6
  • IDEA乱码解决合集

    IDEA乱码解决合集问题来源最近做一些 JavaWeb 项目的时候在 IDEA 和 Tomcat 的字符上被坑了 目前我看到的许多解决乱码问题都是很全面 因此想做一个自己总结的解决乱码的合集 一 IDEA 内部文件编码设置 1 打开 IDEA 点击左上角的 File 选择 Settings2 选择 Editor 再选择右边的 FileEncoding 将下面三个地方改成 UTF 8 并 Apply4 再次打开 File 选择 NewProjectSe 的 SettingsForN 和第三步相同的设

    2026年3月17日
    2
  • 玩转ClaudeCode:使用Figma-MCP编写前端代码1:1还原UI设计图

    玩转ClaudeCode:使用Figma-MCP编写前端代码1:1还原UI设计图

    2026年3月15日
    2
  • PHP面试-复习知识点整理「建议收藏」

    PHP面试-复习知识点整理

    2022年2月10日
    51

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号