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

SVD降维

文章目录

  • 一、SVD降维的基本原理
  • 二、SVD降维的步骤
  • 三、SVD降维的优点
  • 四、SVD降维的应用
  • 五、代码应用
  • 六、SVD降维的局限性

一、SVD降维的基本原理

SVD是线性代数中的一种技术,它将一个矩阵A分解为三个矩阵的乘积:A = UΣV^T。其中,U和V是正交矩阵,Σ是对角矩阵,对角线上的元素称为奇异值。这些奇异值表示了矩阵A在各个方向上的“重要性”或“能量”。

在降维过程中,SVD通过保留矩阵A中最大的几个奇异值,并忽略其他较小的奇异值,来近似地重构原始矩阵。这样做可以在保留数据主要信息的同时,减少数据的维度。

二、SVD降维的步骤

计算SVD:首先,对原始数据矩阵A进行SVD分解,得到矩阵U、Σ和V^T。
选择奇异值:根据需要保留的信息量或数据特征,选择Σ中前k个最大的奇异值。这一步是关键,因为它决定了降维后的数据维度和保留的信息量。
重构矩阵:使用选定的奇异值和对应的U、V^T的子矩阵,重构出一个近似于原始矩阵A但维度更低的矩阵A’。

三、SVD降维的优点

简化数据:通过去除不重要的特征,简化了数据表示,便于后续处理和分析。
去除噪声:较小的奇异值通常与噪声相关,因此通过忽略这些奇异值,可以在一定程度上去除数据中的噪声。
提高算法性能:降维后的数据具有更低的维度,可以减少计算量和存储需求,从而提高算法的性能。

四、SVD降维的应用

SVD降维在多个领域都有广泛的应用,包括但不限于:

推荐系统:在推荐系统中,SVD可以用于构建用户或物品的隐式特征向量,从而计算用户或物品之间的相似度。
图像处理:SVD可以用于图像压缩和去噪。通过保留图像中的主要特征(即较大的奇异值),可以在保持图像质量的同时减少数据量。
文本挖掘:SVD可以用于提取文本数据中的主题或潜在语义结构,帮助理解和分析大量文本数据。

五、代码应用

import numpy as np
from PIL import Image
import matplotlib.pyplot as pltdef pic_compress(k, pic_array):global u, sigma, vt, sig, new_picu, sigma, vt = np.linalg.svd(pic_array)  # 进行奇异分解sig = np.eye(k) * sigma[:k]  # np.eye用于生成一个单位矩阵new_pic = np.dot(np.dot(u[:, :k], sig), vt[:k, :])  # np.dot用于矩阵的乘法运算size = u.shape[0] * k + sig.shape[1] + k * vt.shape[1]return new_pic, sizeimg = Image.open("lf.jpg")
ori_img = np.array(img)
new_img, size = pic_compress(100, ori_img)  # 压缩的维度
print("original size:" + str(ori_img.shape[0] * ori_img.shape[1]))
print("compress size:" + str(size))
fig, ax = plt.subplots(1, 2)
ax[0].imshow(ori_img, cmap='gray')
ax[0].set_title("before compress")
ax[1].imshow(new_img, cmap='gray')
ax[1].set_title("after compress")
plt.show()
  • 函数定义:pic_compress 函数接受两个参数:k(要保留的奇异值的数量)和pic_array(图像的NumPy数组表示)。它使用SVD来分解图像矩阵,并尝试通过保留最大的k个奇异值来重构图像。
  • SVD分解:使用 np.linalg.svd 对图像矩阵进行奇异值分解,得到矩阵 U、sigma(奇异值向量)和V的转置。这里需要注意的是,sigma 实际上是一个向量,而不是矩阵。
  • 重构图像:通过创建一个对角矩阵 sig(其前k个对角元素是sigma的前k个元素,其余为0)来重构图像。通过np.dot对矩阵进行运算。
  • 图像处理:读取图像,并进行维度压缩,然后打印原属数据的大小与压缩后数据的大小。
  • 图像显示:使用 matplotlib 来显示原始图像和压缩后的图像。使用了 cmap=‘gray’,这会将图像转换为灰度进行显示。
    在这里插入图片描述

