拟合损失函数

文章目录

  • 拟合损失函数
    • 一、线性拟合
      • 1.1 介绍
      • 1.2 代码可视化
        • 1.2.1 生成示例数据
        • 1.2.2 损失函数
        • 1.2.3 绘制三维图像
        • 1.2.4 绘制等高线
        • 1.2.5 损失函数关于斜率的函数
    • 二、 多变量拟合
      • 2.1 介绍
      • 2.2 代码可视化
        • 2.2.1 生成示例数据
        • 2.2.2 损失函数
        • 2.2.3 绘制等高线
    • 三、 多项式拟合
      • 3.1 介绍
      • 3.2 公式表示

拟合损失函数

下一篇文章有如何通过损失函数来进行梯度下降法。

一、线性拟合

1.1 介绍

使用最小二乘法进行线性拟合,即,

h θ ( x ) = θ 0 + θ 1 x h_{\theta}(x) = \theta_{0}+\theta_{1}x hθ(x)=θ0+θ1x
其中, θ 0 \theta_{0} θ0 θ 1 \theta_{1} θ1是参数,需要通过已经给出的数据进行拟合,这里不进行具体的计算.

损失函数为:
J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta_{0},\theta_{1})=\frac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^2 J(θ0,θ1)=2m1i=1m(hθ(x(i))y(i))2
即线性拟合的目的即是达到 min θ J ( θ 0 , θ 1 ) \text{min}_{\theta} J(\theta_{0},\theta_{1}) minθJ(θ0,θ1)

因此我们可以采取梯度下降法进行拟合。

而,不同的 θ 0 \theta_{0} θ0 θ 1 \theta_{1} θ1获取到不同的损失,我们可以先绘制损失函数的图像,进行参数的预估计。

即,使用matplotlib的三维图像绘制来确定,以及可以使用等高线来进行完成。

1.2 代码可视化

1.2.1 生成示例数据
import numpy as np
import matplotlib.pyplot as plt# 生成示例数据
x = np.linspace(0, 10, 100)
y = 2 * x + 3 + np.random.normal(0, 2, 100)  # y = 2x + 3 + 噪声
# 绘制散点图,根据散点图大致确定参数范围
plt.scatter(x, y)
plt.title("Data analysis")
plt.xlabel("x")
plt.ylabel("y")
plt.show()

在这里插入图片描述

1.2.2 损失函数
def mse_loss(t0, t1, x, y):# 定义损失函数y_pred = t1 * x + t0return np.mean((y - y_pred) ** 2) / 2
1.2.3 绘制三维图像
t0_, t1_ = np.linspace(0, 6, 100), np.linspace(0, 4, 100)  # 定义参数的取值范围
t0, t1 = np.meshgrid(t0_, t1_)  # 生成矩阵网格,即形成三维图的x轴和y轴,其为秩一阵
loss = np.zeros_like(t0)
for i in range(t0.shape[0]):for j in range(t0.shape[1]):loss[i, j] = mse_loss(t0[i, j],t1[i, j], x, y)# 绘制三维损失曲面
fig = plt.figure(figsize=(10, 6))
ax = fig.add_subplot(111, projection='3d')  # 创建三维坐标系
ax.plot_surface(t0, t1, loss, cmap='viridis', alpha=0.8)
ax.set_xlabel("Slope (t1)")
ax.set_ylabel("Intercept (t0)")
ax.set_zlabel("Loss (MSE)")
ax.set_title("3D Loss Surface")
plt.show()

1737978322_pszubtzpfk.png1737978321767.png

1.2.4 绘制等高线
# 绘制等高线图
plt.figure(figsize=(8, 6))
contour = plt.contour(t0, t1, loss, levels=50, cmap='viridis')
plt.colorbar(contour)
plt.xlabel("Slope (t1)")
plt.ylabel("Intercept (t0)")
plt.title("Contour Plot of Loss Function")
plt.show()

1737978304_gg2zfaf42f.png1737978303357.png

1.2.5 损失函数关于斜率的函数

固定截距,绘制出损失函数关于斜率的图像,通过等高线得出估计的最佳截距。

t1 = np.linspace(0, 6, 200)  # 得出斜率的范围
loss = np.zeros_like(t1)
for i in range(loss.shape[0]):loss[i] = mse_loss(2.5, t1[i], x, y)  # 存储损失值
plt.plot(t1, loss)
plt.xlabel(r"Slope($\theta_{1}$)")
plt.ylabel("Loss")
plt.title("Loss-Slope")
plt.show()  

1737978275_nn9aoav03l.png1737978274391.png
通过一系列图像发现,损失值会收敛到一个值

