疑惑
你和小白对算法进行了升级,但这次算法升级管用吗?
怎么才能对算法模型进行客观的评价呢?
于是你又一次给“人工智能人话翻译官”发了邮件。很快翻译官做了详尽的回复。
解惑
我们可以从一个医疗的列子,对算法模型如何评价做一个说明。
我们拿到一批医院用来教学用的x光片,其中20人为有病的患者,80人为健康的人,一共100人。
我们分别用P与N代表
P(condition positive)
the number of real positive cases in the data。
Positive : sick
本例中对应的数字为20
N(condition negative )
the number of real negative cases in the data。
Negative : healthy
本例中对应的数字为80
然后我们找一位大夫来对这批X光进行判断,得到结果如下:
这里我们用P', N'来表示预测的结果。
P' 22人
该大夫预测有病的患者为22人
其中预测对了18人,错了4人
N' 78人
该大夫预测健康的有78人
其中预测对了76人,错了2人
然后我们就可以根据这批数据以及该大夫的预测结果构造以下矩阵:
把数据带入该矩阵:
接下来就是重点了:
根据该医生的判断,有多少病人要被召回医院进行治疗呢,这个比例为多少?
这个比例很形象称为“召回率”。
有的资料也称为:
真阳性率(True Positive Rate,TPR),灵敏度(Sensitivity)说的都是一回事。
那么这个医生漏诊多少人,比例为多少?
医生把2个有病的人预测为健康,意味该医生漏诊了两个人。FNR就代表了漏诊的比例。
这个比例形象的成为“漏诊率”
有的资料也称为:
假阴性率(False Negatice Rate,FNR)
漏诊率( = 1 - 灵敏度)
那么这个医生误诊多少人,比例为多少?
医生把4个健康的人的人预测为有病,意味该医生误诊了两个人。FPR就代表了误诊的比例。
这个比例形象的成为“误诊率”
有的资料也称为:
假阳性率(False Positice Rate,FPR),误诊率( = 1 - 特异度)
最后该医生把真实健康的人,预测为健康的有76人。这个比例是多少呢?
这个比例被称为:
真阴性率(True Negative Rate,TNR),特异度(Specificity)
好了,你可以这四个维度来评价该医生预测结果的好坏程度。看你更关心哪一个维度了?
好了,你可以把这个医生换成算法模型了。用这几个维度也可以评价该算法模型的优劣程度了。
恋爱成功为P。
恋爱失败为N。
得到以下评价矩阵:
其实还有以下多重组合,就看你更关心什么指标了:
除此之外:还可以使用ACC(accuracy)。
ACC (accuracy)称为:判对准确率。
也就是针对P与N你预测对的人数与总体样本人数的比例。
BTW:
accuracy paradox:
假设有100个样本,99个反例,只有1个正例。如果我的模型不分青红皂白对任意一个样本都预测是反例,那么我的模型的accuracy是 “正确的个数/总个数 = 99/100 = 99%”。很显然在这种极端条件下,ACC是不具备代表性的。
最后再介绍一下F1 score
TPR 关注的是在真实的P中,你预测对了多少
按照上面的例子:TPR关注的是你预测恋爱成功的人数在真实恋爱成功人数中所占的比例。
PPV关注的是在预测的P中,你预测对了多少
按照上面的例子:PPV关注的是你预测恋爱成功的人数在预测恋爱成功人数中所占的比例。
我们一共有200人用来测试,其中P有100,N有100,我们来看两种极端的情况:
我们的模型非常厉害,全预测对了:
带入公式:
我们的模型非常傻x,全预测错了。
带入公式:
综上,经过观察如果F1的成绩趋近与1,说明你的模型不仅在预测的结果(P')中,预测对的多,同时覆盖了(P)的中绝大多数情况,这当然是我们最想看到的。
我们把accuracy paradox中的例子带入:
则:
再度疑惑
小白和你都是行动派,收到回复后,利用之前用户的测评结果,立即进行了测试比对,结果发现,升级后的模型在各项指标中与升级前的模型结果基本一致,未见明显提高!
这是为什么?你又陷入了沉思之中。