拟合损失函数
文章目录
- 拟合损失函数
- 一、线性拟合
- 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=1∑m(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()
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()
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()
通过一系列图像发现,损失值会收敛到一个值
故,可以使用梯度下降法(下一文会介绍)来进行线性拟合求解方程
二、 多变量拟合
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=(x1⋯xn1)⋅ w1⋮wnb =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)= 1⋮1x1(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=1∑m(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()
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()
通过等高线的绘制,可以大致确定 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=0∑naixi
同时,也可以使用 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=0∑m(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)= 1⋮1φ1(x(1))⋮φ1(x(m))⋯⋱⋯φn(x(1))⋮φn(x(m)) m×(n+1)⋅ θ0θ1⋮θn (n+1)×1
而后进行相似的运算即可绘制出图像。
相关文章:

拟合损失函数
文章目录 拟合损失函数一、线性拟合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 介…...

二进制安卓清单 binary AndroidManifest - XCTF apk 逆向-2
XCTF 的 apk 逆向-2 题目 wp,这是一道反编译对抗题。 题目背景 AndroidManifest.xml 在开发时是文本 xml,在编译时会被 aapt 编译打包成为 binary xml。具体的格式可以参考稀土掘金 MindMac 做的类图(2014),下面的博…...

在线免费快速无痕去除照片海报中的文字logo
上期和大家分享了用photoshop快速无痕去除照片海报中的文字logo的方法,有的同学觉得安装PS太麻烦,有那下载安装时间早都日落西山了,问有没有合适的在线方法可以快速去除;达芬奇上网也尝试了几个网站,今天分享一个对国人…...

引领未来科技潮流:Web3 前沿发展趋势
随着技术不断发展,我们正站在一个全新的互联网时代的门槛上,Web3的出现正在重新定义互联网的构架和运作方式。Web3,作为互联网的下一代发展趋势,其核心思想是去中心化、开放与用户主权。与现有的Web2.0相比,Web3更加注…...

【番外篇】鸿蒙扫雷天纪:运混沌灵智勘破雷劫天局
大家好啊,我是小象٩(๑ω๑)۶ 我的博客:Xiao Xiangζั͡ޓއއ 很高兴见到大家,希望能够和大家一起交流学习,共同进步。 这一节课我们不学习新的知识,我们来做一个扫雷小游戏 目录 扫雷小游戏概述一、扫雷游戏分析…...

08.OSPF 特殊区域及其他特性
OSPF 特殊区域及其他特性 一. 前言OSPF的四个特殊区域Stub末梢区域Totally Stub完全末梢区域NSSATotally NSSA完全的NSSA二.Stub 区域和 Totally Stub 区域(1)网络规模变大引发的问题(2)传输区域和末端区域(3)Stub 区域(4)Totally Stub 区域三.NSSA 区域和 Totally NSS…...

人工智能在医疗领域的应用有哪些?
人工智能在医疗领域的应用十分广泛,涵盖了诊断、治疗、药物研发等多个环节,以下是一些主要的应用: 医疗影像诊断 疾病识别:通过分析 X 光、CT、MRI 等影像,人工智能算法能够识别出肿瘤、结节、骨折等病变,…...

c#使用Confluent.Kafka实现生产者发送消息至kafka(远程连接kafka发送消息超时的解决 Local:Message timed out)
水一篇: 参考:c#使用Confluent.Kafka实现生产者发送消息至kafka(远程连接kafka发送消息超时的解决 Local:Message timed out) - 寒冰之光 - 博客园 该死的Kafka,远程连接Kafka超时以及解决办法 - 博客王大…...

【2025年数学建模美赛F题】(顶刊论文绘图)模型代码+论文
全球网络犯罪与网络安全政策的多维度分析及效能评估 摘要1 Introduction1.1 Problem Background1.2Restatement of the Problem1.3 Literature Review1.4 Our Work 2 Assumptions and Justifications数据完整性与可靠性假设:法律政策独立性假设:人口统计…...

DeepSeek 的背景介绍
在全球人工智能大模型蓬勃发展的浪潮中,DeepSeek 宛如一颗耀眼的新星,迅速崛起并吸引了众多关注的目光。它的出现不仅为人工智能领域注入了新的活力,也在一定程度上改变了行业的竞争格局。 一、创立背景与资金支持 DeepSeek,中文…...

Meta 计划 2025 年投资 650 亿美元推动 AI 发展
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...

信息学奥赛一本通 2110:【例5.1】素数环
【题目链接】 ybt 2110:【例5.1】素数环 【题目考点】 1. 深搜回溯 2. 质数 【解题思路】 1~n的数字构成一个环,要求相邻数字加和必须是质数。 该题最终输出的是一个序列,只不过逻辑上序列最后一个数字的下一个数字就是序列的第一个数字…...

Redis、MongoDB 和 MySQL评估
Redis、MongoDB 和 MySQL 是三种不同类型的数据库系统,各自有独特的特点和适用场景。MySQL 是一个关系型数据库管理系统(RDBMS),而 Redis 和 MongoDB 是非关系型数据库(NoSQL)。以下是对这三者的比较以及它…...

P1719 最大加权矩形
为了更好的备战 NOIP2013,电脑组的几个女孩子 LYQ,ZSC,ZHQ 认为,我们不光需要机房,我们还需要运动,于是就决定找校长申请一块电脑组的课余运动场地,听说她们都是电脑组的高手,校长没有马上答应他们…...

在生产环境中部署和管理 Apache:运维从入门到精通
在生产环境中部署和管理 Apache:运维从入门到精通 引言 Apache HTTP Server(简称 Apache)作为世界上最受欢迎的 Web 服务器之一,因其稳定性、灵活性和丰富的模块支持而被广泛使用。从个人网站到企业级应用,Apache 都能游刃有余。然而,要想在生产环境中高效部署和管理 A…...

DeepSeek API 的获取与对话示例
代码文件下载:Code 在线链接:Kaggle | Colab 文章目录 注册并获取API环境依赖设置 API单轮对话多轮对话流式输出更换模型 注册并获取API 访问 https://platform.deepseek.com/sign_in 进行注册并登录: 新用户注册后将赠送 10 块钱余额&#…...

【愚公系列】《循序渐进Vue.js 3.x前端开发实践》027-组件的高级配置和嵌套
标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…...

预测性维护系统:让设备“未卜先知”
预测性维护系统:让设备“未卜先知” 在工业4.0的浪潮中,设备管理正在向智能化转型。传统的设备维护方式,要么是定期维护(时间消耗大),要么是被动维修(问题发生后再处理)。这种方式效率低下且成本高昂。而预测性维护(Predictive Maintenance,简称PdM)则为设备管理提…...

Qt Ribbon使用实例
采用SARibbon创建简单的ribbon界面 实例代码如下所示: 1、头文件: #pragma once #include <SARibbonBar.h> #include "SARibbonMainWindow.h" class QTextEdit; class SAProjectDemo1 : public SARibbonMainWindow { Q_OBJECT pub…...

Midscene.js:重新定义UI自动化的新时代工具
前言 Midscene.js 是一个创新的、面向开发者的 UI 自动化解决方案,并通过人工智能技术简化自动化脚本的编写与维护。 它提供了三种核心方法——交互(.ai, .aiAction)、提取(.aiQuery)和断言(.aiAssert&am…...

【C语言基础】编译并运行第一个C程序
博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 博客内容主要围绕: 5G/6G协议讲解 高级C语言讲解 Rust语言讲解 文章目录 编译并运行第一个C程序一、编译上面的程序二、运行上面的程序…...

处理 .gitignore 未忽略文件夹问题
本地删除缓存 例如 .idea 文件夹被其他同事误提交,那么他本地执行以下代码 git rm -r --cached .idea对应本地再提交即可...

php-phar打包避坑指南2025
有很多php脚本工具都是打包成phar形式,使用起来就很方便,那么如何自己做一个呢?也找了很多文档,也遇到很多坑,这里就来总结一下 phar安装 现在直接装yum php-cli包就有phar文件,很方便 可通过phar help查看…...

卡特兰数学习
1,概念 卡特兰数(英语:Catalan number),又称卡塔兰数,明安图数。是组合数学中一种常出现于各种计数问题中的数列。它在不同的计数问题中频繁出现。 2,公式 卡特兰数的递推公式为:f(…...

第05章 10 地形梯度场模拟显示
在 VTK(Visualization Toolkit)中,可以通过计算地形数据的梯度场,并用箭头或线条来表示梯度方向和大小,从而模拟显示地形梯度场。以下是一个示例代码,展示了如何使用 VTK 和 C 来计算和显示地形数据的梯度场…...

2023CISCN初赛unzip
2023CISCN初赛unzip 随便上传一个文件,会自动跳转到uplaod.php目录下,源码如下: <?php error_reporting(0); highlight_file(__FILE__);$finfo finfo_open(FILEINFO_MIME_TYPE); if (finfo_file($finfo, $_FILES["file"]["tmp_name…...

计算机网络 (55)流失存储音频/视频
一、定义与特点 定义:流式存储音频/视频是指经过压缩并存储在服务器上的多媒体文件,客户端可以通过互联网边下载边播放这些文件,也称为音频/视频点播。 特点: 边下载边播放:用户无需等待整个文件下载完成即可开始播放…...

Linux通过docker部署京东矩阵容器服务
获取激活码 将京东无线宝app升级到最新版,然后打开首页,点击号 选择添加容器矩阵,然后获取激活码 运行容器 read -p "请输入你的激活码: " ACTIVECODE;read -p "请输入宿主机的缓存路径: " src;docker rm -f cmatrix;docker run -d -it --name cmatrix …...

【MySQL】悲观锁和乐观锁的原理和应用场景
悲观锁和乐观锁,并不是 MySQL 或者数据库中独有的概念,而是并发编程的基本概念。 主要区别在于,操作共享数据时,“悲观锁”认为数据出现冲突的可能性更大,而“乐观锁”则是认为大部分情况不会出现冲突,进而…...

Java Web-Tomcat Servlet
Web服务器-Tomcat Web服务器简介 Web 服务器是一种软件程序,它主要用于在网络上接收和处理客户端(如浏览器)发送的 HTTP 请求,并返回相应的网页内容或数据。以下是关于 Web 服务器的详细介绍: 功能 接收请求&#…...