在机器学习里面做一些分类任务时,经常会使用到一些评价指标,下面就一些常用的指标进行详细的说明。
上图表示为一个二分类的混淆矩阵(多分类同理,只需要把不属于当前类的其他类都考虑为负例),表格中的四个参数说明:
True Positive(TP):预测为正例,实际为正例
False Positive(FP):预测为正例,实际为负例
True Negative(TN):预测为负例,实际为负例
False Negative(FN):预测为负例,实际为正例
从这我们可以看出,TP和TN都是预测对了,FP和FN都是预测错了。
【计算公式】
【指标分析】
我们最容易搞混的就是accuracy和precision,好像两者都可以称为准确率,正确率,精度等等…其实我们不必要考究两者的中文称呼究竟是什么,搞清楚两者的含义自然就可以区分它们。首先,accuracy指的是正确预测的样本数占总预测样本数的比值,它不考虑预测的样本是正例还是负例。而precision指的是正确预测的正样本数占所有预测为正样本的数量的比值,也就是说所有预测为正样本的样本中有多少是真正的正样本。从这我们可以看出,precision只关注预测为正样本的部分,而accuracy考虑全部样本。
Recall可以称为召回率、查全率等等…我们也不考究如何翻译它,它指的是正确预测的正样本数占真实正样本总数的比值,也就是我能从这些样本中能够正确找出多少个正样本。
F-score相当于precision和recall的调和平均,用意是要参考两个指标。从公式我们可以看出,recall和precision任何一个数值减小,F-score都会减小,反之,亦然。
specificity指标平时见得不多,它是相对于sensitivity(recall)而言的,指的是正确预测的负样本数占真实负样本总数的比值,也就是我能从这些样本中能够正确找出多少个负样本。
【实例说明】
问题:假设某个学校有1000个王者荣耀玩家,其中有10个是王者段位,判断这个玩家是不是王者选手?
现在我有一个分类器,检测出来有20个王者选手,其中包含5个真正的王者选手。那么上述指标该如何计算呢?
分析:检测出来有20个王者选手,说明有980个选手被预测为非王者选手。这20个检测为王者选手包含5个真正的王者选手,说明另外15个实际为非王者选手,所以,
accuracy = (5+980-5) / 1000 = 0.98
precision = 5 / 20 = 0.25
recall = 5 / 10 = 0.5
F-score = 2 / (1/0.25 + 1/0.5) = 0.33
sensitivity = recall = 0.5
specificity = (980-5) / (1000-10) = 0.98
从这个案例我们可以发现,虽然分类器的accuracy可以达到98%,但是如果我的目的是尽可能的找出隐藏在这1000人中的王者选手,那么这个分类器的性能是不达标的,这也就是为什么要引入precision和recall以及F-score评价指标的原因。
来源:CSDN
作者:网络一线牵 珍惜这份缘
链接:https://blog.csdn.net/weixin_43838785/article/details/103608819