分类算法评价

分类算法有很多,不同分类算法又用很多不同的变种。不同的分类算法有不同的特定,在不同的数据集上表现的效果也不同,因此需要根据特定的问题和任务选择合适的算法进行求解。对分类算法给出客观的评价,对算法的选择很有必要。

一、常用术语

为了简化和统一考虑分类问题,我们假设分类目标只有两类,正例(positive)和负例(negtive)。则分类器的分类结果可能有四种情况,分别是:

(1)True Positives(TP,真正):预测为正样本,实际也为正样本的特征数;

(2)False Positives(FP,假正):预测为正样本,实际为负样本的特征数;

(3)True Negatives(TN,真负):预测为负样本,实际也为负样本的特征数;

(4)False Negatives(FN,假负):预测为负样本,实际为正样本的特征数;

True,False表示预测正确否。也就是说,预测和实际一致则为True(真),预测和实际不一致则为False(假)。

混淆矩阵(confusion matrix),又称为可能性表格或是错误矩阵。混淆矩阵是分析分类器识别不同类元组的一种有用工具。它是一种特定的矩阵用来呈现算法性能的可视化效果,通常是监督学习。其每一列代表预测值,每一行代表的是实际的类别。这个名字来源于它可以非常容易的表明多个类别是否有混淆(也就是一个class被预测成另一个class)。下表表示上述四个可能,TP和TN表示分类器分类正确,FP和FN表示分类器分类错误。这4个基础指标称为一级指标。

 

 

 

预测类别

 

Yes

No

总计

Yes

TP

FN

