分类模型优劣分析指标

简介: ## 背景 之前文章讲了如果用 tensorflow 训练模型之后,如果对模型体积有要求,或者希望优化模型网络结构的时候,我们会调整模型的一些网络结构。但是如果证明调整后的网络结构与之前的网络结构相比的优劣性呢。 最简单的,我们一般会跑一个准确率,那么除了这个准确率之外还有其他的指标能证明模型的优劣吗,这篇文章给大家讲下评估分类模型优劣的其他几个指标。 ## 名称解释 举个例子

背景

之前文章讲了如果用 tensorflow 训练模型之后,如果对模型体积有要求,或者希望优化模型网络结构的时候,我们会调整模型的一些网络结构。但是如果证明调整后的网络结构与之前的网络结构相比的优劣性呢。

最简单的,我们一般会跑一个准确率,那么除了这个准确率之外还有其他的指标能证明模型的优劣吗,这篇文章给大家讲下评估分类模型优劣的其他几个指标。

名称解释

举个例子,假设一个二分类模型,模型的作用是用来区分一堆数据中真的数据和假的数据。

假设一共有 22 个数据,22 个数据中真数据有 12 个,假数据有 10 个。而分类模型认为其中 8 个数据是真的,当然,这 8 个数据中有 5 个是真的,而另外 3 个是假的,却被模型错误的认为是真的。如下图所示:

那让我们定义以下概念:

TP = 5
FP = 3

TN = 7
FN = 7

真正率、真阳率、灵敏度

真正率(true positive rate, TPR),真阳率,灵敏度(sensitivity),指的是被模型预测的正样本的比例:

TPR = TP / (TP + FN)

在例子中指的是 5/12

这个比例高适合于那些需要“宁可错杀一千,不可放过一个”的模型,比如地震预测,地震预测错多次也没关系,重要的是真的发生地震的时候一定要预测出来。

真负率、特异度

真负率(true negative rate, TNR),特异度(specificity),指的是被模型正确预测的负样本的比例:

TNR = TN / (TN + FP)

在例子中是 7/10

这个比例高适合于那些需要“不能冤枉一个好人”的业务模型,比如预测一些人是否罪犯,宁可放过一些罪犯,也不能冤枉一个好人。

假正率、假阳率

假正率(false positive rate, FPR),假阳率,指的是被模型错误预测的正样本比例:

FPR = FP / (TN + FP)

在例子中指的是 3/10

假负率

假负率(false negative rete, FNT),指的是被模型错误预测的负样本的比例:

FNR = FN / (TP + FN)

在例子中指的是 7/12

精确度、精度、查准率

精度(precision)指的是模型查出来的所有数据中,有多少是准的。

p = TP / (TP + FP)

在例子中指的是 5/8

召回率、查全率、真正率、真阳率、灵敏度

召回率(recall)指的是所有对的数据中,有多少能被模型查出来。但其实召回率就是前面提到的真阳率。

r = TP / (TP + FN)

在例子中指的是 5/12

F1

F1分数(F1 Score),又被称为平衡F分数(balanced F Score),是一个兼顾精确率和召回率的调和平均数。定义如下:

但如果你的模型对精确率和召回率考虑的权重不一样时,可以定义 F-β 分数如下:

当 β 为 1 是,召回率和精确率的权重一样,也就是 F-1 分数。当 β 大于 1 时,召回率的权重高于精确率,如 F-2 分数。当 β 小于 1 时,精确率的权重高于召回率,如 F-0.5 分数。

ROC

ROC全称受试者工作特征曲线(receiver operating characteristic curve),又称为感受性曲线(sensitivity curve)。绘制方式是以假阳率(FPR)为横坐标,以真阳率为(TPR)为纵坐标,对于模型输出的特征值,以不同的阈值进行划分,得到曲线。

举个简单的例子:

假设 5 个数据点,模型输出的特征值分别是

[0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]

其中前 5 个数据点为负,后 5 个数据点为正,也就是说,10 个数据的标签时如下形式

[0, 0, 0, 0, 0, 1, 1, 1, 1, 1]

那么,当我的阈值分别取以下值的时候

[1.  0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1]

假阳率和真阳率分别是以下值

假阳率:[0.  0.  0.  0.  0.  0.2 0.4 0.6 0.8 1. ]
真阳率:[0.2 0.4 0.6 0.8 1.  1.  1.  1.  1.  1. ]

按照 ROC 的定义,得到的曲线如图

在 ROC 曲线中,左上角的点代表取这个阈值的时候,假阳率最低,真阳率最高,是最佳阈值,上图中的最佳阈值是 0.6。

AUC

AUC(Area Under Curve)被定义为 ROC 曲线下的面积,顾名思义。这个值存在的意义是开发者希望用一个定量的数字来表示模型的性能。

由上图可知,AUC 的取值范围在 0 到 1 ,越大越好。但 AUC 小于 0.5 的模型我们认为是没有意义的,分类效果太差。

上图中的 AUC 是 1。

PRC

PRC(Precision Recall Curve),精度召回率曲线,以召回率(查全率)为横坐标,精度(查准率)为纵坐标,和 RPC 类似,对于模型输出的特征值,以不同的阈值进行划分,得到曲线。

还是上面那个例子,5 个数据点,模型输出的特征值分别是

[0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]

