第三章 升级管用吗?

作者: 人工智能人话翻译官 | 来源:发表于2019-10-27 01:08 被阅读0次

    疑惑

    你和小白对算法进行了升级,但这次算法升级管用吗?
    怎么才能对算法模型进行客观的评价呢?
    于是你又一次给“人工智能人话翻译官”发了邮件。很快翻译官做了详尽的回复。

    解惑

    我们可以从一个医疗的列子,对算法模型如何评价做一个说明。


    我们拿到一批医院用来教学用的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人

    然后我们就可以根据这批数据以及该大夫的预测结果构造以下矩阵:


    image.png

    把数据带入该矩阵:


    image.png

    接下来就是重点了:
    根据该医生的判断,有多少病人要被召回医院进行治疗呢,这个比例为多少?
    TPR = \cfrac{真实有病且预测为病人的人数}{真实有病的人数}=\cfrac{TP}{P} = \cfrac{TP}{TP + FN}
    TPR = \cfrac{18}{20} = \cfrac{18}{18 + 2} = 0.9

    这个比例很形象称为“召回率”。
    有的资料也称为:
    真阳性率(True Positive Rate,TPR),灵敏度(Sensitivity)说的都是一回事。


    那么这个医生漏诊多少人,比例为多少?

    医生把2个有病的人预测为健康,意味该医生漏诊了两个人。FNR就代表了漏诊的比例。
    FNR = \cfrac{预测为健康但实际有病的人数}{真实有病的人数}=\cfrac{FN}{P} = \cfrac{FN}{TP + FN}
    FNR = \cfrac{2}{20} = \cfrac{2}{18 + 2} = 0.1

    这个比例形象的成为“漏诊率”
    有的资料也称为:
    假阴性率(False Negatice Rate,FNR)

    漏诊率( = 1 - 灵敏度)


    那么这个医生误诊多少人,比例为多少?
    医生把4个健康的人的人预测为有病,意味该医生误诊了两个人。FPR就代表了误诊的比例。
    FPR = \cfrac{预测为有病但实际健康的人数}{真实健康的人数}=\cfrac{FP}{N} = \cfrac{FP}{FP + TN}
    FPR = \cfrac{4}{80} = \cfrac{4}{4 + 76} = 0.05

    这个比例形象的成为“误诊率”
    有的资料也称为:
    假阳性率(False Positice Rate,FPR),误诊率( = 1 - 特异度)


    最后该医生把真实健康的人,预测为健康的有76人。这个比例是多少呢?
    TNR = \cfrac{真实健康且预测为健康的人数}{真实健康的人数}=\cfrac{TN}{N} = \cfrac{TN}{FP + TN}
    TNR = \cfrac{76}{80} = \cfrac{76}{4 + 76} = 0.95

    这个比例被称为:
    真阴性率(True Negative Rate,TNR),特异度(Specificity)


    好了,你可以这四个维度来评价该医生预测结果的好坏程度。看你更关心哪一个维度了?
    好了,你可以把这个医生换成算法模型了。用这几个维度也可以评价该算法模型的优劣程度了。

    恋爱成功为P。
    恋爱失败为N。
    得到以下评价矩阵:


    image.png

    其实还有以下多重组合,就看你更关心什么指标了:


    image.png

    除此之外:还可以使用ACC(accuracy)。
    ACC = \cfrac{TP+TN}{P+N} = \cfrac{TP+TN}{TP+TN+FP+FN}

    ACC = \cfrac{18 + 76}{20 + 80} = \cfrac{18 + 76}{18 + 4 + 2 + 76} = 0.94

    ACC (accuracy)称为:判对准确率。
    也就是针对P与N你预测对的人数与总体样本人数的比例。

    BTW:

    accuracy paradox:
    假设有100个样本,99个反例,只有1个正例。如果我的模型不分青红皂白对任意一个样本都预测是反例,那么我的模型的accuracy是 “正确的个数/总个数 = 99/100 = 99%”。很显然在这种极端条件下,ACC是不具备代表性的。


    最后再介绍一下F1 score

    F1 = 2 \cfrac{PPV*TPR}{PPV + TPR} = \cfrac{2TP}{2TP+FP+FN}
    TPR = \cfrac{TP}{TP + FN}

    image.png
    TPR 关注的是在真实的P中,你预测对了多少
    按照上面的例子:TPR关注的是你预测恋爱成功的人数在真实恋爱成功人数中所占的比例。

    image.png
    PPV关注的是在预测的P中,你预测对了多少
    按照上面的例子:PPV关注的是你预测恋爱成功的人数在预测恋爱成功人数中所占的比例。

    我们一共有200人用来测试,其中P有100,N有100,我们来看两种极端的情况:
    我们的模型非常厉害,全预测对了:


    image.png

    带入公式:

    F1 = 2 \cfrac{PPV*TPR}{PPV + TPR} = \cfrac{2TP}{2TP+FP+FN} = \cfrac{200}{200} = 1

    我们的模型非常傻x,全预测错了。


    image.png

    带入公式:

    F1 = 2 \cfrac{PPV*TPR}{PPV + TPR} = \cfrac{2TP}{2TP+FP+FN} = \cfrac{0}{200} = 0

    综上,经过观察如果F1的成绩趋近与1,说明你的模型不仅在预测的结果(P')中,预测对的多,同时覆盖了(P)的中绝大多数情况,这当然是我们最想看到的。

    我们把accuracy paradox中的例子带入:


    image.png

    则:

    F1 = 2 \cfrac{PPV*TPR}{PPV + TPR} = \cfrac{2TP}{2TP+FP+FN} = \cfrac{0}{1} = 0

    再度疑惑

    小白和你都是行动派,收到回复后,利用之前用户的测评结果,立即进行了测试比对,结果发现,升级后的模型在各项指标中与升级前的模型结果基本一致,未见明显提高!
    这是为什么?你又陷入了沉思之中。

    相关文章

      网友评论

        本文标题:第三章 升级管用吗?

        本文链接:https://www.haomeiwen.com/subject/pbiuvctx.html