集成学习voting Classifier在sklearn中的实现(投票机制)

本文深入探讨了机器学习中集成学习的投票机制,包括硬投票和软投票两种方式,通过实例代码展示了如何使用sklearn库实现VotingClassifier,并比较了不同投票方式下模型的准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


机器学习的算法有很多,对于每一种机器学习算法,考虑问题的方式都略微有所不同,所以对于同一个问题,不同的算法可能会给出不同的结果,那么在这种情况下,我们选择哪个算法的结果作为最终结果呢?那么此时,我们完全可以把多种算法集中起来,让不同算法对同一种问题都进行预测,最终少数服从多数,这就是集成学习的思路。

接下来我们就来看看怎样用sklearn实现我们集成学习中的voting classifier

Voting即投票机制

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%;
在这里插入图片描述

Soft Voting

将所有模型预测样本为某一类别的概率的平均值作为标准;
在这里插入图片描述

Hard Voting 投票方式的弊端:

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

硬投票代码

'''
硬投票:对多个模型直接进行投票,不区分模型结果的相对重要度,最终投票数最多的类为最终被预测的类。
'''
iris = datasets.load_iris()

x=iris.data
y=iris.target
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3)

clf1 = XGBClassifier(learning_rate=0.1, n_estimators=150, max_depth=3, min_child_weight=2, subsample=0.7
### 集成学习 Voting Classifier使用与原理 #### 原理介绍 Voting是一种简单的集成学习,它通过组合多个基础分类器的结果来提高预测性能。该方的核心思想在于利用多数表决机制(对于分类任务),从而减少单一模型可能存在的偏差或方差问题[^2]。 在具体的实现过程中,Voting可以分为两种主要形式: - **Hard Voting**:最终的预测结果由所有基分类器的预测类别中占多数的那个决定[^5]。这意味着每个分类器只提供一个离散类标签作为输入。 - **Soft Voting**:除了考虑各个分类器的预测类别外,还会综合它们的概率估计值。即通过对各分类器输出概率加权平均后再选取最大概率对应的类别作为最终预测结果[^4]。 为了使这种方有效工作,在构建投票集合时应确保所选的基础分类器之间存在一定的差异性和互补性[^1]。 #### 实现案例 以下是基于Python Scikit-Learn库的一个简单例子展示了如何创建并训练一个Voting Classifier: ```python from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.svm import SVC from sklearn.linear_model import LogisticRegression from sklearn.ensemble import VotingClassifier from sklearn.metrics import accuracy_score # 加载数据集 iris = datasets.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(n_estimators=50, random_state=1) clf3 = SVC(probability=True, random_state=1) # 创建投票分类器 (这里采用 soft voting) eclf = VotingClassifier( estimators=[('lr', clf1), ('rf', clf2), ('svc', clf3)], voting='soft' ) # 训练模型 for clf, label in zip([clf1, clf2, clf3, eclf], ['Logistic Regression', 'Random Forest', 'SVM', 'Ensemble']): clf.fit(X_train, y_train) y_pred = clf.predict(X_test) print(f"{label} Accuracy: {accuracy_score(y_test, y_pred):.2f}") ``` 此代码片段定义了一个包含逻辑回归、随机森林和支持向量机三种不同类型的分类器组成的投票系统,并比较了单独运行这些分类器以及整体作为一个集成后的表现情况。 #### 注意事项 尽管Voting易于理解和实施,但在实际操作中有几点需要注意: - 各子模型间应当具备足够的多样性; - 对于软投票而言,要求所有的成员都能给出可靠的置信度评分(通常意味着需要启用`probability=True`)选项给像SVC这样的某些算法[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值