当前位置: 首页 > article >正文

机器学习:欠拟合、过拟合、正则化

本文目录:

  • 一、欠拟合
  • 二、过拟合
  • 三、拟合问题原因及解决办法
  • 四、正则化:尽量减少高次幂特征的影响
    • (一)L1正则化
    • (二)L2正则化
    • (三)L1正则化与L2正则化的对比
  • 五、正好拟合代码(附赠)

一、欠拟合

欠拟合:一个假设 在训练数据上不能获得更好的拟合,并且在测试数据集上也不能很好地拟合数据 ,此时认为这个假设出现了欠拟合的现象。(模型过于简单)

欠拟合代码实现:

例:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error  # 计算均方误差
from sklearn.model_selection import train_test_splitdef dm01_欠拟合():# 1. 准备x, y数据, 增加上噪声.# 用于设置随机数生成器的种子(seed), 种子一样, 每次生成相同序列.np.random.seed(666)# x: 随机数, 范围为 (-3, 3), 100个.x = np.random.uniform(-3, 3, size=100)# loc: 均值, scale: 标准差, normal: 正态分布.y = 0.5 * x ** 2 + x + 2 + np.random.normal(0, 1, size=100)# 2. 实例化 线性回归模型.estimator = LinearRegression()# 3. 训练模型X = x.reshape(-1, 1)estimator.fit(X, y)# 4. 模型预测.y_predict = estimator.predict(X)print("预测值:", y_predict)# 5. 计算均方误差 => 模型评估print(f'均方误差: {mean_squared_error(y, y_predict)}')# 6. 画图plt.scatter(x, y)           # 散点图plt.plot(x, y_predict, color='r')   # 折线图(预测值, 拟合回归线)plt.show()                  # 具体的绘图if __name__ == '__main__':dm01_欠拟合()

运行结果:
在这里插入图片描述

二、过拟合

过拟合:一个假设 在训练数据上能够获得比其他假设更好的拟合, 但是在测试数据集上却不能很好地拟合数据 (体现在准确率下降),此时认为这个假设出现了过拟合的现象。

过拟合代码实现:

例:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error  # 计算均方误差
from sklearn.model_selection import train_test_splitdef dm03_过拟合():# 1. 准备x, y数据, 增加上噪声.# 用于设置随机数生成器的种子(seed), 种子一样, 每次生成相同序列.np.random.seed(666)# x: 随机数, 范围为 (-3, 3), 100个.x = np.random.uniform(-3, 3, size=100)# loc: 均值, scale: 标准差, normal: 正态分布.y = 0.5 * x ** 2 + x + 2 + np.random.normal(0, 1, size=100)# 2. 实例化 线性回归模型.estimator = LinearRegression()# 3. 训练模型X = x.reshape(-1, 1)# hstack() 函数用于将多个数组在行上堆叠起来, 即: 数据增加高次项.X3 = np.hstack([X, X**2, X**3, X**4, X**5, X**6, X**7, X**8, X**9, X**10])estimator.fit(X3, y)# 4. 模型预测.y_predict = estimator.predict(X3)print("预测值:", y_predict)# 5. 计算均方误差 => 模型评估print(f'均方误差: {mean_squared_error(y, y_predict)}')# 6. 画图plt.scatter(x, y)  # 散点图# sort()  该函数直接返回一个排序后的新数组。# numpy.argsort()   该函数返回的是数组值从小到大排序时对应的索引值plt.plot(np.sort(x), y_predict[np.argsort(x)], color='r')  # 折线图(预测值, 拟合回归线)plt.show()  # 具体的绘图if __name__ == '__main__':dm03_过拟合()

运行结果:
在这里插入图片描述

三、拟合问题原因及解决办法

1.欠拟合产生原因: 学习到数据的特征过少。

解决办法:

1)添加其他特征项,有时出现欠拟合是因为特征项不够导致的,可以添加其他特征项来解决。

2)添加多项式特征,模型过于简单时的常用套路,例如将线性模型通过添加二次项或三次项使模型泛化能力更强。

