【好记性不如烂笔头——关于精确度、召回率、F值、准确率】将数据挖掘中这些评测指标的基本概念做一整理,忘了的时候还可以来查一查。
精确度,有时也叫正确率,是英文中的precision而不是accuracy。表示正确识别为此类的样本数目(TP)/识别为此类的样本总数目(TP+FP)。FP就是那些原本不是此类但被错误的分为此类的样本数目。
召回率,这个名称容易使人把它和召回缺陷产品的比率联想到一起,完全不是一码事。所以另外一种翻译的名称更合适:查全率。表示正确识别为此类的样本数目(TP)/真实情况下的此类的样本数目(TP+FN)。那么真实情况包括哪些呢?一部分自然是正确分类的TP,另一部分就是那些被错误地分到了其他类的样本数目(FN)
所以,公式:
P=TP/(TP+FP)
R=TP/(TP+FN)
还是举个例子吧。网上多数介绍仅用两个分类举例,所以容易把FP和FN错误的当成一个数,其实应该是多个数的和。这里我举个3分类的例子。假定我们有24个样本,真实情况是10个red类,8个yellow类,6个blue类。
用weka做了个例子,假定系统给出的结果如下:
a b c<-- classified as
9 1 0 | a = red
1 7 0 | b = yellow
1 1 4 | c = blue
是这样看的:横向为真实情况,纵向为工具分类结果。即:有11个样本被当作red类。而这11个样本中,有9个确实是red类,还有一个其实是yellew,另一个其实是blue;有9个样本被当作yellow类。这9个样本当中,有7个确实是yellow,还有一个其实是red,另一个其实是blue;有4个样本被当作blue类。而这4个样本也确实是blue。
那么根据前面的公式,可以对red、yellow、blue分别计算正确率和查全率了。
P(red)=9/11R(red)=9/10
P(yellow)=7/9R(yellow)=7/8
P(blue)=4/4R(blue)=4/6
那么我们从直观上感觉一下分类的好坏,正确率虽然很关键,但光有正确率是不够的。比如blue,正确率是100%,但其实只是把2/3的数据挑出来了,还有1/3搞错了。那么更极端的假想一下,如果某一类实际上有10000个样本,最后只分出一个,对是对了。此时正确率还是100%,但我们能认为这个分类结果是可以接受吗?显然不行。所以P值和R同时要比较高才好。于是有了F指标:
F=2*P*R/(P+R)
最后再来说说accuracy,这个通常翻译成准确率。也是一个综合指标:
A=(TP + TN)/(P+N),表示正确分类的样本数目/所有样本总数目。同样,这个分子的写法也容易让人误认为是两个数的和,其实不止。
对于上面那个例子来说,准确率应该是:
A=(9+7+4)/(10+8+6)
推荐阅读
- 【C】题目|【C语言】题集 of ⑥
- JavaScript|JavaScript — 初识数组、数组字面量和方法、forEach、数组的遍历
- JavaScript|JavaScript — call()和apply()、Date对象、Math、包装类、字符串的方法
- 爬虫|若想拿下爬虫大单,怎能不会逆向爬虫,价值过万的逆向爬虫教程限时分享
- c语言|C语言初期学习遇到的特殊点 【三子棋详解】【初学者福音,详细总结,复习能手】
- Python进阶|警惕 Python 中少为人知的 10 个安全陷阱
- javascript|javascript中的数据类型转换
- 有趣的oython|python疲劳驾驶实时检测项目讲解(附代码)
- Python|教你写个简单好用的Python脚本一键自动整理文件非常适合办公用~
- python|oeasy教您玩转python - 007 - # 字符本质