对于大部分二分类问题,尤其是不平衡数据集(即一个类别出现的次数比另一个类别多很多),通常用的分类评估方法精度指标accuracy并不能很好的反映模型的好坏。
举一个极端的例子,如果1组数据有100个样本,其中99个为正类,1个为负类。如果提供一个模型永远只预测样本为正类,那么这个模型也能有99%的精度。但实际上找个模型其实是很很傻的,什么也没学到,只是因为数据集的不平衡是的模型看上去很好,却永远也无法对负类做出预测。
为了更好的评估负类模型,通测使用混淆矩阵(confusion matrix),为数据的分类任务产生TN,FP,FN和TP四个象限的矩阵,TN为真反例,FP为假正例,FN为假反例,TP为真正例:
真实值是positive,模型认为是positive的数量(True Positive=TP)
真实值是positive,模型认为是negative的数量(False Negative=FN):这就是统计学上的第一类错误(Type I Error)
真实值是negative,模型认为是positive的数量(False Positive=FP):这就是统计学上的第二类错误(Type II Error)
真实值是negative,模型认为是negative的数量(True Negative=TN)
文章图片
由混要矩阵可以延伸出一些列的指标,包括精度,准确率召回率等。
精度accuracy = (TP+TN)/(TP+TN+FP+FN)
准确率precision = TP/(TP+FP)
召回率recall = TP/(TP+FN)
精度比较好理解,就是预测准确的数占所有样本的比例,是最基本的指标;
准确率表示被预测为正例的样本中有多少是真正的样本,召回率表示所有正类的样本中有多少是被准确预测为正类。
通常来说在准确率和召回率之间是无法同时提高的,要相互妥协找到折中点的,调节的办法就是分类的阈值。
这时候准确率-召回率曲线以及ROC曲线就是很好的工具帮助判断模型的好坏以及分类阈值的选取。
MTCNN论文中则是同时采取了两种办法对比不同模型的优劣,如下图所示:
文章图片
横坐标是召回率,纵坐标是准确率,每条曲线上的每个点代表一个分类阈值,不同的阈值对应不同的准确率和召回率,现成最终的曲线。对于准确率-召回率曲线,往往越往右上角表示模型性能越好,既对召回率和准确性的兼顾性越好。上图明显红色曲线性能最优,而且在召回率大于0.8后召回率每提升一点的代价会是准确率的急剧下降,明显经济学就不合适了。
【混要矩阵(Confusion Matrix),精度(accuracy),准确率(Precision),召回率(recall),ROC与AUC在分类评价中的运用】
文章图片
ROC曲线则是真正率和假正率的对比,真正率其实就是召回率(TP/(TP+FN)),假正率是假正例占所有反类样本的比例(FPR=FP/(FP+TN)),好的模型使希望真正率尽可能高的同时假正率尽可能低,也就是曲线要尽量往左上角去。同意曲线上每个点表示一个阈值下的模型性能,MTCNN的例子中蓝色曲线明显性能最优。
如果用一个数值来为ROC曲线表征性能,那么可以用AUC(area under curve)即曲线下的面积来总结,AUC越接近1模型性能越好。