开发完监督学习模型后,评估其性能是不可或缺的一步。仅仅训练模型是不够的;必须透彻地评估其预测结果,以了解其有效性并找出可改进之处。对于分类任务尤其如此,这类任务中模型将项目分配到预设类别。有多种指标可以量化分类器的表现。四种常用指标是:准确率、精确率、召回率和F1分数。这些指标从不同角度评估模型的正确性,并且都来源于一种称为混淆矩阵的结构。根本:理解混淆矩阵对于任何分类问题,混淆矩阵是一个表格,它总结了分类算法的表现。这是一种直观的方式,可以查看有多少预测是正确的,以及模型犯了哪些类型的错误。对于二元分类问题(例如,分为正类和负类两种),混淆矩阵如下所示:digraph G { rankdir=TB; node [shape=plaintext]; edge [style=invis]; table [label=< <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="5"> <TR><TD PORT="c00" BGCOLOR="#e9ecef" COLSPAN="2" ROWSPAN="2"></TD><TD COLSPAN="2" BGCOLOR="#ced4da" ALIGN="CENTER"><B>预测类别</B></TD></TR> <TR><TD BGCOLOR="#adb5bd" ALIGN="CENTER">正类</TD><TD BGCOLOR="#adb5bd" ALIGN="CENTER">负类</TD></TR> <TR><TD PORT="r0" BGCOLOR="#ced4da" ROWSPAN="2" VALIGN="MIDDLE"><B>实际<BR/>类别</B></TD><TD BGCOLOR="#adb5bd" ALIGN="LEFT">正类</TD><TD BGCOLOR="#b2f2bb" ALIGN="CENTER">真阳性 (TP)</TD><TD BGCOLOR="#ffc9c9" ALIGN="CENTER">假阴性 (FN)</TD></TR> <TR><TD BGCOLOR="#adb5bd" ALIGN="LEFT">负类</TD><TD BGCOLOR="#ffc9c9" ALIGN="CENTER">假阳性 (FP)</TD><TD BGCOLOR="#b2f2bb" ALIGN="CENTER">真阴性 (TN)</TD></TR> </TABLE> >]; }一个标准的2x2混淆矩阵,显示了二元分类的四种可能结果。来解释一下这些术语:真阳性 (TP):这些是模型正确预测为正类的情况。例如,如果正类是“垃圾邮件”,那么TP就是模型正确识别为垃圾邮件的垃圾邮件。真阴性 (TN):这些是模型正确预测为负类的情况。继续垃圾邮件的例子,TN就是模型正确识别为非垃圾邮件(正常邮件)的非垃圾邮件。假阳性 (FP):也称为“I型错误”。这些是模型错误地预测为正类,而实际是负类的情况。对于我们的垃圾邮件过滤器,FP是非垃圾邮件却被模型错误地标记为垃圾邮件。这可能导致重要邮件被遗漏,从而带来问题。假阴性 (FN):也称为“II型错误”。这些是模型错误地预测为负类,而实际是正类的情况。对于垃圾邮件过滤器,FN是模型未能检测到的垃圾邮件,使其进入用户收件箱。理解这四种结果是掌握后续指标的根本。准确率准确率可能是最直观的表现衡量指标。它只是正确预测的实例数与总实例数之比。准确率的公式是: $$ \text{准确率} = \frac{TP + TN}{TP + TN + FP + FN} $$虽然准确率易于理解和计算,但它可能具有误导性,尤其是在处理不平衡数据集时。不平衡数据集指的是一个类别中的实例数量远高于其他类别的情况。假设一个用于信用卡欺诈检测的数据集,其中99%的交易是合法的(负类),只有1%是欺诈性的(正类)。一个总是预测为“合法”的简单模型就能达到99%的准确率。虽然这听起来很高,但该模型对于欺诈检测毫无用处,因为它从未识别出任何欺诈性交易(它的真阳性将为零,所有实际欺诈都会成为假阴性)。在这种情况下,仅仅依赖准确率会让人对模型的表现产生错误认识。精确率精确率回答了这个问题:“在模型标记为正类的所有实例中,有多少是实际的正类?”它侧重于正类预测的正确性。精确率的公式是: $$ \text{精确率} = \frac{TP}{TP + FP} $$高精确率意味着当模型预测一个实例为正类时,它很可能是正确的。当假阳性成本很高时,精确率显得尤为重要。例子:在垃圾邮件检测中,假阳性意味着一封合法邮件被错误地发送到垃圾邮件文件夹。用户会觉得这非常烦人。因此,垃圾邮件过滤器应追求高精确率。例子:如果模型预测某只股票会上涨,高精确率意味着当它做出这样的预测时,股票确实倾向于上涨。投资者会看重这一点。召回率(敏感度或真阳性率)召回率,也称为敏感度或真阳性率(TPR),回答了这个问题:“在所有实际正类实例中,模型正确识别了多少?”它衡量模型找出所有相关正类实例的能力。召回率的公式是: $$ \text{召回率} = \frac{TP}{TP + FN} $$高召回率意味着模型识别出大多数实际正类实例。当假阴性成本很高时,召回率显得尤为重要。例子:在传染病医学筛查中,假阴性意味着患病病人被误诊为健康,可能导致疾病传播和治疗延误。在这种情况下,高召回率非常重要。例子:在欺诈检测中,假阴性意味着欺诈性交易被遗漏。银行希望尽可能多地捕获欺诈性交易,因此高召回率是合意的。精确率与召回率的权衡通常,精确率和召回率之间存在权衡。提高精确率有时会导致召回率下降,反之亦然。例如,如果你把垃圾邮件过滤器设置得非常严格(以提高精确率,确保只有真正的垃圾邮件才被标记为垃圾邮件),你最终会漏掉一些垃圾邮件(降低召回率)。相反,如果你将其设置得非常宽松(以提高召回率,捕获更多垃圾邮件),你可能会错误地将更多合法邮件标记为垃圾邮件(降低精确率)。具体的权衡取决于应用场景。F1分数当你需要一个能够平衡精确率和召回率的单一指标时,F1分数是一个常用选择。它是精确率和召回率的调和平均值。调和平均值对较低的值给予更大的权重,这意味着只有当精确率和召回率都相对较高时,F1分数才会很高。F1分数的公式是: $$ \text{F1分数} = 2 \times \frac{\text{精确率} \times \text{召回率}}{\text{精确率} + \text{召回率}} $$F1分数的范围从0到1,其中1是最佳可能得分。在处理不平衡类别时它特别有用,因为在这种情况下,它比准确率的误导性小。如果精确率或召回率非常低,F1分数也会很低。MLJ.jl中的评估指标在你学习本章内容并使用MLJ.jl实现模型时,你会发现该框架提供了便捷的方式来计算这些评估指标。MLJ.jl与StatisticalMeasures.jl包集成,提供了诸如accuracy、precision、recall和f1score(或fscore)等函数。你可以将这些函数应用于模型生成的预测结果和真实目标值,以评估表现。通常,这些指标与交叉验证等重采样策略结合使用,以估算模型在未见过数据上的表现。选择合适的指标对于所有问题,没有哪个指标是“最好”的。优先选择哪个指标在很大程度上取决于你的机器学习应用的具体目标以及不同类型错误的后果。如果你的类别相对平衡,并且你想要一个整体正确性判断,准确率可以是一个不错的开始。如果假阳性成本很高(例如,错误地指控某人,将重要邮件发送到垃圾邮件),则优先考虑精确率。如果假阴性成本很高(例如,未能检测到疾病,遗漏欺诈性交易),则优先考虑召回率。如果你需要平衡精确率和召回率,尤其是在类别不平衡的情况下,F1分数通常是一个合适的选择。理解这些指标使你能够从仅仅训练模型转变为审慎评估其表现,并就如何改进模型或为给定任务部署哪个模型做出明智的决定。随着你获得经验,你将形成更好的直觉,从而在Julia中的机器学习项目中选择和理解最合适的指标。