机器学习入门者求助:修改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
相关产品推荐
相关产品推荐

