欠拟合与过拟合

欠拟合:

        模型在训练集上表现不好,在测试集上也表现不好。模型过于简单

        欠拟合在训练集和测试集上的误差都较大

通过代码展示欠拟合
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_split

#%%
# 欠拟合
np.random.seed(666) # 设置随机数种子 如果写了一样的种子保证每次生成的随机数都是一样的
x = np.random.uniform(-3,3,size=100)
y =0.5*x**2 +x+2+np.random.normal(0,1,size=100)
# np.random.uniform  生成均匀分布的随机数
# np.random.normal 生成正态分布随机数  均值为0 , 标准差1
estimator = LinearRegression()
X = x.reshape(-1,1)
estimator.fit(X,y)
y_pred = estimator.predict(X)
print('均方误差:',mean_squared_error(y_pred,y))

plt.scatter(x, y)
# plt.plot(x, y_pred,color='r')
# 画图时输入的x数据: 要求是从小到大
plt.plot(np.sort(x), y_pred[np.argsort(x)], color='r')
plt.show()

 数据是抛物线非线性的, 用线性模型去拟合.。 模型过于简单,出现欠拟合

欠拟合原因

学习到数据的特征过少

解决方法

添加其他特征

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

        “组合”、“泛化”、“相关性”三类特征是特征添加的重要手段

添加多项式特征项

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

# 欠拟合解决
np.random.seed(666) # 设置随机数种子 如果写了一样的种子保证每次生成的随机数都是一样的
x = np.random.uniform(-3,3,size=100)
y =0.5*x**2 +x+2+np.random.normal(0,1,size=100)
# np.random.uniform  生成均匀分布的随机数
# np.random.normal 生成正态分布随机数  均值为0 , 标准差1
estimator = LinearRegression()
X = x.reshape(-1,1)
X2 = np.hstack([X,X**2])
estimator.fit(X2,y)
y_pred2 = estimator.predict(X2)
print('均方误差:',mean_squared_error(y_pred2,y))

plt.scatter(x, y)
# plt.plot(x, y_pred2,color='r')
# 画图时输入的x数据: 要求是从小到大
plt.plot(np.sort(x), y_pred2[np.argsort(x)], color='r')
plt.show()

过拟合:

        模型在训练集上表现好,在测试集上表现不好。模型过于复杂

        过拟合在训练集上误差较小,而测试集上误差较大

通过代码展示过拟合
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_split


# 过拟合
np.random.seed(666) # 设置随机数种子 如果写了一样的种子保证每次生成的随机数都是一样的
x = np.random.uniform(-3,3,size=100)
y =0.5*x**2 +x+2+np.random.normal(0,1,size=100)
# np.random.uniform  生成均匀分布的随机数
# np.random.normal 生成正态分布随机数  均值为0 , 标准差1
estimator = LinearRegression()
X = x.reshape(-1,1)
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)
y_pred2 = estimator.predict(X3)
print('均方误差:',mean_squared_error(y_pred2,y))

plt.scatter(x, y)
# plt.plot(x, y_pred2,color='r')
# 画图时输入的x数据: 要求是从小到大
plt.plot(np.sort(x), y_pred2[np.argsort(x)], color='r')
plt.show()

 过拟合原因

原始特征过多,存在一些嘈杂特征, 模型过于复杂是因为模型尝试去兼顾各个测试数据点

解决方法

重新清洗数据

        对于过多异常点数据、数据不纯的地方再处理

增大数据的训练量

         对原来的数据训练的太过了,增加数据量的情况下,会缓解

正则化

        解决模型过拟合的方法,在机器学习、深度学习中大量使用

减少特征维度,防止维灾难

        由于特征多,样本数量少,导致学习不充分,泛化能力差。

正则化

在模型训练时,数据中有些特征影响模型复杂度、或者某个特征的异常值较多,       所以要尽量减少这个特征的影响(甚至删除某个特征的影响),这就是正则化

在损失函数中增加正则化项 分为L1正则化、L2正则化, 消除异常点带来的w值过大过小的影响

解决方式1:

L1正则化,在损失函数中添加L1正则化项

α 叫做惩罚系数,该值越大则权重调整的幅度就越大,即:表示对特征权重惩罚力度就越大

# 过拟合解决L1
from sklearn.linear_model import Lasso

