分类算法评价(集合)

一、引言

  分类算法有很多,不同分类算法又用很多不同的变种。不同的分类算法有不同的特定,在不同的数据集上表现的效果也不同,我们需要根据特定的任务进行算法的选择,如何选择分类,如何评价一个分类算法的好坏,前面关于决策树的介绍,我们主要用的正确率(accuracy)来评价分类算法。

  正确率确实是一个很好很直观的评价指标,但是有时候正确率高并不能代表一个算法就好。比如某个地区某天地震的预测,假设我们有一堆的特征作为地震分类的属性,类别只有两个:0:不发生地震、1:发生地震。一个不加思考的分类器,对每一个测试用例都将类别划分为0,那那么它就可能达到99%的正确率,但真的地震来临时,这个分类器毫无察觉,这个分类带来的损失是巨大的。为什么99%的正确率的分类器却不是我们想要的,因为这里数据分布不均衡,类别1的数据太少,完全错分类别1依然可以达到很高的正确率却忽视了我们关注的东西。接下来详细介绍一下分类算法的评价指标。

二、评价指标

  1、几个常用的术语

  这里首先介绍几个常见模型评价术语,现在假设我们的分类目标只有两类,计为正例(positive)和负例(negtive)分别是:

  1)True positives(TP):  被正确地划分为正例的个数,即实际为正例且被分类器划分为正例的实例数(样本数);

  2)False positives(FP): 被错误地划分为例的个数,即实际为负例但被分类器划分为正例的实例数;

  3)False negatives(FN):被错误地划分为例的个数,即实际为例但被分类器划分为例的实例数;

  4)True negatives(TN): 被正确地划分为的个数,即实际为例且被分类器划分为例的实例数。  

 

 

 

 

预测类别

 

Yes

No

总计

Yes

TP

FN

P(实际为Yes)

No

FP

TN

N(实际为No)

总计

P’(被分为Yes)

N’(被分为No)

P+N

  上图是这四个术语的混淆矩阵,我只知道FP叫伪阳率,其他的怎么称呼就不详了。注意P=TP+FN表示实际为正例的样本个数,我曾经误以为实际为正例的样本数应该为TP+FP,这里只要记住True、False描述的是分类器是否判断正确,Positive、Negative是分类器的分类结果。如果正例计为1、负例计为-1,即positive=1、negtive=-1,用1表示True,-1表示False,那么实际的类标=TF*PN,TF为true或false,PN为positive或negtive。例如True positives(TP)的实际类标=1*1=1为正例,False positives(FP)的实际类标=(-1)*1=-1为负例,False negatives(FN)的实际类标=(-1)*(-1)=1为正例,True negatives(TN)的实际类标=1*(-1)=-1为负例。

  2、评价指标

  1)正确率(accuracy)

  正确率是我们最常见的评价指标,accuracy = (TP+TN)/(P+N),这个很容易理解,就是被分对的样本数除以所有的样本数,通常来说,正确率越高,分类器越好;

  2)错误率(error rate)

  错误率则与正确率相反,描述被分类器错分的比例,error rate = (FP+FN)/(P+N),对某一个实例来说,分对与分错是互斥事件,所以accuracy =1 -  error rate;

  3)灵敏度(sensitive)

  sensitive = TP/P,表示的是所有正例中被分对的比例,衡量了分类器对正例的识别能力;

  4)特效度(specificity)

  specificity = TN/N,表示的是所有负例中被分对的比例,衡量了分类器对负例的识别能力;

  5)精度(precision)

  精度是精确性的度量,表示被分为正例的示例中实际为正例的比例,precision=TP/(TP+FP);

  6)召回率(recall)

  召回率是覆盖面的度量,度量有多个正例被分为正例,recall=TP/(TP+FN)=TP/P=sensitive,可以看到召回率与灵敏度是一样的。

  7)其他评价指标

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

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

 

======================================================

 

一、引言

分类算法有很多,不同分分类算法又用很多不同的变种。不同的分类算法有不同的特定,在不同的数据集上表现的效果也不同,我们需要根据特定的任务进行算法的选择,如何选择分类,如何评价一个分类算法的好坏,前面关于决策树的介绍,我们主要用的正确率(accuracy)来评价分类算法。

正确率确实是一个很好很直观的评价指标,但是有时候正确率高并不能代表一个算法就好。比如某个地区某天地震的预测,假设我们有一堆的特征作为地震分类的属性,类别只有两个:0:不发生地震、1:发生地震。一个不加思考的分类器,对每一个测试用例都将类别划分为0,那那么它就可能达到99%的正确率,但真的地震来临时,这个分类器毫无察觉,这个人类带来的损失是巨大的。为什么99%的正确率的分类器却不是我们想要的,因为这里数据分布不均衡,类别1的数据太少,完全错分类别1依然可以达到很高的正确率却忽视了我们关注的东西。接下来详细介绍一下分类算法的评价指标。

