7.6二分类模型的评价指标
当你在做一个深度学习项目时,首先第一件事就是要确立一个衡量模型性能的指标。以及表示项目成功的指标值是多少。

假设你是一个开在办公楼下饭店的老板,你每天会做不同的菜品,按份放在盘子里,不同的菜不同的标价。目前是雇了一个人来根据用户的选择来计价。但是人工成本高,而且效率低。你想换成一个摄像头来自动识别菜品,并计价,然后让用户扫码付费。但是模型不可能百分之百准确,如果模型识别错误,导致收费高于实际价格,顾客大多会发现,并提醒你更改价格。如果模型识别错误,计费少于实际价格,一般顾客可能不会提醒你,这会造成饭店的损失。但是你衡量模型带来的损失和雇一个人的成本,最后确定只要模型的识别准确率在98%以上就可以接受。这时实际上你就确立了这个深度学习项目的评价指标是准确率,成功指标是98%。
笔者做了多年的人工智能项目,发现很多团队在做一个人工智能项目时都没有确定自己的评价指标,和成功指标值。这也是很多项目走向失控和失败的关键原因。
7.6.1准确率(Accuracy)
以垃圾邮件识别为例,不论是训练集、验证集还是测试集,都是既包含feature也包含label的。训练好的模型根据feature会预测一个结果,如果预测结果和label一致,那就算一个正确。如果不一致,就算一个错误。最终准确率就是所有预测正确的样本数除以总共的样本数。
7.6.2准确率的问题
准确率是我们最直接能想到的一个指标,但是有一个问题。以医院筛查某种罕见病为例,这个罕见病平均发病率为十万分之一。如果你的算法完全不起作用,对于所有的输入,都输出为0,也就是不患病。那么这个模型的准确率也有99.999%。但这个模型对于罕见病筛查却毫无用处。
7.6.3混淆矩阵
在二分类问题中,我们有两个类别:正类(Positive)和负类(Negative)。模型预测的结果可以落在四个格子里。
真实正类(Positive) | 真实负类(Negative) | |
---|---|---|
预测正类 | True Positive(TP) | False Positive(FP) |
预测负类 | False Negative(FN) | True Negative(TN) |
TP:模型正确地将正样本预测为正类。
FP:模型错误地将负样本预测为正类(误报)。
FN:模型错误地将正样本预测为负类(漏报)。
TN:模型正确地将负样本预测为负类。
有了混淆矩阵,对于准确率的定义就可以表示为:
7.6.4精确率(Precision)
精确率的定义为:被预测为正例的样本中,真正正例的比例。它的公式为:
假如你在一个化妆品公司负责活动运营,你准备通过给用户邮寄新的试用产品来吸引用户购买新产品。你需要一个模型从百万用户中选择一万个最有可能购买新产品的用户来进行活动推广。因为要邮寄试用品,活动是有成本的,你希望你的模型预测会购买的用户,实际真正购买的比例越高越好。所以此时你应该关注模型的精确率。
7.6.5召回率(Recall)
召回率的定义为真实为正类的样本中,被正确预测为正类的比例。
召回率这个指标就是为了解决我们上边例子中对罕见病进行预测的情况的。假设实际有10万个样本,其中只有1个是正例。如果模型全部预测为负例,那么模型的召回率就为0。
7.6.6F1-Score
精确率衡量的是预测为正例的情况下真正为正例的百分比。选择精确率作为项目的目标,可以保证你得到的正例,实际为正例的比例很高。在逻辑回归中,你可以提高sigmoid输出大于0.5,比如0.8以上作为正例来提高精确率。但是这样做可能会把一些本来是正例的样本误判为负例。
召回率衡量的是真正的正例中你发现的比率。还是以对罕见病预测的例子,10万个人中,只有1个是正例,你预测10万个人都是正例,召回率是1,但是这个模型也没有什么用。
好的模型应该同时能兼顾精确率和召回率,F1-Score就是一个同时兼顾两者的指标,它的公式为:
F1Score的取值范围为0到1之间。越大表明模型效果越好。