最近在复盘udacity 的机器学习的课程,现在来整理一下关于机器学习模型的评估指标的相关知识。
不同数据集采用不同的模型进行训练,会得到完全不同的效果,那么如何衡量一个模型是否适合该数据集呢?在数据集训练后可以对一些指标进行运算,观察实际的效果,进行调整参数或者更换模型等等。
学习模型的评估指标常用的有几种:F-β得分(F1得分,F2得分等等,根据不同的业务实际需求来指定适合的β值),ROC 曲线,回归指标包含:平均绝对误差,均方误差,R2分数等等
1 混淆矩阵
上图为检测特定疾病的例子,如果一个人检测出生病,那么成为阳性,如果检测结果是未生病则为阴性,阳性分为真阳性和假阳性,阴性分为真阴性和假阴性.
如果一个病人检测出生病,则为真阳性 (True Positive ,TP)
如果一个病人检测为健康,则为假阴性(False Negative,FN);
如果一个健康人检测出生病,称为假阳性 (False Positive,FP);
如果一个健康人检测为健康,称为真阴性(True Negative,TN)
由上面四种状态构成的矩阵称之为混淆矩阵。
再看一个检测垃圾邮件的例子:
上图是对应的混淆矩阵,假设一封邮件检测出是垃圾邮件时候称为阳性,那么
当一封垃圾邮件被检测出是垃圾邮件的时候称为真阳性(True Positive ,TP);
当一封垃圾邮件被检测出是正常邮件时候称为假阴性(False Negative,FN);
当一封正常的邮件被检测出是垃圾邮件时候称为假阳性(False Positive,FP);
当一封正常的邮件被检测出是正常邮件时候,称为真阴性(True Negative,TN);
2 准确率
准确率 = 所有检测正确的点/所有的点
从上面的图中可以看到,所有检测正确的点(病人被检测出生病的人数+健康人被检测出健康的人数),(真阳性+真阴性)/所有。
但是不是所有正确率高的模型就是符合要求的,下面来看一个检测信用卡欺诈行为的例子
从上面的图中看出,左侧是信用卡的良好记录:284335条,右侧是欺诈行为记录 472条,那么如果一个模型预测所有的记录都是良好记录,那么这种情况下,该模型的准确率是 284335/(284335+472),达到99.83%,可以看出该模型的准确率很高,但并不满足我们的需求,因为丝毫没有检测出欺诈行为,因此,引入了精度和召回率的概念。
3 精度
精度的定义是 在所有检测为阳性的点中,有多少是真的阳性,在医疗检测模型中即在所有检测为生病的数据中,有多少是真的生病了
垃圾邮件的检测例子中,精度表示在检测出是垃圾邮件的所有邮件中有多少真的是垃圾邮件
在上面两个例子中,想一下哪些情况是必须避免的,不能容忍的:
在医疗模型中,如果一个病人被检测出健康这种情况是不允许发生的
在垃圾邮件检测模型中,如果一封正式邮件被检测为垃圾邮件而被放入垃圾箱中,这种情况是不能允许的
从精度的定义来看,垃圾邮件检测是对精度有要求的,而医疗模型对精度是没有要求的。
4 召回率
召回率的定义为在所有阳性的数据中有多少被检测出是阳性,在医疗模型中,召回率表示在所有生病的人群中有多少人被检出出生病
在垃圾邮件检测模型中,召回率表示在所有垃圾邮件中有多少是被检测出来是垃圾邮件
由此看出 医疗模型是要求召回率高的模型,而垃圾邮件检测是高精度的模型
5 F1得分
对于一个模型评估指标是两个(精度和召回率),评估起来会比较麻烦,因此将精度和召回率合成一个指标F1分数(即为精度和召回率的调和平均数)
6 F-β得分
F-β得分 是比F1 得分更广泛的一种评估指标,F1 是 F-β ,β=1的情况,具体公式如下:
β 可以根据具体业务情况来选择β的值,进而对模型进行评估
从上面图中可以看出 β 值越大,得分就越靠近召回率,β越小得分越靠近精度,
如果是一个要求高召回率的模型就选择β较大的得分作为评估标准
如果是一个要求高精度的模型就选择β较小的得分作为评估标准。