二、评价指标

1、几个常用的术语

这里首先介绍几个 常见 的 模型评价术语,现在假设我们的分类目标只有两类,计为正例(positive)和负例(negtive)分别是:

1)True positives(TP):  被正确地划分为正例的个数,即实际为正例且被分类器划分为正例的实例数(样本数);

2)False positives(FP): 被错误地划分为 正 例的个数,即 实际为负例但被分类器划分为正例的实例数;

3)False negatives(FN):被 错误地划分为 负 例的个数,即 实际为 正 例但被分类器划分为 负 例的实例数;

4)True  negatives(TN):  被正确地划分为 负 例 的个数 ,即实际为 负 例且被分类器划分为 负 例的实例数。

预测类别

 

Yes

No

总计

Yes

TP

FN

P (实际为Yes )

No

FP

TN

N (实际为No )

总计

P’ (被分为Yes )

N’ (被分为No )

P+N

上图是这四个术语的混淆矩阵,我只知道FP叫伪阳率,其他的怎么称呼就不详了。注意P=TP+FN表示实际为正例的样本个数,我曾经误以为实际为正例的样本数应该为TP+FP,这里只要记住True、False描述的是分类器是否判断正确,Positive、Negative是分类器的分类结果。如果 正例计为1、负例计为-1,即positive=1、negtive=-1,用1表示True,-1表示False,那么实际的类标=TF*PN,TF为true或false,PN为positive或negtive。例如True positives(TP)的实际类标=1*1=1为正例,False positives(FP)的实际类标=(-1)*1=-1为负例,False negatives(FN)的实际类标=(-1)*(-1)=1为正例,True negatives(TN)的实际类标=1*(-1)=-1为负例。

2、评价指标

1)正确率(accuracy

正确率是我们最常见的评价指标, accuracy = (TP+TN)/(P+N),这个很容易理解,就是被分对的样本数除以所有的样本数,通常来说,正确率越高,分类器越好;

2)错误率(error rate)

错误率则与正确率相反,描述被分类器错分的比例,error rate = (FP+FN)/(P+N),对某一个实例来说,分对与分错是互斥事件,所以 accuracy =1 -  error rate;

3)灵敏度(sensitive)

sensitive = TP/P,表示的是所有正例中被分对的比例,衡量了分类器对正例的识别能力;

4)特效度(specificity)

specificity = TN/N, 表示的是所有负例中被分对的比例,衡量了分类器对负例的识别能力;

5)精度(precision

精度是精确性的度量,表示被分为正例的示例中实际为正例的比例, precision=TP/(TP+FP);

6)召回率(recall

召回率是覆盖面的度量,度量有多个正例被分为正例, recall=TP/(TP+FN)=TP/P=sensitive,可以看到召回率与灵敏度是一样的。

7)其他评价指标

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

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


