精确度、召回率
本例中老师给出了两种算法来对病人进行罕见病的预测,人群中患病概率为0.5%
第一种 是二分类算法,患病为1,反之为0,该算法有99%的正确率,误差为1%
第二种是暴力的默认为0,准确率为99.5%,误差为0.5%
但我们能说第二种是比第一种好的算法吗
在处理偏斜数据集的问题时,我们通常使用不同的误差度量,而不仅仅是分类误差来确定算法的性能
使用一个二维矩阵来介绍精确率和召回率
横为实际的类别,竖为预测的类别,1代表是
在本例中会有4种组合,老师分别用4种不同的颜色来进行标注
蓝色为实际类别为1,预测类别为1, 真阳, 预测正确
红色为实际类别为1,预测类别为0,假阳, 发生了预测错误
黄色为实际类别为0,预测类别为1,假阴, 发生了预测错误
绿色为实际类别为0,预测类别为0, 真阴, 预测正确
精确率用于计算我们预测所有为1的类别中, 实际上 有多少正确预测
本例中,分母为所有预测为1的患者,分子为真实为1的患者,最后结果为0.75
召回率用于计算我们真实所有为1的类别中, 实际上 有多少正确预测
本例中,分母为所有真实为1的患者,分子为真实为1的患者,最后结果为0.6
我愿称之为 精悍赵叔 ~ 精横召竖 ~ 精确率横着看二维矩阵,召回率竖着看二维矩阵
一般来说,零精确率和零召回率的算法不是有用的算法
在我看来
精确率越高,我们对 预测结果的 可信度 也就越高 说话靠谱
召回率越高,我们能 尽最大可能的去找到正确结果的范围 遗漏的少
我们肯定希望我们的算法同时具有高精确率和高召回率,但更多时候我们需要做出权衡
第一种情况:
假设现在有一种罕见病的治疗费用很贵,我们希望能更加准确的诊断出真正患病的人
如果我们设置判断阈值为0.5,则可能会有一部分患者被误判
而当我们提高阈值为0.7,甚至是0.9,说精确度很提高很多,有更大机率找出患病的人
当提高精度时,我们的精确率得到提高
但召回率较低,因为分母不变,但分子因为精度提高把部分误判患者剔除,分子变小
第二种情况:
假设我们有很多种罕见病,误判导致患者会错失治疗窗口期,本着宁错过误放过的原则
我们此时将阈值下调至0.3,只要认为可能性高于30%就可以预测为1
阈值降低导致我们的精确率降低,召回率提高
因为我们的筛选标准降低,增加了结果的不确定性,可信度降低
但我们却使得在所有患者中我们能识别出更多的患者,分母不变,分子提高
综上所述,我们可以设置阈值来决定我们的精确率和召回率,两者此消彼长
对于许多应用程序,我们要手动选择阈值以权衡精度和召回率
如果想要实现自动权衡精度和召回率,还要另一个为 F1分数 的指标
F1分数
假设现在我们有三种不同的算法,分别得出三种不同的精确率和召回率
三者各有千秋,但平均下来貌似都还行,如果我们选平均值最高的第三种算法
算法三精确度很低,也不是一个理想的算法,所以我们不能简单的根据平均值大小来选择
现在根据F1 分数公式来计算,我们只需要选得分最高的那个就可以了
F1分数公式也可以进一步简化,这个方程也称之为P和R的调和平均数
在本例中算得第一种算法得分最高,所以相对来说第一种更好