执行评估流程看似非常直接:划分数据、训练模型、进行预测并计算指标。然而,一些常见的错误可能会影响您的结果,导致您信任那些在实际中表现不佳的模型,或者抛弃那些实际上很有用的模型。让我们来看看一些需要避免的常见错误。在训练数据上进行评估这可能是最基本的错误。在数据集上训练模型后,它会非常擅长预测 特定数据 的结果。如果您随后使用模型学习过的数据来评估它,您很可能会得到非常乐观的性能分数。想象一下,这就像是给学生期末考试时,题目和他们平时学习时用的一模一样。他们可能会得到100分,但这是否意味着他们真正理解了这门课,还是仅仅记住了答案?并非如此。模型本质上“记住”了训练数据,包括其中的噪声和特殊性。这种现象称为过拟合。后果: 您会得到一个误导性的高分,让您认为模型表现出色,而实际上它可能在新数据上表现得很差。解决方法: 始终在训练过程中未使用的独立测试集上评估您的模型。这能更真实地评估模型在新情况下的泛化能力。预处理时数据泄露当训练数据集之外的信息被无意中用于模型构建时,就会发生数据泄露。这种情况常发生在数据预处理步骤中,比如特征缩放(例如,标准化或归一化)或缺失值填充。想象您有一个带有缺失值的数据集。如果您使用 整个 数据集(包括测试集)来计算某个特征的均值,然后在使用这个均值在划分数据之前填充 训练集和测试集 中的缺失值,就发生了信息泄露。训练过程通过这个计算出的均值,隐式地了解了测试集的一些分布情况。同样,如果您在划分数据之前,根据整个数据集中的最小值和最大值来缩放特征,那么训练数据的缩放就会受到测试数据的影响。后果: 类似于在训练集上评估,数据泄露会导致过于乐观的性能估计,因为模型隐式地“知道”了它不应该知道的测试数据信息。解决方法: 首先进行训练集与测试集的划分。然后,仅在训练数据上拟合您的预处理器(如缩放器或缺失值填充器)。使用已拟合的预处理器来转换训练数据和测试数据。这确保了测试集在整个模型构建过程中,包括预处理阶段,都保持完全未见。# 错误方法(潜在泄露) 1. 加载完整数据集 2. 使用完整数据集的最小/最大值缩放特征 3. 划分为训练/测试集 4. 在缩放后的训练数据上训练模型 5. 在缩放后的测试数据上评估 # 正确方法(无泄露) 1. 加载完整数据集 2. 划分为训练/测试集 3. 仅在训练数据上拟合缩放器(从训练数据中找到最小/最大值) 4. 使用已拟合的缩放器缩放训练数据 5. 使用*相同的*已拟合缩放器缩放测试数据 6. 在缩放后的训练数据上训练模型 7. 在缩放后的测试数据上评估选择了错误的指标并非所有指标都是一样的,最佳指标在很大程度上取决于您要解决的问题和数据的特点。分类: 在不平衡数据集上仅使用准确率就是一个典型例子。如果您的数据中有99%属于A类,只有1%属于B类,那么一个总是预测为A类的模型将达到99%的准确率!这听起来很棒,但模型对于识别B类却毫无用处。在这种情况下,精确率、召回率、F1分数或像AUC(曲线下面积,在更高级的主题中讨论)这样的指标会提供更多有用的信息。回归: 尽管R平方告诉您所解释的方差比例,但它没有说明错误的量级。一个预测房价的模型可能R平方值很高,但平均误差仍有50,000美元(MAE),这可能是不可接受的。相反,MAE或RMSE告诉您平均误差的量级,但不一定能说明模型比简单地预测平均价格好多少。考虑一个医疗诊断任务,在此任务中,识别疾病(阳性类别)非常重要。高召回率: 您希望找到尽可能多的实际患者,即使这意味着您会错误地将一些健康人分类(最小化假阴性)。高精确率: 您希望非常确定,当模型预测某人患有疾病时,他们确实患病(最小化假阳性)。后果: 您可能会为了一个不能反映实际目标的指标进行优化,从而得到一个在实际中表现不佳的模型,因为它未能达成真正重要的目标。解决方法: 理解不同类型错误对您的特定问题的影响。选择与您的目标一致的指标。对于分类问题,始终检查混淆矩阵,特别是在数据不平衡的情况下。对于回归问题,同时考虑误差量级(MAE、RMSE)和相对表现(R平方)。忘记基准模型在为模型表现欢呼之前,始终将其与一个简单的基准模型进行比较。基准模型是一个非常基础的模型或规则,可以提供一个参考点。分类基准: 对所有样本预测最常见的类别。回归基准: 对所有样本预测目标变量的平均值(或中位数)。如果您复杂的机器学习模型表现没有比这个简单的基准模型好很多,它可能过于复杂、调整不当,或者特征包含的预测信息不足。后果: 您可能会投入时间和资源来开发一个复杂模型,但它相对于一个简单方法而言,几乎没有或根本没有实际优势。解决方法: 始终使用您评估实际模型的相同指标来计算简单基准模型的性能。将此作为衡量标准,以判断您的模型是否提供了有意义的改进。误解指标值从指标中得到一个数字很容易;理解它意味着什么则需要背景信息。准确率: 如前所述,如果数据不平衡,99%的准确率也可能是糟糕的。精确率/召回率: 模型可能具有高精确率但低召回率,或者反之。理解其中的权衡(在第2章中讨论)非常重要。仅仅看其中一个而不看另一个可能会产生误导。均方根误差(RMSE): 如果您预测的值范围是0到1000,RMSE为10可能很优秀,但如果范围是0到20,则可能很糟糕。单位和尺度很重要。R平方: 高R平方不能保证模型是好的,或者其预测在绝对意义上是准确的。它衡量的是相对于均值所解释的方差比例。即使添加无用的特征,R平方也可能被人为抬高(调整后的R平方,一个更进阶的主题,旨在纠正这一点)。后果: 基于对性能分数的肤浅理解做出错误决定。您可能会部署一个模型,认为它很好,而实际上它的实际表现不足。解决方法: 不要只报告数字。在您的具体问题、数据的尺度和分布以及基准表现的背景下解释它们。理解您使用的每个指标的定义和局限性。依赖单一数据划分如前一章简要提及,将数据一次性划分为训练集和测试集,会给您一个性能估计。然而,这个估计可能对划分方式的具体细节很敏感。偶然地,您可能会得到一个模型表现异常出色的“容易”测试集,或者一个模型表现不佳的异常“困难”测试集。后果: 您的单一评估可能无法代表模型在不同未见数据子集上的平均表现。结果可能仅仅因为划分时的随机性而过于乐观或过于悲观。解决方法: 尽管单一的训练-测试集划分对基础评估很重要,但请注意这个局限性。更稳定的评估技术,如交叉验证(在第4章中介绍,并在更高级的课程中详细讨论),涉及多次划分并对结果取平均,以获得更可靠的性能估计。目前,请认识到单一划分提供的是一个估计值,而不是未来表现的精确衡量。避免这些常见错误对于可靠的模型评估非常重要。认真对待评估过程,可以确保您计算的性能指标真实反映了模型在新数据上的泛化能力和价值。