(http://blog.csdn.NET/xiaoyu714543065/article/details/8559741)

查准率和查全率反映了分类器分类性能的两个方面。如果综合考虑查准率与查全率,可以得到新的评价指标F1测试值,也称为综合分类率

 

      为了综合多个类别的分类情况,评测系统整体性能,经常采用的还有微平均F1(micro-averaging)和宏平均F1(macro-averaging )两种指标。宏平均F1与微平均F1是以两种不同的平均方式求的全局的F1指标。其中宏平均F1的计算方法先对每个类别单独计算F1值,再取这些F1值的算术平均值作为全局指标。而微平均F1的计算方法是先累加计算各个类别的a、b、c、d的值,再由这些值求出F1值。由两种平均F1的计算方式不难看出,宏平均F1平等对待每一个类别,所以它的值主要受到稀有类别的影响,而微平均F1平等考虑文档集中的每一个文档,所以它的值受到常见类别的影响比较大。


(http://blog.csdn.net/xiahouzuoxin/article/details/43165253)

ROC与PR指标

Precision和Recall(有人中文翻译成召回率)则分别构成了PR曲线的y轴和x轴。

ROC:



ROC曲线绘制代码:

  1. Local: prec_rec.m
  2. Mathworks: prec_rec.m


AUC(Area Under the ROC Curve)

 

============================================================================

 

分类算法中的ROC与PR指标

做过图像识别、机器学习或者信息检索相关研究的人都知道,论文的实验部分都要和别人的算法比一比。可怎么比,人多嘴杂,我说我的方法好,你说你的方法好,各做各的总是不行——没规矩不成方圆。于是慢慢的大家就形成了一种约定,用ROC曲线和PR曲线来衡量算法的优劣。关于ROC曲线和PR曲线的详细介绍可参考资料:

  1. ROC Analysis and the ROC Convex Hull
  2. Tom Fawcett,An introduction to ROC analysis
  3. Jesse Davis,Mark Goadrich. The Relationship Between Precision-Recall and ROC Curves.,还有一份与这篇文章对应的PPT讲稿

有这3份资料足以,应用分析和理论分析都讲得很不错。

基本概念

  1. True Positives,TP:预测为正样本,实际也为正样本的特征数
  2. False Positives,FP:预测为正样本,实际为负样本的特征数(错预测为正样本了,所以叫False)
  3. True Negatives,TN:预测为负样本,实际也为负样本的特征数
  4. False Negatives,FN:预测为负样本,实际为正样本的特征数(错预测为负样本了,所以叫False)

接着往下做做小学的计算题:

  • TP+FP+FN+FN:特征总数(样本总数)
  • TP+FN:实际正样本数
  • FP+TN:实际负样本数
  • TP+FP:预测结果为正样本的总数
  • TN+FN:预测结果为负样本的总数

有些绕,为做区分,可以这样记:相同的后缀(P或N)之和表示__预测__正样本/负样本总数,前缀加入T和F;实际样本总数的4个字母完全不同,含TP(正正得正)表示实际正样本,含FP(负正得负)表示实际负样本。

ROC曲线和PR曲线

True Positive Rate(TPR)和False Positive Rate(FPR)分别构成ROC曲线的y轴和x轴。

  1. TPR=TP/(TP+FN),实际正样本中被预测正确的概率
  2. FPR=FP/(FP+TN),实际负样本中被错误预测为正样本的概率

实际学习算法中,预测率100%的话,TPR=100%和FPR=0,所以TPR越大而FPR越小越好。仅用其中一个作为衡量指标可以吗?考虑这么一种情况,一幅图片假如600x480个像素,其中目标(正样本)仅有100个像素,假如有某种算法,预测的目标为包含所有像素600x480,这种情况下TPR的结果是TPR=100%,但FPR却也接近于100%。明显,TPR满足要求但结果却不是我们想要的,因为FPR太高了。

Precision和Recall(有人中文翻译成召回率)则分别构成了PR曲线的y轴和x轴。

  1. Precision=TP/(TP+FP),预测结果为有多少正样本是预测正确了的
  2. Recall=TP/(TP+FN),召回率很有意思,这个其实就=TPR,相对于Precision只不过参考样本从预测总正样本数结果变成了实际总正样本数。

同理,Precision和Recall同时考虑才能确定算法好坏。好了,原来一切尽在尽在下图中,

图:Confusion Matrix

既然ROC和PR都是同时要考虑两个指标,一个我好一个你好,到底谁好?画到ROC空间一看便知,如下图,将TPR和FPR分别画在两个坐标轴上,则沿着对角线的方向,离右上角越近,算法效果越好。(由于ROC和PR类似,以下仅讨论ROC空间和ROC曲线。)

图:ROC空间

一个分类算法,找个最优的分类效果,对应到ROC空间中的一个点。通常分类器的输出都是Score,比如SVM、神经网络,有如下的预测结果:

TABLE 一般分类器的结果都是Score表
no. True Hyp Score
1 p Y 0.99999
2 p Y 0.99999
3 p Y 0.99993
4 p Y 0.99986
5 p Y 0.99964
6 p Y 0.99955
7 n Y 0.68139
8 n Y 0.50961
9 n N 0.48880
10 n N 0.44951

True表示实际样本属性,Hyp表示预测结果样本属性,第4列即是Score,Hyp的结果通常是设定一个阈值,比如上表就是0.5,Score>0.5为正样本,小于0.5为负样本,这样只能算出一个ROC值,为更综合的评价算法的效果,通过取不同的阈值,得到多个ROC空间的值,将这些值描绘出ROC空间的曲线,即为ROC曲线。

图:ROC曲线绘制

我们只要明白这个基本的点,详细的ROC曲线绘制已经有很多代码了,资料1就提供了Prel直接根据Score绘制ROC曲线的代码,Matlab也有,下载链接:

  1. Local: prec_rec.m
  2. Mathworks: prec_rec.m

有了ROC曲线,更加具有参考意义的评价指标就有了,在ROC空间,算法绘制的ROC曲线越凸向西北方向效果越好,有时不同分类算法的ROC曲线存在交叉,因此很多文章里用AUC(即Area Under Curve曲线下的面积)值作为算法好坏的评判标准。关于这里的凸理论可参考文章开头的[资料2]。

与ROC曲线左上凸不同的是,PR曲线是右上凸效果越好,下面是两种曲线凸向的简单比较:

图:算法在ROC空间与PR空间的不同比较

作为衡量指标,选择ROC或PR都是可以的。但是资料3显示,ROC和PR虽然具有相同的出发点,但并不一定能得到相同的结论,在写论文的时候也只能参考着别人已有的进行选择了。


 

=======================================================分类

算法中常用的评价指标

 

对于分类器(分类算法),评价指标主要有:1)Precision;2)Recall;3)F-score;4)Accuracy;5)ROC;6)AUC
1.首先,介绍混淆矩阵的概念。

