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

Pandas按频次与置信度规则生成集成分类最终标签

Pandas 多规则集成标签最终结果生成方案

pd.mode()、pd.nunique() 仅能实现简单的频次统计,无法覆盖你需要的「频次优先、双高频比置信度总和、多高频取最大置信度」的多级判定规则,逐行自定义规则处理是最直接可靠的实现方式。


实现逻辑

逐行处理时按以下优先级判定:

  • 首先提取每行所有成对的标签、置信度数据,统计每个标签的出现次数、置信度总和,同时记录整行最大置信度对应的标签
  • 筛选出所有出现次数等于最高频次的候选标签集合
    • 若候选标签仅1个,直接返回该标签
    • 若候选标签共2个,比较二者的置信度总和,返回总和更大的标签,平局时取遍历到的第一个
    • 若候选标签数量≥3,直接返回整行中最大置信度对应的标签,平局时取遍历到的第一个

完整代码

import pandas as pd

def calc_final_label(row, label_num=4):
    """
    逐行计算最终标签
    :param label_num: 单条样本包含的模型预测结果组数,默认对应Label1~Label4、Conf1~Conf4
    """
    label_stat = dict()
    max_conf_val = -1
    max_conf_label = None

    # 遍历当前行所有预测结果
    for idx in range(1, label_num+1):
        curr_label = row[f"Label{idx}"]
        curr_conf = row[f"Conf{idx}"]

        # 统计标签频次、置信度总和
        if curr_label not in label_stat:
            label_stat[curr_label] = {"cnt": 0, "conf_sum": 0}
        label_stat[curr_label]["cnt"] += 1
        label_stat[curr_label]["conf_sum"] += curr_conf

        # 记录全局最大置信度对应标签
        if curr_conf > max_conf_val:
            max_conf_val = curr_conf
            max_conf_label = curr_label

    # 筛选最高频候选标签
    max_freq = max(v["cnt"] for v in label_stat.values())
    top_candidates = [l for l, stat in label_stat.items() if stat["cnt"] == max_freq]

    # 按规则返回结果
    if len(top_candidates) == 1:
        return top_candidates[0]
    elif len(top_candidates) == 2:
        l1, l2 = top_candidates
        return l1 if label_stat[l1]["conf_sum"] >= label_stat[l2]["conf_sum"] else l2
    else:
        return max_conf_label


# 加载示例数据
df = pd.DataFrame({
    "Label1":["Class1", "Class2", "Class1", "Class4"],
    "Conf1":[0.9,0.8,0.7,0.6],
    "Label2":["Class2", "Class2", "Class2", "Class4"],
    "Conf2":[0.8,0.2,0.5,0.2],
    "Label3":["Class2", "Class2", "Class3", "Class3"],
    "Conf3":[0.8,0.5,0.9,0.4],
    "Label4":["Class2", "Class2", "Class4", "Class3"],
    "Conf4":[0.8,0.5,0.8,0.2]
})

# 生成最终标签列
df["Label_Final"] = df.apply(calc_final_label, axis=1)

结果校验

运行上述代码后,输出的Label_Final列与示例预期完全匹配:

行号Label_Final判定依据
0Class2Class2出现3次,为唯一最高频标签
1Class2Class2出现4次,为唯一最高频标签
2Class34个标签各出现1次,最大置信度0.9对应Class3
3Class4Class3、Class4各出现2次并列最高频,Class4置信度总和0.8大于Class3的0.6

如果你的预测组数不是4组,只需要修改calc_final_label函数的label_num参数即可适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:18:24