sklearn集成学习之VotingClassifier

简介: sklearn集成学习之VotingClassifier

sklearn集成学习之VotingClassifier


在机器学习中,我们可以对KNN、逻辑回归、SVM、决策树、神经网络等预测的结果进行投票,少数服从多数最终决定预测结果。

在sklearn中提供了一个Voting Classifier的方法进行投票。这是属于集成学习的一种。Voting Classifier分为Hard和Soft两种方式。


VotingClassifier的参数


Parameters:

estimators : list of (string, estimator) tuples

Invoking the fit method on the VotingClassifier will fit clones of those original estimators that will be stored in the class attribute self.estimators


voting : str, {‘hard’, ‘soft’} (default=’hard’)


If ‘hard’, uses predicted class labels for majority rule voting. Else if ‘soft’, predicts the class label based on the argmax( 自动回归滑动平均模型) of the sums of the predicted probabilities, which is recommended for an ensemble of well-calibrated(标准的) classifiers.


weights : array-like, shape = [n_classifiers], optional (default=None

Sequence of weights (float or int) to weight the occurrences of predicted class labels (hard voting) or class probabilities before averaging (soft voting). Uses uniform weights if None.


#每个方法预先的权值,默认各方法权值相同.


这里面的estimators和weights都是比较容易看懂的,但是voting有两个选择,一个是’hard’,另一个是’soft’,现在就讲一下这两者的区别


一、Hard Voting 与 Soft Voting 的对比


1)使用方式


  • voting = ‘hard’:表示最终决策方式为 Hard Voting Classifier;
  • voting = ‘soft’:表示最终决策方式为 Soft Voting Classifier;


2)思想


  • Hard Voting Classifier:根据少数服从多数来定最终结果;
  • Soft Voting Classifier:将所有模型预测样本为某一类别的概率的平均值作为标准,概率最高的对应的类型为最终的预测结果;


  • Hard Voting


  • 模型 1:A - 99%、B - 1%,表示模型 1 认为该样本是 A 类型的概率为 99%,为 B 类型的概率为 1%;


c6c1df8f990241b36d961b1bbb7fb2b2.png


  • Soft Voting
  • 将所有模型预测样本为某一类别的概率的平均值作为标准;


635d94d4a81c8a3e8ba73c011ceecc98.png


Hard Voting 投票方式的弊端:

如上图,最终的分类结果不是由概率值更大的模型 1 和模型 4 决定,而是由概率值相对较低的模型 2/3/5 来决定的;


二、各分类算法的概率计算


  • Soft Voting 的决策方式,要求集合的每一个模型都能估计概率;


1)逻辑回归算法


  • P = σ( y_predict )

7fa2deea2f18f0492639c2cb8ebf00c3.png


2)kNN 算法


  • k 个样本点中,数量最多的样本所对应的类别作为最终的预测结果;
  • kNN 算法也可以考虑权值,根据选中的 k 个点距离待预测点的距离不同,k 个点的权值也不同;
  • P = n / k
  • n:k 个样本中,最终确定的类型的个数;如下图,最终判断为 红色类型,概率:p = n/k = 2 / 3;


5953eae4640dd2e5d904366c02cb5caa.png


3)决策树算法


  • 通常在“叶子”节点处的信息熵或者基尼系数不为 0,数据集中包含多种类别的数据,以数量最多的样本对应的类别作为最终的预测结果;(和 kNN 算法类似)
  • P = n / N


  1. n:“叶子”中数量最多的样本的类型对应的样本数量;
  2. N:“叶子”中样本总量;


4)SVM 算法


  • 在 scikit-learn 中的 SVC() 中的一个参数:probability
  1. probability = True:SVC() 返回样本为各个类别的概率;(默认为 False)
from sklearn.svm import SVC
svc = SVC(probability=True)
  1. 计算样本为各个类别的概率需要花费较多时间;


三、scikit-learn 中使用集成分类器VotingClassifier


1)模拟数据集


import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.model_selection import train_test_split
X, y = datasets.make_moons(n_samples=500, noise=0.3, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42) 


2)voting = ‘hard’:使用 Hard Voting 做决策


from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import VotingClassifier
# 实例化
voting_clf = VotingClassifier(estimators=[
    ('log_clf', LogisticRegression()),
    ('svm_clf', SVC()),
    ('dt_clf', DecisionTreeClassifier(random_state=666))
], voting='hard')
voting_clf.fit(X_train, y_train)
voting_clf.score(X_test, y_test)
# 准确率:0.896

