分类算法的评价指标
⼀、引⾔
分类算法有很多,不同分类算法⼜⽤很多不同的变种。不同的分类算法有不同的特定,在不同的数据集上表现的效果也不同,我们需要根据特定的任务进⾏算法的选择,如何选择分类,如何评价⼀个分类算法的好坏,前⾯关于决策树的介绍,我们主要⽤的正确率(accuracy)来评价分类算法。
正确率确实是⼀个很好很直观的评价指标,但是有时候正确率⾼并不能代表⼀个算法就好。⽐如某个地区某天地震的预测,假设我们有⼀堆的特征作为地震分类的属性,类别只有两个:0:不发⽣地震、1:发⽣地震。⼀个不加思考的分类器,对每⼀个测试⽤例都将类别划分为0,那那么它就可能达到99%的正确率,但真的地震来临时,这个分类器毫⽆察觉,这个分类带来的损失是巨⼤的。为什么99%的正确率的分类器却不是我们想要的,因为这⾥数据分布不均衡,类别1的数据太少,完全错分类别1依然可以达到很⾼的正确率却忽视了我们关注的东西。接下来详细介绍⼀下分类算法的评价指标。
⼆、评价指标
1、⼏个常⽤的术语
这⾥⾸先介绍⼏个常见的模型评价术语,现在假设我们的分类⽬标只有两类,计为正例(positive)和负
例(negtive)分别是:
1)True positives(TP): 被正确地划分为正例的个数,即实际为正例且被分类器划分为正例的实例数(样本数);
2)Fal positives(FP): 被错误地划分为正例的个数,即实际为负例但被分类器划分为正例的实例数;
3)Fal negatives(FN):被错误地划分为负例的个数,即实际为正例但被分类器划分为负例的实例数;
4)True negatives(TN): 被正确地划分为负例的个数,即实际为负例且被分类器划分为负例的实例数。
上图是这四个术语的混淆矩阵,我只知道FP叫伪阳率,其他的怎么称呼就不详了。注意P=TP+FN表⽰实际为正例的样本个数,我曾经误以为实际为正例的样本数应该为TP+FP,这⾥只要记住True、Fal描述的是分类器是否判断正确,Positive、Negative是分类器的分类结果。如果正例计为1、负例计为-1,即positive=1、negtive=-1,⽤1表⽰True,-1表⽰Fal,那么实际的类标=TF PN,TF为true或fal,PN为positive或negtive。例如True positives(TP)的实际类标=11=1为正例,Fal positives(FP)的实际类标=(-1)1=-1为负例,Fal 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)灵敏度(nsitive)
nsitive = TP/P,表⽰的是所有正例中被分对的⽐例,衡量了分类器对正例的识别能⼒;
4)特效度(specificity)
specificity = TN/N,表⽰的是所有负例中被分对的⽐例,衡量了分类器对负例的识别能⼒;
5)精度(precision)
精度是精确性的度量,表⽰被分为正例的⽰例中实际为正例的⽐例,precision=TP/(TP+FP);
6)召回率(recall)
召回率是覆盖⾯的度量,度量有多个正例被分为正例,recall=TP/(TP+FN)=TP/P=nsitive,可以看到召回率与灵敏度是⼀样的。
7)其他评价指标
计算速度:分类器训练和预测需要的时间;
鲁棒性:处理缺失值和异常值的能⼒;
可扩展性:处理⼤数据集的能⼒;
可解释性:分类器的预测标准的可理解性,像决策树产⽣的规则就是很容易理解的,⽽神经⽹络的⼀堆参数就不好理解,我们只好把它看成⼀个⿊盒⼦。
对于某个具体的分类器⽽⾔,我们不可能同时提⾼所有上⾯介绍的指标,当然,如果⼀个分类器能正确分对所有的实例,那么各项指标都已经达到最优,但这样的分类器往往不存在。⽐如我们开头说的地震预测,没有谁能准确预测地震的发⽣,但我们能容忍⼀定程度的误报,假设1000次预测中,有5次预测为发现地震,其中⼀次真的发⽣了地震,⽽其他4次为误报,那么正确率从原来的
999/1000=99.9%下降到996/1000=99.6,但召回率从0/1=0%上升为1/1=100%,这样虽然谎报了⼏次地震,但真的地震来临时,我们没有错过,这样的分类器才是我们想要的,在⼀定正确率的前提下,我们要求分类器的召回率尽可能的⾼。新年祝福
abab式成语分类是⼀种重要的数据挖掘算法。分类的⽬的是构造⼀个分类函数或分类模型(即分类器),通过分类器将数据对象映射到某⼀个给定的类别中。分类器的主要评价指标有准确率(Precision)、召回率(Recall)、Fb-score、ROC、AOC等。在研究中也有采⽤Accuracy(正确率)来评价分类器的。但准确率和正确率这两个概念经常有⼈混了。【没有耐⼼看下⾯内容的博友请看最后的结论】
准确率(Precision) 和召回率(Recall)是信息检索领域两个最基本的指标。准确率也称为查准率,召回率也称为查全率。它们的定义如下:
高中恋爱Precision=系统检索到的相关⽂件数量/系统检索到的⽂件总数量
Recall=系统检索到的相关⽂件数量/系统所有相关⽂件数量
Fb-score是准确率和召回率的调和平均:Fb=[(1+b2)P R]/(b2*P+R),⽐较常⽤的是F1。
在信息检索中,准确率和召回率是互相影响的,虽然两者都⾼是⼀种期望的理想情况,然⽽实际中常常是准确率⾼、召回率就低,或者召回率低、但准确率⾼。所以在实际中常常需要根据具体情况做出取舍,例如对⼀般搜索的情况是在保证召回率的情况下提升准确率,⽽如果是疾病监测、反垃圾邮件等,则是在保证准确率的条件下,提升召回率。但有时候,需要兼顾两者,那么就可以⽤F-score指标。
ROC和AUC是评价分类器的指标。ROC是受试者⼯作特征曲线 receiver operating characteristic curve ) 的简写,⼜称为感受性曲线(nsitivity curve)。得此名的原因在于曲线上各点反映着相同的感受性,它们都是对同⼀信号刺激的反应,只不过是在⼏种不同的判定标准下所得的结果⽽已[1]。ROC是反映敏感性和特异性连续变量的综合指标,是⽤构图法揭⽰敏感性和特异性的相互关系,它通过将
连续变量设定出多个不同的临界值,从⽽计算出⼀系列敏感性和特异性,再以敏感性为纵坐标、(1-特异性)为横坐标绘制成曲线。AUC是ROC曲线下⾯积(Area Under roc Curve)的简称,顾名思义,AUC的值就是处于ROC curve下⽅的那部分⾯积的⼤⼩。通常,AUC的值介于0.5到1.0之间,AUC越⼤,诊断准确性越⾼。在ROC曲线上,最靠近坐标图左上⽅的点为敏感性和特异性均较⾼的临界值。
为了解释ROC的概念,让我们考虑⼀个⼆分类问题,即将实例分成正类(positive)或负类(negative)。对⼀个⼆分问题来说,会出现四种情况。如果⼀个实例是正类并且也被预测成正类,即为真正类(True positive),如果实例是负类被预测成正类,称之为假正类(Fal positive)。相应地,如果实例是负类被预测成负类,称之为真负类(Truenegative),正类被预测成负类则为假负类(falnegative)。列联表或混淆矩阵如下表所⽰,1代表正类,0代表负类。
基于该列联表,定义敏感性指标为:nsitivity=TP/(TP+FN)。敏感性指标⼜称为真正类率(truepositive rate ,TPR),刻画的是分类器所识别出的正实例占所有正实例的⽐例。
另外定义负正类率(fal positive rate, FPR),计算公式为:FPR=FP/(FP+TN).负正类率计算的是分类器错认为正类的负实例占所有负实例的⽐例
定义特异性指标为:Specificity=TN/(FP+TN)=1-FPR。特异性指标⼜称为真负类率(True Negative Rate,TNR)。
我们看,实际上,敏感性指标就是召回率,特异性指标=1-FPR。
ROC曲线由两个变量绘制。横坐标是1-specificity,即负正类率(FPR),纵坐标是 Sensitivity,即真正类率(TPR)。
在此基础上,还可以定义正确率(Accuracy)和错误率(Error)。 Accuracy=(TP+TN)/(TP+FP+TN+FN) , Error=
女单世界排名(FP+FN)/(TP+FP+TN+FN)。如果把预测为1看作检索结果,则准确率Precision= TP/(TP+FP)。
结论:
分类正确率(Accuracy),不管是哪个类别,只要预测正确,其数量都放在分⼦上,⽽分母是全部数据数量,这说明正确率是对全部数据的判断。⽽准确率在分类中对应的是某个类别,分⼦是预测该类别正确的数量,分母是预测为该类别的全部数据的数量。或者
说,Accuracy是对分类器整体上的正确率的评价,⽽Precision是分类器预测为某⼀个类别的正确率的评价。
⾃然语⾔处理(ML),机器学习(NLP),信息检索(IR)等领域,评估(Evaluation)是⼀个必要的⼯作,⽽其评价指标往往有如下⼏点:准确率(Accuracy),精确率(Precision),召回率(Recall)和F1-Measure。
衣服起静电本⽂将简单介绍其中⼏个概念。中⽂中这⼏个评价指标翻译各有不同,所以⼀般情况下推荐使⽤英⽂。
现在我先假定⼀个具体场景作为例⼦。
基层党建工作假如某个班级有男⽣80⼈,⼥⽣20⼈,共计100⼈.⽬标是找出所有⼥⽣.
现在某⼈挑选出50个⼈,其中20⼈是⼥⽣,另外还错误的把30个男⽣也当作⼥⽣挑选出来了.
作为评估者的你需要来评估(evaluation)下他的⼯作
⾸先我们可以计算准确率(accuracy),其定义是: 对于给定的测试数据集,分类器正确分类的样本数与总样本数之⽐。也就是损失函数是0-1损失时测试数据集上的准确率[1].
这样说听起来有点抽象,简单说就是,前⾯的场景中,实际情况是那个班级有男的和⼥的两类,某⼈(也就是定义中所说的分类器)他⼜把班级中的⼈分为男⼥两类。accuracy需要得到的是此君分正确的⼈占总⼈数的⽐例。很容易,我们可以得到:他把其中70(20⼥+50男)⼈判定正确了,⽽总⼈数是100⼈,所以它的accuracy就是70 %(70 / 100).
由准确率,我们的确可以在⼀些场合,从某种意义上得到⼀个分类器是否有效,但它并不总是能有效的评价⼀个分类器的⼯作。举个例
⼦,google抓取了argcv 100个页⾯,⽽它索引中共有10,000,000个页⾯,随机抽⼀个页⾯,分类下,这是不是argcv的页⾯呢?如果以accuracy来判断我的⼯作,那我会把所有的页⾯都判断为"不是argcv的页⾯",因为我这样效率⾮常⾼(return fal,⼀句话),⽽accuracy已经到了99.999%(9,999,900/10,000,000),完爆其它很多分类器⾟⾟苦苦算的值,⽽我这个算法显然不是需求期待的,那怎么解决呢?这就是precision,recall和f1-measure出场的时间了.
在说precision,recall和f1-measure之前,我们需要先需要定义TP,FN,FP,TN四种分类情况.
忆江南的古诗
按照前⾯例⼦,我们需要从⼀个班级中的⼈中寻找所有⼥⽣,如果把这个任务当成⼀个分类器的话,那么⼥⽣就是我们需要的,⽽男⽣不是,所以我们称⼥⽣为"正类",⽽男⽣为"负类".
通过这张表,我们可以很容易得到这⼏个值:
TP=20
FP=30
FN=0
TN=50
精确率(precision)的公式是P=TPTP+FP,它计算的是所有被检索到的item中,"应该被检索到"的item占的⽐例。
在例⼦中就是希望知道此君得到的所有⼈中,正确的⼈(也就是⼥⽣)占有的⽐例.所以其precision也就是40%(20⼥⽣/(20⼥⽣+30误判为⼥⽣的男⽣)).
召回率(recall)的公式是R=TPTP+FN,它计算的是所有检索到的item占所有"应该检索到的item"的⽐例。
在例⼦中就是希望知道此君得到的⼥⽣占本班中所有⼥⽣的⽐例,所以其recall也就是100%(20⼥⽣/(20⼥⽣+ 0 误判为男⽣的⼥⽣))
F1值就是精确值和召回率的调和均值,也就是
2F1=1P+1R
调整下也就是
F1=2PRP+R=2TP2TP+FP+FN
例⼦中 F1-measure 也就是约为 57.143%(2∗0.4∗10.4+1).
需要说明的是,有⼈[2]列了这样个公式
Fa=(a2+1)PRa2(P+R)
将F-measure⼀般化.
F1-measure认为精确率和召回率的权重是⼀样的,但有些场景下,我们可能认为精确率会更加重要,调整参数a,使⽤Fa-measure可以帮助我们更好的evaluate结果.
话虽然很多,其实实现⾮常轻松,点击此处可以看到我的⼀个简单的实现.
>777ke