分类器的性能评估
2016-04-23 22:47
267 查看
本文转载于http://funhacks.net/2015/08/12/classifier-evaluation/
感谢原作者的分享
当我们使用一个分类器进行预测时,我们会遇到一个很重要的问题:如何评价这个分类器的预测效果?这里我构造一个场景作为例子来说明。
现在有10个人,其中1个人有感冒症状,9个人没有感冒症状。现在让医生进行诊断,判断哪些人有感冒,哪些人没有?
医生A的诊断结果是:原本有感冒的那个人被诊断为没有感冒,而没有感冒的9个人当中有8个人被正确判定,有1个人被误诊为有感冒。
在这个例子中,医生就相当于一个分类器,我们现在要对他的诊断结果进行评估。通常情况下,我们可能会使用准确率(accuracy)对预测效果进行评估,准确率被定义为:对于给定的测试数据集,分类器正确分类的样本数与总样本数之比。
因此,医生A的正确率为:8/10=80%8/10=80%。
假设另外一个医生B,他未经思考,将所有人都判定为没有感冒,而他的准确率为:9/10=90%9/10=90%。显然,仅仅通过准确率来评估医生的诊断结果是不靠谱的,这时,我们就需要使用其他指标进行评估了。在本文中,我们主要讨论二分类器的性能评估。
混淆矩阵(Confusion Matrix)用于把实际样本值(true class)和模型预测值(predicted class)进行联列表分析。在二类分类的问题中,我们一般会把样本分为正类(或正例)和负类(负例),正类通常指我们在分类问题中所关注的类,比如在上面的例子中,感冒是我们所关注的,因此它是正类。一般我们可以用-1表示负类,+1表示正类。
其中,各个数据的含义如下:
由上面的表格可以知道,实际样本的的负类数为N=TN+FPN=TN+FP;正类数为P=FN+TPP=FN+TP;总样本数为C=N+pC=N+p。
对于上面的例子,我们可以用如下表格展示医生A的诊断结果:
下面,我们给出一些指标的形式化定义:
准确率(accuracy)
accuracy=TP+TNP+Naccuracy=TP+TNP+N
准确率用于描述模型正确分类的样本数与总样本数之比。
精确率(precision)
precision=TPTP+FPprecision=TPTP+FP
精确率用于描述模型预测正确的正样本数(TP)与模型预测的正样本数(TP+FP)之比,可以衡量模型预测正样本的准确性。
召回率(recall)
recall=TPTP+FNrecall=TPTP+FN
召回率用于描述模型预测正确的正样本数(TP)与实际正样本数(TP+FN)之比,可以衡量模型预测正样本的可信性。
F1-measure
精确率和召回率可以合并成为另一个度量,称为F1F1度量,它是精确率和召回率的调和均值:
2F1=1precision+1recall2F1=1precision+1recall
F1=2TP2TP+FP+FNF1=2TP2TP+FP+FN
F1指标用于综合考虑精确率和召回率。
除了使用上面的准确率、精确率等指标,针对只关注正例的分类器指标,更常用的是ROC(Receiver Operating Characteristic,受试者特征)曲线和AUC(Area Under Curve)。
在定义ROC之前,我们先定义以下两个指标:
False Positive Rate(FRP,假正率)
FRP用于描述在所有实际为负例(N=TN+FP)的样本中,被错误地判断为正例(FP)的比例,即
FPR=FPFP+TNFPR=FPFP+TN
True Positive Rate(TPR,真正率)
TPR用于描述在所有实际为正例(P=TP+FN)的样本中,被正确地判断为正例(TP)的比例,即
TPR=TPTP+FNTPR=TPTP+FN
对于二类分类的问题,一些分类器得到的结果往往不是0,1或-1,+1这样的标签,比如逻辑斯谛回归,它会得到一个概率值,通过与设定的阈值进行比较,可以0,1这样的标签。我们改变分类器的阈值,每改变一次,就会得到一对FPRFPR和TPRTPR的值,以FPRFPR为横轴,TPRTPR为纵轴,就得到如下的ROC空间:
![](http://7xiht5.com1.z0.glb.clouddn.com/blog_Roccurves.png)
图片来源:修改自wikipedia
我们可以看出,左上角的点(FPR=0,TPR=1),为完美分类;对角线上方的点(TPR > FPR),比如点A表示分类大体是正确的;而对角线上的点(TPR=FPR),比如点B,表示错一半,对一半;而对角线下方的点(TPR < FPR),比如点C表示分类大体是错误的。ROC曲线距离左上角越近,则分类器的效果越好。使用ROC曲线来衡量所考虑的目的是:在尽量少的”误诊“(假正率FPR)基础上,尽可能多地检验出正例的个体(真正率TPR)。
如果ROC曲线经过点(0,1),即FPR=0,TPR=1,则表示为最优的分类器,然而绝大多数的ROC曲线并非如此,此时可通过引入ROC曲线下的面积AUC(Area Under Curve)来衡量不同模型间ROC曲线的表现情况。AUC面积越大,该模型的ROC曲线表现越好,模型越可用。
AUC=1AUC=1
完美分类器,能正确将正例和负例进行划分
0.5<AUC<10.5<AUC<1
比随机猜测好,通过设定一个好的阈值,才能得到好的分类效果
AUC=0.5AUC=0.5
跟随机猜测一样,模型没有预测价值
AUC<0.5AUC<0.5
比随机猜测差,在这种情况下,可以对结果取反
统计学习方法,李航 著
http://alexkong.net/2013/06/introduction-to-auc-and-roc/
https://argcv.com/articles/1036.c
/article/7692408.html
数据挖掘导论,Pang-Ning Tan 等著,范明 等译
感谢原作者的分享
1. 背景
当我们使用一个分类器进行预测时,我们会遇到一个很重要的问题:如何评价这个分类器的预测效果?这里我构造一个场景作为例子来说明。现在有10个人,其中1个人有感冒症状,9个人没有感冒症状。现在让医生进行诊断,判断哪些人有感冒,哪些人没有?
医生A的诊断结果是:原本有感冒的那个人被诊断为没有感冒,而没有感冒的9个人当中有8个人被正确判定,有1个人被误诊为有感冒。
在这个例子中,医生就相当于一个分类器,我们现在要对他的诊断结果进行评估。通常情况下,我们可能会使用准确率(accuracy)对预测效果进行评估,准确率被定义为:对于给定的测试数据集,分类器正确分类的样本数与总样本数之比。
因此,医生A的正确率为:8/10=80%8/10=80%。
假设另外一个医生B,他未经思考,将所有人都判定为没有感冒,而他的准确率为:9/10=90%9/10=90%。显然,仅仅通过准确率来评估医生的诊断结果是不靠谱的,这时,我们就需要使用其他指标进行评估了。在本文中,我们主要讨论二分类器的性能评估。
2.
混淆矩阵
混淆矩阵(Confusion Matrix)用于把实际样本值(true class)和模型预测值(predicted class)进行联列表分析。在二类分类的问题中,我们一般会把样本分为正类(或正例)和负类(负例),正类通常指我们在分类问题中所关注的类,比如在上面的例子中,感冒是我们所关注的,因此它是正类。一般我们可以用-1表示负类,+1表示正类。-1 (实际) | +1 (实际) | |
---|---|---|
-1(预测) | True negative (TN 真负例) | False negative(FN假负例) |
+1(预测) | False positive(FP假正例) | True positive (TP真正例) |
含义 | |
---|---|
TN | 模型将负类(实际)预测为负类的样本数 |
FN | 模型将正类(实际)预测为负类的样本数 |
FP | 模型将负类(实际)预测为正类的样本数 |
TP | 模型将正类(实际)预测为正类的样本数 |
对于上面的例子,我们可以用如下表格展示医生A的诊断结果:
-1 (实际没有感冒) | +1 (实际有感冒) | |
---|---|---|
-1(预测没有感冒) | 8 (TN 真负例) | 1(FN假负例) |
+1(预测有感冒) | 1(FP假正例) | 0 (TP真正例) |
准确率(accuracy)
accuracy=TP+TNP+Naccuracy=TP+TNP+N
准确率用于描述模型正确分类的样本数与总样本数之比。
精确率(precision)
precision=TPTP+FPprecision=TPTP+FP
精确率用于描述模型预测正确的正样本数(TP)与模型预测的正样本数(TP+FP)之比,可以衡量模型预测正样本的准确性。
召回率(recall)
recall=TPTP+FNrecall=TPTP+FN
召回率用于描述模型预测正确的正样本数(TP)与实际正样本数(TP+FN)之比,可以衡量模型预测正样本的可信性。
F1-measure
精确率和召回率可以合并成为另一个度量,称为F1F1度量,它是精确率和召回率的调和均值:
2F1=1precision+1recall2F1=1precision+1recall
F1=2TP2TP+FP+FNF1=2TP2TP+FP+FN
F1指标用于综合考虑精确率和召回率。
3.
ROC曲线
除了使用上面的准确率、精确率等指标,针对只关注正例的分类器指标,更常用的是ROC(Receiver Operating Characteristic,受试者特征)曲线和AUC(Area Under Curve)。在定义ROC之前,我们先定义以下两个指标:
False Positive Rate(FRP,假正率)
FRP用于描述在所有实际为负例(N=TN+FP)的样本中,被错误地判断为正例(FP)的比例,即
FPR=FPFP+TNFPR=FPFP+TN
True Positive Rate(TPR,真正率)
TPR用于描述在所有实际为正例(P=TP+FN)的样本中,被正确地判断为正例(TP)的比例,即
TPR=TPTP+FNTPR=TPTP+FN
对于二类分类的问题,一些分类器得到的结果往往不是0,1或-1,+1这样的标签,比如逻辑斯谛回归,它会得到一个概率值,通过与设定的阈值进行比较,可以0,1这样的标签。我们改变分类器的阈值,每改变一次,就会得到一对FPRFPR和TPRTPR的值,以FPRFPR为横轴,TPRTPR为纵轴,就得到如下的ROC空间:
![](http://7xiht5.com1.z0.glb.clouddn.com/blog_Roccurves.png)
图片来源:修改自wikipedia
我们可以看出,左上角的点(FPR=0,TPR=1),为完美分类;对角线上方的点(TPR > FPR),比如点A表示分类大体是正确的;而对角线上的点(TPR=FPR),比如点B,表示错一半,对一半;而对角线下方的点(TPR < FPR),比如点C表示分类大体是错误的。ROC曲线距离左上角越近,则分类器的效果越好。使用ROC曲线来衡量所考虑的目的是:在尽量少的”误诊“(假正率FPR)基础上,尽可能多地检验出正例的个体(真正率TPR)。
4.
AUC
如果ROC曲线经过点(0,1),即FPR=0,TPR=1,则表示为最优的分类器,然而绝大多数的ROC曲线并非如此,此时可通过引入ROC曲线下的面积AUC(Area Under Curve)来衡量不同模型间ROC曲线的表现情况。AUC面积越大,该模型的ROC曲线表现越好,模型越可用。AUC=1AUC=1
完美分类器,能正确将正例和负例进行划分
0.5<AUC<10.5<AUC<1
比随机猜测好,通过设定一个好的阈值,才能得到好的分类效果
AUC=0.5AUC=0.5
跟随机猜测一样,模型没有预测价值
AUC<0.5AUC<0.5
比随机猜测差,在这种情况下,可以对结果取反
5.
参考资料
统计学习方法,李航 著http://alexkong.net/2013/06/introduction-to-auc-and-roc/
https://argcv.com/articles/1036.c
/article/7692408.html
数据挖掘导论,Pang-Ning Tan 等著,范明 等译
相关文章推荐
- Java字节流简单的数据传递
- KVM 操作
- MMC、SD等存储卡的区别总结
- /proc目录详解
- php抽象类abstract与接口理解与示…
- IIS理解安装与配置
- php中的socket通信问题
- php编写socket服务TCP/IP
- 免费天气预报接口API以及全国所有…
- 构造函数为什么不能是虚函数
- 使用angularjs ui-bootstrap遇到的问题
- Java用于控制可见性的4个访问修饰符
- Eclipse关联GitHub实现版本控制
- 对聚集表查询的时候,未显式指定排序列的时候,默认查询结果的顺序一定是按照聚集索引顺序排序的吗
- Prime Ring Problem
- 1 第一次画PCB总结
- socket通信简介
- php中类的全面讲解
- 第一次作业(c语言)
- php类中private public prot…