Precision又叫查准率,Recall又叫查全率。这两个指标共同衡量才能评价模型输出结果。

  • TP: 预测为1(Positive),实际也为1(Truth-预测对了)
  • TN: 预测为0(Negative),实际也为0(Truth-预测对了)
  • FP: 预测为1(Positive),实际为0(False-预测错了)
  • FN: 预测为0(Negative),实际为1(False-预测错了)

总的样本个数为:TP+TN+FP+FN。

Accuracy/Precision/Recall的定义

Accuracy = (预测正确的样本数)/(总样本数)=(TP+TN)/(TP+TN+FP+FN)

Precision = (预测为1且正确预测的样本数)/(所有预测为1的样本数) = TP/(TP+FP)

Recall = (预测为1且正确预测的样本数)/(所有真实情况为1的样本数) = TP/(TP+FN)

如何理解Precision/Recall

假设100癌症训练集中,只有1例为癌症。如果模型永远预测y=0,则模型的Precision=99/100,很高。但Recall=0/1=0,非常低。 
所以单纯用Precision来评价模型是不完整的,评价模型时必须用Precision/Recall两个值。

如何理解F1

假设我们得到了模型的Precision/Recall如下

Precision Recall
Algorithm1 0.5
Algorithm2 0.7
Algorithm3 0.02

但由于Precision/Recall是两个值,无法根据两个值来对比模型的好坏。有没有一个值能综合Precision/Recall呢?有,它就是F1。

F1 = 2*(Precision*Recall)/(Precision+Recall)

Algorithm F1
Algorithm1 0.444
Algorithm2 0.175
Algorithm3 0.039

只有一个值,就好做模型对比了,这里我们根据F1可以发现Algorithm1是三者中最优的。

分类阈值对Precision/Recall的影响

做二值分类时,我们认为,若h(x)>=0.5,则predict=1;若h(x)<0.5,则predict=0。这里0.5就是分类阈值。

增加阈值,我们会对预测值更有信心,即增加了查准率。但这样会降低查全率。(High Precision, Low Recall) 
减小阈值,则模型放过的真例就变少,查全率就增加。(Low Precision, High Recall)

