为什么投票分类器的准确度低于制作它的单个预测器之一

问题描述

我有一个关于投票分类器的简单问题。据我所知,投票分类器应该比构建它的那些个体预测器(人群的智慧)具有最高的准确度。这是代码

from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import VotingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_moons
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.svm import SVC


# import dataset
X,y = make_moons(n_samples=500,noise=0.30,random_state=42)

# split the dataset into train/test sets
X_train,X_test,y_train,y_test = train_test_split(X,y)


rnd_clf = RandomForestClassifier(n_estimators=10,random_state=42)  
log_clf = LogisticRegression(solver='liblinear',random_state=42) 
svm_clf = SVC(gamma='auto',random_state=42)   


voting_clf = VotingClassifier(
    estimators= [('lr',log_clf),('rf',rnd_clf),('svc',svm_clf)],voting='hard')                                          
                      

voting_clf = voting_clf.fit(X_train,y_train)

predictors_list= [log_clf,rnd_clf,svm_clf,voting_clf]

for clf in predictors_list:
    
    clf.fit(X_train,y_train)
    y_pred = clf.predict(X_test)
    accuracy = accuracy_score(y_pred,y_test)
    
    print(clf.__class__.__name__,accuracy)

我得到的准确度如下:

LogisticRegression 0.776 随机森林分类器 0.88 SVC 0.864 投票分类器 0.864

正如您在这次运行中所看到的,随机森林预测器的准确度略高于 VotingClassifier!

对此有什么解释吗?

非常感谢

费提

解决方法

我们来看看你传递的投票参数'hard' 文档说:

如果为“hard”,则使用预测的类别标签进行多数规则投票。否则,如果为“软”,则根据预测概率之和的 argmax 预测类别标签,推荐用于经过良好校准的分类器集合。

所以也许,‍‍‍‍LogisticRegression 和您的 SVC(SVM) 的预测是相同的,并且在某些情况下是错误的,这导致您对这些情况的多​​数票错误。

您可以使用 voting='soft' 或将权重分配为每个模型的预测的先验,这样您可以使您的预测免受不良模型的错误预测的影响,并在您的最佳模型上传递更多信息。

>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...