【集成算法】Python对比软投票与硬投票

硬投票:直接最终的结果的类别值进行“少数服从多数”策略

软投票:根据各自分类器的概率值进行加权平均

软投票相对于硬投票更好,但是需要各个分类器都可以得到概率值

'''自主构建数据集'''
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_moons

X, y = make_moons(n_samples=500, noise=0.30, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

plt.plot(X[:, 0][y == 0], X[:, 1][y == 0], 'yo', alpha=0.6)
plt.plot(X[:, 0][y == 1], X[:, 1][y == 1], 'bs', alpha=0.6)
plt.show()

'''对比软投票与硬投票'''
from sklearn.ensemble import RandomForestClassifier, VotingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC

log_clf = LogisticRegression(random_state=42)
rnd_clf = RandomForestClassifier(random_state=42)
svm_clf = SVC(random_state=42)

'''硬投票实验'''
voting_clf = VotingClassifier(estimators=[('lr', log_clf), ('rf', rnd_clf), ('svc', svm_clf)], voting='hard')
'''estimators:所使用的分类器 voting:投票方式,默认为硬投票'''

voting_clf.fit(X_train, y_train)

from sklearn.metrics import accuracy_score

'''对比展示一些使用单个分类器与集成算法的区别'''
for clf in (log_clf, rnd_clf, svm_clf, voting_clf):
    clf.fit(X_train, y_train)
    y_pred = clf.predict(X_test)
    print(clf.__class__.__name__, accuracy_score(y_test, y_pred))
'''
运行结果:
LogisticRegression 0.864
RandomForestClassifier 0.904
SVC 0.896
VotingClassifier 0.904
'''

'''软投票实验'''
log_clf_soft = LogisticRegression(random_state=42)
rnd_clf_soft = RandomForestClassifier(random_state=42)
'''SVC默认没有概率值 需要修改参数'''
svm_clf_soft = SVC(probability=True, random_state=42)
voting_clf_soft = VotingClassifier(estimators=[('lr', log_clf_soft), ('rf', rnd_clf_soft), ('svc', svm_clf_soft)],
                                   voting='soft')

voting_clf_soft.fit(X_train, y_train)

'''对比展示一些使用单个分类器与集成算法的区别'''
for clf in (log_clf_soft, rnd_clf_soft, svm_clf_soft, voting_clf_soft):
    clf.fit(X_train, y_train)
    y_pred = clf.predict(X_test)
    print(clf.__class__.__name__, accuracy_score(y_test, y_pred))
'''
运行结果:
LogisticRegression 0.864
RandomForestClassifier 0.896
SVC 0.896
VotingClassifier 0.92
'''

投票投票集成学习中常用的两种投票方法。投票分类器只是简单地统计每个分类器投票,然后选择得票最多的类别作为最终结果。而投票分类器则计算出每个类别的平均估算概率,然后选出概率最高的类别作为最终结果。投票相比投票的表现更优,因为它给予那些高度自信的投票更高的权重。但是投票要求每个分类器都能够估算出类别概率才可以正常工作。例如,在Scikit-Learn中,使用SVM分类器进行投票需要设置`probability=True`参数。 关于加速集成学习的训练,可以通过在多个服务器上并行进行训练来提高效率。对于bagging集成和pasting集成,可以将训练样本分成多个子集,然后在不同的服务器上并行训练多个基分类器。boosting集成也可以通过并行训练多个基分类器来加速训练。而随机森林是一种特殊的bagging集成,它可以通过并行训练多个决策树来加速训练。至于stacking集成,由于它的训练过程涉及到多层模型的训练和预测,所以并行训练可能会有一些限制。 总的来说,投票投票集成学习中常用的投票方法,投票相比投票的表现更优。在训练集成模型时,可以通过在多个服务器上并行进行训练来加速训练过程,具体的可行性和效果取决于具体的集成方法和数据集。 #### 引用[.reference_title] - *1* [第七章习题](https://blog.csdn.net/qq_50765975/article/details/126668042)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [集成学习中的投票投票机制详解和代码实现](https://blog.csdn.net/m0_46510245/article/details/122976720)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值