2.过拟合产生原因: 原始特征过多,存在一些嘈杂特征, 模型过于复杂是因为模型尝试去兼顾所有测试样本。

解决办法:

1)重新清洗数据,导致过拟合的一个原因有可能是数据不纯,如果出现了过拟合就需要重新清洗数据。

2)增大数据的训练量,还有一个原因就是我们用于训练的数据量太小导致的,训练数据占总数据的比例过小。

3)正则化

4)减少特征维度。

四、正则化:尽量减少高次幂特征的影响

在这里插入图片描述

(一)L1正则化

LASSO回归: from sklearn.linear_model import Lasso
在这里插入图片描述
代码如下:

from sklearn.linear_model import Lasso  # L1正则
from sklearn.linear_model import Ridge  # 岭回归 L2正则def dm04_模型过拟合_L1正则化():# 1. 准备x, y数据, 增加上噪声.# 用于设置随机数生成器的种子(seed), 种子一样, 每次生成相同序列.np.random.seed(666)# x: 随机数, 范围为 (-3, 3), 100个.x = np.random.uniform(-3, 3, size=100)# loc: 均值, scale: 标准差, normal: 正态分布.y = 0.5 * x ** 2 + x + 2 + np.random.normal(0, 1, size=100)# 2. 实例化L1正则化模型, 做实验: alpha惩罚力度越来越大, k值越来越小.estimator = Lasso(alpha=0.005)# 3. 训练模型X = x.reshape(-1, 1)# hstack() 函数用于将多个数组在行上堆叠起来, 即: 数据增加高次项.X3 = np.hstack([X, X**2, X**3, X**4, X**5, X**6, X**7, X**8, X**9, X**10])estimator.fit(X3, y)print(f'权重: {estimator.coef_}')# 4. 模型预测.y_predict = estimator.predict(X3)print("预测值:", y_predict)# 5. 计算均方误差 => 模型评估print(f'均方误差: {mean_squared_error(y, y_predict)}')# 6. 画图plt.scatter(x, y)  # 散点图# sort()  该函数直接返回一个排序后的新数组。# numpy.argsort()   该函数返回的是数组值从小到大排序时对应的索引值plt.plot(np.sort(x), y_predict[np.argsort(x)], color='r')  # 折线图(预测值, 拟合回归线)plt.show()  # 具体的绘图if __name__ == '__main__':dm04_模型过拟合_L1正则化()

(二)L2正则化

Ridge回归: from sklearn.linear_model import Ridge
在这里插入图片描述
代码如下:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression, Lasso, Ridge
from sklearn.metrics import mean_squared_error  # 计算均方误差
from sklearn.model_selection import train_test_splitdef dm05_模型过拟合_L2正则化():# 1. 准备x, y数据, 增加上噪声.# 用于设置随机数生成器的种子(seed), 种子一样, 每次生成相同序列.np.random.seed(666)# x: 随机数, 范围为 (-3, 3), 100个.x = np.random.uniform(-3, 3, size=100)# loc: 均值, scale: 标准差, normal: 正态分布.y = 0.5 * x ** 2 + x + 2 + np.random.normal(0, 1, size=100)# 2. 实例化L2正则化模型, 做实验: alpha惩罚力度越来越大, k值越来越小.estimator = Ridge(alpha=0.005)# 3. 训练模型X = x.reshape(-1, 1)# hstack() 函数用于将多个数组在行上堆叠起来, 即: 数据增加高次项.X3 = np.hstack([X, X**2, X**3, X**4, X**5, X**6, X**7, X**8, X**9, X**10])estimator.fit(X3, y)print(f'权重: {estimator.coef_}')# 4. 模型预测.y_predict = estimator.predict(X3)print("预测值:", y_predict)# 5. 计算均方误差 => 模型评估print(f'均方误差: {mean_squared_error(y, y_predict)}')# 6. 画图plt.scatter(x, y)  # 散点图# sort()  该函数直接返回一个排序后的新数组。# numpy.argsort()   该函数返回的是数组值从小到大排序时对应的索引值plt.plot(np.sort(x), y_predict[np.argsort(x)], color='r')  # 折线图(预测值, 拟合回归线)plt.show()  # 具体的绘图if __name__ == '__main__':# dm04_模型过拟合_L1正则化()dm05_模型过拟合_L2正则化()

