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

获取召回率时遇ValueError及FutureWarning问题求助

解决召回率计算时的ValueError与FutureWarning问题

嘿,我一眼就看出问题所在了——你用的标签是字符串'pos'和'neg',但sklearn的recall_score函数默认把1当成正标签(pos_label=1),这俩完全不匹配,自然触发了ValueError;那个FutureWarning也是因为字符串标签和默认预期的数值类型不兼容,导致内部元素比较失败才冒出来的。

下面给你两种靠谱的解决办法:

办法1:直接指定正标签参数

既然你的正类是'pos',调用recall_score时直接把pos_label设成这个字符串就行,代码改完长这样:

from sklearn.metrics import recall_score

# 你的原有代码保持不变
X_test = test_pos_vec + test_neg_vec
Y_test = ["pos"] * len(test_pos_vec) + ["neg"] * len(test_neg_vec)

# 关键修改:明确指定pos_label为'pos'
recall_average = recall_score(Y_test, y_predict, average="binary", pos_label="pos")
print(recall_average)

这样函数就能正确识别正标签,同时那个烦人的FutureWarning也会消失。

办法2:把标签转换成数值类型

要是你更习惯用0/1这种数值标签(毕竟很多机器学习工具默认都吃数值),可以提前把字符串标签映射成数值:

from sklearn.metrics import recall_score

# 原有代码
X_test = test_pos_vec + test_neg_vec
Y_test = ["pos"] * len(test_pos_vec) + ["neg"] * len(test_neg_vec)

# 把真实标签转成数值:pos→1,neg→0
Y_test_num = [1 if label == 'pos' else 0 for label in Y_test]
# 预测标签也要同步转换(假设y_predict也是字符串类型)
y_predict_num = [1 if label == 'pos' else 0 for label in y_predict]

# 现在调用recall_score用默认的pos_label=1就没问题了
recall_average = recall_score(Y_test_num, y_predict_num, average="binary")
print(recall_average)

小提醒

当你用average="binary"的时候,必须明确告诉函数哪个是正类——不管用字符串还是数值,只要保证真实标签和预测标签里都有这个值就行。要是以后碰多分类任务想单独算某一类的召回率,这个参数同样重要。

内容的提问来源于stack exchange,提问作者Mr. Wizard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:39:11