这个是针对二分类的
基础概念
从分类的结果来看,有四种情况
真阳性(True positive (TP)):预测为阳性,实际为阳性
假阳性(False positive (FP)):预测为阳性,实际为阴性
假阴性(False negative (FN)):预测为阴性,实际为阳性
真阴性(True negative (TN)):预测为阴性,实际为阴性
这4个就构成了一个混淆矩阵
真阳性率 (TPR, true positive rate)
又称:命中率 (hit rate)、敏感度(sensitivity)、召回率(recall)
T
P
R
=
T
P
P
=
T
P
T
P
+
F
N
TPR=\frac{TP}{P}=\frac{TP}{TP+FN}
TPR=PTP=TP+FNTP
伪阳性率(FPR, false positive rate)
又称:错误命中率,假警报率 (false alarm rate)
F
P
R
=
F
P
N
=
F
P
F
P
+
T
N
FPR=\frac{FP}{N}=\frac{FP}{FP+TN}
FPR=NFP=FP+TNFP
真阴性率 (TNR,true negative rate)
又称:特异度 (SPC, specificity),selectivity
T
N
R
=
T
N
N
=
T
N
T
N
+
F
P
TNR=\frac{TN}{N}=\frac{TN}{TN+FP}
TNR=NTN=TN+FPTN
阳性预测值 (PPV,positive predictive value)
又称精确率(precision)
P
P
V
=
T
P
T
P
+
F
P
PPV=\frac{TP}{TP+FP}
PPV=TP+FPTP
ROC空间
横轴为伪阳性率(FPR),纵轴为真阳性率(TPR)
我们的二分类模型最后输出的是一个概率
给定一个阈值,就可以分为阳性或者是阴性(比如常见的0.5)
通过调整阈值,就可以在ROC空间上绘制多个点了
有几个特别的点
(0,0):FP,TP都为0,即所有样本预测为阴性
(1,1):FN,TN都为0,即所有样本预测为阳性
(0,1):FP,FN都为0,即预测都是对的
(0,0)到(1,1)的线段:随机猜
越接近左上角越好,越接近右下角越差
ROC曲线
将同一模型每个阈值的(FPR, TPR)坐标都画在ROC空间里,就成为特定模型的ROC曲线
可以调用
from sklearn import metrics
fpr, tpr, thresholds = metrics.roc_curve
roc_curve简单来说就是根据阈值算出伪阳性率和真阳性率
其中有一个参数drop_intermediate
可以去除掉一些水平线段的点
大致这种感觉
因为其实重要的是拐点,这个3个点,可以压缩成2个点
AUC
曲线下面积
一种计算方式是用排序后,计算梯形(类似定积分定义)