(三)L1正则化与L2正则化的对比

在这里插入图片描述

五、正好拟合代码(附赠)

例:
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
import matplotlib.pyplot as pltdef dm02_模型ok():# 1. 准备x, y数据, 增加上噪声.# 用于设置随机数生成器的种子(seed), 种子一样, 每次生成相同序列.np.random.seed(666)# x: 随机数, 范围为 (-3, 3), 100个.x = np.random.uniform(-3, 3, size=100)# loc: 均值, scale: 标准差, normal: 正态分布.y = 0.5 * x ** 2 + x + 2 + np.random.normal(0, 1, size=100)# 2. 实例化 线性回归模型.estimator = LinearRegression()# 3. 训练模型X = x.reshape(-1, 1)X2 = np.hstack([X, X ** 2])estimator.fit(X2, y)# 4. 模型预测.y_predict = estimator.predict(X2)print("预测值:", y_predict)# 5. 计算均方误差 => 模型评估print(f'均方误差: {mean_squared_error(y, y_predict)}')# 6. 画图plt.scatter(x, y)  # 散点图# sort()  该函数直接返回一个排序后的新数组。# numpy.argsort()   该函数返回的是数组值从小到大排序时对应的索引值plt.plot(np.sort(x), y_predict[np.argsort(x)], color='r')  # 折线图(预测值, 拟合回归线)# plt.plot(x, y_predict)plt.show()  # 具体的绘图

运行结果:
在这里插入图片描述
今天的分享到此结束。

相关文章:

机器学习:欠拟合、过拟合、正则化

本文目录: 一、欠拟合二、过拟合三、拟合问题原因及解决办法四、正则化:尽量减少高次幂特征的影响(一)L1正则化(二)L2正则化(三)L1正则化与L2正则化的对比 五、正好拟合代码&#xf…...

运用集合知识做斗地主案例

方法中可变参数 一种特殊形参,定义在方法,构造器的形参列表里,格式:数据类型...参数名称; 可变参数的特点和好处 特点:可以不传数据给它;可以传一个或者同时传多个数据给它;也可以…...

《HelloGitHub》第 110 期

兴趣是最好的老师,HelloGitHub 让你对开源感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等,涵盖多种编程语言 Python、…...

使用 Shell 脚本实现 Spring Boot 项目自动化部署到 Docker(Ubuntu 服务器)

使用 Shell 脚本实现 Spring Boot 项目自动化部署到 Docker(Ubuntu 服务器) 在日常项目开发中,我们经常会将 Spring Boot 项目打包并部署到服务器上的 Docker 环境中。为了提升效率、减少重复操作,我们可以通过 Shell 脚本实现自动…...

day023-网络基础与OSI七层模型

文章目录 1. 网络基础知识点1.1 网络中的单位1.2 查看实时网速:iftop1.3 交换机、路由器 2. 路由表2.1 查看路由表的命令2.2 路由追踪命令 3. 通用网站网络架构4. 局域网上网原理-NAT5. 虚拟机上网原理6. 虚拟机的网络模式6.1 NAT模式6.2 桥接模式6.3 仅主机模式 7.…...

SpringAI系列4: Tool Calling 工具调用 【感觉这版本有bug】

前言:在最近发布的 Spring AI 1.0.0.M6 版本中,其中一个重大变化是 Function Calling 被废弃,被 Tool Calling 取代。Tool Calling工具调用(也称为函数调用)是AI应用中的常见模式,允许模型通过一组API或工具…...

机器人--里程计

教程 轮式里程计视频讲解 里程计分类 ros--odometry 什么是里程计 里程计是一种利用从移动传感器获得的数据来估计物体位置随时间的变化而改变的方法。该方法被用在许多机器人系统来估计机器人相对于初始位置移动的距离。 注意:里程计是一套算法,不…...

