集成学习-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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Web 安全工具篇:Burp Suite 使用指南

    Web 安全工具篇:Burp Suite 使用指南本文来自作者肖志华在GitChat上分享「Web安全工具篇:BurpSuite使用指南」,「阅读原文」查看交流实录。「文末高能」编辑|哈比前提声明:此次Gitchat分享所写,只作为教学使用,本课具有一定的危险性,对本文所出现的教程内容读者在进行安全评估和渗透测试的途中需要取得授权,非法测试所造成的结果作者(rNma0y)不承担任何法律责任。BurpSuite尖端的网络

    2022年5月8日
    62
  • Visio2003密钥(office 2003密钥)

    序列号:GWH28-DGCMP-P6RC4-6J4MT-3HFDY序列号:WFDWY-XQXJF-RHRYG-BG7RQ-BBDHM

    2022年4月18日
    168
  • 使用Fastjson生成Json字符串少字段属性(数据丢失)「建议收藏」

    在开发中经常要使用到fastJson来转换对象为json 串,但是最近发现在一个对象转换的时候,总是丢失了一个字段的值,(数据丢失).就很纳闷。到网上找了很多方法总是不行,最后总算是在一篇博文中看到问题的关键!现在整理如下,希望可以帮助到更多的人。package per.eblink.pojo; public class Node { private String id

    2022年2月24日
    91
  • Qt使用多线程的一些心得——1.继承QThread的多线程使用方法

    Qt使用多线程的一些心得——1.继承QThread的多线程使用方法摘要Qt多线程方法1继承QThread1写一个继承于QThread的线程2QThread的几个函数quitexitterminate函数3正确的终止一个线程4如何正确启动一个线程41正确的启动一个全局线程和UI一直存在的线程42如何启动一个局部线程用完即释放的线程继承QThread的一些总结使用QObject实现多线的方法见:http://blog.csdn.net/cz

    2022年5月3日
    105
  • gridbagconstraints什么意思_java rectangle

    gridbagconstraints什么意思_java rectangle说明:GridBagLayout只有一个无参的构造器,要使用它就必须用setConstraints(Componentcomp,GridBagConstraintsconstraints)将它和GridBagConstraints关联起来!当GridBagLayout与无参的GridBagConstraints关联时,此时它就相当于一个GridLayout,只不过,用GridLayout布局的

    2025年10月15日
    4
  • TensorFlow源代码学习–1 Session API reference

    TensorFlow源代码学习–1 Session API reference学习TensorFlow源代码,先把API文档扒出来研究一下整体结构:一下是文档内容的整理,简单翻译一下

    2022年10月10日
    5

发表回复

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

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