P(实际为Yes

No

FP

TN

N(实际为No

总计

P’(被分为Yes

N’(被分为No

P+N

(1)真正率(True Positive Rate,TPR)(也叫灵敏度(sensitivity)):

\[TPR = \frac{TP}{TP + FN} \]

即正样本预测结果数/正样本实际数。

(2)假负率(False Negative Rate,FNR):

\[FNR = \frac{FN} {TP + FN} \]

即被预测为负的正样本结果数/正样本实际数。

(3)假正率(False Positive Rate,FPR):

\[FPR = \frac{FP} {FP + TN} \]

即被预测为正的负样本结果数/负样本实际数。

(4)真负率(True Negative Rate,TNR)(也叫特指度(specificity)):

\[TNR = \frac{TN}{TN + FP} \]

即负样本预测结果数/负样本实际数。

二、评价指标

基于混淆矩阵,分类算法中常用的评价指标如下。

2.1 正确率(accuracy)

正确率是我们最常见的评价指标,分类器对整个样本的判定能力,即将正的判定为正,负的判定为负;

\[accuracy = \frac{TP+TN}{P+N} \]

即被分对的样本数除以所有的样本数,通常来说,正确率越高,分类器越好;

2.2 错误率(error rate)

错误率则与正确率相反,描述被分类器错分的比例

\[error rate =\frac{FP+FN}{P+N} \]

对某一个实例来说,分对与分错是互斥事件,所以$ accuracy =1 - error rate$;

2.3 灵敏度(sensitive)

表示的是所有正例中被分对的比例,衡量了分类器对正例的识别能力

\[sensitive = \frac{TP}{P} \]

2.4 特效度(specificity)

表示的是所有负例中被分对的比例,衡量了分类器对负例的识别能力

\[specificity = \frac{TN}{N} \]

2.5 精确率(precision)

精确率也叫精度,是较精确性的度量,表示被分为正例的示例中实际为正例的比例

\[precision=\frac{TP}{TP+FP} \]

2.6 召回率(recall)

召回率是覆盖面的度量,度量有多个正例被分为正例

\[recall=\frac{TP}{TP+FN}=\frac{TP}{P}=sensitive \]

可以看到召回率与灵敏度是一样的。

在信息检索领域,精确率和召回率又被称为查准率和查全率,是衡量检索系统质量最常用的两个指标

2.7 F1-score

Precision和Recall的调和平均值,是三级指标。

更接近于P, R两个数较小的那个:

\[F1=2P\frac{R}{P + R} \]

P为精确率,R为召回率

2.8 其他评价指标

  • 计算速度:分类器训练和预测需要的时间;
  • 鲁棒性:处理缺失值和异常值的能力;
  • 可扩展性:处理大数据集的能力;
  • 可解释性:分类器的预测标准的可理解性,像决策树产生的规则就是很容易理解的,而神经网络的一堆参数就不好理解,我们只好把它看成一个黑盒子。

  对于某个具体的分类器而言,我们不可能同时提高所有上面介绍的指标,当然,如果一个分类器能正确分对所有的实例,那么各项指标都已经达到最优,但这样的分类器往往不存在。比如我们开头说的地震预测,没有谁能准确预测地震的发生,但我们能容忍一定程度的误报,假设1000次预测中,有5次预测为发现地震,其中一次真的发生了地震,而其他4次为误报,那么正确率从原来的999/1000=99.9%下降到996/1000=99.6,但召回率从0/1=0%上升为1/1=100%,这样虽然谎报了几次地震,但真的地震来临时,我们没有错过,这样的分类器才是我们想要的,在一定正确率的前提下,我们要求分类器的召回率尽可能的高。  

三、分类器性能的表示

分类器性能的表示方法类似信息检索系统的评价方法,可以采用ROC(Receiver Operating Characteristic,接受者操作特性)曲线、AUC(Area Under roc Curve,ROC曲线下的面积)和混淆矩阵等。人们经常使用ROC曲线表示假正(FP)和真正(TP)的关系。ROC曲线的横轴一般表示假正的百分比,纵轴表示真正的百分比。

https://en.wikipedia.org/wiki/Receiver_operating_characteristic

3.1 ROC曲线

ROC的定义

对于两类分类问题,一些分类器得到的结果可能不是0、1这样的标签。如神经网络得到诸如0.5,0.8这样的分类结果。这时我们人为取一个阈值,比如0.4,那么小于0.4的归为0类,大于等于0.4的归为1类,可以得到一个分类结果。

image-20221026120847576

图中虚线C代表0类,虚线A代表1类,实线B代表人为划定的阈值(介于0~1

蓝色表示原始为负例分类得到的统计图,红色表示原始为正例得到的统计图。

那么我们取一条直线,直线左边分为负类,直线右边分为正类,这条直线也就是我们人为所取的阈值。

阈值不同,可以得到不同的结果,但是由分类器决定的统计图始终是不变的。这时候就需要一个独立于阈值,只与分类器有关的评价指标,来衡量特定分类器的好坏。还有在类不平衡的情况下,如正样本有90个,负样本有10个,直接把所有样本分类为正样本,得到识别率为90%,但这显然是没有意义的。如上就是ROC曲线的动机

在ROC曲线方法中使用的两个指标如下:

(1)真正率(TPR),即灵敏度或召回率,其计算公式为:

\[TPR = \frac{TP}{TP+FN}=\frac{TP}{P} \]

(2)假正率(FPR ),其计算公式为:

\[FPR = \frac{FP}{FP+TN}=\frac{FP}{N} \]

ROC曲线的横坐标为假正率,纵坐标为真正率。

例如,在医学诊断中,判断有病的样本。那么尽量把有病的揪出来是主要任务,也就是第一个指标TPR,要越高越好。而把没病的样本误诊为有病的,也就是第二个指标FPR,要越低越好。不难发现,这两个指标之间是相互制约的。如果某个医生对于有病的症状比较敏感,稍微的小症状都判断为有病,那么他的第一个指标应该会很高,但是第二个指标也就相应地变高。最极端的情况下,他把所有的样本都看做有病,那么第一个指标达到1,第二个指标也为1。

ROC的图形化表示

在ROC空间中,一个好的分类模型应该尽可能靠近左上角,而一个随机猜测模型应位于连接(FPR = 0,TPR =0)和(FPR = 1,TPR =1)这两个点的主对角线上。

img

将图中每个点视为不同医生的诊断水平,则有如下形象化地判断:

  1. 左上角的点(TPR=1,FPR=0),为完美分类,说明该医生诊断全对;
  2. 点A(TPR>FPR),医生A的判断大体是正确的
  3. 中线上的点B(TPR=FPR),也就是医生B全都是蒙的,蒙对一半,蒙错一半;
  4. 下半平面的点C(TPR<FPR),这个医生说你有病,那么你很可能没有病,医生C的话我们要反着听。

上图中一个阈值,得到一个点。不同的点代表不同的阈值。为了得到一个独立于阈值的评价指标来衡量这个医生的医术如何,也就是遍历所有的阈值,得到ROC曲线。假设如下就是某个医生的诊断统计图,直线代表阈值。我们遍历所有的阈值,能够在ROC平面上得到如下的ROC曲线。

ROC曲线解释

曲线距离左上角越近,证明分类器效果越好。

ROC和AUC介绍以及如何计算AUC

如上图,有三条ROC曲线,在0.23处取一条直线。那么,在同样的FPR=0.23的情况下,红色分类器得到更高的TPR。也就表明,ROC越往上,分类器效果越好。可以用一个标量值AUC来量化它。

如何绘制ROC曲线

假设已经得出一系列样本被划分为正类的概率,然后按照大小排序,下图是一个示例,图中共有20个测试样本,Class一栏表示每个测试样本原始的标签( p表示正样本, n表示负样本),Score表示每个测试样本属于正样本的概率。总计有10个正样本和10个负样本,从高到低,依次将Score值作为阈值 threshold,当测试样本属于正样本的概率大于或等于这 threshold时,我们认为它为正样本,否则为负样本。

Inst# Class Score (TPR,FPR)
1 p 0.9 (0.1,0)
2 p 0.8 (0.2,0)
3 n 0.7 (0.2,0.1)
4 p 0.6 (0.3,0.1)
5 p 0.55 (0.4,0.1)
6 p 0.54 (0.5,0.1)
7 n 0.53 (0.5,0.2)
8 n 0.52 (0.5,0.3)
9 p 0.51 (0.6,0.3)
10 n 0.505 (0.6,0.4)
11 p 0.4 (0.7,0.4)
12 n 0.39 (0.7,0.5)
13 p 0.38 (0.8,0.5)
14 n 0.37 (0.8,0.6)
15 n 0.36 (0.8,0.7)
16 n 0.35 (0.8,0.8)
17 p 0.34 (0.9,0.8)
18 n 0.33 (0.9,0.9)
19 p 0.30 (1.0,0.9)
20 n 0.1 (1.0,1.0)

在ROC空间平面上描的点

example-roc-curve

3.2 AUC值

AUC值的定义

AUC值为ROC曲线所覆盖的区域面积,显然,AUC越大,分类器分类效果越好。

  1. AUC=1,是完美分类器,采用这个预测模型时,不管设定什么阈值都能得出完美预测。然而绝大多数预测场合,不存在完美分类器。
  2. 0.5 < AUC < 1,优于随机猜测。这个分类器如果妥善设定阈值的话,能有预测价值。
  3. AUC=0.5,跟随机猜测一样,模型没有预测价值。
  4. AUC<0.5,比随机猜测还差;但是可以反预测而行,就优于随机猜测。

AUC值的物理意义

假设分类器的输出是样本属于正类的score(置信度),则AUC的物理意义为任取一对(正、负)样本,正样本的score大于负样本的score的概率

https://blog.csdn.net/geek_hch/article/details/125687463

四、分类器性能的评估方法

4.1 保持法

保持法(Hold-Out Method),随机划分数据集,将原始样本数据随机分为两组:训练集和测试集(也叫验证集),通常按照3:1的比例划分,其中3/4的数据集作为训练集用于模型的建立,1/4数据集作为测试集用于测试所建立模型的性能,把测试结果作为此Hold-Out Method下分类器的性能指标。此种方法的好处的处理简单,只需随机把原始数据分为两组即可,由于是随机的将原始数据分组,所以最后验证集分类器性能的高低与原始数据的分组有很大的关系,所以这种方法得到的结果其实并不具有说服性。

4.2 交叉验证

交叉验证 (Cross-Validation,CV) 是用来验证分类器的性能一种统计分析方法,基本思想是把在某种意义下将原始数据划分为训练集和测试集(也叫验证集), 每个数据记录既有作为训练集,又有作为测试集。虽然有的著作中将保持法(Hold-Out Method)纳入交叉验证方法中,但实际上它并不能算是交叉验证,因为这种方法没有达到交叉的思想。交叉验证的基本过程是:首先用训练集对分类器进行训练得到分类器模型,利用测试集来测试训练得到的分类器模型(model),以此来做为评价分类器的性能指标。常见交叉验证的方法如下:

(A)K折交叉验证(K-Fold Cross-Validation)

将数据集划分成K份,每次是其中的k-1份作为训练集建立模型,剩余的1份作为测试集检测模型性能,共执行K次性能测试, 平均K次测试结果或者使用其它结合方式,最终得到一个单一估测值作为最终模型的性能。常用的是10折交叉检验:把数据随机分成10份,先拿出一份用作测试数据,把其他9份合在一起来建立模型,然后用拿出的一份测试数据对用9份数据建立的模型做测试。这个过程对每一份数据都重复进行一次,得到10个不同的测试结果。平均10次测试结果或者使用其它结合方式,最终得到一个单一估测值作为最终模型的性能。当然,工程中一般还需要进行多次10折交叉验证求均值,例如:10次10折交叉验证,以求更精确一点。

K折交叉验证优点是每一个样本数据都即被用作训练数据,也被用作测试数据。避免的过度学习和欠学习状态的发生,得到的结果比较具有说服力。缺点是K值选取比较困难,针对具体应用难以确定合适的值

(B)留一验证(Leave One Out Cross-Validation)

在大小为N的原始样本集中每次选择一个数据作为测试集,其余的N-1个作为训练集用于测试模型的性能,共执行N次测试,平均K次测试结果或者使用其它结合方式,最终得到一个单一估测值作为最终模型的性能;事实上,这等同于和K折交叉验证是一样的,其中K为原本样本数据集大小N。

留一验证优点是每一个分类器或模型都是用几乎所有的样本来训练模型,最接近样本,这样评估所得的结果比较可靠。实验没有随机因素,整个过程是可重复的。其缺点是:计算成本高,当N非常大时,计算耗时,因为需要建立的模型数量与原始数据样本数量相同,当原始数据样本数量相当大时, 除非每次训练分类器得到模型的速度很快,或是可以用并行化计算减少计算所需的时间,否则该方法实施时间消耗过大,工程意义不大。

posted @ 2022-10-26 13:07  王陸  阅读(159)  评论(0编辑  收藏  举报