Sklearn - metrics 源码阅读

本文通过解析sklearn源码中的roc_curve函数,详细介绍了如何计算ROC曲线和AUC值。并给出了具体的实例和计算步骤,帮助读者理解True Positive Rate (TPR)和False Positive Rate (FPR)的计算方法。
摘要由CSDN通过智能技术生成

  想知道sklearn的roc曲线和auc是怎么计算的。所以专门阅读了sklearn的源码。
  /scikit-learn-master/sklearn/metrics/ranking.py
  其中有两个函数值得注意:_binary_clf_curve 和 roc_curve。所以特此举个例子将源码review一遍。

#init y_true and y_score
y_true = np.array([1, 1, 2, 2])
y_score = np.array([0.1, 0.4, 0.35, 0.8])

# output the number of classes
classes = np.unique(y_true)
classes     #array([1, 2])

#判断classes是否符合条件,例如:
np.array_equal(classes, [1]) # False

pos_label = 1   #默认值,如果不是1,0 不设置的话会报错,报错内容为:"Data is not binary and pos_label is not specified"
y_true = (y_true == pos_label)  #将y_true 和pos_label比较,输出为:array([ True,  True, False, False], dtype=bool)

#y_score 最大值对应的索引 + reverse
desc_score_indices = np.argsort(y_score, kind="mergesort")[::-1]     #输出为:[3 1 2 0]

y_score = y_score[desc_score_indices]
print(y_score)   #[ 0.8   0.4   0.35  0.1 ]
y_true = y_true[desc_score_indices]
print(y_true)    #[False  True False  True]


distinct_value_indices = np.where(np.diff(y_score))[0]
print(distinct_value_indices)  #[0 1 2]
threshold_idxs = np.r_[distinct_value_indices, y_true.size - 1]
print(threshold_idxs)          #[0 1 2 3]

tps = np.cumsum(y_true)[threshold_idxs]  #array([0, 1, 1, 2], dtype=int32)
fps = 1 + threshold_idxs - tps   #array([1, 1, 2, 2], dtype=int64)

fpr = fps / fps[-1]  #array([ 0. ,  0.5,  0.5,  1. ,  1. ])
tpr = tps / tps[-1]  #array([ 0. ,  0. ,  0.5,  0.5,  1. ])

最后终于知道了sklearn怎么将fpr和tpr算出来,然后在画roc曲线以及auc图。 ROC曲线的行坐标为FPR,纵坐标为TPR。

但是计算方法好像与下面的TPR和FPR计算方法不一样?

混淆矩阵如下:
混淆矩阵

True Positive Rate(TPR) = TP / (TP + FN)
False Positive Rate(FPR) = FP / (FP + TN)

False Reject Rate(FRR) = 1-TPR = FN / (TP + FN)
False Accept Rate(FAR) = FPR = FP / (FP + TN)

F1 Score = 2 * TP / (2 * TP + FP + FN)

参考资料:
1. sklearn.metrics.roc_curve
2. github 上的源码

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值