故,可以使用梯度下降法(下一文会介绍)来进行线性拟合求解方程

二、 多变量拟合

2.1 介绍

显然,一个结果会受到多种因素的影响,这时候,就需要引入多项式来进行拟合。需要一些线性代数的知识,小知识。
即,我们令:
y = ( x 1 ⋯ x n 1 ) ⋅ ( w 1 ⋮ w n b ) = X W + b = w 1 x 1 + ⋯ + w n x n + b \begin{array}{l} y &= \begin{pmatrix} x_1& \cdots& x_n&1 \end{pmatrix}\cdot\begin{pmatrix} w_1\\\vdots\\w_n\\b \end{pmatrix} \\ &= XW+b \\&= w_1x_1+\cdots+w_nx_n+b \end{array} y=(x1xn1) w1wnb =XW+b=w1x1++wnxn+b
可以看出,使用向量表达,和线性拟合的表达式类似。即,这里使用二项式拟合:
h θ ( x ) ( i ) = θ 0 + θ 1 x 1 ( i ) + θ 2 x 2 ( i ) h θ ( x ) = ( 1 x 1 ( 1 ) x 2 ( 1 ) ⋮ ⋮ ⋮ 1 x 1 ( m ) x 2 ( m ) ) m × 3 ⋅ ( θ 0 θ 1 θ 2 ) 3 × 1 \begin{array}{l} h_{\theta}(x)^{(i)} &=\theta_{0}+\theta_{1}x_{1}^{(i)}+\theta_{2}x_{2}^{(i)}\\ h_{\theta}(x)&=\begin{pmatrix} 1&x_{1}^{(1)}&x_{2}^{(1)}\\ \vdots&\vdots&\vdots\\ 1&x_{1}^{(m)}&x_{2}^{(m)} \end{pmatrix}_{m\times 3}\cdot\begin{pmatrix} \theta_{0}\\\theta_{1}\\\theta_{2} \end{pmatrix}_{3\times1} \end{array} hθ(x)(i)hθ(x)=θ0+θ1x1(i)+θ2x2(i)= 11x1(1)x1(m)x2(1)x2(m) m×3 θ0θ1θ2 3×1
则,我们的损失函数定义为:

J ( θ 0 , ⋯ , θ n ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta_{0},\cdots,\theta_{n}) = \frac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)}) ^2 J(θ0,,θn)=2m1i=1m(hθ(x(i))y(i))2

2.2 代码可视化

2.2.1 生成示例数据
import numpy as np
import matplotlib.pyplot as plt# 这里迭代区间最好不要一样,不然 x1 = x2
x1 = np.linspace(0, 10, 100)
x2 = np.linspace(-10, 0, 100)  
y = 2 * x1 + 3 * x2 + 4 + np.random.normal(0, 4, 100)  # 生成噪声数据,即生成正态分布的随机数# 绘制散点图,三维散点图
fig = plt.figure(figsize=(10, 6))
ax = fig.add_subplot(111, projection='3d')  
# 绘制三维散点图
ax.scatter(x1, x2, y, alpha=0.6)# 设置坐标轴标签
ax.set_xlabel('X1 Label')
ax.set_ylabel('X2 Label')
ax.set_zlabel('Y Data')# 设置标题
ax.set_title('3D Scatter Plot')
plt.show()

1737978238_io1t4keqnk.png1737978237756.png

2.2.2 损失函数

使用点积来进行损失函数的编写:

其实,线性函数也可以用点积来编写,不过运算较为简单,就可以不考虑点积

def mse_loss(para, X, y):"""para: nx1 的列向量x: mxn 的数据矩阵y: nx1的列向量"""y_pre = np.dot(X, para)   # 使用点积定义拟合函数return np.mean((y_pre-y)**2) / 2
2.2.3 绘制等高线

这里等高线的绘制,先寻找一个大概截距,即固定一个值,而后再进行二维等高线的绘制:

# 对数据进行预处理
one_ = np.ones_like(x1)  # 生成一个全为1的列向量
X = np.array([one_, x1, x2]).T   # 合成为一个100行三列的数据矩阵x10, x20 = np.linspace(0, 6, 100), np.linspace(0, 6, 100)
x1_, x2_ = np.meshgrid(x10, x20)
loss = np.zeros_like(x1_)
for i in range(x1_.shape[0]):  # 批量计算损失函数for j in range(x1_.shape[1]):param = np.array([0, x1_[i][j], x2_[i][j]])  # 假设截距为0loss[i][j] = mse_loss(param, X, y)plt.figure(figsize=(8, 6))
contour = plt.contour(x1_, x2_, loss, levels=50, cmap='viridis')
plt.colorbar(contour)
plt.xlabel(r"$x_1$")
plt.ylabel(r"$x_2$")
plt.title(r"Contour Plot of Loss Function when $x_0$=4")
plt.show()

