集成学习voting Classifier在sklearn中的实现

投票法(voting)是集成学习里面针对分类问题的一种结合策略。基本思想是选择所有机器学习算法当中输出最多的那个类。

分类的机器学习算法输出有两种类型:一种是直接输出类标签,另外一种是输出类概率,使用前者进行投票叫做硬投票(Majority/Hard voting),使用后者进行分类叫做软投票(Soft voting)。 sklearn中的VotingClassifier是投票法的实现。

硬投票

硬投票是选择算法输出最多的标签,如果标签数量相等,那么按照升序的次序进行选择。下面是一个例子:

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

iris = datasets.load_iris()
X, y = iris.data[:,1:3], iris.target
clf1 = LogisticRegression(random_state=1)
clf2 = RandomForestClassifier(random_state=1)
clf3 = GaussianNB()

eclf = VotingClassifier(estimators=[(‘lr‘,clf1),(‘rf‘,clf2),(‘gnb‘,clf3)], voting=‘hard‘)
#使用投票法将三个模型结合在以前,estimotor采用 [(name1,clf1),(name2,clf2),...]这样的输入,和Pipeline的输入相同 voting=‘hard‘表示硬投票

for clf, clf_name in zip([clf1, clf2, clf3, eclf],[‘Logistic Regrsssion‘, ‘Random Forest‘, ‘naive Bayes‘, ‘Ensemble‘]):
    scores = cross_val_score(clf, X, y, cv=5, scoring=‘accuracy‘)
    print(‘Accuracy: {:.2f} (+/- {:.2f}) [{}]‘.format(scores.mean(), scores.std(), clf_name))

data[:,1:3] : iris.data第一个维度的所有,第二个维度的第1,2个

结果如下:

Accuracy: 0.90 (+/- 0.05) [Logistic Regrsssion]
Accuracy: 0.93 (+/- 0.05) [Random Forest]
Accuracy: 0.91 (+/- 0.04) [naive Bayes]
Accuracy: 0.95 (+/- 0.05) [Ensemble]

实际当中会报:DeprecationWarning

软投票

软投票是使用各个算法输出的类概率来进行类的选择,输入权重的话,会得到每个类的类概率的加权平均值,值大的类会被选择。

from itertools import product

import numpy as np
import matplotlib.pyplot as plt

from sklearn import datasets
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from sklearn.ensemble import VotingClassifier

iris = datasets.load_iris()
X = iris.data[:,[0,2]] #取两列,方便绘图
y = iris.target

clf1 = DecisionTreeClassifier(max_depth=4)
clf2 = KNeighborsClassifier(n_neighbors=7)
clf3 = SVC(kernel=‘rbf‘, probability=True)
eclf = VotingClassifier(estimators=[(‘dt‘,clf1),(‘knn‘,clf2),(‘svc‘,clf3)], voting=‘soft‘, weights=[2,1,1])
#weights控制每个算法的权重, voting=’soft‘ 使用了软权重

clf1.fit(X,y)
clf2.fit(X,y)
clf3.fit(X,y)
eclf.fit(X,y)

x_min, x_max = X[:,0].min() -1, X[:,0].max() + 1
y_min, y_max = X[:,1].min() -1, X[:,1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.01), np.arange(y_min, y_max, 0.01))  #创建网格

fig, axes = plt.subplots(2, 2, sharex=‘col‘, sharey=‘row‘, figsize=(10, 8)) #共享X轴和Y轴

for idx, clf, title in zip(product([0, 1],[0, 1]),
                           [clf1, clf2, clf3, eclf],
                           [‘Decision Tree (depth=4)‘, ‘KNN (k=7)‘,
                            ‘Kernel SVM‘, ‘Soft Voting‘]):
    Z = clf.predict(np.c_[xx.ravel(), yy.ravel()]) #起初我以为是预测的X的值,实际上是预测了上面创建的网格的值,以这些值来进行描绘区域
    Z = Z.reshape(xx.shape)
    axes[idx[0], idx[1]].contourf(xx, yy, Z, alpha=0.4)
    axes[idx[0], idx[1]].scatter(X[:, 0],X[:, 1], c=y, s=20, edgecolor=‘k‘)
    axes[idx[0], idx[1]].set_title(title)
plt.show()

numpy.meshgrid()——生成网格点坐标矩阵。

结果如下:

Voting Classifier

原文地址:https://www.cnblogs.com/shona/p/12239451.html

时间: 2024-10-19 08:42:00

集成学习voting Classifier在sklearn中的实现的相关文章

sklearn中调用集成学习算法

