正如巴菲特所说:“近似的正确胜过精确的错误。”
在机器学习领域,过拟合会导致模型在预测时性能下降,通常发生在模型结构过于复杂的情况下,例如参数过多。本文将对过拟合及其解决策略进行总结。

机器学习中,如果模型过于关注特定的训练数据而忽略了整体特征,则该模型被视为过拟合。这种情况下,模型所提供的答案与真实答案之间存在较大差距,表现为准确率的降低。这类模型将无关数据中的噪声误认为信号,从而影响准确度。即便模型经过充分训练以使损失最小化,其在新数据上的表现仍可能不佳。相反,欠拟合则是指模型未能有效捕捉数据中的逻辑特征,导致准确率低且损失高。

如何判断模型是否过拟合?
在构建模型时,数据通常被分为三类:训练集、验证集和测试集。训练集用于训练模型;验证集用于在每一步评估模型的性能;测试集则用于最终评估模型的准确性。数据通常以80:10:10或70:20:10的比例进行分配。
在模型构建过程中,我们会在每个epoch中使用验证集来评估当前模型,获得损失和准确率,以及每个epoch的验证损失和验证准确率。模型构建完成后,利用测试集对模型进行测试以获取准确率。如果准确率与验证准确率之间差异较大,则表明模型可能存在过拟合问题。
如果验证集和测试集的损失均较高,说明模型可能出现欠拟合。
如何防止过拟合
交叉验证
交叉验证是一种有效的防止过拟合的方法。在这一过程中,我们会生成多个训练和测试的划分来调整模型。K-折验证是一种经典的交叉验证方式,其中数据被分成k个子集,使用其中一个子集进行验证,其余子集用于训练。
交叉验证允许我们调整超参数,模型性能为所有值的平均结果。尽管该方法计算成本较高,但可以有效利用数据。交叉验证的过程如下图所示:

使用更多数据进行训练
利用更多相关数据训练模型有助于更好地识别信号,避免将噪声误认为信号。数据增强是一种增加训练数据的方法,可以通过翻转、平移、旋转、缩放和调整亮度等手段来实现。
特征选择
通过移除特征可以降低模型的复杂性,并在一定程度上减少噪声,从而提高模型的效率。为了降低复杂度,我们可以减少层数或降低神经元的数量,从而简化网络结构。
早停法
在迭代训练模型时,我们可以监测每次迭代的性能。当验证损失开始上升时,应停止训练以防止过拟合。
下图展示了何时应停止训练模型:

正则化
正则化是一种降低模型复杂性的手段,主要通过对损失函数施加惩罚实现。可以采用L1和L2两种方式,相关的数学公式如下:

L1惩罚的目标是优化权重绝对值的总和,生成一个简单且可解释的模型,且对异常值具有鲁棒性。

L2惩罚则是对权重值的平方和施加惩罚。这种模型能够学习复杂数据模式,但对异常值的鲁棒性较差。
这两种正则化方法均可有效解决过拟合问题,读者可根据实际需求选择使用。
Dropout
Dropout是一种正则化技术,用于随机禁用神经网络中的单元。它可以在任何隐藏层或输入层实现,但不适用于输出层。该方法减少了对其他神经元的依赖,从而使网络能够学习独立的相关性。该方法能有效降低网络的复杂性,如下图所示:

总结
过拟合是一个需要解决的重要问题,因为它会影响我们对现有数据的有效利用。在构建模型之前,有时我们可以通过分析数据、数据收集方式、采样方法及假设的准确性来预测过拟合的风险。为了避免这种情况,建议在建模前仔细检查数据。然而,有时过拟合可能在预处理阶段无法检测到,而是在模型构建后才会显现。我们可以通过上述方法来有效解决过拟合问题。