六、SVD降维的局限性

尽管SVD降维具有许多优点,但它也存在一些局限性:

  • 计算复杂度:对于大规模数据集,SVD的计算复杂度较高,可能需要较长的计算时间。
  • 难以解释:SVD降维后的数据维度通常不再具有原始数据的直观意义,因此可能需要额外的解释工作来理解降维后的数据。
  • 无法处理非线性关系:SVD是一种线性降维方法,无法有效处理数据中的非线性关系。

综上所述,SVD降维是一种有效的数据预处理技术,它可以通过提取数据的主要特征来降低数据的维度,并保留大部分重要信息。然而,在使用SVD降维时,也需要注意其局限性,并结合具体应用场景来选择合适的降维方法。

相关文章:

SVD降维

文章目录 一、SVD降维的基本原理二、SVD降维的步骤三、SVD降维的优点四、SVD降维的应用五、代码应用六、SVD降维的局限性 一、SVD降维的基本原理 SVD是线性代数中的一种技术,它将一个矩阵A分解为三个矩阵的乘积:A UΣV^T。其中,U和V是正交矩…...

剖析Cookie的工作原理及其安全风险

Cookie的工作原理主要涉及到HTTP协议中的状态管理。HTTP协议本身是无状态的,这意味着每次请求都是独立的,服务器不会保留之前的请求信息。为了在无状态的HTTP协议上实现有状态的会话,引入了Cookie机制。 1. Cookie定义 Cookie,也…...

规控面试复盘

目录 前言 一、京东方 1、CPP和C的区别是什么? 2、讲一下的ROS的话题通信 二、Momenta(泊车部门实习面试) 1、MPC的预测时间步是多少? 2、MPC的代价函数考虑的是什么? 三、九识 1、智能指针有哪些优缺点? 优点: 缺点: 2、Protobuf的数据传输效率为什么更高…...

Elastic Stack--ES集群加密及Kibana的RBAC实战

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 学习B站博主教程笔记: 最新版适合自学的ElasticStack全套视频(Elk零基础入门到精通教程)Linux运维必备—Elastic…...

【开源免费】基于SpringBoot+Vue.JS图书个性化推荐系统(JAVA毕业设计)

本文项目编号 T 015 ,文末自助获取源码 \color{red}{T015,文末自助获取源码} T015,文末自助获取源码 目录 一、系统介绍1.1 业务分析1.2 用例设计1.3 时序设计 二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究…...

STM32(F103ZET6)第十九课:FreeRtos的移植和使用

目录 需求一、FreeRtos简介二、移植FreeRtos1.复制代码2.内存空间分配和内核相关接口3.FreeRtosConfig4.添加到工程中三、任务块操作1.任务四种状态2.创建任务过程 需求 1.将FreeRtos(嵌入式实时操作系统)移植到STM32中。 2.在该系统中实现任务的创建、…...

索尼的Web3蓝图:从技术创新到现实应用的全方位布局

近年来,随着区块链技术和加密资产的迅猛发展,全球科技巨头纷纷投入其中,力图在Web3浪潮中占据一席之地。作为传统科技行业的巨头,索尼(Sony)也不甘落后,积极推动其Web3战略布局,展现出其在新兴领域的强烈野…...

探索Java中的分布式消息队列与事件总线:架构、实现与最佳实践

引言 在现代分布式系统中,消息队列和事件总线已经成为实现松耦合、高扩展性和高可用性架构的关键组件。无论是微服务架构、事件驱动架构,还是实时数据处理,消息队列和事件总线都扮演着至关重要的角色。本文将深入探讨Java中的分布式消息队列…...

HTML零基础教程(超详细)

一、什么是HTML HTML,全称超文本标记语言(HyperText Markup Language),是一种用于创建网页的标准标记语言。它通过一系列标签来定义网页的结构、内容和格式。HTML文档是由HTML元素构成的文本文件,这些元素包括标题、段…...