1.集成学习是指对于同一个基础数据集使用不同的机器学习算法进行训练,最后结合不同的算法给出的意见进行决策,这个方法兼顾了许多算法的"意见",比较全面,因此在机器学习领域也使用地非常广泛.生活中其实也普遍存在集成学习的方法,比如买东西找不同的人进行推荐,病情诊断进行多专家会诊等,考虑各方面的意见进行最终的综合的决策,这样得到的结果可能会更加的全面和准确.另外,sklearn中也提供了集成学习的接口voting classifier. sklearn中具体调用集成学习方法的具体代码如下:

数据挖掘-集成学习

1.集成学习概念: ?    个体学习器通常是用一个现有的学习算法从训练数据产生,例如C4.5决策树算法.BP神经网络算法等.此时集成中只包含同种类型的个体学习器,例如"决策树集成"中的个体学习器全是决策树,"神经网络集成"中就全是神经网络,这样的集成是"同质"(homogeneous)的,同质集成中的个体学习器也称为"基学习器"(baselearner),相应的学习算法称为"基学习算法"(baselear

机器学习集成学习原理

//2019.08.19#机器学习集成学习1.集成学习是指对于同一个基础数据集使用不同的机器学习算法进行训练,最后结合不同的算法给出的意见进行决策,这个方法兼顾了许多算法的"意见",比较全面,因此在机器学习领域也使用地非常广泛. 集成学习(ensemble learning)本身不是一个单独的机器学习算法,而是通过构建并结合多个机器学习器来完成学习任务.集成学习可以用于分类问题集成,回归问题集成,特征选取集成,异常点检测集成等等,可以说所有的机器学习领域都可以看到集成学习的身影. 生活

[转]使用sklearn进行集成学习——理论

转:http://www.cnblogs.com/jasonfreak/p/5657196.html 目录 1 前言2 集成学习是什么?3 偏差和方差 3.1 模型的偏差和方差是什么? 3.2 bagging的偏差和方差 3.3 boosting的偏差和方差 3.4 模型的独立性 3.5 小结4 Gradient Boosting 4.1 拟合残差 4.2 拟合反向梯度 4.2.1 契机:引入损失函数 4.2.2 难题一:任意损失函数的最优化 4.2.3 难题二:无法对测试样本计算反向梯度 4.

[转]使用sklearn进行集成学习——实践

转:http://www.cnblogs.com/jasonfreak/p/5720137.html 目录 1 Random Forest和Gradient Tree Boosting参数详解2 如何调参? 2.1 调参的目标:偏差和方差的协调 2.2 参数对整体模型性能的影响 2.3 一个朴实的方案:贪心的坐标下降法 2.3.1 Random Forest调参案例:Digit Recognizer 2.3.1.1 调整过程影响类参数 2.3.1.2 调整子模型影响类参数 2.3.2 Gradi

使用sklearn进行集成学习——实践

系列 <使用sklearn进行集成学习——理论> <使用sklearn进行集成学习——实践> 目录 1 Random Forest和Gradient Tree Boosting参数详解2 如何调参? 2.1 调参的目标:偏差和方差的协调 2.2 参数对整体模型性能的影响 2.3 一个朴实的方案:贪心的坐标下降法 2.3.1 Random Forest调参案例:Digit Recognizer 2.3.1.1 调整过程影响类参数 2.3.1.2 调整子模型影响类参数 2.3.2 Gr

Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问

本篇内容还是建立在上一篇Java Web学习系列——Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Jar包 这部分内容需要以下Jar包支持 mysql-connector:MySQL数据库连接驱动,架起服务端与数据库沟通的桥梁: MyBatis:一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架: log4j:Apache的开源项目,一个功能强大的日志组件,提供方便的日志记录: 修改后的pom.xm

10.集成学习与随机森林

1.什么是集成学习 什么是集成学习,以前我们都是使用一个算法来进行预测,难免会有"独断专行"的感觉.集成学习是将多个算法集成在一块,然后多个算法对同一个问题进行预测,然后少数服从多数,这便是集成学习. 我们生活中有很多集成学习的例子,比如买东西的时候看推荐,如果10个人推荐你买A产品,但是只有1个人推荐你买B产品,我们会更将倾向于买B产品. 我们看看sklearn是如何为我们提供集成学习的接口的. from sklearn.datasets import make_moons from

Ensemble_learning 集成学习算法 stacking 算法

原文:https://herbertmj.wikispaces.com/stacking%E7%AE%97%E6%B3%95 stacked 产生方法是一种截然不同的组合多个模型的方法,它讲的是组合学习器的概念,但是使用的相对于bagging和boosting较少,它不像bagging和boosting,而是组合不同的模型,具体的过程如下:1.划分训练数据集为两个不相交的集合.2. 在第一个集合上训练多个学习器.3. 在第二个集合上测试这几个学习器4. 把第三步得到的预测结果作为输入,把正确的回