1737978180_a6cnb06cei.png1737978179094.png
通过等高线的绘制,可以大致确定 x 1 x_{1} x1 x 2 x_{2} x2的估计值,而后使用梯度下降法进行进一步的求解。

三、 多项式拟合

3.1 介绍

在一些拟合过程中其实单变量影响,但是通过散点图很容易发现,其并不是线性函数,因此并不能进行线性拟合,而是要进行多项式拟合,即使用x的多次方的加和形式进行拟合:
f ( x ) = ∑ i = 0 n a i x i f(x) = \sum_{i=0}^{n}a_{i}x^{i} f(x)=i=0naixi

1737979030_rt6k6zr6tz.png1737979029000.png
同时,也可以使用 y = θ 0 + θ 1 x + θ 2 x y=\theta_{0}+\theta_{1}x+\theta_{2}\sqrt{ x } y=θ0+θ1x+θ2x 来进行拟合。
具体的多项式拟合形式,需要结合其他数据,以及具体情况进行分析。

则,其损失函数为:
min θ J ( θ ) = min θ 1 2 m ∑ i = 0 m ( f ( x ( i ) ) − y ( i ) ) 2 \text{min}_{\theta} J(\theta)=\text{min}_{\theta}\frac{1}{2m}\sum_{i=0}^{m} (f(x^{(i)})-y^{(i)})^2 minθJ(θ)=minθ2m1i=0m(f(x(i))y(i))2

3.2 公式表示

拟合方式则是与多变量拟合的过程类似(令 φ ( x ) \varphi(x) φ(x)为x的多次方形式)


h θ ( x ) = ( 1 φ 1 ( x ( 1 ) ) ⋯ φ n ( x ( 1 ) ) ⋮ ⋮ ⋱ ⋮ 1 φ 1 ( x ( m ) ) ⋯ φ n ( x ( m ) ) ) m × ( n + 1 ) ⋅ ( θ 0 θ 1 ⋮ θ n ) ( n + 1 ) × 1 \begin{array}{l} h_{\theta}(x)=\begin{pmatrix} 1&\varphi_1(x^{(1)})&\cdots&\varphi_n(x^{(1)})\\ \vdots&\vdots&\ddots &\vdots\\ 1&\varphi_1(x^{(m)})&\cdots&\varphi_n(x^{(m)}) \end{pmatrix}_{m\times (n+1)}\cdot\begin{pmatrix} \theta_{0}\\\theta_{1}\\\vdots\\\theta_n \end{pmatrix}_{(n+1)\times1} \end{array} hθ(x)= 11φ1(x(1))φ1(x(m))φn(x(1))φn(x(m)) m×(n+1) θ0θ1θn (n+1)×1
而后进行相似的运算即可绘制出图像。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

unity商店插件A* Pathfinding Project如何判断一个点是否在导航网格上?

需要使用NavGraph.IsPointOnNavmesh(Vector3 point) 如果点位于导航网的可步行部分,则为真。 如果一个点在可步行导航网表面之上或之下,在任何距离,如果它不在更近的不可步行节点之上 / 之下,则认为它在导航网上。 使用方法 Ast…

2025美国大学生数学建模竞赛美赛E题成品参考论文(48页)(含模型,可运行代码,求解结果)