011.Python爬虫系列_bs4解析

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈 PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈 Oracle数…...

django摄影竞赛小程序论文源码调试讲解

2系统关键技术及工具简介 系统开发过程中设计的关键技术是系统的核心,而开发工具则会影响的项目开发的进程和效率。第二部分便描述了系统的设计与实现等相关开发工具。 2.1 Python简介 Python 属于一个高层次的脚本语言,以解释性,编译性&am…...

Unity-OpenCV-Imgproc函数概览

OpenCV-Imgproc函数概览 函数名功能描述createLineSegmentDetector创建一个智能指针到 LineSegmentDetector 对象并初始化它。此算法用于检测图像中的线段。getGaussianKernel返回高斯滤波器的系数。这些系数用于平滑图像或进行高斯模糊。getDerivKernels返回计算图像空间导数的…...

水晶连连看 - 无限版软件操作说明书

水晶连连看 – 无限版游戏软件使用说明书 文章目录 水晶连连看 – 无限版游戏软件使用说明书1 引言1.1 编写目的1.2 项目名称1.3 项目背景1.4 项目开发环境 2 概述2.1 目标2.2 功能2.3 性能 3 运行环境3.1 硬件3.2 软件 4 使用说明4.1 游戏开始界面4.2 游戏设定4.2.1 游戏帮助4…...

目标检测-YOLOv3

YOLOv3介绍 YOLOv3 (You Only Look Once, Version 3) 是 YOLO 系列目标检测模型的第三个版本,相较于 YOLOv2 有了显著的改进和增强,尤其在检测速度和精度上表现优异。YOLOv3 的设计目标是在保持高速的前提下提升检测的准确性和稳定性。下面是对 YOLOv3 …...

vscode好用的快捷键整理~

vscode好用的快捷键 将当前行复制并插入到上一行 shift alt ↑将当前行复制并插入到上一行 shift alt ↓将光标复制到上一行 ctrl alt ↑将光标复制到下一行 ctrl alt ↓删除当前行 ctrl x 本身是剪切当前行,也可以作为删除当前行来用选中下一个相同的片段…...

Docker in Docker 实践 on mac

在尝试tekton构建ci pipeline是,需要在k8 pod里build image,于是研究了如何docker in docker。 1. 编写自己的dind docker image FROM docker:20.10.16-dind ENV DOCKER_HOST unix:///var/run/docker.sock 2. docker build 自己的dind docker image并…...

Flask-Session扩展,使用Redis存储会话数据

深入理解Flask-session扩展Redis Flask 应用中使用 flask-session 扩展将 session 数据存储在 Redis 中是一种高效且可扩展的方法,特别是在需要处理大量用户或需要分布式部署的应用中。以下是如何在 Flask 应用中配置 flask-session 以使用 Redis 存储 session 的步…...

urdf ( xacro ) 的 collision碰撞参数设置

目录 写在前面的话整体流程1 URDF 文件结构2 查看原始碰撞形状描述3 加入简单碰撞形状描述方法一 Meshlab 自动测量方法二 人为测量 4 加入XACRO函数简化描述 最终结果展示侧视图正视图碰撞几何体中心点设置不对出现的结果 写在前面的话 本文使用的 URDF 文件是由 solidworks …...

iOS——方法交换Method Swizzing

什么是方法交换 Method Swizzing是发生在运行时的,主要用于在运行时将两个Method进行交换,我们可以将Method Swizzling代码写到任何地方,但是只有在这段Method Swilzzling代码执行完毕之后互换才起作用。 利用Objective-C Runtimee的动态绑定…...

【有啥问啥】大模型应用中的哈希链推理任务

大模型应用中的哈希链推理任务 随着人工智能技术的快速发展,尤其是大模型(如GPT、BERT、Vision Transformer等)的广泛应用,确保数据处理和模型推理的透明性与安全性变得愈发重要。哈希链推理任务作为一种技术手段,能够…...

