Precision and Recall,F1 Score

评价一个ML模型的优劣,常用到准确率(Precision)、召回率或全面率(Recall)和F1 Score分数三个概念,经过整理,总算是有清晰的理解。准确率高的模型不一定最优,有可能覆盖不全面,因此用F1 Score来Trade Off二者之间的关系。

以预测cancer为例,malignant为positive,benign为negative。
1、假设用Logistic regression来判断cancer的良性和恶性,在sigmoid函数的判断中,提高threshold,譬如预测h(x) > 0.9才为cancer malignant,因为门槛提高,则预测为cancer 恶性(并且实际为的cancer)的人数量会变少,但是这些人真的是恶性的比率极高,由于门槛高,预测错的人(FP)就更少,或者不可能。也就是说模型准确率很高,预测出来癌症恶性的基本上100%是真的,FP几乎没有,也就是TP/(TP+FP)很高,因此TP比实际样本中Cancer恶性的要少,即预测的够准确,但不够全面。
2、按照上述模型,提高门槛,实际预测为cancer的TP(True Positive)人变少,没有预测出来的都归类到FN(False Negative)也就是预测值覆盖面不够广,Recall= TP/(TP+FN)这就导致recall很低,即全面率很低,也就是预测出来是cancer的人数比实际确实是cancer的要少。准确率虽高,但从Recall这个角度判断,这个模型也不好。

Confusion Matrix Positive – (Predict) Negative – (Predict)
Positive – (Actual) TP FN
Negative – (Actual) FP TN

\(Precision = \frac{TP}{TP+FP} \)

\(Recall = \frac{TP}{TP+FN} \)

\(F1 \ Score = 2*\frac{Precision*Recall}{Precision + Recall} \)

F1 Score用来trade off二者的关系,当precision准确率提高的同时,还要考虑recall也不能太小(全面率要高),二者关系用F1 Score来表达,F1 Score越高越好。

知乎上的举例,贴下来供参考

假设我们手上有60个正样本,40个负样本,我们要找出所有的正样本,假设现有模型预测结果,查找出正类一共50个,其中只有40个是真正的正样本,计算上述各指标。

  • TP: 将正类预测为正类数 40
  • FN: 将正类预测为负类数 20
  • FP: 将负类预测为正类数 10
  • TN: 将负类预测为负类数 30

准确率(accuracy) = 预测对的/所有 = (TP+TN)/(TP+FN+FP+TN) = 70%
精确率(precision) = TP/(TP+FP) = 80%,成功预测的正类/所有与测为正的类
召回率(recall) = TP/(TP+FN) = 2/3,成功预测的正类/所有真的是正类,比率,查全率

准确率和召回率是广泛用于信息检索和统计学分类领域的两个度量值,用来评价结果的质量。其中精度是检索出相关文档数与检索出的文档总数的比率,衡量的是检索系统的查准率;召回率是指检索出的相关文档数和文档库中所有的相关文档数的比率,衡量的是检索系统的查全率。
一般来说,Precision就是检索出来的条目(比如:文档、网页等)有多少是准确的,Recall就是所有准确的条目有多少被检索出来了。
正确率、召回率和 F 值是在鱼龙混杂的环境中,选出目标的重要评价指标。不妨看看这些指标的定义先:

  1. 正确率 = 提取出的正确信息条数 / 提取出的信息条数
  2. 召回率 = 提取出的正确信息条数 / 样本中的信息条数
    两者取值在0和1之间,数值越接近1,查准率或查全率就越高。
  3. F值 = 正确率 * 召回率 * 2 / (正确率 + 召回率) (F 值即为正确率和召回率的调和平均值)
    不妨举这样一个例子:某池塘有1400条鲤鱼,300只虾,300只鳖。现在以捕鲤鱼为目的。撒一大网,逮着了700条鲤鱼,200只虾,100只鳖。那么,这些指标分别如下:
    正确率 = 700 / (700 + 200 + 100) = 70%
    召回率 = 700 / 1400 = 50%
    F值 = 70% * 50% * 2 / (70% + 50%) = 58.3%
    不妨看看如果把池子里的所有的鲤鱼、虾和鳖都一网打尽,这些指标又有何变化:
    正确率 = 1400 / (1400 + 300 + 300) = 70%
    召回率 = 1400 / 1400 = 100%
    F值 = 70% * 100% * 2 / (70% + 100%) = 82.35%
    由此可见,正确率是评估捕获的成果中目标成果所占得比例;召回率,顾名思义,就是从关注领域中,召回目标类别的比例;而F值,则是综合这二者指标的评估指标,用于综合反映整体的指标。
    当然希望检索结果Precision越高越好,同时Recall也越高越好,但事实上这两者在某些情况下有矛盾的。比如极端情况下,我们只搜索出了一个结果,且是准确的,那么Precision就是100%,但是Recall就很低;而如果我们把所有结果都返回,那么比如Recall是100%,但是Precision就会很低。因此在不同的场合中需要自己判断希望Precision比较高或是Recall比较高。如果是做实验研究,可以绘制Precision-Recall曲线来帮助分析。

暂无评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注


虚拟化 | 云计算 | 机器学习 | 股市复盘
© 2024 涛哥,版权所有, 京ICP备20014492-2号