3)voting = ‘soft’:使用 Soft Voting 做决策

voting_clf = VotingClassifier(estimators=[
    ('log_clf', LogisticRegression()),
    ('svm_clf', SVC(probability=True)),
    ('dt_clf', DecisionTreeClassifier(random_state=666))
], voting='soft')
voting_clf.fit(X_train, y_train)
voting_clf.score(X_test, y_test)
# 准确率:0.912
  • 使用 Soft Voting 时,SVC() 算法的参数:probability=True
相关文章
|
1月前
|
测试技术
软件质量保护与测试(第2版)学习总结第十三章 集成测试
本文是《软件质量保护与测试》(第2版)第十三章的学习总结,介绍了集成测试的概念、主要任务、测试层次与原则,以及集成测试的不同策略,包括非渐增式集成和渐增式集成(自顶向下和自底向上),并通过图示详细解释了集成测试的过程。
59 1
软件质量保护与测试(第2版)学习总结第十三章 集成测试
|
1月前
|
前端开发 Java 程序员
springboot 学习十五:Spring Boot 优雅的集成Swagger2、Knife4j
这篇文章是关于如何在Spring Boot项目中集成Swagger2和Knife4j来生成和美化API接口文档的详细教程。
96 1
|
1月前
|
Java Spring
springboot 学习十一:Spring Boot 优雅的集成 Lombok
这篇文章是关于如何在Spring Boot项目中集成Lombok,以简化JavaBean的编写,避免冗余代码,并提供了相关的配置步骤和常用注解的介绍。
97 0
|
1月前
|
机器学习/深度学习 算法 前端开发
集成学习任务七和八、投票法与bagging学习
集成学习任务七和八、投票法与bagging学习
15 0
|
1月前
|
机器学习/深度学习 算法
【机器学习】迅速了解什么是集成学习
【机器学习】迅速了解什么是集成学习
|
3月前
|
机器学习/深度学习 运维 算法
【阿里天池-医学影像报告异常检测】3 机器学习模型训练及集成学习Baseline开源
本文介绍了一个基于XGBoost、LightGBM和逻辑回归的集成学习模型,用于医学影像报告异常检测任务,并公开了达到0.83+准确率的基线代码。
70 9
|
3月前
|
人工智能
LLama+Mistral+…+Yi=? 免训练异构大模型集成学习框架DeePEn来了
【8月更文挑战第6天】DeePEn是一种免训练异构大模型集成学习框架,旨在通过融合多个不同架构和参数的大模型输出概率分布,提升整体性能。它首先将各模型输出映射至统一概率空间,然后进行聚合,并最终反转回单一模型空间以生成输出。实验证明,在知识问答和推理任务上,DeePEn相比单一大模型如LLaMA和Mistral有显著提升,但其效果受模型质量和数量影响,并且计算成本较高。[论文: https://arxiv.org/abs/2404.12715]
44 1
|
3月前
|
机器学习/深度学习
【机器学习】模型融合Ensemble和集成学习Stacking的实现
文章介绍了使用mlxtend和lightgbm库中的分类器,如EnsembleVoteClassifier和StackingClassifier,以及sklearn库中的SVC、KNeighborsClassifier等进行模型集成的方法。
55 1
|
4月前
|
机器学习/深度学习 算法 前端开发
集成学习的力量:Sklearn中的随机森林与梯度提升详解
【7月更文第23天】集成学习,作为机器学习中一种强大而灵活的技术,通过结合多个基础模型的预测来提高整体预测性能。在`scikit-learn`(简称sklearn)这一Python机器学习库中,随机森林(Random Forest)和梯度提升(Gradient Boosting)是两种非常流行的集成学习方法。本文将深入解析这两种方法的工作原理,并通过代码示例展示它们在sklearn中的应用。
187 10
|
4月前
|
机器学习/深度学习 算法 前端开发
集成学习(Ensemble Learning)是一种机器学习技术,它通过将多个学习器(或称为“基学习器”、“弱学习器”)的预测结果结合起来,以提高整体预测性能。
集成学习(Ensemble Learning)是一种机器学习技术,它通过将多个学习器(或称为“基学习器”、“弱学习器”)的预测结果结合起来,以提高整体预测性能。