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

多标签分类中基于多分类器预测列表计算标签概率的问题

多标签分类预测的概率计算问题

示例数据

有4个来自不同分类器的多标签预测列表,每个实例包含5个标签(1表示标签存在,0表示不存在),数据如下:

a = [[0, 1, 1, 1, 1],  [1, 0, 0, 1, 1],  [0, 1, 0, 0, 1]]
b = [[0, 0, 0, 1, 1],  [0, 0, 0, 1, 0],  [1, 0, 1, 0, 1]]
c = [[1, 0, 1, 1, 1],  [0, 0, 0, 1, 1],  [0, 0, 1, 0, 1]]
d = [[1, 0, 1, 1, 1],  [0, 0, 0, 1, 0],  [0, 1, 1, 0, 1]]

需求

基于上述预测计算每个实例对应每个标签的存在概率,需遵循规则:若所有分类器对某实例的某个标签预测一致(无论0或1),该标签概率设为1.0。

现有问题

尝试的代码如下:

probs = []
for p in zip(a, b, c, d):
    for s in p:
        x = (sum(s)) / 4
        count.append(x)

print(probs)

得到的输出为 [1.0, 0.5, 1.0, 1.0, 0.75, 0.25, 0.5, 0.25, 0.5, 0.75, 0.5, 0.75],格式和结果均不符合预期。期望输出格式为:

probs = [[0.5,0.25,0.75,1.0,1.0], [0.25,1.0,1.0,1.0, 0.5], 
[0.25,0.5,0.75,1.0,1.0]]

正确实现方法

以下是符合需求的Python代码:

a = [[0, 1, 1, 1, 1],  [1, 0, 0, 1, 1],  [0, 1, 0, 0, 1]]
b = [[0, 0, 0, 1, 1],  [0, 0, 0, 1, 0],  [1, 0, 1, 0, 1]]
c = [[1, 0, 1, 1, 1],  [0, 0, 0, 1, 1],  [0, 0, 1, 0, 1]]
d = [[1, 0, 1, 1, 1],  [0, 0, 0, 1, 0],  [0, 1, 1, 0, 1]]

probs = []
# 按实例分组遍历四个分类器的预测结果
for instance_preds in zip(a, b, c, d):
    label_prob_list = []
    # 按标签位置拆分当前实例的所有预测
    for label_votes in zip(*instance_preds):
        total_ones = sum(label_votes)
        # 判断所有分类器对该标签的预测是否一致
        if all(v == label_votes[0] for v in label_votes):
            label_prob_list.append(1.0)
        else:
            # 计算标签存在的概率(1的占比)
            label_prob_list.append(total_ones / len(label_votes))
    probs.append(label_prob_list)

print(probs)

代码逻辑说明

  1. zip(a, b, c, d):将四个分类器的预测按实例分组,每个元素对应同一个实例的4次预测结果。
  2. zip(*instance_preds):将当前实例的4次预测按标签位置拆分,得到每个标签的4个投票结果。
  3. 对每个标签的投票结果:
    • 先统计1的数量;
    • 若所有投票值相同(全0或全1),则概率设为1.0;
    • 否则用1的数量除以分类器总数(4)得到标签存在概率。

运行代码后,输出结果与期望完全一致:

[[0.5, 0.25, 0.75, 1.0, 1.0], [0.25, 1.0, 1.0, 1.0, 0.5], [0.25, 0.5, 0.75, 1.0, 1.0]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:01:21