北京网站建设91086,邢台网站建设有哪些,如何在百度发视频推广,珠海网站策划公司前言
在【机器学习】集成学习基础概念介绍中有提到过#xff0c;集成学习的结合策略包括#xff1a; 平均法、投票法和学习法。sklearn.ensemble库中的包含投票分类器(Voting Classifier) 和投票回归器#xff08;Voting Regressor)#xff0c;分别对回归任务和分类任务的…前言
在【机器学习】集成学习基础概念介绍中有提到过集成学习的结合策略包括 平均法、投票法和学习法。sklearn.ensemble库中的包含投票分类器(Voting Classifier) 和投票回归器Voting Regressor)分别对回归任务和分类任务的机器学习模型进行投票。
本文分成两个部分 1VoteClassifier介绍软、硬两种投票方法的原理 2详细的代码示例使用鸢尾花数据集展示如何通过投票分类器提高整体模型的表现。 VoteClassifier
VotingClassifier背后的想法是组合概念上不同的机器学习分类器并使用多数投票或平均预测概率软投票来预测类别标签。这样的分类器可以用于一组性能同样良好的模型以平衡它们各自的弱点。
#定义投票分类器
model VotingClassifier(estimators[(lr,LR), (rf, RF), (gnb, GNB)], #指定需要投票的学习器这里lr\rf\gnb代表3中不同的模型。votingsoft, #选择投票方式,有soft和hardweights[2,10,1]) #权重设置#使用投票分类器训练模型
model.fit(X,y)硬投票(Majority/Hard Voting)
多数投票法也叫硬投票根据少数服从多数的原则 Majority Class Labels,。若是有并列的最高票则会按照升序排序顺序选择。举例如下 例子1会被标记为class 1 因为三个分类器中有两个投了class 1。 classifier 1 - class 1 classifier 2 - class 1 classifier 3 - class 2 例子2按照结果升序排列最终标记为class 1。 classifier 1 - class 2 classifier 2 - class 1 软投票(Soft Voting)
加权投票法增加了权重weight参数, 使用加权平均概率Weighted Average Probabilities该方法要求分类器支持predict_proba方法即可以输出每个实例属于每一类的概率。如下图所示 有三个分类器classifier 1、classifier 2、classifier 3和三个分类class1,2,3) ,我们分别给3个分类器都设置相同的权重即w11, w21, w31。class2的平均概率是最高的0.40.370.23)所以该实例最后的分类为class 2。
详细代码示例
1. 导入包和数据准备
数据集使用的是鸢尾花数据集。
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
import pandas as pd
import numpy as np
import warnings
warnings.filterwarnings(ignore)#数据提取
iris datasets.load_iris()
#设置X、y
X, y iris.data[:, 1:3], iris.target#格式转换整合成表格
iris_data pd.DataFrame(np.hstack((X, y.reshape(-1, 1))),index range(X.shape[0]),columns[petal_length_cm,petal_width_cm,class] )2.基础分类器建模
这里使用了逻辑回归、随机森林、朴素贝叶斯三个模型作为基础的分类器
#逻辑回归
LR LogisticRegression(random_state1)
LR.fit(X,y)
iris_data[LR]LR.predict(X)#随机森林
RF RandomForestClassifier(n_estimators50, random_state1)
RF.fit(X,y)
iris_data[RF]RF.predict(X)#朴素贝叶斯
GNB GaussianNB()
GNB.fit(X,y)
iris_data[GNB]GNB.predict(X)3.VotingClassifier
集成学习使用硬投票、软投票以及设定权重后的软投票法。
#硬投票
hard_vote VotingClassifier(estimators[(lr,LR), (rf, RF), (gnb, GNB)],votinghard)
hard_vote.fit(X,y)
iris_data[hard_vote]hard_vote.predict(X)# 软投票
soft_vote VotingClassifier(estimators[(lr,LR), (rf, RF), (gnb, GNB)],votingsoft)
soft_vote.fit(X,y)
iris_data[soft_vote]soft_vote.predict(X)# 软投票自定义权重
soft_weight_vote VotingClassifier(estimators[(lr,LR), (rf, RF), (gnb, GNB)],votingsoft,weights[2,10,1]) #权重设置
soft_weight_vote.fit(X,y)
iris_data[soft_weight_vote]soft_weight_vote.predict(X)3.结果查看
查找结果不同的实例
通过对比RF、soft_vote和soft_weight_vote, 后者因为权重的设置增加了RF分类器的权重所以soft_weight_vote 的结果和RF一致。hard_vote是根据LR、RF、GNB中的多数结果。
#查看结果
#iris_data.tail(10)
#iris_data.head(10)
iris_data[iris_data[RF]!iris_data[soft_vote]]仅这个实例而言通过计算accuracy 对比模型效果
三个基础模型的准确率差异较大三个投票分类器的准确率都在0.95表明集成算法的准确性最高、也更稳定。
#查看各个模型表现
for clf, label in zip([LR, RF, GNB, hard_vote,soft_vote,soft_weight_vote], [Logistic Regression, Random Forest, naive Bayes, Ensemble(hard),Ensemble(soft_weight)]):scores cross_val_score(clf, X, y, scoringaccuracy, cv5)print(Accuracy: %0.2f (/- %0.2f) [%s] % (scores.mean(), scores.std(), label))参考链接 https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.VotingClassifier.html#sklearn.ensemble.VotingClassifier https://scikit-learn.org/stable/auto_examples/ensemble/plot_voting_probas.html#sphx-glr-auto-examples-ensemble-plot-voting-probas-py