我想将精确率和召回率的手动计算结果与scikit-learn函数进行比较。然而,scikit-learn的recall_score()
和precision_score()
函数给出了不同的结果。我不确定这是为什么!您能告诉我为什么我得到的结果不同吗?谢谢!
我的混淆矩阵如下:
tp, fn, fp, tn = confusion_matrix(y_test, y_test_pred).ravel()print('Outcome values : \n', tp, fn, fp, tn)
Outcome values : 3636933 34156 127 151
FDR=tp/(tp+fn) # TPR/Recall/Sensitivityprint('Recall: %.3f' % FDR)
Recall: 0.991
precision=tp/(tp + fp)print('Precision: %.3f' % precision)
Precision: 1.000
precision = precision_score(y_test, y_test_pred)print('Precision: %f' % precision)recall = recall_score(y_test, y_test_pred)print('Recall: %f' % recall)
Precision: 0.004401Recall: 0.543165
回答:
应该这样做(检查返回值的顺序):
tn, fp, fn, tp = confusion_matrix(y_test, y_test_pred).ravel()
请参考:这里