首页 > 其他分享 >集成学习之VotingClassifier

集成学习之VotingClassifier

时间:2022-12-18 21:23:53浏览次数:37  
标签:集成 score predict clf VotingClassifier 学习 train test import

一、概述

同一个问题可能通过不同的机器学习模型来解决,那么哪个解决方案会更客观呢? 

这种集成算法一般应用与分类问题。思路很简单。假如有5种机器学习模型来进行分类预测,就拥有5个预测的结果集,那么这5种模型,一种模型一票。然后遵循少数服从多数原则。

投票分类器有硬投票和软投票两种,硬投票是对结果进行投票,比较票数的多少,软投票是对多种结果的预测正确率,对正确率比大小。

 

 

二、参数

 

 

 

2.1 voting

  • Hard Voting Classifier:根据少数服从多数来定最终结果;

  • Soft Voting Classifier:将所有模型预测样本为某一类别的概率的平均值作为标准,概率最高的对应的类型为最终的预测结果;

      

 

 

 

 

       

 

 

 

有五个模型,最后得出结果为:分类为A类有2票,分类为B列有3票。如果按照hard模型,则判定为B类。

但是A类的五种模型的平均概率为68%, B类的五种模型的平均概率为32%,如果按照soft模型,则判定为A类。

 

补充:对于hard形式,如果票数2比2打平了,会将结果都判定给其中的一个,所有尽量不要用偶然的票数。

 

三、案列

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.ensemble import VotingClassifier


'''
制作样本数据,产生的结果为一个简单的样本数据集,用于可视化聚类算法和分类算法
1. n_samples : 整数型, 可选,默认为100 总的产生的样本点的数量
2. shuffle : 布尔型,可选填 (默认为True) 是否对样本进行重新洗牌
3. noise : 浮点型 or None型 (默认为None) 加到数据里面的高斯噪声的标准差
'''

X, y = datasets.make_moons(n_samples=1000, shuffle=True, noise=0.3, random_state=2)

plt.scatter(X[y == 0, 0], X[y == 0, 1])
plt.scatter(X[y == 1, 0], X[y == 1, 1])
plt.show()
# 划分数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=2)

# 采用逻辑回归
log_clf = LogisticRegression()
log_clf.fit(X_train, y_train)
y_predict_log = log_clf.predict(X_test)
print('逻辑回归的训练集分数:{a:.2%}, 测试集分数:{b:.2%}'.
      format(a=log_clf.score(X_train, y_train), b=log_clf.score(X_test, y_test)))


# 采用KNN
knn_clf = KNeighborsClassifier(n_neighbors=5)
knn_clf.fit(X_train, y_train)
y_predict_knn = knn_clf.predict(X_test)
print('KNN的训练集分数:{a:.2%}, 测试集分数:{b:.2%}'.
      format(a=knn_clf.score(X_train, y_train), b=knn_clf.score(X_test, y_test)))



# 采用决策树
dt_clf = DecisionTreeClassifier(random_state=1)
dt_clf.fit(X_train, y_train)
y_predict_dt = dt_clf.predict(X_test)
print('决策树的训练集分数:{a:.2%}, 测试集分数:{b:.2%}'.
      format(a=dt_clf.score(X_train, y_train), b=dt_clf.score(X_test, y_test)))


# 采用支持向量机
svc_clf = SVC(C=1.0, kernel='rbf', degree=3, gamma='scale')
svc_clf.fit(X_train, y_train)
y_predict_svc = svc_clf.predict(X_test)
print('逻辑回归的训练集分数:{a:.2%}, 测试集分数:{b:.2%}'.
      format(a=svc_clf.score(X_train, y_train), b=svc_clf.score(X_test, y_test)))



# 手动实现集成学习
# 2:2打平,则y判定给0
y_predict_s = np.array((y_predict_log+y_predict_knn+y_predict_dt+y_predict_svc) >= 3, dtype=np.int_)

