太多项会毁了回归

news2024/12/28 21:07:16

「AI秘籍」系列课程:

  • 人工智能应用数学基础

  • 人工智能Python基础

  • 人工智能基础核心知识

  • 人工智能BI核心知识

  • 人工智能CV核心知识

多项式回归的过度拟合及其避免方法

通过添加现有特征的幂,多项式回归可以帮助你充分利用数据集。它允许我们甚至使用简单的模型(如线性回归)来建模非线性关系。这可以提高模型的准确性,但如果使用不当,可能会发生过度拟合。我们希望避免这种情况,因为它会导致你的模型在未来表现不佳。

img

在本文中,我们将解释多项式回归的概念,并说明它如何导致过度拟合。我们还将讨论一些可用于避免过度拟合的技术。这些包括使用 k 倍交叉验证或保留集,但最重要的是,我们将讨论如何应用领域知识来帮助你避免过度拟合。在文章我不会讨论任何代码,但是你可以在GitHub1上找到完整的项目,本文项目 polynomial_regression_overfitting.ipynb

什么是多项式回归?

让我们通过将一些线性回归模型拟合到数据集来直接深入研究这个概念。我们将使用一个房地产估价数据集2,其中包含有关已售出的 414 栋房屋的信息。为了简单起见,我们只看两个变量——单位面积房价和房屋年龄。我们可以在下面的图 1 中看到这两个变量之间的关系。这个想法是使用房屋房龄来预测价格。

图 1:房价与房龄的散点图

从图 1 可以看出,这两个变量之间似乎不存在线性关系。这意味着这种关系不能用直线表示。在我们的例子中,房价最初随着房龄的增长而下降。然而,大约 25 年后,房价开始随着房龄的增长而上涨。这表明这种关系可能是二次的。在开始建模之前,让我们讨论一下为什么会这样。我们稍后会看到,当涉及到多项式回归时,对数据中的关系有充分的理由/理由很重要。

img

最初的行为是有道理的。随着房屋的老化,它们会变得越来越破旧,价值也会下降。房地产专家对此有更好的理解,但也许经过较长时间后,房屋就会变得古老。随着人们开始重视房屋的悠久历史,它们的房龄会增加价值。也可能存在一些选择偏差,这可以解释这种上升趋势。也就是说,昂贵的房屋往往不会被拆除,因此唯一出售的老房子就是这些昂贵的房屋。

标准线性回归

无论出于什么原因,由于关系不是线性的,我们不会指望标准线性模型能很好地完成这项工作。让我们尝试使用线性回归仅使用房龄来模拟房价,以证明这一点。我们这样做:

  1. 将数据集随机分成训练集(70%)和测试集(30%)。
  2. 使用训练集对模型进行训练。
  3. 通过对测试集进行预测并计算 MSE 来评估模型[。](https://en.wikipedia.org/wiki/Mean_squared_error#:~:text=In 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。

图 2:标准线性回归

多项式回归

现在让我们尝试使用多项式回归来改进我们的模型。最终,由于关系似乎是二次的,我们期望以下方程能做得更好:

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_squaredage)的线性函数,它实际上是一个变量(即 age)的非线性函数。这使我们能够像以前一样使用线性回归来估计 β 参数。我们可以在图 3 中看到生成的预测线。在这种情况下,测试 MSE 为 127.42,比我们之前的模型低 13%。因此,这个新模型在预测房价方面做得更好。

图 3:房龄²的多项式线性回归

通过使用这个新特征 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 n=2,但使用更高次多项式可能会获得更好的结果。话虽如此,通过添加更多特征,我们也可能最终过度拟合数据。

多项式回归的过度拟合

当模型与训练数据集的拟合度过高时,我们就说模型过度拟合了。模型会捕捉数据中的噪声,而不仅仅是潜在的趋势。其结果是,模型在训练数据集上可能表现良好,但在测试数据集上则表现不佳。事实上,我们不会期望模型在任何未经训练的数据集上表现良好。

过度拟合通常是因为模型太复杂或特征太多。随着特征的增加,过度拟合的可能性就越大。在多项式回归中,增加次数也会出现同样的情况。在图 3 中,你可以看到我的意思。我们遵循相同的建模过程,但每一步都会增加多项式的次数。我们从 n=1 开始,以 n=25 结束。请注意,随着次数的增加,预测线会变得更加扭曲。

图 3:在回归中添加 x 幂的效果

实际情况是,随着阶数的增加,模型可以拥有更多转折点。2 阶多项式有 1 个转折点,3 阶多项式有 2 个转折点,依此类推……每增加一个转折点,我们就会给予模型更多自由,使其更贴近训练数据集。对于更高的阶数,模型可能只是捕捉噪音。真正的潜在趋势不太可能如此复杂。

