避免机器学习模型过拟合
什么是过拟合?
过拟合指当模型与训练数据过于接近贴合,以至于不知道如何对新数据做出响应时发生的一种机器学习行为。过拟合的原因可能是:
- 机器学习模型太过复杂;它记忆了训练数据中非常微妙的的模式,而这些模式无法很好地泛化。
- 训练数据的规模对于模型复杂度来说太小,和/或者包含大量不相关的信息。
您可以通过管理模型复杂度和改进训练数据集来防止过拟合。
过拟合与欠拟合
欠拟合与过拟合正相反。欠拟合指模型不能很好地与训练数据贴合,也无法很好地泛化到新数据。在分类模型和回归模型中都可能出现过拟合和欠拟合。下图说明了过拟合的模型的分类决策边界和回归线如何过于紧密地跟随训练数据,而欠拟合的模型的分类决策边界和回归线又如何不够紧密地跟随训练数据。
与正确拟合的模型相比,过拟合的分类模型和回归模型对训练数据的记忆太好。
当只针对训练数据查看机器学习模型的计算误差时,过拟合比欠拟合更难检测。因此,为了避免过拟合,在对测试数据使用机器学习模型之前对其进行验证就很重要。
误差 |
过拟合 |
正确拟合 |
欠拟合 |
训练 |
低 |
低 |
高 |
测试 |
高 |
低 |
高 |
针对训练数据,过拟合模型的计算误差低,而测试数据的误差高。
将 MATLAB® 与 Statistics and Machine Learning Toolbox™ 和 Deep Learning Toolbox™ 结合使用,可以防止机器学习模型和深度学习模型的过拟合。MATLAB 提供了专为避免模型过拟合而设计的函数和方法。您可以在训练或调整模型时使用这些工具来防止过拟合。
如何通过降低模型复杂度来避免过拟合
使用 MATLAB,您可以从头开始训练机器学习模型和深度学习模型(如 CNN),或利用预训练的深度学习模型。为了防止过拟合,请执行模型验证,以确保为数据选择具有合适复杂程度的模型,或使用正则化来降低模型的复杂度。
模型验证
当对训练数据进行计算时,过拟合模型的误差较低。因此,在引入新数据之前,最好在单独的数据集(即验证数据集)上验证您的模型。对于 MATLAB 机器学习模型,您可以使用 cvpartition
函数将数据集随机划分为训练集和验证集。对于深度学习模型,您可以在训练过程中监控验证准确度。通过模型选择和超参数调整来提高经过正确验证的模型准确度度量应该能够提高模型处理新数据的准确度。
正则化
正则化是一种用于防止机器学习模型中的统计过拟合的方法。正则化算法通常通过对复杂度或粗糙度应用罚分来实现。通过向模型中引入更多信息,正则化算法可以使模型更加简约和准确,从而处理多重共线性和冗余预测变量。
示例和操作方法
如何通过增强训练数据集来避免过拟合
交叉验证和正则化通过管理模型复杂度来防止过拟合。另一种方法是改进数据集。深度学习模型比其他机器学习模型更需要大量的数据来避免过拟合。
数据增强
数据生成
合成数据生成是扩展数据集的另一种方法。使用 MATLAB,您可以使用生成对抗网络 (GAN) 或数字孪生(通过仿真生成数据)来生成合成数据。
数据清洗
数据噪声会导致过拟合。减少不想要的数据点的一种常见方法是使用 rmoutliers
函数从数据中删除离群值。