报错TypeError: auc()收到意外关键字参数'reorder'的原因及解决
错误原因与解决方法
错误原因
你调用的auc函数(大概率是sklearn.metrics.auc)不存在reorder这个参数,错误传递了该函数不支持的参数,因此触发TypeError。
另外需要注意:precision_recall_curve返回的recall数组是从1.0递减到0的,而sklearn.metrics.auc要求输入的x轴数据必须是单调递增的——这也是你可能想加reorder参数的原因,但该函数本身不提供这个参数。
解决方法
方案1:修正输入数组的单调性
直接反转recall和precision的顺序,让recall变成从0到1递增,满足auc的要求,同时删除无效的reorder=True参数:
def roc_aupr_score(y_true, y_score, average="macro"): def _binary_roc_aupr_score(y_true, y_score): precision, recall, pr_thresholds = precision_recall_curve(y_true, y_score) # 反转recall和precision,确保x轴单调递增 return auc(recall[::-1], precision[::-1]) # 原函数的其他代码...
方案2:直接使用现成的PR AUC计算函数
如果你是要计算PR曲线的AUC,可以直接使用scikit-learn封装好的average_precision_score,无需手动调用precision_recall_curve和auc:
from sklearn.metrics import average_precision_score def roc_aupr_score(y_true, y_score, average="macro"): return average_precision_score(y_true, y_score, average=average)
额外检查
确认导入语句为from sklearn.metrics import auc,避免导入其他库的auc函数导致参数不匹配。
内容的提问来源于stack exchange,提问作者Bioinformatics Page
相关产品推荐
相关产品推荐

