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

机器学习入门者求助:修改precision_recall函数实现指定类别计算

解决指定类别计算精确率和召回率的问题

嘿,我来帮你把这个函数改得符合需求!你的问题核心是没把第三个参数利用起来——我们可以用它来指定你想要计算指标的目标类别,直接把它传给sklearn评分函数的pos_label参数就行,这样就能针对特定类别计算精确率和召回率啦。

修改后的代码

首先,我把参数名从third改成了target_class(语义更清晰,后续维护也方便),然后在调用评分函数时传入这个参数:

from sklearn.metrics import precision_score, recall_score

def precision_recall(y_true, y_pred, target_class):
    # 针对指定的target_class计算精确率和召回率
    precision = precision_score(y_true, y_pred, pos_label=target_class)
    recall = recall_score(y_true, y_pred, pos_label=target_class)
    return precision, recall

怎么用?

举两个场景的例子:

  • 二分类场景:如果你的标签是0(负样本)和1(正样本),想要计算正样本的指标,调用方式如下:
    y_true = [0,1,1,0,1]
    y_pred = [1,1,0,0,1]
    prec, rec = precision_recall(y_true, y_pred, 1)
    print(f"精确率: {prec}, 召回率: {rec}")
    
  • 多分类场景:如果标签是字符串类别(比如"猫"、"狗"、"鸟"),想要计算"猫"类的指标,直接传对应字符串即可:
    y_true = ["猫", "狗", "猫", "鸟", "猫"]
    y_pred = ["猫", "猫", "狗", "鸟", "猫"]
    prec, rec = precision_recall(y_true, y_pred, "猫")
    

额外小提示(可选优化)

如果传入的目标类别不在真实标签里,sklearn会抛出错误,你可以加个简单的检查提前拦截:

def precision_recall(y_true, y_pred, target_class):
    if target_class not in set(y_true):
        raise ValueError(f"目标类别 {target_class} 不在真实标签中!")
    precision = precision_score(y_true, y_pred, pos_label=target_class)
    recall = recall_score(y_true, y_pred, pos_label=target_class)
    return precision, recall

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:23:58