你可能在很多机器学习的书本当中看到过这两个值,有可能你看的时候还记得它们之间的区别,但是看完之后就忘记了,甚至有可能从此陷入了混淆的状态。这并不稀奇,我也经历过,甚至我在面试的时候还搞错了。这里面的原因很大一部分在于翻译问题,这两个值翻译得太接近了。我们从中文上很难区分出率和准确率有什么差别,在我们看来,这两个词是等价的,然而英文当中这两个词是做了区分的。所以我们要搞清楚这两者,需要来看英文的解释,而不是只是记住一个概念。在英文当中,率的英文是precision,词典当中的解释是:precision is defined as the proportion of the true positives against all the positive results (both true positives and false positives). 翻译过来是所有预测为正例的样本当中,正确的比例。准确率英文是accuracy,英文解释是:accuracy is the proportion of true results (both true positives and true negatives) in the population. 翻译过来也就是预测结果准确的概率,既然是预测结果准确,那么显然既包含了正例也包含了负例。从英文的描述上我们可以明显地看出这两个概念的差异,两个都是预测正确的部分,但率只针对正例,而准确率针对的是所有样本,既包含正例也包含负例。我个人觉得这两者翻译成筛选正确率和判断正确率比较容易理解一些,如果只有率和准确率可能还好,再加上上面说的召回率,可能真的要晕菜的。我们来举一个例子,来把这三个指标都说清楚。假设在国共内战期间,tg要抓军统的特务,已经锁定了一个村子中的100个百姓,交给甲乙两个人去找出特务。其中甲挑选了18个人,其中有12个特务,乙呢挑选了10个人,其中有8个特务。假设我们知道一共有20个特务,那么请问,这两个人的召回、准确和率分别是多少?我们先来看甲,我们先从简单的召回开始,既然一共有20个特务,甲找出了其中的12个,那么召回率就是12/20 = 0.6。是筛选正确率,我们一共筛选出了18人,其中有12个是正确的,所以率是12/18 = 2/3。准确率呢是整体的正确率,它判断正确了12个特务和74个普通百姓,准确率是(12 + 82 - 8) / 100,也就是86%%。我们再来看乙,它的召回率是8 / 20 = 0.4,率呢是8 / 10 = 0.8,准确率是(8 + 90 - 12) / 100 = 86%%。从上面这个例子当中,我们可以得到率和准确率的公式。其中率是筛选正确的概率,就是筛选正确的数量除以筛选出来的样本数,筛选正确的数量自然就是TP,筛选出来的总数除了正确的还有错误的,筛选错误的也就是FP,所以:准确率是整体上来正确率,也就是所有正确的除以所有样本数量: