You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

分类任务能否采用投票法?附回归任务投票法实现示例

分类任务中投票法的应用说明

当然可以在分类任务中应用投票法,这是集成学习领域里非常实用的技巧,核心思路和回归任务的投票法一致——通过整合多个模型的预测结果提升最终性能,主要分为硬投票和软投票两种方式:

两种投票方式说明

  • 硬投票:每个模型输出最终类别,统计所有模型的预测结果,得票最多的类别作为最终预测值。
  • 软投票:每个模型输出各类别的概率,对所有模型的概率取平均值,选择概率最高的类别作为最终预测值(通常效果优于硬投票,前提是模型能输出可靠的概率估计)。

手动实现投票法(对应你提供的回归代码逻辑)

以下是和你给出的回归代码结构对应的分类投票实现:

# 初始化分类模型(替换为分类任务适用的模型)
model_1 = LogisticRegression()
model_2 = xgb.XGBClassifier()
model_3 = RandomForestClassifier()

# 训练所有模型
model_1.fit(X_train, y_target)
model_2.fit(X_train, y_target)
model_3.fit(X_train, y_target)

# --- 硬投票实现 ---
# 获取各模型的类别预测结果
pred_1 = model_1.predict(X_test)
pred_2 = model_2.predict(X_test)
pred_3 = model_3.predict(X_test)

# 统计每个样本的得票,选取票数最多的类别
import numpy as np
from scipy import stats
pred_final_hard, _ = stats.mode(np.array([pred_1, pred_2, pred_3]), axis=0)
pred_final_hard = pred_final_hard.flatten()

# --- 软投票实现 ---
# 获取各模型的类别概率输出
prob_1 = model_1.predict_proba(X_test)
prob_2 = model_2.predict_proba(X_test)
prob_3 = model_3.predict_proba(X_test)

# 计算概率平均值,选取概率最高的类别
avg_prob = (prob_1 + prob_2 + prob_3) / 3.0
pred_final_soft = np.argmax(avg_prob, axis=1)

# 评估模型效果(以准确率为例)
from sklearn.metrics import accuracy_score
print("硬投票准确率:", accuracy_score(y_test, pred_final_hard))
print("软投票准确率:", accuracy_score(y_test, pred_final_soft))

更简洁的sklearn集成实现

sklearn提供了VotingClassifier类,可以直接实现投票逻辑,无需手动计算:

from sklearn.ensemble import VotingClassifier

# 定义模型列表,格式为(模型名称, 模型实例)
estimators = [('lr', LogisticRegression()),
              ('xgb', xgb.XGBClassifier()),
              ('rf', RandomForestClassifier())]

# 初始化硬投票分类器
voting_hard = VotingClassifier(estimators=estimators, voting='hard')
voting_hard.fit(X_train, y_target)
print("硬投票分类器准确率:", voting_hard.score(X_test, y_test))

# 初始化软投票分类器(需模型支持predict_proba方法)
voting_soft = VotingClassifier(estimators=estimators, voting='soft')
voting_soft.fit(X_train, y_target)
print("软投票分类器准确率:", voting_soft.score(X_test, y_test))

注意事项

  • 软投票要求模型能够输出类别概率,大部分主流分类模型都支持,但部分模型可能需要调整参数确保概率的可靠性(比如树模型的predict_proba)。
  • 模型多样性是关键:尽量选择不同类型的模型(如线性模型、树模型、梯度提升模型),避免同质化模型导致投票效果提升有限。
  • 可自定义权重:如果某些模型在验证集上表现更好,可以通过VotingClassifier的weights参数为其分配更高权重,比如weights=[1,2,1]表示给XGB模型双倍权重。

内容的提问来源于stack exchange,提问作者REnuka Perera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 07:45:53