分类算法评估方法练习
对于模型的考量有很多参数,最重要的是准确率,精度,召回率等,还有经常听到的F1值, 如果是那种提取词的算法,比如提取出日期,这种怎么算正确率呢?
精确率 = 提取正确的结果数量/ 提取出来的所有数量
召回率 = 提取正确的结果数量/ 数据集中正确结果的所有数量
F1值 = 2准确率召回率/(准确率+召回率)
F1值:兼顾了准确率和召回率;
为了加深印象,自己搞几个练习做下:
练习一:
总共有100个样本,50个是Yes,50个是No;
机器使用算法计算完后得到的结果如下:
55个是Yes(其中45个与实际相符,10个与实际不符);
45个是No(其中40个与实际相符,5个与实际不符);
试计算这个算法的各个指标:
解:
| Yes | No |
Yes | TP = 45 | FN = 5 | P = 50
No | FP = 10 | TN = 40 | N = 50
| P' = 55 | N' = 45 | P+N = 100
正确率:(TP+TN )/(P+N) = 85 /100 = 0.85
精 度(precision): TP/(TP+FP) = 45/55= 0.818
召回率(recall):TP/P = 45/50 = 0.9
综合分类率:
F1 = 2 * (precision) * recall/(precision+recall)
= 2 * 0.818 * 0.9/(0.818+0.9)
= 0.857
练习二:
总共有100个样本,50个是Yes,50个是No;
机器算法优化计算完后得到的结果如下:
55个是Yes(其中50个与实际相符,5个与实际不符);
45个是No(其中45个与实际相符,0个与实际不符);
(这是一种常见的情况,目的是尽可能多地包含正确的结果)
试计算这个算法的各个指标:
解:
| Yes | No |
Yes | TP = 50 | FN = 0 | P = 50
No | FP = 5 | TN = 45 | N = 50
| P' = 55 | N' = 45 | P+N = 100
正确率:(TP+TN )/(P+N) = 95 /100 = 0.95
精 度(precision): TP/(TP+FP) = 50/55= 0.909
召回率(recall):TP/P = 50/50 = 1
综合分类率:
F1 = 2 * (precision) * recall/(precision+recall)
= 2 * 0.909 * 1/(0.909+1)
= 0.952
总结:
精度达到0.91,召回率达到1,此时F值才可能达到0.95
召回率=1也就是首先要确保所有正确的结果都被找到;
精度0.91也就是找出的结果可以包含9%的错误结果;
练习三:
总共有100个样本,50个是Yes,50个是No;
机器算法优化计算完后得到的结果如下:
45个是Yes(其中45个与实际相符,0个与实际不符);
55个是No(其中50个与实际相符,5个与实际不符);
(这也是一种常见的情况,就是哪怕找到结果少但确保找到的结果全是正确的;)
试计算这个算法的各个指标:
解:
| Yes | No |
Yes | TP = 45 | FN = 5 | P = 50
No | FP = 0 | TN = 50 | N = 50
| P' = 45 | N' = 55 | P+N = 100
正确率:(TP+TN )/(P+N) = 95 /100 = 0.95
精 度(precision): TP/(TP+FP) = 45/45 = 1
召回率(recall):TP/P = 45/50 = 0.9
综合分类率:
F1 = 2 * (precision) * recall/(precision+recall)
= 2 * 1 * 0.9/(1+0.9)
= 0.947
总结:
如果精度达到1,百分百正确的情况下,召回率能达到0.9,F1值同样也能接近0.95;
召回率达到0.91时F1=0.952,此时也能超过0.95
总结
学习总结:
精度和召回率从两个维度描述了算法的准确程度, 通过F1值可以更清晰地了解如何达到最终的目标,
也就是有两种思路:
1、宁可少找一些,但要保证找出的结果都是正确的;
2、宁可多找一些,但是要把正确的都包含进去;
在一些场合下思路2有的时候会更容易一些;
来源:oschina
链接:https://my.oschina.net/u/1156588/blog/3005926