1. 错误率 或 精度
对于分类问题,如二分类问题,对一个可信的测试集,模型预测错的比例就叫错误率,预测对的比例就叫精度。很简单。
缺点:这个指标过于简单,假如我们更注重某个特定类别,这个指标完全无能为力。举个栗子:癌症检测,假设去检测的病人平均每100个人里有1个人得了癌症。我们这个机器检查一番,然后把所有人都预测为没病,这样精度就达到了0.99,但这样显然是不行的,耽误病人治疗。假设机器会把20个人判断为有癌症(真正得了癌症的人也在此列,另有19个人被误诊),那么错误率高达0.19,准确率只有0.81。但这样对其中19个人来说,不过是做进一步检查的麻烦,而对那个真正得了癌的人,是及时发现了疾病。
2. 查准率P、查全率R(查全率又叫召回率)与F1。

1)P和R的概念
P:查到的正样本到底准不准,所以P = TP/(TP+FP)
R:查到的正样本到底全不全,所以R=TP/(TP+FN)
2) PR曲线
PR曲线是一种整体衡量P和R的方法。模型通常不会直接输出P或N,比如逻辑回归,不是直接输出0或1,而是输出一个介于0到1之间的值,根据模型输出判断是0还是1,就会涉及到一个阈值,随着这个阈值从0到1的调整,P和R会一直变化,这样就形成了一条PR曲线。

怎么用呢,如果看曲线下的面积,面积越大,相当于对所有阈值来说,总体上P和R都会较大。这个地方说是对所有阈值下,这使得面积这个指标反应的像是排序性能。不过PR曲线一般不看面积,常见用法是画个过原点且45°的曲线,看与曲线交点的值(即P=R时具体是多少),显然是越大越好。
3)F1值
F1值是另一种整体衡量P和R的方法

显然只有P和R都比较大F1才会比较大。
F1是平等的考虑P和R然后整体衡量模型表现。但有时候我们更看重其中一个指标,比如癌症检测这个事,查得准不准不怎么重要,但一定的查得全,毕竟误诊是小事,漏诊就是一条命的事。所以可以加一个权重,以适应我们更看重查得准不准或查得全不全的情况

4)补充:k折训练时如何计算P值和R值?
k折交叉训练实际上训出了k个模型,模型表现肯定有所差异,那么如何衡量整体的P和R及F呢?有两种方式:
i. 直接计算出每个模型的P和R,然后算个均值,就是模型整体的P和R,再用平均后的P和R计算F,就是模型整体的F,这样算出来的PRF叫宏P、宏R、宏F。
ii. 每个模型在测试集上的表现都会有TP/FP/TN/FN四个数,把这四个数分别加和,然后计算PRF,这样算出PRF叫微P、微R、微F。
3. ROC曲线与AUC
1) TPR和FPR的概念
前面的P和R分别指查得准不准和查得全不全,分子都是TP。而ROC曲线涉及的两个概念有略微的不同:
TPR = TP/(TP+FN):一般称之为真正类率,可以看到其实就是召回率(查全率)。
FPR = FP/(TN+FP):一般称之为假正类率。
大白话解释,什么是真正类率?就是在全部的正类(TP+FN)中,有多少被模型判断出来了(TP),可不就是查得全不全这回事。什么叫假正类率,就是在全部的负类(TN+FP)中,有多少被模型误判断为正类(FP),所以FPR又被称为误伤率。
2)ROC曲线
显然,随着阈值的调低,更多的样本会被判断为正,这必然会导致TPR提高,但同时,也会有更多的样本被误伤,所以FPR也会提高。说白了TPR和FPR的分母都是数据集自己的属性,而随着模型把更多的样本判断为正,其中的TP和FP肯定都会增加。因此TPR和FPR是正相关的。当阈值在一个极端,使模型把所有的样本都判断为负(N)时,TP和FP都是0,因此TPR和FPR都是0,而当阈值在另一个极端,使模型把所有的样本都判断为正(P)时,则TN和FN都是0,因此TPR和FPR都是1。而不同阈值下的(TPR,FPR)会形成一条由(0,0)到(1,1)的曲线,就是下面这个样子,也就是所谓的ROC曲线。

TPR和FPR的正相关关系是没跑的,即使是随机打分也是这样。所以对模型而言,重要的是他们的具体关系是什么样,也就是说ROC曲线的具体形状是什么样。当我们调整阈值以期提高TPR时,我们希望TPR提高的尽可能多 的同时,FPR增加的尽可能少,本质就是阈值调整的这个区间内大部分是正样本,从曲线上来看就是前半段要尽可能的急速上升。但随着阈值不断调整,调整区间内的样本必然从大部分为正逐渐变为大部分为负,也因此必然有一个转折点,FPR的增速开始反超TPR(当然从分类准确率的角度来说阈值在这个部分是不合适的),那么我们希望的是什么呢?我们希望的是这种转折要尽可能的突然,转折的越突然,意味着阈值调整的区间内样本情况由大部分为正到大部分为负的转变也越迅速,继而意味着不会有太多的区间内,正负样本比例跟整个样本集的正负比差不多(意味着模型无法对这些样本进行区分)。越迅速的转变意味着曲线越向左上角拱起,即越接近(0,1)点。如图所示。最完美的ROC曲线是(0,0)→(0,1)→(1,1)的折线。

3)AUC是何物?
如何定量评价ROC曲线呢?用曲线下的面积即可(Area Under Curve,即AUC),显然AUC的值是介于0.5到1之间,0.5代表随机猜测,1代表完美分类。
在解释ROC和AUC时,我们总提到分类,但同时我们又说AUC衡量的是排序能力。应该说,在考察分类问题时,若指标的计算涉及到阈值的变化,则分类问题晋级为排序问题。各个阈值下的正负样本分类能力,可以描述为模型把正样本排到负样本前面的能力,而这种排序能力的极致是则是把正样本完全排到负样本前面,即实现完美的分类。从这个角度讲,分类和排序是统一的,他们都是把正负样本相对区分开的能力。与分类和排序问题相对应的,是模型的回归能力,即预测出样本是正类或负类的真实概率值,回归是另一种问题了。此处不表。
4. 一点遐想:
模型评估指标 和 模型训练时使用的损失函数 是否具有更深层次上的统一性?定性想一下,我们设计一个损失函数来评估模型预测值与样本真实值的差异,并梯度下降优化参数来减小这个差异,那在模型训练完成后,计算模型在测试集上的损失来评估模型有何不可?因此是有统一性的。
但两者侧重的方向不一样,应该说损失函数的设定,需要从训练、优化的角度出发,至少它得对模型的参数是连续可导的,而前面提到的P、R、TPR、FPR、AUC之类的都是不可导的。另一方面,模型的评估指标需要具有较明确的统计学意义,比如衡量的模型的分类能力、排序能力、回归能力等等,而不仅仅是衡量了“模型输出值与实际值的差异”这种东西。
网友评论