np.random.seed(666) # 设置随机数种子 如果写了一样的种子保证每次生成的随机数都是一样的
x = np.random.uniform(-3,3,size=100)
y =0.5*x**2 +x+2+np.random.normal(0,1,size=100)
# np.random.uniform  生成均匀分布的随机数
# np.random.normal 生成正态分布随机数  均值为0 , 标准差1
estimator = Lasso(alpha=0.005,normalize=True)
X = x.reshape(-1,1)
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)
y_pred2 = estimator.predict(X3)
print('均方误差:',mean_squared_error(y_pred2,y))

plt.scatter(x, y)
# plt.plot(x, y_pred2,color='r')
# 画图时输入的x数据: 要求是从小到大
plt.plot(np.sort(x), y_pred2[np.argsort(x)], color='r')
plt.show()

数据是抛物线形状的, 给模型送入的数据,增加x^2、x^3、x^4 …高次项特征, 再用线性模型去拟合。模型过于复杂,出现过拟合

解决方式2:

L2正则化,在损失函数中添加L2正则化项

# 过拟合解决L2

from sklearn.linear_model import Ridge

np.random.seed(666) # 设置随机数种子 如果写了一样的种子保证每次生成的随机数都是一样的
x = np.random.uniform(-3,3,size=100)
y =0.5*x**2 +x+2+np.random.normal(0,1,size=100)
# np.random.uniform  生成均匀分布的随机数
# np.random.normal 生成正态分布随机数  均值为0 , 标准差1
estimator = Ridge(alpha=0.005,normalize=True)
X = x.reshape(-1,1)
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)
y_pred2 = estimator.predict(X3)
print('均方误差:',mean_squared_error(y_pred2,y))

plt.scatter(x, y)
# plt.plot(x, y_pred2,color='r')
# 画图时输入的x数据: 要求是从小到大
plt.plot(np.sort(x), y_pred2[np.argsort(x)], color='r')
plt.show()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【基于 InternLM 和 LangChain 搭建你的知识库】学习笔记

学习参考文档【基于 InternLM 和 LangChain 搭建你的知识库】 学习参考链接【书生・浦语大模型实战营第三课作业(基础进阶)】 理论 实战 收集原始数据 收集2018年-2020年几年间的优秀数学建模论文 修改脚本文件,测试文件 作业 复现课程知识库助手搭建过程 La…

直接在引导文件或引导U盘上洗白(适用于新装)

准备工作 方案适用于,在原机器上使用PE引导修改、U盘引导/SATA引导(引导盘可拆到其它机器上操作)、虚拟机制作镜像制作前期 所需软件 DiskGenius、读写镜像文件 ChipEasy_芯片无忧、ChipGenius 是读取u盘PID VID用的。 Notepad2(好用的编辑工具,可用来改PID和VID) …

基于 Level set 方法的医学图像分割

摘 要 医学图像分割是计算机辅助诊断系统设计中的关键技术。对于医学图像分割问题,它一般可分为两部分:(l)图像中特定目标区域(器官或组织)的识别;(2)目标区域完整性的描述与提取。相比于其他图像,医学图像的复杂性和多样性,使得传统的基于底层图像信息的分割方法很难取得好的…

win10系统postgresql重装软件后原数据如何迁移

1、备份postgresql安装目录下的data文件夹 2、重新安装postgresql同一版本的软件 3、停止postgresql-x64-12服务 4、替换data文件夹 删除postgresql安装后新的的data文件夹 删除后将第一步备份的data文件夹粘贴过来,还是同一位置 5、启动postgresql-x64-12服务 …

微信接入知识库定制化的AI会怎样?

想不想要一个更加了解你的chatgpt?或者想给chatgpt加入特定的知识库? LinkAI来帮你! 通过LinkAI,无需openai的api key,直接使用chatgpt。无需考虑服务器代理配置,openai账号注册等!自定义知识…

chromium+clangd快速代码跳转

在开发chromium的时候我们使用vscode工具进行开发,如果使用C插件发现很容就卡死计算机了。 所以我们使用clangd工具来查看chromium的代码。 一、安装 1.1 安装cland 在vscode中安装还是很简单的。 输入cland,点击安装即可 1.2 安装Download languag…

【MATLAB】逐次变分模态分解SVMD信号分解算法

有意向获取代码,请转文末观看代码获取方式~ 1 基本定义 逐次变分模态分解(Sequential Variational Mode Decomposition,简称SVMD)是一种用于信号处理和数据分析的方法。它可以将复杂的信号分解为一系列模态函数,每个…

