机器学习模型性能评估方法
尽管您可以不断训练有监督的机器学习模型,但只有通过评估其性能,您才能真正了解模型的有效性。本文将详细讨论多种性能指标,并对它们的含义和使用方式进行直观解释。
为什么需要评估?
让我用一个简单的例子来说明。
罗宾和山姆都在为工科大学的入学考试做准备。他们共享一个房间,在解决数学问题时付出了同样的努力。他们的学习时间几乎相同,最终参加了期末考试。令人意外的是,罗宾通过了,而山姆没有。当我们深入了解时,发现他们的准备策略存在差异:罗宾参与了一系列测试,通过这些测试来评估自己的知识和理解,而山姆则过于自信,选择了单纯的训练。
同样地,在机器学习中,您可以广泛地训练模型,但如果不进行评估,您将无法信任该模型的有效性。
混淆矩阵
混淆矩阵是一个用于显示模型预测与实际类别标签之间关系的工具。

假设您正在构建一个模型来判断一个人是否患有糖尿病。经过训练和测试拆分后,您拥有一个长度为100的测试集,其中70个数据点为阳性(1),30个为阴性(0)。现在,我将为您的测试预测绘制矩阵:

在70个实际阳性数据点中,模型预测了64个为阳性,6个为阴性。而在30个实际阴性数据点中,模型预测了3个为阳性,27个为阴性。
请注意,在真正例、真负例、假正例和假负例的表示中,第二项标识预测结果,第一项则表示预测是否准确。
基于上述矩阵,我们可以定义一些重要的比率:
TPR(真正率)=(真正例/实际正例)
TNR(真负率)=(真负例/实际负例)
FPR(假正率)=(假正例/实际负例)
FNR(假负率)=(假负例/实际正例)
对于我们的糖尿病检测模型,我们可以计算以下比率:
TPR = 91.4%
TNR = 90%
FPR = 10%
FNR = 8.6%
为了使模型更智能,模型必须能够做出准确预测。这意味着您的真正例和假负例应该尽可能高,而假正例和假负例应尽量减少。在比率方面,TPR和TNR应较高,而FPR和FNR应较低。
智能模型:TPR,TNR,FPR,FNR
愚蠢模型:TPR,TNR,FPR,FNR的任何其他组合
有人可能会争辩,无法平等地关注所有四个比率,因为没有一种模型是完美的。那么,我们该怎么办呢?
确实如此。这也是我们在构建模型时需要考虑特定领域的原因。在某些领域,特定比率可能是优先考虑的,即使其他比率较差。例如,在癌症诊断中,我们不能错过任何阳性患者。因此,我们应该优先考虑TPR,尽可能将FNR降低到接近0。即使预测到健康患者也是可以接受的,因为他们可以接受进一步检查。
准确性
准确性字面上表示模型的正确预测能力。
准确性=正确预测/总预测
通过混淆矩阵,准确性可以表示为:准确性=(TP + TN)/(TP + TN + FP + FN)
准确性是最常用的性能指标之一。然而,值得注意的是,准确性有时可能会导致对模型的误解,因此在决定使用准确性之前,您应充分了解所用数据集和算法。
在讨论准确性的局限性之前,让我介绍两种数据集类型:
平衡数据集:拥有几乎相等类别的样本。例如,在1000个数据点中,600个为正,400个为负。
不平衡数据集:样本分布偏向某一特定类别。例如,在1000个数据点中,有990个为正,10个为负。
非常重要的是,在处理不平衡测试集时,切勿使用准确性作为度量。
为什么呢?
假设您有一个不平衡的测试集,其中包含990个正例和10个负例。最终,如果您创建了一个糟糕的模型,该模型总是预测为正例,那么在1000个测试点中,您将获得1000个正例预测。结果,您的准确性为:
990/1000 = 99%
哇!看起来很出色!您可能会为如此高的准确性而感到高兴。
但您应当意识到,模型实际上很差,因为它总是预测为正例。
非常重要的是,我们也不能比较两个返回相同准确性的模型。
某些模型(如Logistic回归)可以为每个数据点提供属于特定类别的概率。让我们考虑一个例子:

如您所见,如果P(Y = 1)> 0.5,则预测为类别1。尽管M1和M2的准确性相同,但通过查看概率分数,可以明显看出M1表现更佳。
对数损失解决了这个问题,我将在后面的博客中详细解释。
精度与召回率
精度是指真实阳性(TP)与阳性预测总数的比率。它基本上告诉我们,正面预测中有多少次是真正的正例。

请记住:这实际上是TPR。它告诉我们所有正例中有多少被预测为正。
F度量是精度和召回率的谐波平均值。

为了更好地理解这一点,想象一下:您在百度搜索时返回了40个页面,但其中只有30个相关。而您的朋友告诉您,实际上该查询有100个相关页面。因此,精度是30/40 = 3/4 = 75%,而召回率是30/100 = 30%。在这种情况下,精度反映了搜索结果的相关性,而召回率则表示结果的完整性。
ROC与AUC
接收器工作特性曲线(ROC):
它展示了通过从模型给出的概率得分反向排序中获取多个阈值时,TPR与FPR之间的关系。

那么,我们如何绘制ROC呢?
为了解答这个问题,我们回到上面的表格。仅考虑M1模型。对于所有x值,我们都有一个概率得分。接下来,我们将得分大于0.5的数据点分配为类别1。然后,将所有值按概率得分降序排序,得到一系列的阈值。接着,我们可以对应每个阈值计算TPR和FPR,并获得6对TPR和FPR。最后,只需绘制这些值,即可获得ROC曲线。
注意:由于最大TPR和FPR值为1,因此ROC曲线下的面积(AUC)介于0和1之间。
蓝色虚线下方的区域代表0.5。AUC = 0表示模型非常差,AUC = 1表示模型完美。只要您的模型AUC分数高于0.5,它就具有意义,因为即使是随机模型的AUC也为0.5。
非常重要的是,即使是由不平衡数据集生成的简单模型,您也可能获得较高的AUC。因此,在处理不平衡数据集时需格外小心。
注意:只要保持顺序,AUC与具体的概率得分无关。只要所有模型在根据概率得分排序后给出相同顺序的数据点,其AUC将相同。
对数损失
该性能度量评估数据点的概率得分与阈值之间的偏差,并按偏差程度给予惩罚。
在二元分类中,对于每个数据点,我们使用以下公式计算对数损失:

其中p表示数据点属于类别1的概率,y是类别标签(0或1)。
假设某个x_1的p_1为0.95,而某个x_2的p_2为0.55,并且符合类别1的截止概率为0.5。则两者都符合类别1的条件,但p_2的对数损失将比p_1的对数损失大得多。

从曲线中可以看出,对数损失的范围是[0,无穷大]。
在多类别分类中,对于每个数据点,我们使用以下公式计算对数损失:

如果x(o,c)属于类别1,则y(o,c)=1。其余概念相同。
测定系数
用R2表示。在预测测试集目标值时,我们会遇到一些误差(e_i),即预测值与实际值之间的差。
假设我们有一个包含n个条目的测试集。每个数据点都有一个目标值,例如[y1,y2,y3….yn]。我们将测试数据的预测值设为[f1,f2,f3,….fn]。
通过使用以下公式计算残差平方和,即所有误差(e_i)平方的总和,其中fi是第i个数据点的模型的预测目标值。

