网站建设的公司哪家便宜,酷站百分百,企业网站排版,wordpress win主机「AI秘籍」系列课程#xff1a; 人工智能应用数学基础 人工智能Python基础 人工智能基础核心知识 人工智能BI核心知识 人工智能CV核心知识 多项式回归的过度拟合及其避免方法 通过添加现有特征的幂#xff0c;多项式回归可以帮助你充分利用数据集。它允许我们甚至使用简…「AI秘籍」系列课程 人工智能应用数学基础 人工智能Python基础 人工智能基础核心知识 人工智能BI核心知识 人工智能CV核心知识 多项式回归的过度拟合及其避免方法 通过添加现有特征的幂多项式回归可以帮助你充分利用数据集。它允许我们甚至使用简单的模型如线性回归来建模非线性关系。这可以提高模型的准确性但如果使用不当可能会发生过度拟合。我们希望避免这种情况因为它会导致你的模型在未来表现不佳。 在本文中我们将解释多项式回归的概念并说明它如何导致过度拟合。我们还将讨论一些可用于避免过度拟合的技术。这些包括使用 k 倍交叉验证或保留集但最重要的是我们将讨论如何应用领域知识来帮助你避免过度拟合。在文章我不会讨论任何代码但是你可以在GitHub1上找到完整的项目本文项目 polynomial_regression_overfitting.ipynb。
什么是多项式回归
让我们通过将一些线性回归模型拟合到数据集来直接深入研究这个概念。我们将使用一个房地产估价数据集2其中包含有关已售出的 414 栋房屋的信息。为了简单起见我们只看两个变量——单位面积房价和房屋年龄。我们可以在下面的图 1 中看到这两个变量之间的关系。这个想法是使用房屋房龄来预测价格。 从图 1 可以看出这两个变量之间似乎不存在线性关系。这意味着这种关系不能用直线表示。在我们的例子中房价最初随着房龄的增长而下降。然而大约 25 年后房价开始随着房龄的增长而上涨。这表明这种关系可能是二次的。在开始建模之前让我们讨论一下为什么会这样。我们稍后会看到当涉及到多项式回归时对数据中的关系有充分的理由/理由很重要。 最初的行为是有道理的。随着房屋的老化它们会变得越来越破旧价值也会下降。房地产专家对此有更好的理解但也许经过较长时间后房屋就会变得古老。随着人们开始重视房屋的悠久历史它们的房龄会增加价值。也可能存在一些选择偏差这可以解释这种上升趋势。也就是说昂贵的房屋往往不会被拆除因此唯一出售的老房子就是这些昂贵的房屋。
标准线性回归
无论出于什么原因由于关系不是线性的我们不会指望标准线性模型能很好地完成这项工作。让我们尝试使用线性回归仅使用房龄来模拟房价以证明这一点。我们这样做
将数据集随机分成训练集70%和测试集30%。使用训练集对模型进行训练。通过对测试集进行预测并计算 MSE 来评估模型[。](https://en.wikipedia.org/wiki/Mean_squared_error#:~:textIn statistics%2C the mean squared,values and the actual value.)
按照这个过程我们最终会得到一个由以下方程表示的模型 p r i c e β 1 ( a g e ) β 0 price \beta_1(age)\beta_0 priceβ1(age)β0 其中 β₁ 和 β₀ 是模型估计的参数。这个方程也可以称为模型的预测线。它给出了给定房龄的预测房价。
在图 2 中我们可以看到在数据集上使用此模型的结果。这里红线表示预测线。查看这条线我们发现该模型在捕捉潜在的二次趋势方面做得很差。我们可以使用测试集 MSE 总结该模型的准确性即 145.91。 多项式回归
现在让我们尝试使用多项式回归来改进我们的模型。最终由于关系似乎是二次的我们期望以下方程能做得更好 p r i c e β 2 ( a g e 2 ) β 1 ( a g e ) β 0 price \beta_2(age^2) \beta_1(age) \beta_0 priceβ2(age2)β1(age)β0 问题是如果我们对当前数据集使用线性回归就不可能得到这样的方程。为了解决这个问题我们可以简单地在数据集中添加一个新变量 a g e 2 age^2 age2。为了避免混淆我们将其重新标记为 age_squared。添加此功能后我们可以将非线性方程重写为线性方程 p r i c e β 2 ( a g e _ s q u a r e d ) β 1 ( a g e ) β 0 price \beta_2(age\_squared)\beta_1(age)\beta_0 priceβ2(age_squared)β1(age)β0
我们现在有两个变量即 age_squared 和 age的线性函数它实际上是一个变量即 age的非线性函数。这使我们能够像以前一样使用线性回归来估计 β 参数。我们可以在图 3 中看到生成的预测线。在这种情况下测试 MSE 为 127.42比我们之前的模型低 13%。因此这个新模型在预测房价方面做得更好。 通过使用这个新特征 a g e 2 age^2 age2我们正在进行多项式回归。概括地说每当你使用 n 次多项式来模拟目标和特征之间的关系时你都会进行多项式回归。例如 p r i c e β n ( a g e n ) . . . β 2 ( a g e 2 ) β 1 ( a g e ) β 0 price \beta_n(age^n) ... \beta_2(age^2) \beta_1(age)\beta_0 priceβn(agen)...β2(age2)β1(age)β0 通过添加这些特征我们可以在数据集中建模更复杂的关系。在上面的模型中 n 2 n 2 n2但使用更高次多项式可能会获得更好的结果。话虽如此通过添加更多特征我们也可能最终过度拟合数据。
多项式回归的过度拟合
当模型与训练数据集的拟合度过高时我们就说模型过度拟合了。模型会捕捉数据中的噪声而不仅仅是潜在的趋势。其结果是模型在训练数据集上可能表现良好但在测试数据集上则表现不佳。事实上我们不会期望模型在任何未经训练的数据集上表现良好。
过度拟合通常是因为模型太复杂或特征太多。随着特征的增加过度拟合的可能性就越大。在多项式回归中增加次数也会出现同样的情况。在图 3 中你可以看到我的意思。我们遵循相同的建模过程但每一步都会增加多项式的次数。我们从 n1 开始以 n25 结束。请注意随着次数的增加预测线会变得更加扭曲。 实际情况是随着阶数的增加模型可以拥有更多转折点。2 阶多项式有 1 个转折点3 阶多项式有 2 个转折点依此类推……每增加一个转折点我们就会给予模型更多自由使其更贴近训练数据集。对于更高的阶数模型可能只是捕捉噪音。真正的潜在趋势不太可能如此复杂。
另一种可视化方法是查看训练和测试集上的 MSE。如图 4 所示训练 MSE 趋于随着程度的增加而减小。这意味着模型在训练集上变得越来越准确。测试 MSE 讲述了一个不同的故事。当 n2 时测试 MSE 最小然后趋于增加。这意味着模型在测试集上的表现越来越差。换句话说随着我们增加程度模型变得越来越过度拟合。 如何避免过度拟合
我们已经看到了多项式回归可能出错的原因。现在的问题是我们如何选择正确的程度并避免过度拟合。与任何机器学习模型一样我们希望训练一个具有在测试集和训练集上表现良好的特征组合的模型。这样选择多项式回归的最佳特征的过程与任何其他机器学习问题没有什么不同。
Hold-out set
一种常见的方法是使用Hold-out set。说实话我也不太清楚这个应该怎么翻译如果是按字面翻译的话我们应该称呼它为「保留集」。对于这种方法数据集被分成训练集和保留集/测试集。对于不同的特征集模型在训练集上进行训练在测试集上进行评估。我们使用一些指标例如 MSE来评估性能。我们通常会选择在测试集上表现最好的特征集。
看看上面所做的工作我们可以将此方法应用于房价示例。在这种情况下n2 的模型具有最小的测试 MSE。这意味着我们将在最终模型中仅使用 a g e 2 age^2 age2 和 a g e age age。这似乎是一个合理的结果因为真正的潜在趋势似乎是二次的。我们还提出了一些逻辑理由来支持这一结果。
K 折交叉验证
类似的方法是使用 k 折交叉验证。在这里我们将数据集划分为大小相等的 k 个子集\折叠。然后我们在 k-1 折叠上进行训练并计算剩余折叠的 MSE。我们重复此步骤 k 次以便每个折叠都轮流作为测试集。模型的最终得分将是所有测试折叠的 MSE 的平均值。平均 MSE 最低的模型将被选为最终模型。图 5 显示了如何使用 5 倍交叉验证划分数据集的示例。在这种情况下我们将计算 5 个测试折叠的平均 MSE。 领域知识和常识
使用保留集和 k 折交叉验证通常可以得到一个好的模型。但数据很混乱可能会出现统计异常。如果只是盲目使用这些方法而不考虑你的问题你仍然会偶然得到一个糟糕的模型。到目前为止我们已经使用一个特定的训练测试分割进行了上述分析。在这种情况下我们得出结论 a g e 2 age^2 age2 的模型是最好的。但如果我们使用不同的随机训练测试分割会怎样
你可以在图 6 中看到我们的意思。这里我们遵循与之前完全相同的过程只是这次我们使用了不同的随机训练测试分割。在这种情况下测试 MSE 在 n 8 时最低。通过仅使用保留方法我们将使用它作为最终模型。 此时你应该问自己使用 8 次多项式是否合乎逻辑。我们的预测线将采用以下形式 p r i c e β 8 ( a g e 8 ) β 7 ( a g e 7 ) . . . β 1 ( a g e ) β 0 price \beta_8(age^8) \beta_7(age^7) ... \beta_1(age) \beta_0 priceβ8(age8)β7(age7)...β1(age)β0 价格和房龄之间的关系真的那么复杂吗还是上述结果只是统计异常答案可能是后者这强调了为什么我们不应该仅仅依赖像 K 折交叉验证这样的方法。
在选择特征时考虑你的问题并应用任何领域知识非常重要。在我们的房价示例中n 2 的模型似乎捕捉到了潜在趋势。我们还提出了这种关系的一些很好的潜在原因。考虑到这一点这个模型可能更好。一般来说如果你包含的特征有逻辑上的原因说明它们为什么具有预测性那么你就不太可能捕获噪音和过度拟合。 更多K 折交叉验证的内容可以查看「AI 企业项目实战」中第三章的相关课程。 参考 茶桁的公共文章项目仓库https://github.com/hivandu/public_articles ↩︎ Dataset: https://archive.ics.uci.edu/ml/datasets/Realestatevaluationdataset ↩︎