在做支持向量机的数据分析时,打印了一下classification_report报告结果如下:
precision recall f1-score support
0 0.92 1.00 0.96 35
1 0.96 0.98 0.97 54
2 0.98 1.00 0.99 44
3 0.93 0.93 0.93 46
4 0.97 1.00 0.99 35
5 0.94 0.94 0.94 48
6 0.96 0.98 0.97 51
7 0.92 1.00 0.96 35
8 0.98 0.84 0.91 58
9 0.95 0.91 0.93 44
avg / total 0.95 0.95 0.95 450
于是我们会疑惑,precision和recall是什么指标呢?
我个人的理解是一下几点:
首先,我们要能够想到预测结果有哪几种情况,假设预测之前有两种情况A、B,那么结果无非是AA、AB、BA、BB以下四种情况,AA表示,真实是属于A,预测结果也是A;同理AB,是指真实是属于A,预测结果却是B(这说明预测错误了)
真实情况 | 预测结果 | ||
100 | A1(78) | B1(22) | |
A(80) | AA(76) | AB(4) | |
B(20) | BA(2) | BB(18) |
上面表格的例子里我假设预测出来的结果是A1:78,B1:22,真实情况是A预测结果也是A即AA是76,那么AB=A-AA
BA=A1-AA,以此推算,AB、BB都能求出来。
接下来我们就来解释一下precision和recall两个指标:
其实这两个指标是从两个层次说明一个问题。这个问题就是,你的预测结果到底怎么样?报告给我们这两个指标precision是指正确率,谁的正确率呢?就是针对这次预测行为产生的正确率,76/78,召回率呢,就是就是样本里放出去80个A去测试,结果呢,只测试出78个A,相当于我只能收回来预测正确的76个(错误的总不能召回吧),所以召回率就是76/80
那么我们又怎么和手写体识别联系起来呢。就是在机器学习数据测试集的时候,我给出一百个样本用来测试,但是只有80个是对应正确结果的,举个例子,100张图片进行图像识别数字0,里面只有80张图片是手写的0,其他的20张不是,结果预测出来78张是对应数字0的,但是这78张并不是完全正确的,里面完全正确的只有76张是正确的,那精确率是多少?当然是76/78,这是对预测这一行为做出的评价。那我放出去的那80张正确图片还能召回多少呢,当然是76个,显然召回率就是76/80。