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

如何防止我的模型过度拟合?本文给出6个必备方法

时间:2023-03-16 16:52:25 科技观察

正如巴菲特所说:“近似正确胜于精确错误”。在机器学习中,过拟合(overfitting)会使模型的预测性能变差,通常发生在模型过于复杂时,比如参数过多。本文总结了过拟合及其解决方法。在机器学习中,如果一个模型过于关注特定的训练数据而忽略了重点,则该模型被称为过度拟合。模型提供的答案与正确答案相去甚远,即准确率降低。此类模型将无关数据中的噪声视为信号,从而对准确性产生负面影响。这无济于事,即使模型训练得很好,损失很小,它在新数据上的表现仍然很差。欠拟合是指数据的逻辑没有被模型捕捉到。因此,欠拟合模型具有较低的准确性和较高的损失。如何判断模型是否过拟合?建立模型时,数据分为3类:训练集、验证集和测试集。训练数据用于训练模型;验证集用于在每一步测试构建的模型;测试集最后用于评估模型。通常数据以80:10:10或70:20:10的比例分布。在构建模型的过程中,使用验证数据在每个epoch对当前构建的模型进行测试,得到模型的loss和accuracy,以及每个epoch的验证loss和验证accuracy。模型搭建完成后,使用测试数据对模型进行测试,得到准确率。如果准确性和验证准确性之间存在较大差异,则该模型过度拟合。如果验证集和测试集的损失都很高,则模型欠拟合。如何防止过拟合1.交叉验证交叉验证是防止过拟合的好方法。在交叉验证中,我们生成多个训练测试拆分并调整模型。K折验证是一种标准的交叉验证方法,它将数据分成k个子集,使用其中一个子集进行验证,其他子集用于训练算法。交叉验证允许调整超参数,性能是所有值的平均值。这种方法计算量大,但不会浪费太多数据。交叉验证过程见下图:2.Trainingwithmoredata使用更多相关数据训练模型有助于更好地识别信号,避免噪声作为信号。数据增强是一种增加训练数据的方法,可以通过翻转、平移、旋转、缩放和改变亮度等方法来实现。3.去除特征去除特征可以降低模型的复杂度,一定程度上避免噪声,使模型更加高效。为了降低复杂性,我们可以删除层或减少神经元数量,使网络更小。4.Earlystopping在迭代训练模型时,我们可以衡量每次迭代的性能。当验证损失开始增加时,我们应该停止训练模型,从而防止过度拟合。下图显示了何时停止训练模型:5.正则化正则化可以用来降低模型的复杂度。这是通过惩罚损失函数来完成的,可以通过两种方式来完成,L1和L2,数学方程如下:L1惩罚的目的是优化权重绝对值之和。它生成一个简单且可解释的模型,该模型对异常值具有鲁棒性。L2惩罚权重值的平方和。该模型能够学习复杂的数据模式,但对异常值不稳健。这两种正则化方法都有助于解决过拟合问题,读者可以根据需要选择使用。6.DropoutDropout是一种随机禁用神经网络单元的正则化方法。它可以在任何隐藏层或输入层上实现,但不能在输出层上实现。这种方法可以免除对其他神经元的依赖,从而使网络能够学习独立的相关性。这种方法可以降低网络的密度,如下图所示:总结过拟合是一个需要解决的问题,因为它阻止我们有效地使用现有数据。有时我们也可以在建立模型之前预测到会出现过拟合。通过查看数据、数据的收集方式、采样方式、错误的假设、错误的表示,可以发现过度拟合的迹象。为避免这种情况,请在建模前检查数据。但有时在预处理期间无法检测到过拟合,而只能在构建模型之后检测到。我们可以使用上述方法解决过拟合问题。