之前一直记不熟各种指标的具体计算,本文准备彻底搞定这个问题,涵盖目前遇到过的所有评价指标。
TP,TN,FP,FN
首先是true-false和positive-negative这两对词。以二分类为例:
positive和negative指的是预测的分类是正样本还是负样本,true和false指的是预测结果是对的还是错的。
因此:
实际类别\预测类别 | 正样本 | 负样本 |
---|---|---|
正样本 | TP | FN |
负样本 | FP | TN |
基于这些数值可以计算各项指标:
Accuracy, precision, recall等
Accuracy
\[ A C C=\frac{T P+T N}{T P+T N+F P+F N} \]
分子为所有正确预测了的样本数目(即正样本被预测为正,负样本被预测为负),分母为所有样本总数。
Accuracy代表了所有样本中,被正确预测的样本所占的比例。
其缺陷在于,当正负样本严重不均衡的时候无法反映出模型的真实水平。
Precision
\[ P=\frac{T P}{T P+F P} \]
分子为正样本被预测为正的个数,分母为所有被预测为正的个数。
Precision代表了被预测为正的样本中,真的是正样本的比例。又叫查准率。
Recall
\[ \operatorname{Recall}=\frac{T P}{T P+F N} \]
分子为正被预测为正,分母为正样本的总数。
Recall代表了所有正样本中,被正确预测为正样本的比例。
Recall一般被称为召回率,,又叫Sensitivity,又叫查全率 ,它和一些传统方法中所说的正检率是一个概念。
Specificity
上述的Sensitivity对应的有Specificity:
\[
\operatorname{Specificity}=\frac{T N}{FP+TN}
\]
代表实际负样本中被预测为负的比例。
f1-score
\[ \mathrm{F} 1=\frac{2 * P * R}{P+R} \]
f1-score是对precision和recall的调和平均值。
正检率,虚警率,漏警率
正检率(P_d):正样本被正确检测到的概率,即recall。
漏警率(P_m):正样本没有被预测为正的概率,即1-P_d,即1-recall。
虚警率(P_f):负样本被预测为正的概率,即1-Specificity。
指标间的关系
为了更简单清楚的说明,用P和N表示预测结果是正和负,用P^和N^表示正样本和负样本。不用*号的原因是我不想在markdown里打一堆转义符。我们有P+N=P^+N^。
对于一个正常的识别模型,P中大多数应当是P^,小部分是N^;同样N中大多应当是N^,小部分是P^。
Precision和recall是互相矛盾的一对指标。直观地理解,precision为所有P中P^的比例,要想提高这个比例,需要更加严格的筛选,更严格的筛选意味着,模型只会将那些预测概率非常高的样本预测为P,显然这会更多地筛选掉实际为N^的P,剩下的P中P^。而对于recall,recall代表P^中P的比例,更加严格的筛选会导致,一些P^的样本没有被预测为P,从而导致recall下降。
同理,正检率与虚警率成正相关关系。
ROC曲线与PR曲线
ROC曲线
ROC曲线即纵轴为正检率,横轴为虚警率。
懒得放示意图了,简单描述一下,一般为从左下到右上的凹函数(注意凹函数的定义),区间为(0,0),(1,1)的正方形区域内。评估方法为计算曲线下积分面积,即AUC。
对于瞎猜模型,ROC曲线应当是一条从(0,0)到(1,1)的对角直线,故AUC为0.5。
对于一个正常的模型,AUC应当在0.5到1之间。越大越好。
PR曲线
类似地,PR曲线纵轴为precision,横轴为recall。
PR曲线一般为从左上到右下的凹函数,区间同样在(0,0),(1,1)的正方形区域。评估方法同样为计算曲线下积分值,称为AP值,对于多个分类,取平均,称为mAP值。