其中前 5 个数据点为负,后 5 个数据点为正,也就是说,10 个数据的标签时如下形式

[0, 0, 0, 0, 0, 1, 1, 1, 1, 1]

那么,当我的阈值分别取以下值的时候

[0.6 0.7 0.8 0.9 1]

假阳率和真阳率分别是以下值

查全率(召回率):[1.  0.8 0.6 0.4 0.2 0. ]
查准率(精度):[1. 1. 1. 1. 1. 1.]

绘制的曲线如图

在 PRC 曲线中,最右上角的点,查全率和查准率都最高,也就是最佳阈值,在这个例子中,是 0.6(在这个例子中 ROC 曲线和 PRC 曲线得到的最佳阈值是同一个数,但并不总是这样)。

损失函数曲线

损失函数曲线(Loss Curve),是以训练次数为横轴,以当次的损失率为纵轴绘制的曲线。

损失函数

关于损失函数的定义可以参考其他机器学习教程,这里就不细说了,简单来说,是如下定义:

这里的 X,Y 并不是变量,而是常量,指的是 n 个样本及 n 个样本的标签值。损失函数是一个关于 f(x) 中参数的公式。

每次训练后,在训练集和交叉验证集(或测试集)上分别跑下损失函数的值,大概是一个如下的曲线:

这个曲线可以显示欠拟合和过拟合的程度,从上面曲线可以看出来,在训练集上,损失函数值是逐渐趋于0的,而在验证集上损失函数在下降一段时间后开始上升,这说明出现了过拟合。

MNIST 问题中的 Loss 曲线

可以看出一直没有出现过拟合的情况

ROC和PRC曲线比较

ROC 曲线有个很好的特性:当测试集中的正负样本的分布变化的时候,ROC 曲线能够保持不变。在实际的数据集中经常会出现类不平衡(class imbalance)现象,即负样本比正样本多很多(或者相反),而且测试数据中的正负样本的分布也可能随着时间变化。下图是 ROC 曲线和 Precision-Recall 曲线的对比:

在上图中,(a) 和 (c) 为ROC曲线,(b) 和 (d) 为Precision-Recall曲线。(a) 和 (b) 展示的是分类其在原始测试集(正负样本分布平衡)的结果,(c) 和 (d) 是将测试集中负样本的数量增加到原来的 10 倍后,分类器的结果。可以明显的看出,ROC 曲线基本保持原貌,而 Precision-Recall 曲线则变化较大。

也就是 PRC 曲线会面临一个问题,当需要获得更高 recall 时,model 需要输出更多的样本,precision 可能会伴随出现下降/不变/升高,得到的曲线会出现浮动差异(出现锯齿),无法像 ROC 一样保证单调性。

结论:AUC 用得比较多的一个重要原因是,实际环境中正负样本极不均衡,PR 曲线无法很好反映出分类器性能,而 ROC 受此影响小。

总结

以上各个指标都不能全面的覆盖分类器的各种性能,在实际应用中,应该合理的组合使用以上指标来判断分类器的效果。

目录
相关文章
|
7月前
|
机器学习/深度学习 安全
一文读懂分类模型评估指标
模型评估是深度学习和机器学习中非常重要的一部分,用于衡量模型的性能和效果。本文将逐步分解混淆矩阵,准确性,精度,召回率和F1分数。
623 1
|
机器学习/深度学习
评分是机器学习领域中的一种评估模型性能的指标
评分是机器学习领域中的一种评估模型性能的指标
104 1
构建一个分类模型,如何选择合适的损失函数和评估指标
构建一个分类模型,如何选择合适的损失函数和评估指标
|
7月前
|
数据可视化
R语言KNN模型分类信贷用户信用等级数据参数调优和预测可视化|数据分享
R语言KNN模型分类信贷用户信用等级数据参数调优和预测可视化|数据分享
|
机器学习/深度学习 数据可视化 TensorFlow
【2023年最新】提高分类模型指标的六大方案详解
【2023年最新】提高分类模型指标的六大方案详解
288 0
|
人工智能 算法 数据挖掘
算法的评估指标
分类:精度(accuracy)、召回率、精确率、F值、ROC-AUC 、混淆矩阵、PRC 回归:RMSE(平方根误差)、MSE(平均平方误差)、MAE(平均绝对误差)、SSE(和方差, 误差平方和)、R-square(确定系数) 聚类:兰德指数、互信息、轮廓系数
208 0
算法的评估指标
|
机器学习/深度学习 Python
在机器学习回归问题中,你应该使用哪种评估指标?
在机器学习回归问题中,你应该使用哪种评估指标?
287 0
在机器学习回归问题中,你应该使用哪种评估指标?
|
机器学习/深度学习 测试技术
机器学习中评估分类模型性能的10个重要指标(一)
机器学习中评估分类模型性能的10个重要指标(一)
326 0
机器学习中评估分类模型性能的10个重要指标(一)
|
机器学习/深度学习 算法 测试技术
机器学习中评估分类模型性能的10个重要指标(二)
机器学习中评估分类模型性能的10个重要指标(二)
454 0
机器学习中评估分类模型性能的10个重要指标(二)
|
机器学习/深度学习 算法 数据挖掘
模型的性能度量| 学习笔记
快速学习模型的性能度量。
模型的性能度量| 学习笔记