# 创建集成学习对象
voting_clf = VotingClassifier(estimators=[('log_clf', LogisticRegression()),
                                          ('knn_clf', KNeighborsClassifier(n_neighbors=5)),
                                          ('dt_clf', DecisionTreeClassifier(random_state=1)),
                                          # 如果SVC的voting = 'soft',则需要加参数probability=True
                                          ('svc', SVC(C=1.0, kernel='rbf', degree=3, gamma='scale'))],
                              voting='hard')


voting_clf.fit(X_train, y_train)
y_predict_vot = voting_clf.predict(X_test)
print(f'支持向量机分数:{voting_clf.score(X_test, y_test):.2%}')
print(f'手动支持向量机分数:{accuracy_score(y_test, y_predict_s):.2%}')

# 查看结果
df = pd.DataFrame(data={'y_predict_log': y_predict_log,
                        'y_predict_knn': y_predict_knn,
                        'y_predict_dt': y_predict_dt,
                        'y_predict_svc': y_predict_svc,
                        'y_predict_s': y_predict_s,
                        'y_predict_vot': y_predict_vot})

df.to_excel('../data/vote.xlsx', index=False)

 

标签:集成,score,predict,clf,VotingClassifier,学习,train,test,import
From: https://www.cnblogs.com/qianslup/p/16971809.html

相关文章

  • 【博学谷学习记录】超强总结,用心分享|接口加解密介绍
    一、介绍在做接口测试的时候,如果是外部用户直接能看到我们的参数,可能会造成接口不安全,比如直接用明文的参数请求接口,把参数自己定义,脏数据就会存到我们的数据库中,严重......
  • 【博学谷学习记录】超强总结,用心分享。数据库的重要知识点。
    一.数据库事务 1.事务特性 原子性:即不可分割性,事务要么全部被执行,要么就全部不被执行。一致性:事务的执行使得数据库从一种正确状态转换成另一种正确状态隔离性:在......
  • pycaret学习之受监督学习的机器学习-回归
    回归回归分析是一组统计过程,用于估计因变量(通常称为“结果变量”或“目标”)与一个或多个自变量(通常称为“特征”、“预测变量”或“协变量”)之间的关系。机器学习回归的目......
  • (转)expect学习笔记及实例详解
    expect学习笔记及实例详解1.expect是基于tcl演变而来的,所以很多语法和tcl类似,基本的语法如下所示:1.1首行加上/usr/bin/expect1.2spawn:后......
  • 深度学习入门笔记
    深度学习入门笔记编程语言和库Python3.xNumPyMatplotlib常用运算Numpyimportnumpyasnpx=np.array([1.0,2.0])y=np.arange(0,6,0.1)#以0.1为单......
  • 45册 + 325集 + 31套,Python学习资源【2021精华版本】
    给大家准备了如下资料黄同学经过千挑万选,为大家准备好的资源。45本Python电子书325集Python全栈视频【最新版】Python项目开发实战Python数据分析与机器学习实战【最新视频......
  • 20篇MySQL文章,成体系跟新完毕,尽情学习吧!
    MySQL是对于数据分析师来说。很重要的一项技能。你可以不会python,但是你就是不能不会SQL,基本只要是招数据分析的岗位,就必须要你会使用SQL。基于此,我将自己的学习心得,整理成......
  • ERP 学习笔记 - 生产模块
    生产模块蓝图简介      R/3PP生产计划系统是一个综合性的企业资源计划系统,包括制造执行系统的全部功能。它完整的集成各种应用领域所有业务功能,支持客户订单快速处......
  • 前端学习-CSS-08-盒子模型
    学习时间:2022.11.13目录盒子模型盒子模型的介绍内容的宽高边框(border)连写形式单方向设置单个属性简单案例内边距(padding)内减模式外边距(margin)外边距折叠现象1-合并......
  • 前端学习-CSS-09-浮动
    学习时间:2022.11.14目录浮动结构伪类选择器伪元素浮动浮动的作用浮动的特点清除浮动浮动带来的影响清除浮动的方法方法1:给父母元素加一个高度方法2:额外标签法方法3:单伪元......