@Record_05_准确率(Accuracy)_精确率(Precision)_召回率(Recall)_漏报率_误报率
折腾了这么久,跟别人探讨了,自学了这么久,还是要来写一下这个博客,对自己是一种记录,希望这种记录对你有用。
不怎容易弄明白的矩阵,所以叫混淆矩阵,很多人混淆可能是看表格的方向不知道,按照下面说的,再看看能不能明白。
原始标签 | 检测成正样本 | 检测成负样本 |
---|---|---|
标签:正样本 | TP |
FN |
标签:负样本 | FP |
TN |
这个表格:
第2行从左往右看:
原来样本标签是正样本,通过模型后,模型检测该样本为正样本,是为真阳,TP,True Positive
原来样本标签是正样本,通过模型后,模型检测该样本为负样本,是为假阴,FN,False Negative
第3行从左往右看:
原来样本标签是负样本,通过模型后,模型检测该样本为正样本,是为假阳,FP,False Positive
原来样本标签是负样本,通过模型后,模型检测该样本为负样本,是为真阴,TN,True Negative
对于分类问题,我们关注的是正样本到底检测没检测出来。所以正,是,阳;负,是,阴。
由混淆矩阵,可以得到下面公式:
A C C = T P + T N T P + F N + F P + T N ACC=\frac{TP+TN}{TP+FN+FP+TN} ACC=TP+FN+FP+TNTP+TN
P r e c i s i o n = T P T P + F P Precision =\frac{TP}{TP+FP} Precision=TP+FPTP
R e c a l l = T P T P + F N Recall=\frac{TP}{TP+FN} Recall=TP+FNTP
F N R = F N T P + F N = 1 − P r e c i s i o n FNR = \frac{FN}{TP+FN}=1-Precision FNR=TP+FNFN=1−Precision
F P R = F P T P + F P = 1 − R e c a l l FPR = \frac{FP}{TP+FP}=1-Recall FPR=TP+FPFP=1−Recall
下面补充是我自己的理解,你觉得能帮助你理解就行,你要是大牛看不惯,可以忽略。
漏报的含义是:原来标签是正样本,模型如果检测它是正样本,那么应该报警。
比如吸烟分类,吸烟是正样本,不吸烟的其他所有都是负样本。
模型在检测时,如果检测到吸烟,就要报警:请勿吸烟!
这就是报警,报警报告的是正样本。
原来是正样本,结果模型没检测出来它是吸烟样本,就是漏报。
F N T P + F N \frac{FN}{TP+FN} TP+FNFN
1 − R e c a l l = 1 − T P T P + F N = F N T P + F N 1-Recall=1-\frac{TP}{TP+FN}=\frac{FN}{TP+FN} 1−Recall=1−TP+FNTP=TP+FNFN
误报的含义是:原来标签是负样本,模型如果检测它是正样本,也是报警,只不过是误报。
比如吸烟分类,吸烟是正样本,不吸烟的其他所有都是负样本。
如果司机吃苹果,模型检测司机吃苹果是吸烟,就是误报。
原来是负样本,结果模型检测出来它是吸烟样本,就是误报。
但是,很多人要把这些公司在python代码中实现出来,用FNR,FPR表达出来的含义在网上一搜好多版本,以下是我的理解。不喜忽略!不负法律责任!
F N R p o s i t i v e = F N T P + F N FNR_{positive} = \frac{FN}{TP+FN} FNRpositive=TP+FNFN
F N R n e g t i v e = F N T N + F N FNR_{negtive} = \frac{FN}{TN+FN} FNRnegtive=TN+FNFN
F N R = F N T P + F N FNR = \frac{FN}{TP+FN} FNR=TP+FNFN
F P R p o s i t i v e = F P T P + F P FPR_{positive} = \frac{FP}{TP+FP} FPRpositive=TP+FPFP
F P R n e g t i v e = F P T N + F P FPR_{negtive} = \frac{FP}{TN+FP} FPRnegtive=TN+FPFP
F P R = F P T P + F P FPR = \frac{FP}{TP+FP} FPR=TP+FPFP