当前位置: 首页 > 科技观察

如何评估机器学习模型的性能

时间:2023-03-14 17:18:04 科技观察

你可以整天训练一个有监督的机器学习模型,但除非你评估它的性能,否则你永远无法知道该模型是否有用。此详细讨论回顾了您必须考虑的各种性能指标,并对它们的含义和工作原理提供了直观的解释。为什么需要评估?让我从一个非常简单的例子开始。罗宾和山姆都开始准备工程学院的入学考试。他们同住一个房间,在解决数字问题时付出了同样的努力。他们全年学习的时间几乎相同,并参加了期末考试。令人惊讶的是,罗宾清除了,但山姆没有。当被问到时,我们知道他们的准备策略有一个不同,即“测试系列”。罗宾参加了他过去经常参加的一系列考试,通过参加这些考试来测试他的知识和理解力,然后进一步评估他落后的地方。但是山姆有信心,他只是不断地训练自己。同样,如上所述,一个机器学习模型可以用很多参数和新技术进行广泛的训练,但只要你跳过它的评估,它就不能被信任。混淆矩阵混淆矩阵是模型的预测与数据点的实际类别标签之间的相关性矩阵。假设您正在构建一个模型来检测一个人是否患有糖尿病。进行训练测试拆分后,您将得到一个长度为100的测试集,其中70个数据点标记为正(1),30个数据点标记为负(0)。现在,让我为您的测试预测绘制矩阵:在70个实际阳性数据点中,您的模型预测64个点为阳性,6个点为阴性。在30个实际负分中,它预测了3个正分和27个负分。注意:在“truepositive”、“truenegative”、“falsepositive”和“falsenegative”notations中,注意第二项(“positive”或“negative”)代表你的预测,而第一项表示你是否预测是对还是错。基于上面的矩阵,我们可以定义一些非常重要的比率:TPR(TruePositiveRate)=(True/ActualPositive)TNR(TrueNegativeRate)=(TrueNegative/ActualNegative)FPR(FalsePositiveRate)=(False阳性/实际阴性)FNR(假阴性率)=(假阴性/实际阳性)对于我们的糖尿病检测模型,我们可以计算以下比率:TPR=91.4%TNR=90%FPR=10%FNR=8.6%如果您愿意为了使模型智能,模型必须正确预测。这意味着你的PositivePositives和NegativeNegatives应该尽可能高,同时,你需要将你的falsepositives和falsenegatives保持尽可能低。同样在比率方面,你的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个属于负类。非常重要:在处理不平衡的测试集时,切勿将准确性用作度量标准。为什么?假设您有一个不平衡的测试集,其中包含1000个条目,分别为990(+ve)和10(-ve)。最后,你不知何故最终创建了一个糟糕的模型,由于火车不平衡,它总是预测“+ve”。现在,当您预测测试集标签时,它总是会预测“+ve”。因此,从1000个测试设置点,您将获得1000个“+ve”预测。那么你的准确率就会达到990/1000=99%哇!惊人的!您很高兴看到如此出色的准确性得分。但是,您应该知道您的模型非常糟糕,因为它总是预测“+ve”标签。非常重要:同样,我们无法比较返回概率分数且具有相同准确度的两个模型。有一些模型可以给出每个数据点属于特定类别的概率,例如逻辑回归。让我们考虑这种情况:如您所见,如果P(Y=1)>0.5,则预测为类别1。当我们计算M1和M2的准确率时,我们得到了相同的结果,但是从概率分数来看,很明显M1比M2好得多。LogLoss处理这个问题,我将在稍后的博文中解释。PrecisionandRecallPrecision:这是真阳性率(TP)与阳性预测总数的比率。基本上,它告诉我们有多少次你的积极预测实际上是积极的。回想一下:无非就是TPR(上文提到的“TruePositiveRate”)。它告诉我们所有积极因素中有多少被预测为积极的。F-measure:准确率和召回率的调和平均值。要理解这一点,让我们看一下这个例子:当您在Google中查询时,它返回40个页面,但只有30个是相关的。但是您的朋友告诉您该查询有100个相关页面。所以它的准确率为30/40=3/4=75%,召回率为30/100=30%。所以在这种情况下,精度是“搜索结果的有用程度”,而召回率是“结果的完整性”。ROC和AUC接收者操作特征曲线(ROC):它是通过从TPR(TruePositiveRate)和FPR(FalsePositiveRate)关系图模型给出的概率得分的反向排序列表中取多个阈值计算得出的。现在,我们如何绘制ROC?要回答这个问题,让我带您回到上面的表1。仅考虑M1模型。你可以看到,对于x的所有值,我们都有一个概率分数。在这张表中,我们将分数大于0.5的数据点指定为类别1。现在,将所有值按概率分数降序排列,并以等于所有概率分数的阈值一个一个取值。然后,我们将得到阈值=[0.96,0.94,0.92,0.14,0.11,0.08]。对应每个阈值,预测类别,计算TPR和FPR。您将获得6对TPR和FPR。只需绘制它们,您就会得到ROC曲线。注:由于最大TPR和FPR值为1,因此ROC曲线下面积(AUC)介于0和1之间。蓝色虚线下方的面积为0.5。AUC=0表示模型很差,AUC=1表示模型很完美。只要你的模型的AUC分数大于0.5。您的模型很有意义,因为即使是随机模型也可以获得0.5AUC。非常重要:即使使用从不平衡数据集生成的哑模型,您也可以获得高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的对数损失大得多。从曲线可以看出,logloss的范围是[0,infinity]。对于多类分类中的每个数据点,我们使用以下公式计算对数损失:如果x(o,c)属于第1类,则y(o,c)=1。其余概念相同。决定系数用R2表示。在为测试集预测目标值时,我们会遇到一些误差(e_i),即预测值与实际值之间的差异。假设我们有一个包含n个条目的测试集。众所周知,所有的数据点都有一个目标值,比如[y1,y2,y3....yn]。我们将测试数据的预测值设为[f1,f2,f3,...fn]。残差平方和,即所有误差(e_i)平方和,使用以下公式计算,其中fi是模型对第i个数据点的预测目标值。取所有实际目标值的平均值:然后计算与测试集目标值的方差成比例的总平方和:如果查看平方和的两个公式,您会发现唯一的区别是第二项,y_bar和fi。平方和多少给我们一种直觉,就是和残差平方和一样,只不过预测值是[?,?,?,..?,n次]。是的,你的直觉是正确的。假设您有一个非常简单的均值模型,无论输入数据如何,它每次都预测目标值的均值。现在我们将R2表示为:正如您现在所看到的,R2是一种用于将模型与每次返回目标值均值的非常简单的均值模型进行比较的度量,而输入数据是无关紧要的。有4种情况进行比较:情况1:SS_R=0(R2=1)完美模型,完全没有错误。情况2:SS_R>SS_T(R2<0)模型甚至比简单均值模型更差。情况3:SS_R=SS_T(R2=0)模型与简单均值模型相同。情况4:SS_R