在线项目实习|2024寒假项目实战火热报名中!

一、在线实习项目分类 二、在线实习项目流程 三、在线实习项目优惠及项目特色 1、师傅带练教学模式,手把手教你掌握 采用“师带徒”的教学模式,课程以“项目前置知识学习 师傅带练 项目实战”贯穿,强调动手实操,内容以代码落地为…

linux终端上传github提示:更新被拒绝,因为远程仓库包含您本地尚不存在的提交

问题: 提示:更新被拒绝,因为远程仓库包含您本地尚不存在的提交。这通常是因为另外 提示:一个仓库已向该引用进行了推送。再次推送前,您可能需要先整合远程变更 提示:(如 git pull ...&#xff…

墙地砖外形检测的技术方案-图像形态学

基础理论 得到的灰度图像需进行二值化处理和区域填充,涉及两个步骤,第一,对图像进行分割,将图像分割成目标和背景; 第二,对分割后图像进行区域填充。本例中的背景为黑色,可以通过基本的全局阈…

simulink之state

状态 状态描述了无功系统的运行模式。在Stateflow图表中,状态用于顺序设计,以创建状态转换图。 状态可以是激活状态,也可以是非激活状态。一个状态的激活或不激活可以根据事件和条件而变化。事件的发生通过使状态变为激活或非激活来驱动状态…

尺寸公差分析DTAS3D-产品功能介绍-自主可控

DTAS 3D (Dimensional Tolerance Analysis System 3D)基于蒙特卡洛原理,按照产品的公差及装配关系进行建模,然后进行解析、仿真计算,最终预测产品设计是否能够满足其关键尺寸要求,同时预测产品合格率,并进行根源分析。…

在Linux上使用PHP-FPM与Nginx实现高效的HTTP处理

当谈到高效的HTTP处理时,PHP-FPM(FastCGI进程管理器)与Nginx的结合是许多web开发者的首选。这种组合提供了出色的性能、可扩展性和稳定性,尤其适用于高流量的网站和应用程序。 1. 为什么选择PHP-FPM与Nginx? 性能优化…

在校大学生可以考哪些 ?(38个考证时间表)

这是整理的在校大学生可以考的,有的对报名条件没有要求,有的是高中以上学历,还有一些应届生可以报考的。可以在支付宝搜索【亿鸣证件照】或者微信搜索【随时照】制作这些考证要求的证件照哦 1、教师资格证 2、英语四六级 3、计算机二级 4、普…

拖拽不够自由?Vue3 DnD它来了!

前言 众所周知,在React中有一款非常强大的拖拽库,叫React DnD,而Vue中,大部分都是类似于vue.draggable等拖拽排序的库,然而它并不能满足我们所有的需求,特别是应对一些自由拖拽或混合拖拽的场景(例如&…

你还没脱单,这些软件都得背锅

不管你是否认可情人节概念,是否会在这天与自己的那个ta相聚,每个成年人都会或多或少地思考自己的感情问题。 在互联网兴盛之前,人与人的交往大都依靠职场关系和熟人介绍来结识新的对象,但也有媒人、婚姻介绍所等专门的职业为适龄…

【Dart】=> [05] Dart初体验-函数

文章目录 函数函数特点可选和默认参数函数对象箭头函数匿名函数综合案例 能够定义并使用Dart函数 学习内容: 函数定义可选和默认参数函数对象箭头函数匿名函数 函数 函数定义 Dart函数的结构: 调用函数: 案例:定义计算任意…

基于Java SSM框架实现学生综合考评管理系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现学生学生综合考评管理系统演示 摘要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 学生综合考评管理系统,主要的模块包括查看;管理员;个…

[GXYCTF2019]Ping Ping Ping

1.访问页面,提示传参为ip。2.?ip明显存在命令执行注入,使用 ; 或者 | 闭合上一条命令。 经过fuzz测试,过滤了空格、bash字符、flag字符、以及一些特殊符号。?ip;ls时,发现flag.php就在当前目录下。 3.构造POC,获取…

知识分享:一文读懂AIGC与大模型

什么是大模型? 关于大模型,有学者称之为“大规模预训练模型”(large pretrained language model),也有学者进一步提出”基础模型”(Foundation Models)的概念。 “小模型”:针对特定应用场景需求进行训练&a…