多标签分类任务中如何手动实现Soft Voting软投票分类器
多标签分类场景Soft Voting软投票计算方法
多标签软投票的核心逻辑是对每个标签独立计算加权平均概率,再单独做阈值判断,不需要跨标签做概率归一化,和普通多分类软投票逻辑完全不同。
核心计算公式
对第$i$个标签$L_i$,最终加权平均概率的计算规则为:
$$P(L_i) = \frac{\sum_{k=1}^N w_k * p_{k,i}}{\sum_{k=1}^N w_k}$$
其中:
- $N$是分类器总数量,本次场景中$N=3$
- $w_k$是第$k$个分类器的权重,本次所有$w_k=1$,分母固定为3
- $p_{k,i}$是第$k$个分类器对第$i$个标签的预测正类概率
最后对每个$P(L_i)$做判断:$P(L_i) \geq 0.5$输出1,否则输出0
示例数据手动计算过程
原始预测数据整理如下:
| 分类器 | 权重 | L1预测概率 | L2预测概率 | L3预测概率 | L4预测概率 |
|---|---|---|---|---|---|
| 分类器1 | 1 | 0.5 | 0.2 | 0.7 | 0.3 |
| 分类器2 | 1 | 0.3 | 0.4 | 0.2 | 0.6 |
| 分类器3 | 1 | 0.7 | 0.8 | 0.1 | 0.9 |
逐个标签计算:
- 标签L1
加权平均概率 = (1×0.5 + 1×0.3 + 1×0.7)÷3 = 1.5÷3 = 0.5 ≥0.5 → 输出1 - 标签L2
加权平均概率 = (1×0.2 + 1×0.4 + 1×0.8)÷3 = 1.4÷3 ≈0.467 <0.5 → 输出0 - 标签L3
加权平均概率 = (1×0.7 + 1×0.2 + 1×0.1)÷3 = 1.0÷3 ≈0.333 <0.5 → 输出0 - 标签L4
加权平均概率 = (1×0.3 + 1×0.6 + 1×0.9)÷3 = 1.8÷3 = 0.6 ≥0.5 → 输出1
最终输出结果
软投票最终的多标签预测结果为:[1, 0, 0, 1](对应L1到L4的输出)
极简代码实现(不依赖sklearn)
import numpy as np # 输入3个分类器的预测结果,维度为(分类器数量, 标签数量) clf_preds = np.array([ [0.5, 0.2, 0.7, 0.3], [0.3, 0.4, 0.2, 0.6], [0.7, 0.8, 0.1, 0.9] ]) weights = np.array([1,1,1]) # 按标签维度计算加权平均 weighted_avg = np.average(clf_preds, axis=0, weights=weights) # 阈值判断输出最终结果 result = (weighted_avg >= 0.5).astype(int) print(result) # 输出 [1 0 0 1]
内容的提问来源于stack exchange,提问作者Bashar
相关产品推荐
相关产品推荐