混淆矩阵是监督学习中的一种可视化工具,主要用于比较分类结果和实例的真实信息。矩阵中的每一行代表实例的预测类别,每一列代表实例的真实类别。


分类算法评价(集合)_第1张图片
图1  混淆矩阵

如图1所示,在混淆矩阵中,每一个实例可以划分为以下四种类型之一:
a、真正(True Positive , TP):被模型预测为正的正样本
b、假正(False Positive , FP):被模型预测为正的负样本
c、假负(False Negative , FN):被模型预测为负的正样本
d、真负(True Negative , TN):被模型预测为负的负样本
真正率(True Positive Rate , TPR)【灵敏度(sensitivity)】:TPR = TP /(TP + FN) ,即正样本预测结果数/ 正样本实际数
假负率(False Negative Rate , FNR) :FNR = FN /(TP + FN) ,即被预测为负的正样本结果数/正样本实际数
假正率(False Positive Rate , FPR) :FPR = FP /(FP + TN) ,即被预测为正的负样本结果数 /负样本实际数
真负率(True Negative Rate , TNR)【特指度(specificity)】:TNR = TN /(TN + FP) ,即负样本预测结果数 / 负样本实际数
 
2.然后,由混淆矩阵计算评价指标。

        1) 精确度(Precision): P = TP/(TP+FP)
        2) 召回率(Recall): R = TP/(TP+FN),即真正率
        3) F-score:查准率和查全率的调和平均值, 更接近于P, R两个数较小的那个: F=2* P* R/(P + R)
        4) 准确率(Aaccuracy): 分类器对整个样本的判定能力,即将正的判定为正,负的判定为负: A = (TP + TN)/(TP + FN + FP + TN) 
        5) ROC(Receiver Operating Characteristic)
              ROC的主要分析工具是一个画在ROC空间的曲线——ROC curve,横坐标为false positive rate(FPR),
        纵坐标为true positive rate(TPR)。
如何画ROC曲线?
对于二值分类问题,实例的值往往是连续值,通过设定一个阈值,将实例分类到正类或者负类(比如大于阈值划分为正类)。因此,可以变化阈值,根据不同的阈值进行分类,根据分类结果计算得到ROC空间中相应的点,连接这些点就形成ROC curve。ROC curve经过(0,0) (1,1),实际上(0,0)和(1,1)连线形成的ROC curve实际上代表的是一个随机分类器。一般情况下,这个曲线都应该处于(0,0)和(1,1)连线的上方,如图2所示。
 
分类算法评价(集合)_第2张图片

图2  ROC曲线

ROC曲线上几个关键点的解释
          (TPR=0,FPR=0):把每个实例都预测为负类的模型
          (TPR=1,FPR=1):把每个实例都预测为正类的模型
          (TPR=1,FPR=0):理想模型
  一个好的分类模型应该尽可能靠近图形的左上角,而一个随机猜测模型应位于连接点(TPR=0,FPR=0)和
 (TPR=1,FPR=1)的主对角线上。
为什么使用ROC曲线?
既然已经这么多评价标准,为什么还要使用ROC和AUC呢?因为ROC曲线有个很好的特性:当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。在实际的数据集中经常会出现类不平衡(class imbalance)现象,即负样本比正样本多很多(或者相反),而且测试数据中的正负样本的分布也可能随着时间变化。
       6)        AUC(Area Under ROC Curve)
AUC的值就是处于ROC curve下方的那部分面积的大小。通常,AUC的值介于0.5到1.0之间,较大的AUC代表了较好的performance。如果模型是完美的,那么它的AUG = 1,如果模型是个简单的随机猜测模型,那么它的AUG = 0.5,如果一个模型好于另一个,则它的曲线下方面积相对较大。

 

来源:

http://www.cnblogs.com/fengfenggirl/p/classification_evaluate.html?utm_source=tuicool&utm_medium=referral

http://blog.csdn.net/hermito/article/details/51076728

http://blog.csdn.net/xiahouzuoxin/article/details/43165253

http://blog.sina.com.cn/s/blog_629e606f0102v7a0.html

 

你可能感兴趣的:(分类算法评价(集合))