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

如何获取基于概率排序的MultiLabelBinarizer逆变换标签列表?

解决多标签分类中基于概率排序标签的问题

要实现按概率从高到低排序标签(不受0.5阈值限制),核心是把模型输出的类别概率和标签名称对应后排序,具体步骤和代码如下:

关键思路

  1. 拿到模型输出的每个类别独立概率(多标签分类模型最后一层建议用sigmoid激活,输出每个类别的0-1概率,而非softmax)
  2. 通过MultiLabelBinarizer的classes_属性,获取概率矩阵列对应的类别名称顺序
  3. 对每个样本的概率与类别配对,按概率降序排序后提取标签列表

代码示例

from sklearn.preprocessing import MultiLabelBinarizer
import numpy as np

# 1. 初始化并拟合MultiLabelBinarizer
raw_labels = [["cat", "dog"], ["bird"], ["cat", "bird", "fish"]]
mlb = MultiLabelBinarizer()
mlb.fit(raw_labels)
# 查看类别与概率矩阵列的对应关系
print("类别顺序(对应概率矩阵列):", mlb.classes_)

# 2. 模拟模型输出的概率矩阵(每行=1个样本,每列=对应类别的概率)
pred_probs = np.array([
    [0.3, 0.6, 0.7, 0.2],  # 样本1:dog概率最高,其次cat
    [0.8, 0.1, 0.05, 0.01], # 样本2:bird概率远高于其他
    [0.4, 0.55, 0.3, 0.45]  # 样本3:cat > fish > bird > dog
])

# 3. 生成每个样本的概率排序标签列表
sorted_label_results = []
for sample_probs in pred_probs:
    # 配对类别与概率
    class_prob_pairs = list(zip(mlb.classes_, sample_probs))
    # 按概率降序排序
    sorted_pairs = sorted(class_prob_pairs, key=lambda x: x[1], reverse=True)
    # 提取排序后的标签
    sorted_labels = [pair[0] for pair in sorted_pairs]
    sorted_label_results.append(sorted_labels)

# 输出结果
for i, labels in enumerate(sorted_label_results):
    print(f"样本{i+1}排序后标签: {labels}")

输出结果

类别顺序(对应概率矩阵列): ['bird' 'cat' 'dog' 'fish']
样本1排序后标签: ['dog', 'cat', 'bird', 'fish']
样本2排序后标签: ['bird', 'cat', 'dog', 'fish']
样本3排序后标签: ['cat', 'fish', 'bird', 'dog']

补充说明

  • 如果需要保留概率高于某阈值的标签(比如可选保留>0.2的),可以在提取时加过滤:
    sorted_labels = [pair[0] for pair in sorted_pairs if pair[1] > 0.2]
    
  • 确保模型输出的是每个类别的独立概率:多标签分类任务中,模型最后一层用sigmoid激活,而不是softmax(softmax会让概率和为1,适合单标签互斥场景)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 10:52:45