机器学习和深度学习中,精确率和召回率经常会被提起,但因为定义有点绕了,许久不用后,又通常容易忘记或者是搞混。
本文以一个稍显调皮的例子说明两者的不同,以便自己能够加深理解。
定义
Precision = TP / (TP FP) Recall = TP / (TP FN)
那么 TP、FP、FN 都代表什么呢?
记住一点,这些概念都是基于预测结果和真实结果的比对。
TP
TP 是 True Positives 的缩写,指的是真正的正样本,也可以叫做真阳性。
真实情况:正样本。 预测结果:正样本。
FN
FN 是 False Negatives 的缩写,指的是假的负样本,也叫做假阴性。
真实情况:正样本。 预测结果:负样本。
TN
TN 是 True Negatives 的缩写,指的是真的负样本,也叫做真阴性。
真实情况:负样本。 预测结果:负样本。
FP
FP 是 False Positives 的缩写,指的是假的正样本,也叫做假阳性。
真实情况:负样本。 预测结果:正样本。
精确率 (Precision)
Precision=TPTP FP Precision = frac{TP}{TP FP} Precision=TP FPTP
精确率表示的是在预测所有为正类的结果中,真实的正类的比例。
怎么理解呢?
来一个场景,这个需要妈妈的配合。
周一 | 周二 | 周三 | 周四 | 周五 |
---|---|---|---|---|
妈妈 | 妈妈 | 外卖 | 外卖 | 妈妈 |
上面这张表是你上个月某一周晚餐的情况,妈妈代表晚餐是妈妈做的,外卖代表这一天你吃的外卖。
有一天,因为某些原因,你需要回忆一下那一周的晚餐情况。
你努力想了想,只记得 4 天的情况,然后说出了自己的答案。
周一 | 周二 | 周三 | 周四 | 周五 |
---|---|---|---|---|
妈妈 | 妈妈 | 外卖 | 外卖 | 妈妈 |
妈妈 | ? | 外卖 | 妈妈 | 妈妈 |
假如预测结果是妈妈代表 Positive.
那么在 4 个结果中,你预测了 3 个 Positive。
但是在这里。
代码语言:javascript复制TP = 2 (周一,周五)
FP = 1 ( 周四)
所以呢,精确率是多少?
Precision=TPTP FP=22 1=0.67 Precision = frac{TP}{TP FP}=frac{2}{2 1}=0.67 Precision=TP FPTP=2 12=0.67
得知这个结果时候,你的母亲露出标志性的慈母笑。
"我儿子真棒!妈妈做的饭菜大多都记得。"
召回率 (Recall)
Recall=TPTP FN Recall = frac{TP}{TP FN} Recall=TP FNTP
召回率表示的是,在所有正样本中,被预测出来的比例。
怎么理解呢?
还是同样的场景,不过这次需要你女友的配合。
周一 | 周二 | 周三 | 周四 | 周五 | 周六 | 周日 |
---|---|---|---|---|---|---|
外卖 | 外卖 | 女友 | 外卖 | 女友 | 外卖 | 女友 |
去年的某一周,这是你的晚餐情况。
女友代表那天晚餐她做的,外卖代表你叫的外卖自己解决。
因为某种原因,你需要回忆那一周的情况。
因为时间过得太久,你只能拍脑袋决定了。
周一 | 周二 | 周三 | 周四 | 周五 | 周六 | 周日 |
---|---|---|---|---|---|---|
外卖 | 外卖 | 女友 | 外卖 | 女友 | 外卖 | 女友 |
外卖 | 外卖 | 外卖 | 外卖 | 女友 | 女友 | 外卖 |
女友选项是正样本。
你的预测结果中,有 2 个正样本。 但是,TP = 1, FP = 1。
另外,周三和周日属于 FN 的情况。
所以,召回率是多少呢?
Recall=TPTP FN=11 2=0.33 Recall = frac{TP}{TP FN}=frac{1}{1 2}=0.33 Recall=TP FNTP=1 21=0.33
这个结果如何呢?
你自己心里应该有数。
“面对疾风吧!!!”
总结
要区分精确率和召回率要看分母。
精确率的分母是你预测的所有的正样本数量,因此精确率代表了区分负样本的能力。
召回率的分母是所有真实情况的正样本数量,召回率代表了区分正样本的能力。