另一种可视化方法是查看训练和测试集上的 MSE。如图 4 所示,训练 MSE 趋于随着程度的增加而减小。这意味着模型在训练集上变得越来越准确。测试 MSE 讲述了一个不同的故事。当 n=2 时,测试 MSE 最小,然后趋于增加。这意味着模型在测试集上的表现越来越差。换句话说,随着我们增加程度,模型变得越来越过度拟合。

图 4:训练和测试的 MSE

如何避免过度拟合

我们已经看到了多项式回归可能出错的原因。现在的问题是,我们如何选择正确的程度并避免过度拟合。与任何机器学习模型一样,我们希望训练一个具有在测试集和训练集上表现良好的特征组合的模型。这样,选择多项式回归的最佳特征的过程与任何其他机器学习问题没有什么不同。

Hold-out set

一种常见的方法是使用Hold-out set。说实话,我也不太清楚这个应该怎么翻译,如果是按字面翻译的话,我们应该称呼它为「保留集」。对于这种方法,数据集被分成训练集和保留集/测试集。对于不同的特征集,模型在训练集上进行训练,在测试集上进行评估。我们使用一些指标(例如 MSE)来评估性能。我们通常会选择在测试集上表现最好的特征集。

看看上面所做的工作,我们可以将此方法应用于房价示例。在这种情况下,n=2 的模型具有最小的测试 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。

图 5:5折交叉验证示例

领域知识和常识

使用保留集和 k 折交叉验证通常可以得到一个好的模型。但数据很混乱,可能会出现统计异常。如果只是盲目使用这些方法而不考虑你的问题,你仍然会偶然得到一个糟糕的模型。到目前为止,我们已经使用一个特定的训练测试分割进行了上述分析。在这种情况下,我们得出结论, a g e 2 age^2 age2 的模型是最好的。但如果我们使用不同的随机训练测试分割会怎样?

你可以在图 6 中看到我们的意思。这里我们遵循与之前完全相同的过程,只是这次我们使用了不同的随机训练测试分割。在这种情况下,测试 MSE 在 n = 8 时最低。通过仅使用保留方法,我们将使用它作为最终模型。

图 6:具有替代训练测试分割的 MSE

此时,你应该问自己,使用 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 企业项目实战」中第三章的相关课程。

在这里插入图片描述

参考


  1. 茶桁的公共文章项目仓库:https://github.com/hivandu/public_articles ↩︎

  2. Dataset: https://archive.ics.uci.edu/ml/datasets/Real+estate+valuation+data+set ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1908524.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java学习高级二

Java是单继承的 Object类 方法重写 Java子类访问 – 就近原则 子类构造器的特点 多态 Java–final

【豆包AI】北京春田知韵

看到有国内AI上线了,网络信息那么多,我该怎么找它的官网呢? 找官方网站3步 1百度 关于抖音豆包的网站是哪个?【www.doubao.com】 豆包属于哪个公司?【北京春田知韵科技有限公司】 www.doubao.com 2查询备案号 PC版本的安装…

理解算法复杂度:时间复杂度详解

引言 在计算机科学中,算法复杂度是衡量算法效率的重要指标。时间复杂度和空间复杂度是算法复杂度的两个主要方面。在这篇博客中,我们将深入探讨时间复杂度,了解其定义、常见类型以及如何进行分析。 什么是时间复杂度? 时间复杂度…

论文《Generalizable Adversarial Attacks Using Generative Models》笔记

【DAGAER】传统的攻击方法依赖于约束优化范式,具有局限性,例如经典的Nettack攻击方法。本文提出了一个统一的白盒对抗攻击生成框架,该方法学习了目标域的深度生成模型,不是在原始输入空间中生成对抗性例子,而是学习在一…

elk在宝塔中的简单部署和使用

ELK是什么?了解elk “ELK” 是 Elasticsearch、Logstash 和 Kibana 三个开源软件的首字母缩写。这三个软件一起常被称为 “ELK Stack” 或 “Elastic Stack”。它们主要用于日志管理和分析,提供了强大的数据搜索、分析和可视化功能。 Elasticsearch&am…

C++初阶学习第一弹——入门学习C++

目录 1.什么是C 2.C关键字 3.命名空间 3.1命名空间的定义 3.2命名空间的使用 1、加命名空间名称及作用域限定符 2、使用 using 将命名空间中某个成员引入 3.使用using namespace 命名空间名称 引入 4.C输入&输出 5.缺省参数 5.1 缺省参数概念 5.2缺省参数分类 6. …