from sklearn.metrics import classification_report
y=[0,1,2,2,2]
y_=[0,0,2,2,1]
# sklearn.metrics.classification_report(y_true,y_pred,labels=None,target_names=None,sample_weight=None,digits=2)
# y_true,y_pred 1d array-like
# labels shape=[n_labels] label索引的列表,需要在report中包含的
# target_names 匹配label的可选的display的名字
# sample_weight shape=[n_sample] 可选的sample weights
# digits int 输出的浮点数的个数
# returns 返回每个类别的precision recall F1
target_names=['class 0','class 1','class 2']
print(classification_report(y,y_,target_names=tar
    class 0      0.500     1.000     0.667         1
class 1 0.000 0.000 0.000 1
class 2 1.000 0.667 0.800 3 avg / total 0.700 0.600 0.613 5

Precision,Recall,F1的计算的更多相关文章

  1. 机器学习--如何理解Accuracy, Precision, Recall, F1 score

    当我们在谈论一个模型好坏的时候,我们常常会听到准确率(Accuracy)这个词,我们也会听到"如何才能使模型的Accurcy更高".那么是不是准确率最高的模型就一定是最好的模型? 这篇博文会向大家解释 ...

  2. BERT模型在多类别文本分类时的precision, recall, f1值的计算

    BERT预训练模型在诸多NLP任务中都取得最优的结果.在处理文本分类问题时,即可以直接用BERT模型作为文本分类的模型,也可以将BERT模型的最后层输出的结果作为word embedding导入到我们 ...

  3. 查准与召回(Precision & Recall)

    Precision & Recall 先看下面这张图来理解了,后面再具体分析.下面用P代表Precision,R代表Recall 通俗的讲,Precision 就是检索出来的条目中(比如网页) ...

  4. TP Rate ,FP Rate, Precision, Recall, F-Measure, ROC Area,

    TP Rate ,FP Rate, Precision, Recall, F-Measure, ROC Area, https://www.zhihu.com/question/30643044 T/ ...

  5. Classification week6: precision & recall 笔记

    华盛顿大学 machine learning :classification  笔记 第6周 precision & recall 1.accuracy 局限性 我们习惯用 accuracy ...

  6. 机器学习:评价分类结果(Precision - Recall 的平衡、P - R 曲线)

    一.Precision - Recall 的平衡 1)基础理论 调整阈值的大小,可以调节精准率和召回率的比重: 阈值:threshold,分类边界值,score > threshold 时分类为 ...

  7. 目标检测的评价标准mAP, Precision, Recall, Accuracy

    目录 metrics 评价方法 TP , FP , TN , FN 概念 计算流程 Accuracy , Precision ,Recall Average Precision PR曲线 AP计算 A ...

  8. Handling skewed data---trading off precision& recall

    preision与recall之间的权衡 依然是cancer prediction的例子,预测为cancer时,y=1;一般来说做为logistic regression我们是当hθ(x)>=0 ...

  9. 通过Precision/Recall判断分类结果偏差极大时算法的性能

    当我们对某些问题进行分类时,真实结果的分布会有明显偏差. 例如对是否患癌症进行分类,testing set 中可能只有0.5%的人患了癌症. 此时如果直接数误分类数的话,那么一个每次都预测人没有癌症的 ...

随机推荐

  1. django-Views之常见的几种错误视图代码(三)

    1.404 page not found(找不到对应的页面) 2.500 server error(服务器错误) 3.400 bad request(无效的请求) 4.403 HTTP forbidd ...

  2. python *args,**kwargs参数

    实际上,关键的是*和** 我们以三个例子来解释: 普通的使用参数: def test1(arg): print(arg) test1("a") 输出: a *是将剩下的参数用元祖表 ...

  3. Linux安装h2数据库

    安装H2数据库,为后面mybatisplus3J集成做铺垫 下载jar包 https://pan.baidu.com/s/1tPZQH5tum1CheDxumcN24g 运行jar包 [root@to ...

  4. 重新认识MySQL中的COUNT语句

    在数据库的增删改查操作中,使用最频繁的就是查询操作. 而在所有查询操作中,统计数量操作更是经常被用到. 关于数据库中行数统计,无论是MySQL还是Oracle亦或者是SqlServer,都有一个函数可 ...

  5. 在线预览office文件

    Office Online 实现在线预览 office的在线预览,针对不同的浏览器版本和系统具有要求,具体的相关文档请参考官方文档. 利用office online 平台进行office 文档的在线查 ...

  6. Theano基础

    Theano是python的一个开源库,其解决大量数据问题时性能更好. 首先,给一个关于theano.function的demo: import theano from theano import t ...

  7. python中“end=”用法

    python中“end=”用法:例如print(“#”,end=" \n"),默认换行,print(“#”,end=" ")则在循环中不换行

  8. mysql多种备份与恢复方式一

    基于mysql社区版5.7,严重声明:本文中图方便直接写入了-p数据库密码,在生产环境中如果指定了一定要使用history -C清空历史命令记录哦,所有博客作者原创纯手打,转载一定要注明本博客链接,感 ...

  9. NOIP模拟 31

    补坑 skyh又AK 赛时榜搜索我的姓: 下一条 ... 自闭了. (只是表达对B哥强烈的崇敬) (如果B哥介意我把名字贴出来请联系我删掉) T1一打眼,好像就一个gcd 康了眼大样例,觉得没啥问题 ...

  10. 『题解』Codeforces220B Little Elephant and Array

    更好的阅读体验 Portal Portal1: Codeforces Portal2: Luogu Description The Little Elephant loves playing with ...