[机器学习]VotingClassifier

113 阅读2分钟

从名字可以推测,它很可能是用于通过投票机制组合多个分类器预测结果的自定义或第三方库中的类。

在标准的机器学习库中,比如Scikit-learn,你可以使用 VotingClassifier 来实现类似的功能。

VotingClassifier 允许你将多个分类器模型的预测结果通过投票(软投票或硬投票)进行组合,以得到最终的预测结果。

比如随机森林模型预测的结果是1, 逻辑回归模型预测的结果是0, svm模型预测的结果是1, xgboost模型预测的结果是1, 那么最后使用votingclassifier来综合的进行分类.

Scikit-learn 中的 VotingClassifier 参数

在 Scikit-learn 中,`VotingClassifier` 的主要参数包括:
  • estimators: 一个列表,其中包含元组 (string, estimator),其中 string 是分类器的名称,estimator 是分类器实例。
  • voting: 字符串 {'soft', 'hard'},默认为 'hard'。如果投票是 'hard',则预测结果是基于多数投票的(即,预测为获得最多投票的类别)。如果投票是 'soft',则预测结果是基于预测概率的加权平均,权重在 weights 参数中给出。
  • weights: 与 estimators 中的元素数量相等的数组,用于加权平均。如果为 None(默认),则权重相等。仅当 voting='soft' 时使用。
  • n_jobs: 并行运行的作业数。-1 表示使用所有处理器。默认为 None
  • flatten_transform: 布尔值,默认为 False。如果 True,则通过 transform 方法返回的数组将被展平,否则将返回二维数组。这个参数主要用于特殊情况下的兼容性。

实战

# 集成学习
from sklearn.ensemble import RandomForestClassifier, VotingClassifier  
from sklearn.datasets import load_iris  
from sklearn.model_selection import train_test_split  

# 逻辑回归
from sklearn.linear_model import LogisticRegression  

# 支持向量机
from sklearn.svm import SVC  

# 评估指标,准确率,精确率,召回率,混淆矩阵
from sklearn.metrics import accuracy_score, precision_score, recall_score, confusion_matrix

# 加载数据集  
iris = load_iris()  
X,y = iris.data, iris.target  

# 划分数据集  
X_train, X_test, y_train, y_test = train_test_split(X, y, 
                                                    test_size=0.3, 
                                                    random_state=42)  

# 创建分类器实例  
clf1 = LogisticRegression(random_state=1)  
clf2 = RandomForestClassifier(random_state=1)  
clf3 = SVC(random_state=1, probability=True)  

# 创建投票分类器  
eclf = VotingClassifier(estimators=[('lr', clf1), ('rf', clf2), ('svc', clf3)], voting='soft')  

# 训练模型  
eclf = eclf.fit(X_train, y_train)  

# 预测  
predictions = eclf.predict(X_test)
#在这个例子中,我们使用了逻辑回归、随机森林和 SVM 作为基分类器,并通过 `VotingClassifier` 以软投票的方式将它们组合起来。

# 预测测试集  
y_pred = eclf.predict(X_test)  

# 计算精确率和召回率
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred)  
recall = recall_score(y_test, y_pred)