precision recall F1比较低, accuracy 很高
precision recall 比较低 accuracy 高
为什么神经网络accuracy值很高,但是F1,recall,precision特别差?
对于这个问题,首先要清楚accuracy,F1,recall,precision等概念的含义,为了弄清楚这些概念,以二分类(正,负)为例,现定义如下符号:
- TP: Ture Positive 把正的判为正的数目,即正的预测为正的;
- FN: False Negative 把正的错判为负的数目 ,即把正的判为了负的;
- FP: False Positive 把负的错判为正的数目 ,即把负的判为了正的;
- TN: True Negative 把负的判为负的数目 ,即把负的判为负的;
1、accuracy
accuracy就是准确率,是指有在所有的判断中有多少判断正确的,即把正的判断为正的,还有把负的判断为负的;计算公式如下:
(1)
2、recall
recall就是召回率
,是相对于某一个类别而言的,比如类别为正的样本中有多少正样本被预测正确了,这样的有TP个。正样本包括正确被判为正的和被误判为错的,因此召回率公式如下:
(2)
recall
3、precision
precision就是精确率,是相对于某一个类别的预测结果而言的,比如预测结果为正的样本中有多少是预测正确的;预测为正的样本包括把正的预测为正的和把负的错判为正的,因此精确率的计算公式如下:
(3)
4、F1-score
F1-score是分类问题的一个衡量指标,是精确率和召回率的调和平均数
,最大为1,最小为0。为了方便表达,使用P代表precision,R代表recall,则F1-score计算公式如下:
(4)
5、问题原因分析
accuracy很高,而recall,accuracy,F1-score等值很低。原因可能如下:
- 测试类别数量不平衡; 比如测试集中正样本100个,负样本1000个;正样本预测正确40个,负样本预测940个,那么accuracy为 (40+940)/(100+1000)=0.899,而正样本recall为:40/100=0.4,正样本预测精确率为:40 /(40+1000-940)=0.4,F1-score=2*40/(2*40+60+60)=0.4;
- 使用不同的数据集测试accuracy和recall,accuracy,F1-score等值;这个也有可能,但一般人不会这么干。
- 训练模型所用的训练数据存在类别数据不平衡;模型对不同类别预测精确率不同,比如正样本预测精确率为0.4,而负样本预测精确率为940/(940+100-40)=0.94,导致这样结果的原因可能是训练数据不平衡或该类别下的数据量过少。
示例:
正类100个
负类 1000个
正样本预测正确40个, TP=40; FP=1000-TN=1000-940=60
负样本预测940个,TN=940, FN=100-TP=100-40=60
accuracy为 (TP+TN)除以总样本数量=(40+940)/(100+1000)=0.899
正样本recall为:TP除以总正类样本数量=TP/(TP+FN)= 40/100=0.4,
正样本预测精确率为:TP/(TP+FP)=40 /(40+1000-940)=0.4,
F1-score=2*40/(2*40+60+60)=0.4;
REF
https://www.zhihu.com/question/555720911/answer/2690940461