下班前几分钟,我彻底弄懂了P-R曲线ROC与AUC
Posted serity
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了下班前几分钟,我彻底弄懂了P-R曲线ROC与AUC相关的知识,希望对你有一定的参考价值。
目录
一、均方误差、精度与错误率
对模型的泛化性能进行评估,我们需要有衡量模型泛化能力的评价标准,这就是性能度量(Performance Measure)。
在评估同一个模型的泛化能力时,使用不同的性能度量往往会导致不同的评判结果,这意味着模型的 “好坏” 是相对的。什么样的模型是好的,不仅取决于算法和数据,还取决于性能度量。
在预测任务中,给定大小为 m m m 的数据集
D = ( x 1 , y 1 ) , ⋯ , ( x m , y m ) D=\\(\\boldsymbolx_1,y_1),\\cdots,(\\boldsymbolx_m,y_m)\\ D=(x1,y1),⋯,(xm,ym)
其中 y i y_i yi 是 x i \\boldsymbolx_i xi 的真实标记. 要评估模型 f f f 的性能,我们需要把预测结果 f ( x ) f(\\boldsymbolx) f(x) 与真实标记 y y y 进行比较.
最简单的性能度量有以下三种:
- 均方误差(MSE): m s e ( f ; D ) = 1 m ∑ i = 1 m ( f ( x i ) − y i ) 2 \\displaystyle mse(f;D)=\\frac1m \\sum_i=1^m (f(\\boldsymbolx_i)-y_i)^2 mse(f;D)=m1i=1∑m(f(xi)−yi)2;
- 精度(Accuracy): a c c ( f ; D ) = 1 m ∑ i = 1 m I ( f ( x i ) = y i ) \\displaystyle acc(f;D)=\\frac1m \\sum_i=1^m \\mathbbI(f(\\boldsymbolx_i)=y_i) acc(f;D)=m1i=1∑mI(f(xi)=yi);
- 错误率(Error): e r r ( f ; D ) = 1 m ∑ i = 1 m I ( f ( x i ) ≠ y i ) \\displaystyle err(f;D)=\\frac1m \\sum_i=1^m \\mathbbI(f(\\boldsymbolx_i)\\neq y_i) err(f;D)=m1i=1∑mI(f(xi)=yi).
其中 I ( ⋅ ) \\mathbbI(\\cdot) I(⋅) 是指示函数,且精度和错误率满足如下关系
a c c ( f ; D ) + e r r ( f ; D ) = 1 acc(f;D)+err(f;D)=1 acc(f;D)+err(f;D)=1
均方误差常用于回归任务,精度和错误率常用于分类任务。
sklearn.metrics
中提供了常见的性能度量,均方误差、精度和错误率的实现如下:
""" 均方误差 """
from sklearn.metrics import mean_squared_error
mse = mean_squared_error(y_true, y_pred)
""" 精度 """
from sklearn.metrics import accuracy_score
acc = accuracy_score(y_true, y_pred)
""" 错误率 """
from sklearn.metrics import accuracy_score
err = 1 - accuracy_score(y_true, y_pred)
二、查准率、查全率与 F 1 F1 F1
2.1 查准率(Precision)与查全率(Recall)
错误率和精度虽然常用,但并不能满足所有的任务需求。
考虑这样一个场景,假定先前我们根据西瓜数据集训练出了一个能够判断好瓜还是坏瓜的模型。现在又有一车新的西瓜,我们用训练好的模型对这些西瓜进行判别,自然地,错误率衡量了有多少比例的瓜被判断错误。
但如果我们关心的是:
- 挑出来的瓜(模型判断出的好瓜)有多少比例是真的好瓜。
- 所有真的好瓜中有多少比例被挑了出来(模型判断为好瓜)。
那么错误率显然就不够用了,因此有必要引入新的性能度量。
上面几句话似乎有些绕口,接下来我们再用几张图去形象地阐释一遍。
假定瓜农拉来的一车西瓜如下(只有6个):
西瓜上方是它的编号,下方是它的真实标签。我们用学得的模型 f f f 对这六个西瓜的判断结果如下:
可以看出,编号为 1 , 2 , 5 1,2,5 1,2,5 的西瓜都被判断错误了,因此错误率为 3 / 6 = 0.5 3/6=0.5 3/6=0.5,精度也为 0.5 0.5 0.5.
- 挑出来的瓜(即模型判断出的好瓜)为 2 , 4 , 5 , 6 2,4,5,6 2,4,5,6,这四个被挑出来的瓜只有 4 4 4 和 6 6 6 是真的好瓜,占比 0.5 0.5 0.5。
- 所有真的好瓜为 1 , 4 , 6 1,4,6 1,4,6,这三个真的好瓜中,只有 4 4 4 和 6 6 6 被挑出来了(即模型判断为好瓜),占比 0.67 0.67 0.67。
接下来可以定义查准率和查全率了,不过在此之前,我们有必要引入混淆矩阵(Confusion Matrix)。
对于二分类问题,可将样例根据其真实类别与模型预测的类别组合划分为四类:
- T P TP TP(True Positive):真实标记为正,预测标记也为正。
- F P FP FP(False Positive): 真实标记为负,但预测标记为正。
- T N TN TN(True Negative):真实标记为负,预测标记也为负。
- F N FN FN(False Negative):真实标记为正,但预测标记为负。
显然有 T P + F P + T N + F N = m TP+FP+TN+FN=m TP+FP+TN+FN=m. 分类结果的混淆矩阵形式如下:
[ T N F P F N T P ] \\beginbmatrix TN & FP \\\\ FN& TP \\\\ \\endbmatrix [TNFNFPTP]
我们的查准率(Precision)与查全率(Recall)分别定义为:
P = T P T P + F P , R = T P T P + F N P=\\fracTPTP+FP,\\quad R=\\fracTPTP+FN P=TP+FPTP,R=TP+FNTP
例如,对于之前我们举的例子,查准率和查全率分别为
P = 0.5 , R = 0.67 P=0.5,\\quad R=0.67 P=0.5,R=0.67
现在计算混淆矩阵:
- 真的好瓜,且被模型判断为好瓜的是 4 4 4 和 6 6 6,因此 T P = 2 TP=2 TP=2;
- 真的坏瓜,且被模型判断为好瓜的是 2 2 2 和 5 5 5,因此 F P = 2 FP=2 FP=2;
- 真的好瓜,且被模型判断为坏瓜的是 1 1 1,因此 F N = 1 FN=1 FN=1;
- 对于最后一个,我们可以直接套用公式,即
T
N
=
6
−
T
P
−
F
P
−
F
N
=
1
TN=6-TP-FP-FN=1
TN=6−TP−F
以上是关于下班前几分钟,我彻底弄懂了P-R曲线ROC与AUC的主要内容,如果未能解决你的问题,请参考以下文章
机器学习分类问题指标——Accuracy,PrecisionRecallF1,P-R,ROC,AUC(以鸢尾花为例)