趋近智
你投入时间构建了神经网络 (neural network),为其提供数据,并指导它完成训练过程。但你如何判断你的模型是否真的表现良好呢?训练循环顺利完成并不表示模型学到了任何有用的东西。在这里,评估指标变得重要起来。它们提供了衡量模型表现的定量方法,让你能够客观地衡量模型在给定任务(无论是图像分类还是房价预测)上的效能。理解这些指标是比较不同模型、调整超参数 (parameter) (hyperparameter)以及最终决定模型是否可用于预期用途的根本。
当模型的任务是为输入分配一个类别或类标签时(例如,“垃圾邮件”或“非垃圾邮件”,“猫”或“狗”),你正在处理一个分类问题。许多指标可以帮助你了解分类器的表现如何。
准确率或许是最直接的分类指标。它简单地衡量了模型正确预测的比例。
尽管直接,但准确率有时会产生误导,尤其是在处理不平衡数据集时。例如,如果你的邮件中有 95% 不是垃圾邮件,一个总是预测“非垃圾邮件”的模型将达到 95% 的准确率,但对于识别实际的垃圾邮件将毫无用处。
为了更细致地了解分类器的表现,尤其是在类别不平衡的情况下,我们经常使用混淆矩阵。它是一个表格,通过根据实际类别和预测类别将分类器所做的预测分解为四个类别来对其进行概括:
混淆矩阵的典型布局,显示了实际和预测类别标签之间的关系。
从混淆矩阵中得出的这四个值,我们可以计算出其他几个有价值的指标。
精确率回答了这个问题:“在模型预测为阳性的所有实例中,有多少是实际的阳性?”它是衡量阳性预测准确度的指标。
当假阳性成本很高时,高精确率非常重要。例如,在垃圾邮件检测中,你需要高精确率以避免将合法邮件(实际阴性)标记 (token)为垃圾邮件(预测阳性)。
召回率回答了这个问题:“在所有实际的阳性实例中,模型正确识别了多少?”它是衡量阳性实例完整性的指标。
当假阴性成本很高时,高召回率非常重要。例如,在严重疾病的医学诊断中(阳性类别),需要高召回率以最大限度地减少遗漏实际病例(实际阳性被预测为阴性)的风险。
精确率和召回率之间通常存在权衡。提高一个可能会降低另一个。F1 分数通过计算它们的调和平均值来平衡两者。当类别分布不均匀或需要一个数字来同时代表精确率和召回率时,它特别有用。
F1 分数范围从 0 到 1,1 是最好的可能分数(完美的精确率和召回率)。它比简单的平均值更能惩罚极端值,这意味着如果精确率或召回率非常低,F1 分数也将很低。
如果你的模型正在预测一个连续的数值,例如股票价格或明天的温度,那么你正在处理一个回归问题。这里的评估指标侧重于预测值和实际值之间误差的大小。
平均绝对误差衡量的是 个样本中预测值 () 和实际值 () 之间的平均绝对差。
MAE 易于理解,因为它与目标变量的单位相同。它给出了预测偏差的平均情况,在误差大小方面对所有误差给予同等权重 (weight)。
均方误差计算的是预测值 () 和实际值 () 之间平方差的平均值。
通过对误差进行平方,MSE 对大误差的惩罚比 MAE 更重。如果大误差对你的应用来说特别成问题,这可能更可取。然而,它的单位是目标变量单位的平方(例如,如果预测价格,则是美元的平方),这使得它不如 MAE 那样直接易于理解。
为了使误差指标回到目标变量的原始单位,我们通常使用均方根误差,它就是 MSE 的平方根。
和 MSE 一样,RMSE 对大误差进行显著惩罚,但其优点是与目标变量的单位相同,使其比 MSE 更易于理解。它是回归任务中最受欢迎的指标之一。
R 平方,或称决定系数,衡量的是因变量 () 中可以通过自变量(模型使用的特征)预测的方差比例。简单来说,它告诉你与总是预测目标值平均值 () 的简单基线模型相比,你模型的预测与实际值近似的程度。
对于合理的模型, 值通常在 0 到 1 之间:
构建深度学习 (deep learning)模型涉及搭建神经网络 (neural network)、输入数据并引导其完成训练过程。但如何判断您的模型是否真的有效?仅仅因为训练循环没有错误地完成,并不意味着模型学到了任何有用的东西。评估指标在此发挥作用。它们提供了模型性能的量化 (quantization)衡量标准,让您可以客观地评估其在给定任务(无论是图像分类还是房价预测)上的有效性。理解这些指标对于比较不同模型、调整超参数 (parameter) (hyperparameter)以及最终决定模型是否适合其预期应用至关重要。
选择合适的评估指标并非总是简单明了,它在很大程度上取决于你的深度学习 (deep learning)项目的具体目标和数据集的特性。例如:
在模型开发过程中监控多个指标是很常见的。了解每个指标的权衡和影响将帮助你对模型的质量和可用性做出明智的决定。许多这些指标可以使用 Julia 数据科学和机器学习 (machine learning)包中可用的函数轻松计算,例如 MLJBase.jl 或 StatsBase.jl 中的函数,或者如果 Flux.jl 训练循环中的自定义情况需要,也可以直接实现它们。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造