模型融合(集成方法) -投票法

参考:
https://www.cnblogs.com/gobetter/p/13786704.html
https://blog.csdn.net/oyww710/article/details/106310449


一、基础原理

  在所有集成学习方法中,最直观的是多数投票。因为其目的是输出基础学习者的预测中最受欢迎(或最受欢迎)的预测。多数投票是最简单的集成学习技术,它允许多个基本学习器的预测相结合。与选举的工作方式类似,该算法假定每个基础学习器都是投票者,每个类别都是竞争者。为了选出竞争者为获胜者,该算法会考虑投票。将多种预测与投票结合起来的主要方法有两种:一种是硬投票,另一种是软投票。我们在这里介绍两种方法。

在这里插入图片描述


  这种投票分类器往往比单个的最佳分类器获得更高的准确率。事实上,即使每个分类器都是一个弱的学习者(意味着它只比随机猜测稍微好一点),如果有足够多的弱学习者并且他们足够多样化,那么最终集成得到的投票分类器仍然可以是一个强学习者(达到高精度)。


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

1.1 硬投票

   硬投票通过假设投票最多的类别是获胜者,结合了许多预测。在具有两个类别和三个基础学习器的简单情况下,如果目标类别至少具有两票,则它将成为集成法的最后输出。

   模型 1:A - 99%、B - 1%,表示模型 1 认为该样本是 A 类型的概率为 99%,为 B 类型的概率为 1%;
在这里插入图片描述

1.2 软投票

   软投票考虑了预测类别的可能性。为了结合预测结果,软投票计算每个类别的平均概率,并假设获胜者是具有最高平均概率的类别。
在这里插入图片描述

二、代码

2.1 硬投票

from sklearn.ensemble import RandomForestClassifier#随机森林分类器(该分类器本身就是集合而来)
from sklearn.ensemble import VotingClassifier      #投票分类器
from sklearn.linear_model import LogisticRegression#逻辑回归分类器
from sklearn.svm import SVC                        #支持向量机分类器  
from sklearn.datasets import make_moons
from sklearn.model_selection import train_test_split

X,y = 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)
log_clf = LogisticRegression()
rnd_clf = RandomForestClassifier()
svm_clf = SVC()
voting_clf = VotingClassifier(estimators=[('lr',log_clf),('rf',rnd_clf),('svc',svm_clf)],#estimators:子分类器
                              voting='hard') #参数voting代表你的投票方式,hard,soft

# 输出每个模型法预测准确率
from sklearn.metrics import accuracy_score
for clf in (log_clf,rnd_clf,svm_clf,voting_clf):
    clf.fit(X_train,y_train)
    y_pre = clf.predict(X_test)
    print(clf.__class__,accuracy_score(y_pre,y_test))

2.2 软投票

   如果所有的分类器都能够估计类概率(即sklearn中它们都有一个predict_proba()方法),那么可以求出类别的概率平均值,投票分类器将具有最高概率的类作为自己的预测。这称为软投票。

   在代码中需要两处做更改,在支持向量机中,需要将参数probablity设置为True,使支持向量机具备预测类概率的功能。投票分类器中需要把voting设置为soft

svm_clf1 = SVC(probability=True) # probablity设置为True,可输出概率
voting_clf = VotingClassifier(estimators=[('lf',log_clf),('svc',svm_clf1),('rf',rnd_clf)],
                             voting='soft')
for clf in (log_clf, rnd_clf, svm_clf1, voting_clf):
    clf.fit(X_train, y_train)
    y_pred = clf.predict(X_test)
    print(clf.__class__.__name__,accuracy_score(y_pred, y_test))

一般soft比hard表现的更出色!

### 投票回归模型的实现方法 投票回归模型是一种集成学习方法,类似于随机森林的思想,但它通常用于回归任务。该模型通过组合多个基础回归器(如线性回归、支持向量机回归等),并对它们的预测结果进行平均或加权平均来得到最终的预测值。 #### 使用 `sklearn` 实现投票回归模型 在 `scikit-learn` 中,可以通过 `VotingRegressor` 类轻松实现投票回归模型。以下是其实现的关键步骤: 1. **导入必要的模块** 需要从 `sklearn.ensemble` 导入 `VotingRegressor`,并选择合适的基回归器[^1]。 2. **定义基回归器** 可以选择多种类型的回归器作为基模型,例如线性回归 (`LinearRegression`)、决策树回归 (`DecisionTreeRegressor`) 和支持向量机回归 (`SVR`) 等。 3. **创建投票回归器实例** 将选定的基回归器传递给 `VotingRegressor` 的初始化函数,并指定权重(可选)。 4. **训练和预测** 调用 `.fit()` 方法模型进行训练,并使用 `.predict()` 进行预测。 下面是具体的代码示例: ```python from sklearn.datasets import make_regression from sklearn.linear_model import LinearRegression from sklearn.tree import DecisionTreeRegressor from sklearn.svm import SVR from sklearn.ensemble import VotingRegressor from sklearn.model_selection import train_test_split # 创建模拟数据集 X, y = make_regression(n_samples=1000, n_features=20, noise=0.1) # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 定义基回归器 regressor_1 = LinearRegression() regressor_2 = DecisionTreeRegressor(max_depth=5) regressor_3 = SVR() # 创建投票回归器 voting_regressor = VotingRegressor(estimators=[ ('lr', regressor_1), ('dt', regressor_2), ('svr', regressor_3) ]) # 训练模型 voting_regressor.fit(X_train, y_train) # 测试模型 predictions = voting_regressor.predict(X_test) print("Predictions:", predictions[:5]) ``` 上述代码实现了三个不同类型的回归器的集合,并通过对它们的预测结果求平均值得到最终预测值。 --- #### 投票回归模型的优势 1. **多样性提升** 不同类型的回归器具有不同的假设空间,因此结合它们可以提高整体模型的表达能力和泛化性能[^3]。 2. **降低方差** 即使某个基回归器存在较大的偏差或方差,其他回归器的结果可以帮助平滑这种影响,从而减少过拟合的风险。 3. **灵活性强** 用户可以根据实际需求自由选择基回归器及其参数配置,甚至为每个基回归器分配不同的权重。 --- #### 注意事项 - 如果各基回归器之间的差异较小,则可能无法显著提升模型表现。 - 权重的选择应基于交叉验证或其他评估手段得出的最佳比例。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值