当我们训练一个机器学习模型时,我们的目标不仅仅是在它已见过的数据(训练数据)上表现良好。我们希望模型能有很好的泛化能力,这意味着它应该也能对新的、未见过的数据做出准确预测。可以把它想象成准备考试:你不想只记住练习题的答案;你希望理解这些要点,这样你就能在实际考试中回答不同的问题。两个常见问题会阻碍模型良好泛化:欠拟合与过拟合。它们代表了模型从数据中学习的两个极端情况。欠拟合:过于简单想象一下,你试图画一条直线,穿过明显呈曲线分布的数据点。这条直线过于简单,无法捕捉到数据背后呈现的形态。这就是欠拟合。欠拟合的模型不够复杂,无法学到训练数据中的主要趋势。它不仅在训练数据上表现差,在新的、未见过的数据(例如测试集)上表现也差。它未能掌握特征与标签之间的关联。表现: 训练集和测试集上的错误率都很高。比喻: 考试前你只看了章节概述,没有细致学习。你在练习题和实际考试中都不会考好,因为你没有学到足够的内容。过拟合:过于复杂现在想象一下,你画了一条狂野的、蜿蜒的线,完美地穿过训练集中的每一个数据点。虽然它在训练数据上看起来表现出色,但这条线可能不仅学到了数据背后的形态,还学到了随机噪声以及该特定数据集的独有特点。这就是过拟合。过拟合的模型过于复杂。它实质上是记住了训练数据,包括其中的噪声,而不是学习到普遍的形态。当面对新数据时,这些新数据不会有完全相同的噪声和独有特点,模型的表现就会很差。表现: 训练集上的错误率非常低,但测试集上的错误率很高。比喻: 你记住了每一个练习题及其准确答案,包括任何错别字。你练习题得了满分,但当实际考试出现略有不同的题目,考察相同的要点时,你就会很吃力,因为你没有学到背后的原理。最佳状态:良好拟合理想的模型介于这两种极端之间。它足够复杂,能捕捉到数据背后呈现的趋势,又足够简单,避免记住噪声。这种模型达到良好拟合,并能很好地泛化到新数据上。表现: 训练集上的错误率较低,测试集上的错误率也同样较低。比喻: 你学习要点并练习不同类型的问题。你在练习题上表现良好,并将学到的知识运用到实际考试中取得成功。以下图表说明了这三种情况:{ "data": [ { "x": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], "y": [1.5, 2.2, 1.8, 3.5, 3.0, 4.8, 5.5, 6.2, 5.8, 7.5, 7.0, 8.8, 9.5, 10.2, 9.8], "mode": "markers", "type": "scatter", "name": "数据", "marker": { "color": "#495057" } }, { "x": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], "y": [2.69, 3.23, 3.77, 4.31, 4.85, 5.39, 5.93, 6.47, 7.01, 7.55, 8.09, 8.63, 9.17, 9.71, 10.25], "mode": "lines", "type": "scatter", "name": "欠拟合(简单直线)", "line": { "color": "#339af0", "dash": "dash" } }, { "x": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], "y": [1.65, 2.13, 2.73, 3.44, 4.27, 5.21, 6.26, 7.43, 8.71, 10.1, 11.61, 13.23, 14.96, 16.81, 18.77], "mode": "lines", "type": "scatter", "name": "过拟合(复杂曲线)", "line": { "color": "#f06595", "dash": "dot" } }, { "x": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], "y": [1.31, 1.98, 2.83, 3.84, 4.99, 6.28, 7.69, 9.22, 10.87, 12.64, 14.52, 16.51, 18.61, 20.81, 23.11], "mode": "lines", "type": "scatter", "name": "良好拟合(平衡曲线)", "line": { "color": "#51cf66" } } ], "layout": { "title": "欠拟合 vs. 良好拟合 vs. 过拟合", "xaxis": { "title": "特征 (X)" }, "yaxis": { "title": "标签 (Y)" }, "legend": { "orientation": "h", "yanchor": "bottom", "y": -0.3, "xanchor": "center", "x": 0.5 }, "margin": { "l": 40, "r": 20, "t": 40, "b": 100 }, "height": 400 } }散点代表训练数据。蓝色虚线(欠拟合)过于简单。绿色实线(良好拟合)呈现普遍趋势。粉色点线(过拟合)过于紧密地跟随训练数据点,包括噪声。识别并避免过拟合和欠拟合是机器学习中的一个主要难题。我们使用的技巧,例如将数据分成训练集和测试集、选择合适的模型复杂度(这与参数和超参数有关),以及使用性能指标(接下来会讲到),都是为了帮助我们找到那个“最佳状态”,并构建在新数据上真正有用的模型。