设计模式——原型设计模式(创建型)

摘要 本文详细介绍了原型设计模式,这是一种创建型设计模式,通过复制现有对象(原型)来创建新对象,避免使用new关键字,可提高性能并简化对象创建逻辑。文章阐述了其优点,如提高性能、动态扩展和简…...

react库:class-variance-authority

文章目录 前言一、cva 的核心作用二、代码逐层解析参数详解基础样式(第一个参数):variant:定义颜色/风格变体(如 default、destructive)。size:定义尺寸变体(如 sm、lg)。…...

通过mqtt 点灯

1 解析mqtt 传过来的json 用cjson 解析。 2 类似mvc的结构,调用具体的动作函数 定义设备处理结构体:使用结构体数组映射设备名称与处理函数,实现可扩展的指令分发分离设备逻辑:为每个设备(如 LED、Motor&#xff0…...

随笔笔记记录5.28

1.setOptMode -opt_leakage_to_dynamic_ratio 调整漏电与动态功耗的优化权重( 1.0 表示仅优化漏电)。 需指定-opt_power_effort(none | low | high),同时使用 2.set_ccopt_property max_source_to_sink_net_length …...

大数据-273 Spark MLib - 基础介绍 机器学习算法 决策树 分类原则 分类原理 基尼系数 熵

点一下关注吧!!!非常感谢!!持续更新!!! 大模型篇章已经开始! 目前已经更新到了第 22 篇:大语言模型 22 - MCP 自动操作 FigmaCursor 自动设计原型 Java篇开…...

基于 Spring Boot + Vue 的墙绘产品展示交易平台设计与实现【含源码+文档】

项目简介 本系统是一个基于 Spring Boot Vue 技术栈开发的墙绘产品展示交易平台,旨在提供一个高效、便捷的在线商城平台,方便用户浏览、选购墙绘产品,并提供管理员进行商品管理、订单管理等功能。系统采用了前后端分离的架构,前…...

【机器学习】支持向量机

文章目录 一、支持向量机简述1.概念2.基本概念3.算法介绍4.线性可分5.算法流程 二、实验1.代码介绍2.模型流程3.实验结果4.实验小结 一、支持向量机简述 1.概念 支持向量机(SVM)是一类按监督学习方式对数据进行二元分类的广义线性分类器,其…...

ONLYOFFICE深度解锁系列.4-OnlyOffice客户端原理-真的不支持多端同步

最近很多客户多要求直接部署onlyoffice服务端,还问能否和onlyoffice的客户端进行文件同步,当时真是一脸懵,还有的是老客户,已经安装了onlyoffice协作空间的,也在问如何配置客户端和协作空间的对接。由于问的人太多了,这里统一回复,先说结论,再说原理: 1.onlyoffice document s…...

LLMTIME: 不用微调!如何用大模型玩转时间序列预测?

今天是端午节,端午安康!值此传统佳节之际,我想和大家分享一篇关于基于大语言模型的时序预测算法——LLMTIME。随着人工智能技术的飞速发展,利用大型预训练语言模型(LLM)进行时间序列预测成为一个新兴且极具…...

2.从0开始搭建vue项目(node.js,vue3,Ts,ES6)

从“0到跑起来一个 Vue 项目”,重点是各个工具之间的关联关系、职责边界和技术演化脉络。 从你写代码 → 到代码能跑起来 → 再到代码可以部署上线,每一步都有不同的工具参与。 😺😺1. 安装 Node.js —— 万事的根基 Node.js 是…...

MySQL 高可用实现方案详解

MySQL 高可用实现方案详解 一、高可用核心概念 高可用性(High Availability)指系统能够持续提供服务的能力,通常用可用性=正常服务时间/(正常服务时间+故障时间)来衡量,99.99%可用性表示年故障时间不超过52.6分钟。 MySQL实现高可用需要解决以下几个关键问题: 故障自动检测…...

【pycharm】如何连接远程仓库进行版本管理(应用版本)

软件:Pycharm OS:Windows 一、Git基础设置 这里略过Git安装,需要可以参考:windows安装git(全网最详细,保姆教程)-CSDN博客 1. 配置Git 打开GitBash。分次输入下列命令。 git config --…...

linux 1.0.7

用户和权限的含义与作用 linux中的用户和文件 用户的权限是非常重要的 而且有些程序需要使用管理员身份去执行 这些都是非常重要的 不可能让所有的人拥有所有的权限 这样的工具可以避免非法的手段来修改计算机中的数据 linux之所以安全还是权限管理做的很棒 每个登录的用户都有…...

【Rust 轻松构建轻量级多端桌面应用】

使用 Tauri 框架构建跨平台应用 Tauri 是一个基于 Rust 的轻量级框架,可替代 Electron,用于构建高性能、低资源占用的桌面应用。其核心优势在于利用系统原生 WebView 而非捆绑 Chromium,显著减小应用体积。 安装 Tauri 需要先配置 Rust 环境…...

IEEE P370:用于高达 50 GHz 互连的夹具设计和数据质量公制标准

大多数高频仪器,如矢量网络分析仪 (VNA) 和时域反射仪 (TDR),都可以在同轴接口的末端进行非常好的测量。然而,复杂系统中使用的互连很少具有同轴接口。用于表征这些设备的夹具的设计和实施会对测…...

青少年编程与数学 02-020 C#程序设计基础 09课题、面向对象编程

青少年编程与数学 02-020 C#程序设计基础 09课题、面向对象编程 一、概述1. 对象(Object)2. 类(Class)3. 封装(Encapsulation)4. 继承(Inheritance)5. 多态(Polymorphism…...

Denoising Autoencoders 视频截图 DAEs简单实现 kaggle 去噪编码器

https://www.bilibili.com/video/BV1syzrYaEtw Denoising Autoencoders (DAEs) 是一种无监督学习模型,属于自动编码器(Autoencoder)的一种扩展形式。它们的目标是通过训练神经网络来学习数据的鲁棒表示(robust representation&a…...

GoogLeNet网络模型

GoogLeNet网络模型 诞生背景 在2014年的ImageNet图像识别挑战赛中,一个GoogLeNet的网络架构大放异彩,与VGG不同的是,VGG用的是3*3的卷积,而GoogLeNet从1*1到7*7的卷积核都用,也就是使用不同大小的卷积核组合。 网络…...

LeetCode Hot100 (贪心)

121. 买卖股票的最佳时机 题意 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从…...

仿真科普|弥合市场需求断层,高性能仿真,“性能”与“安全”如何兼得?

2025年3月,塔塔科技(Tata Technologies)确认曾在去年遭受勒索软件组织“猎手国际”(Hunters International)的攻击,1.4TB工程数据被窃取,涉及航空发动机热障涂层工艺参数等超过 73 万份文件。 X…...

工业控制核心引擎高性能MCU——MM32F5370

RAMSUN提供的MM32F5370搭载180MHz Arm China Star-MC1处理器,集成DSP、FPU与三角函数加速单元(CORDIC),轻松应对复杂算法需求。其技术亮点包括: 超高精度PWM:8通道208ps级高精度PWM输出,满足储能…...

Maven---配置本地仓库

目录 5. 5.1在Maven路径下新建文件夹用于本地仓库存储 5.2 复制本地仓库路径 5.3 找到配置文件路径,使用VSCode方式打开 5.4 新增一行代码 5.5 复制本地仓库路径,设置存储路径 5.1在Maven路径下新建文件夹用于本地仓库存储 5.2 复制本地仓库路径 5…...

vue中events选项与$on监听自定义事件他们的区别与不同,以及$emit与$on之间通信和mounted生命周期钩子函数有哪些作用和属性

events 选项确实曾经被用于监听事件,但它主要用于早期版本的 Vue.js(1.x)中,用于组件之间的通信。在 Vue 2.x 中,events 选项已经被废弃,取而代之的是更强大的 $emit 和 $on 方法。 使用$emit来监听自定义…...