检测识别问题中的metrics

之前一直记不熟各种指标的具体计算,本文准备彻底搞定这个问题,涵盖目前遇到过的所有评价指标。

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值。

上一篇:Spring cloud微服务安全实战-7-1章节概述


下一篇:k8s安装之heapster与metric