Dungeonborne卡顿延迟怎么办?这样降低Dungeonborne延迟

Dungeonborne将第一人称的动作的即时性和经典的西幻RPG职业设计深度结合,带来无与伦比的游戏体验。玩家在游戏中扮演一位从神秘地牢中醒来的勇士,他必须面对各种未知的敌人和挑战,逐渐揭开自己的身世之谜。在这个充满魔法和奇迹的世界里&…

【计算机毕业设计】015基于weixin小程序校园防疫

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

基于MATLAB的PEF湍流风场生成器模拟与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于MATLAB的PEF湍流风场生成器模拟与仿真。PEF(Primitive Equations Formulation)湍流风场模型,是大气科学和气象学中用来描述大气流动和气…

WebOffice在线编微软Offfice,并以二进制流的形式打开Word文档

在日常办公场景中,我们经常会遇到这种场景:我们的合同管理系统的各种Word,excel,ppt数据都是以二进制数组的形式存储在数据库中,如何从数据库中读取二进制数据,以二进制数据作为参数,然后加载到浏览器的Office窗口&…

【已解决】腾讯云安装了redis,但是本地访问不到,连接不上

汇总了我踩过的所有问题。 查看配置文件redis.conf 1、把bind 127.0.0.1给注释掉(前面加个#就是)或者改成bind 0.0.0.0,因为刚下载时它是默认只让本地访问。(linux查找文档里的内容可以输入/后面加需要匹配的内容,然后…

2024人工智能大会_强化学习论坛相关记录

求解大规模数学优化问题 规划也称为优化 四要素:数据、变量、目标、约束 将一个简单的数学规划问题项gpt进行提问,GPT给了一个近似解,但不是确切的解。 大模型的训练本身就是一个优化问题。 大模型是如何训练的?大模型训练通常使…

Unity通过NDK实现C#与C++之间的相互调用

由于一些历史遗留问题,我们项目还在使用一套C实现的Box2D定点数的库,由于最近修改了视野算法所以需要重新打包安卓的【.so】文件,特此记录 1、关于NDK 在Android平台,C/C需通过NDK编译成动态链接库.so文件,然后C#中通过…

MATLAB基础应用精讲-【数模应用】分层聚类(附python代码实现)

目录 前言 知识储备 层次聚类 1. 算法解读: 2. 步骤和细节: 3. 举例: 4. 算法评价: 5. 算法的变体: 算法原理 基本思想 分层聚类网络的原理 分层聚类网络的优势 分层聚类网络的应用领域 SPSSAU 分层聚类案例 1、背景 2、理论 3、操作 4、SPSSAU输出结果…

STM32智能机器人导航系统教程

目录 引言环境准备智能机器人导航系统基础代码实现:实现智能机器人导航系统 4.1 数据采集模块 4.2 数据处理与导航算法 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景:机器人导航应用与优化问题解决方案与优化收尾与总结 1. 引言 智能机器…

如何找到关于目标检测小论文的创新点

深度学习目标检测的小论文创新点 数据集预处理创新 主要包括图像增强、图像去雾、图像融合和图像降噪 例子: 比如在研究方向是检测晚上或者天气不好时骑电动车的人是否佩戴了安全头盔。一般的检测可能只能检测到正常天气情况下的骑电动车的人,而对于大雾天气和晚上…

LT7911UX 国产原装 一拖三 edp 转LVDS 可旋转 可缩放

2.一般说明 该LT7911UX是一种高性能Type-C/DP1.4a到MIPI或LVDS芯片的VR/显示应用。HDCP RX作为HDCP转发器的上游,可以与其他芯片的HDCP TX配合实现转发器功能。 对于DP1.4a输入,LT7911UX可配置为1/2/4通道。自适应均衡使其适用于长电缆应用,最…

基于单片机的空调控制器的设计

摘 要 : 以单片机为核心的空调控制器因其体积小 、 成本低 、 功能强 、 简便易行而得到广泛应用 。 本设计通过 AT89S52 控制DS18&a…

电商项目中分与元金额单位互转实战

在Java开发中,可能遇到金额单位的转换,比如本系统用分作为金额的基本单位,对方系统用元作为金额的基本单位,这就需要进行单位转换,记录下来,方便备查。 一、分转元 分转元,分到元相差两位&…

单片机软件架构连载(5)-队列

前面讲了指针、结构体之类的基础知识。 这篇内容开始,就要对这些基础知识,做一些复杂的应用了,比如说队列。 其实,在2018年的时候,我录制过一套程序架构的视频,里面有手把手写队列的教程,讲了一…