MLmetrics中F1_Score函数处理非二值y_pred的逻辑问询
MLmetrics包F1_Score函数传入非二值(概率)时的计算逻辑
当你直接将概率值传入F1_Score的y_pred参数时,函数并不会将其视为概率自动选择阈值,而是默认把y_pred中的值当作分类标签处理:只有当预测值严格等于你指定的positive类别(这里是"1",对应数值1)时,才会被判定为正类预测;所有其他数值(包括0.8、0.654这类概率值)都会被当作负类预测。
用你的示例数据验证计算过程:
- 真实正类(
y=1)共5个,仅第一个预测值x[1]=1被判定为正类预测,因此真阳性(TP)=1,剩余4个真实正类被误判为负类,假阴性(FN)=4。 - 真实负类(
y=0)共5个,所有预测值都不等于1,因此真阴性(TN)=5,假阳性(FP)=0。
基于这些指标计算F1得分:
- 精确率(Precision) =
TP/(TP+FP)= 1/(1+0) = 1 - 召回率(Recall) =
TP/(TP+FN)= 1/(1+4) = 0.2 - F1得分 =
2*(Precision*Recall)/(Precision+Recall)= 2*(1*0.2)/(1+0.2) = 0.3333333
这个结果完全匹配你得到的getF1。
而getF2是你手动用0.5阈值将概率转为二值标签后的结果:x_preds中有6个1(前5个真实正类+第8个真实负类),4个0。此时TP=5,FP=1,Recall=1,Precision=5/6,最终F1=2*(5/6*1)/(5/6+1)=10/11≈0.9090909,和官方文档逻辑一致。
内容的提问来源于stack exchange,提问作者Arianne Ford
相关产品推荐
相关产品推荐