2025美国大学生数学建模竞赛E题成品参考论文 目录 一、问题重述 二、问题分析 三、模型假设 四、模型建立与求解 4.1问题1 4.1.1问题1思路分析 4.1.2问题1模型建立 4.1.3问题1代码(仅供参考) 4.1.4问题1求解结果(仅供参考&…

开源音乐管理软件Melody

本文软件由网友 heqiusheng 推荐。不过好像已经是一年前了 😂 简介 什么是 Melody ? Melody 是你的音乐精灵,旨在帮助你更好地管理音乐。目前的主要能力是帮助你将喜欢的歌曲或者音频上传到音乐平台的云盘。 主要功能包括: 歌曲…

PCIE模式配置

对于VU系列FPGA,当DMA/Bridge Subsystem for PCI Express IP配置为Bridge模式时,等同于K7系列中的AXI Memory Mapped To PCI Express IP。

maven的打包插件如何使用

默认的情况下,当直接执行maven项目的编译命令时,对于结果来说是不打第三方包的,只有一个单独的代码jar,想要打一个包含其他资源的完整包就需要用到maven编译插件,使用时分以下几种情况 第一种:当只是想单纯…

反向代理模块

1 概念 1.1 反向代理概念 反向代理是指以代理服务器来接收客户端的请求,然后将请求转发给内部网络上的服务器,将从服务器上得到的结果返回给客户端,此时代理服务器对外表现为一个反向代理服务器。 对于客户端来说,反向代理就相当…

Java 大视界 -- Java 大数据与碳中和:能源数据管理与碳排放分析(66)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

《企业应用架构模式》笔记

领域逻辑 表模块和数据集一起工作-> 先查询出一个记录集,再根据数据集生成一个(如合同)对象,然后调用合同对象的方法。 这看起来很想service查询出一个对象,但调用的是对象的方法,这看起来像是充血模型…

《剪映5.9官方安装包》免费自动生成字幕

(避免失效建议存自己网盘后下载)剪映5.9官方Win.Mac 链接:https://pan.xunlei.com/s/VOHc-Fg2XRlD50MueEaOOeW1A1?pwdawtt# 官方唯一的免费版,Win和Mac都有,此版本官方已下架,觉得有用可转存收藏&#xf…

基于RIP的MGRE VPN综合实验

实验拓扑 实验需求 1、R5为ISP,只能进行IP地址配置,其所有地址均配为公有IP地址; 2、R1和R5间使用PPP的PAP认证,R5为主认证方; R2与R5之间使用ppp的CHAP认证,R5为主认证方; R3与R5之间使用HDLC封…

006 mybatis关联查询(一对一、一对多)

文章目录 一对一查询SQL语句方法一:resultType方法二:resultMap创建扩展po类Mapper映射文件Mapper接口测试代码小结 一对多查询SQL语句修改po类Mapper映射文件Mapper接口测试代码 注意:因为一个订单信息只会是一个人下的订单,所以…

RKNN_C++版本-YOLOV5

1.背景 为了实现低延时,所以开始看看C版本的rknn的使用,确实有不足的地方,请指正(代码借鉴了rk官方的仓库文件)。 2.基本的操作流程 1.读取模型初始化 // 设置基本信息 // 在postprocess.h文件中定义,详见…

消息队列篇--通信协议篇--网络通信模型(OSI7层参考模型,TCP/IP分层模型)

一、OSI参考模型(Open Systems Interconnection Model) OSI参考模型是一个用于描述和标准化网络通信功能的七层框架。它由国际标准化组织(ISO)提出,旨在为不同的网络设备和协议提供一个通用的语言和结构,以…

【creo】CREO配置快捷键方式和默认单位

了解CREO工作目录设置 设置快捷方式启动目录,就能自动加载其中的配置。 一、通过键盘快捷方式 保存配置 creo_parametric_customization.ui 文件: 二、通过映射键录制 通过这种方式可以监听鼠标的点击事件。使用键盘快捷方式无法找到需要的动作时候可…

多模态论文笔记——TECO

大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细解读多模态论文TECO(Temporally Consistent Transformer),即时间一致变换器,是一种用于视频生成的创新模型&…

自由学习记录(32)

文件里找到切换颜色空间 fgui中的 颜色空间是一种总体使用前的设定 颜色空间,和半透明混合产生的效果有差异,这种问题一般可以产生联系 动效就是在fgui里可以编辑好,然后在unity中也准备了对应的调用手段,可以详细的使用每一个具…

【教学类-99-01】20250127 蛇年红包(WORD模版)

祈愿在2025蛇年里, 伟大的祖国风调雨顺、国泰民安、每个人齐心协力,共同经历这百年未有之大变局时代(国际政治、AI技术……) 祝福亲友同事孩子们平安健康(安全、安全、安全)、巳巳如意! 背景需…

当高兴、尊重和优雅三位一体是什么情况吗?

英语单词 disgrace 表示“失脸,耻辱,不光彩,名誉扫地”一类的含义,可做名词或动词使用,含义基本一致,只是词性不同。 disgrace n.丢脸;耻辱;不光彩;令人感到羞耻的人(或…

基于RIP的MGRE实验

实验拓扑 实验要求 按照图示配置IP地址配置静态路由协议,搞通公网配置MGRE VPNNHRP的配置配置RIP路由协议来传递两端私网路由测试全网通 实验配置 1、配置IP地址 [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]ip add 15.0.0.1 24 [R1]int LoopBack 0 [R1-LoopBack0]i…

hot100_24. 两两交换链表中的节点

hot100_24. 两两交换链表中的节点 思路1思路2 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例 1: 输入&…