告别拍脑袋规划!用ArcGIS做绿道选线:如何科学量化坡度、水域、道路成本并加权计算

科学规划绿道的ArcGIS高阶技法:从成本栅格构建到最优路径生成绿道规划从来不是简单的"两点之间直线最短",而是需要综合考虑地形、生态、人文等多维因素的复杂决策过程。传统规划中常见的"拍脑袋"决策方式,往往导致建成后…...

基于LM22678的树莓派硬盘专用电源设计:解决供电不稳与电流冲击

1. 项目概述:为什么我们需要一个“专用”电源?如果你正在用树莓派搭配一块机械硬盘搭建一个家庭服务器或者个人云存储,可能已经遇到了一个不大不小的麻烦:供电不稳。树莓派官方推荐的5V/3A电源,单独带树莓派4B跑满负载…...

力扣HOT100(30)两两交换链表中的节点

链表的交换要注意 “链表不断链”。前驱和后继都要连着迭代法(必学死磕!O (n) 时间,O (1) 空间)1. 为什么必须用虚拟头节点?因为交换后链表的头节点会变! 比如示例 1 中,原来的头是 1&#xff0…...

三十岁想从零转行现实吗?带你分辨真正有前景的好工作

![](https://img-blog.csdnimg.cn/direct/b0bfa28b59f9478dae4e6feee6659cce.png)我是29岁那年,完成从转行裸辞副业的职业转型。 如果你把职业生涯看成是从现在开始30岁,到你退休那年,中间这么漫长的30年,那么30岁转行完全来得及…...

[智能体-81]:工程化智能体 = 模型做脑力拆解 + 框架做流程落地。前者是决策者,后者是管理者,tools/function call是内部员工;mcp server是外部资源;

一、全角色人设 & 对应技术组件角色定位对应技术模块核心职责决策者(脑力大脑)大模型 LLM理解目标、任务拆解、逻辑判断、分支决策、内容生成,负责 “想方案、定步骤”管理者(流程总管)智能体编排框架(…...

写论文的神助攻!好用的AI写作辅助软件,逻辑清晰质量高

作为一名刚完成毕业论文的过来人,我太懂写论文的痛苦了 —— 选题迷茫、文献浩如烟海、框架混乱、逻辑不清、反复修改、查重降重反复折腾... 直到我发现了这套 AI 写作工具组合,简直是论文写作的 "开挂神器",效率直接拉满&#xff…...

告别元素变动导致的报错:探索自动化测试脚本的 AI“自愈”能力

前言:一个所有测试人都经历过的噩梦 周三晚上十一点,CI/CD流水线再次亮起红灯。 你打开日志,满屏的NoSuchElementException扑面而来。仔细一看——前端团队在昨天的版本中重构了登录页面的DOM结构,原本的#login-btn变成了#signin-button-v2,30个测试用例因此全军覆没。 …...

CPU架构启发的智能仓储布局优化实践

1. 仓库布局优化的核心挑战与创新机遇在物流仓储领域,拣货环节通常占据运营成本的55%-65%,而其中约50%的时间消耗在无效行走路径上。传统矩形仓库布局虽然易于规划和施工,但其正交的通道设计导致拣货员需要频繁进行90度转向,这种&…...

defx.nvim 安装与配置完全教程:从零开始搭建高效文件管理系统 [特殊字符]

defx.nvim 安装与配置完全教程:从零开始搭建高效文件管理系统 🚀 【免费下载链接】defx.nvim :file_folder: The dark powered file explorer implementation for neovim/Vim8 项目地址: https://gitcode.com/gh_mirrors/de/defx.nvim defx.nvim …...

企业云盘签章技术方案:从数字签名原理到工程落地

背景 电子签章在企业云盘中的落地,不只是一个"上传盖章图片"的功能实现。本质上,它是一套涉及数字签名、PKI基础设施、文档完整性校验的综合性技术方案。本文从技术选型角度,说清楚企业云盘内置签章需要解决哪些问题、主流实现方案…...