sklearn中average_precision_score报除法无效值错误原因咨询
问题原因与解决办法
1. 报错的核心原因
average_precision_score是用来计算二分类任务中正样本平均精度的指标,它的第一个参数y_true必须包含至少一个正类标签(即值为1的样本)。
你提供的y_true全是0,没有任何正样本:
y_true=np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
此时计算召回率时,分母是总正样本数(也就是0),代码里的tps[-1]就是总正样本数,除以0自然会触发invalid value encountered in true_divide警告——这个指标在没有正样本的场景下无法正常计算。
2. 交换参数后有结果的本质
当你交换参数顺序,把y_scores作为第一个参数(真实标签)、y_true作为第二个参数(预测得分)时:
average_precision_score(y_scores,y_true)
此时y_scores里有两个1(正样本),函数能正常执行计算,但这是完全错误的参数用法——你把预测得分当成了真实标签,把真实标签当成了预测得分,得到的0.1666...没有任何业务或模型评估的实际意义,只是函数在参数合法的情况下返回了一个数值而已。
3. 正确的处理方式
- 如果你的任务是二分类,先检查数据是否有误:真实标签里应该存在正样本(1),否则这个指标不适用。
- 如果场景中确实没有正样本(比如异常检测里无异常的验证集),可以选择跳过这个指标的计算,或者手动返回0(因为没有正样本时,平均精度没有定义)。
内容的提问来源于stack exchange,提问作者Coder
相关产品推荐
相关产品推荐

