十一城

跬步千里,小流江海。

Home Linux ML Python Java Thoughts KmKg BookCan Links About

2018-02-14
机器学习-评价指标-分类问题

• 分类: ml • 标签:

机器学习(ML),自然语言处理(NLP),信息检索(IR)等领域,评估(Evaluation)是一个必要的工作,而其评价指标往往有如下几点:准确率(Accuracy)精确率(Precision)召回率(Recall)F1-Measure

他们存在的场景通常是在测试(Testing)验证(Validating)情况下。

真实情况 预测结果
正例 反例
正例 TP FN
反例 FP TN

准确率 accuracy

TP + FP + FN + TN = 总样本数

A = (TP + TN) / (TP + FN + FP + TN)

准确率 accuracy 对于给定的测试数据集,分类器正确分类的样本数与总样本数之比。也就是损失函数是0-1损失时测试数据集上的准确率,此时在正负样本不均的情况下,容易丧失意义。

大白话就是“你的预测有多少是对的”

精确率 precision -查准率

The number of true positives divided by the number of true positives and false positives.

P = TP / (TP + FP)

预测为正例中的数据真正的正例占多少?

精确率是针对我们预测结果而言的,它表示的是预测为正的样本中有多少是真正的正样本。那么预测为正就有两种可能了,一种就是把正类预测为正类(TP),另一种就是把负类预测为正类(FP)

召回率 recall-查全率

The number of true positives divided by the number of true positives and the number of false negatives.

R = TP / (TP + FN)

召回率是针对我们原来的样本而言的,它表示的是样本中的正例有多少被预测正确了。那也有两种可能,一种是把原来的正类预测成正类(TP),另一种就是把原来的正类预测为负类(FN)。

举个例子,丰田公司的“召回门”事件,当时在全球召回850万辆车,但是这里面真正有问题的车有多少呢?可以理解为丰田公司为了提高“召回率”,下了血本,那也是没有办法的,回到题目,在样本不平衡的情况下提高召回率,只能‘’误杀‘’大部分,就是降低P,这里有一个平衡P和R的一个指标F1,就是两者的调和均值,但是像上面的例子就不需要了,目标就是提高R。

大白话就是“正例里你的预测覆盖了多少”

如何提高机器学习算法的召回率?

先说网上看到的这个汇总回答,就是针对样本失衡的分类学习的,个人认为其中比较可行简单的方案是
1,扩大数据量,然后直接把多数类样本随机删除,直到跟少数类样本的量一致。因为扩大了样本量,所以即便删除掉很多样本,也能保证少数累样本的数量够用
2,把分类问题当成单类模式识别or异常值识别问题。如果失衡问题特别严重,那么换个角度不做二类分类了,就直接当成异常值识别了
汇总回答的地址是 在分类中如何处理训练集中不平衡问题

我之前处理这个问题的时候也用过过抽样和欠抽样(SMOTE),但效果也不好。反倒是直接调整分类算法中对两类样本的权重效果会好些。不过代价也是损失precision。内容地址如下权当是看个例子好了 回顾一下毕业论文中的问题

F1-Measure

Weighted average of precision and recall.

F1-measure 认为精确率和召回率的权重是一样的,但有些场景下,我们可能认为精确率会更加重要

ROC与AUC

相关(Relevant),正类 无关(NonRelevant),负类
被检索到(Retrieved) TP FP
未被检索到(Not Retrieved) FN TN

在信息检索领域,精确率和召回率又被称为查准率查全率

查准率=检索出的相关信息量 / 检索出的信息总量
查全率=检索出的相关信息量 / 系统中的相关信息总量

例子

假设我们手上有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 其实就是分母不同,一个分母是预测为正的样本数,另一个是原来样本中所有的正样本数

  • Accuracy measures the model over all.Precision, recall and F1 measure a model’s relevance. For example, it would be dangerous to predict that cancer will not reoccur (i.e. a false negative) as the person would not seek further treatment. Because of this, it would be wise to choose a model that avoids false negatives (i.e. a higher precision, recall and F1) even if the overall accuracy lower.

  • 由此可见,正确率是评估捕获的成果中目标成果所占得比例;召回率,顾名思义,就是从关注领域中,召回目标类别的比例;而F值,则是综合这二者指标的评估指标,用于综合反映整体的指标。

    当然希望检索结果Precision越高越好,同时Recall也越高越好,但事实上这两者在某些情况下有矛盾的。比如极端情况下,我们只搜索出了一个结果,且是准确的,那么Precision就是100%,但是Recall就很低;而如果我们把所有结果都返回,那么比如Recall是100%,但是Precision就会很低。因此在不同的场合中需要自己判断希望Precision比较高或是Recall比较高。如果是做实验研究,可以绘制Precision-Recall曲线来帮助分析。

参考

  1. http://charleshm.github.io/2016/03/Model-Performance/
  2. http://bookshadow.com/weblog/2014/06/10/precision-recall-f-measure/
  3. https://www.zhihu.com/question/19645541
  4. https://blog.argcv.com/articles/1036.c
  5. https://www.zhihu.com/question/39819838

dzzxjl

Home Linux ML Python Java Thoughts KmKg BookCan Links About