24/11/6 算法笔记 SVD

SVD,即奇异值分解(Singular Value Decomposition),是线性代数中一种重要的矩阵分解方法。

定义

对于任何给定的 m×nm×n 的实数矩阵 AA(其中 mm 是行数,nn 是列数),SVD分解可以表示为:

应用

  1. 数据降维:SVD 可以用于数据降维,尤其是在 PCA 中。通过保留最大的几个奇异值及其对应的左奇异向量和右奇异向量,可以近似原始数据矩阵。

  2. 推荐系统:在推荐系统中,SVD 可以用来分解用户-项目评分矩阵,以发现用户的潜在偏好和项目的隐含特征。

  3. 图像压缩:SVD 可以用于图像压缩,通过保留主要的奇异值和对应的向量,可以在保持图像质量的同时减少存储空间。

  4. 信号处理:在信号处理中,SVD 可以用于噪声降低和信号分离。

接下来手搓一个简易的svd

import numpy as np

def simple_svd(A):
    # 计算A的协方差矩阵的特征值和特征向量
    covariance_matrix = np.dot(A.T, A)
    eigenvalues, eigenvectors = np.linalg.eig(covariance_matrix)
    
    # 对特征值进行排序(从大到小),并获取对应的特征向量
    sorted_indices = np.argsort(eigenvalues)[::-1]
    eigenvalues = eigenvalues[sorted_indices]
    eigenvectors = eigenvectors[:, sorted_indices]
    
    # 计算奇异值(特征值的平方根)
    singular_values = np.sqrt(eigenvalues)
    
    # 计算U和V
    U = np.dot(A, eigenvectors)
    V = eigenvectors
    
    # 由于U应该是正交的,我们需要归一化它的列
    U = U / np.linalg.norm(U, axis=0)[:, np.newaxis]
    
    return U, singular_values, V

# 示例:创建一个矩阵A
A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]], dtype=float)

# 调用自定义SVD函数
U, S, V = simple_svd(A)

print("U matrix:\n", U)
print("Sigma (S) values:\n", S)
print("V matrix:\n", V)

每段代码的解释

计算协方差矩阵的特征值和特征向量

covariance_matrix = np.dot(A.T, A)
eigenvalues, eigenvectors = np.linalg.eig(covariance_matrix)

 对特征值进行排序并获取对应的特征向量

sorted_indices = np.argsort(eigenvalues)[::-1]
eigenvalues = eigenvalues[sorted_indices]
eigenvectors = eigenvectors[:, sorted_indices]

计算奇异值

什么是奇异值,有什么用

通过保留最大的几个奇异值及其对应的奇异向量,可以有效地减少数据的维度,同时保留数据中最重要的特征。

singular_values = np.sqrt(eigenvalues)

 计算 U 和 V

U = np.dot(A, eigenvectors)
V = eigenvectors
  • np.dot(A, eigenvectors) 计算矩阵 A 与其特征向量的点积,得到左奇异向量矩阵 U
  • V = eigenvectors 直接将特征向量矩阵作为右奇异向量矩阵 V

计算了u,s,v后能干嘛

  1. 数据降维

    通过保留最大的几个奇异值及其对应的奇异向量,可以对数据进行降维处理。这在PCA(主成分分析)中非常有用,可以用于图像压缩、数据压缩和噪声降低等场景。

SVD(奇异值分解)的思想是将一个复数或实数矩阵分解为三个特定的矩阵,使得原始矩阵可以通过这三个矩阵的乘积来重构。

SVD的思想在于提供了一种将矩阵分解为更基本、更易于分析和处理的组成部分的方法。这种分解揭示了矩阵的内在结构,使得我们可以在不同的应用中利用这些结构,如数据降维、信号处理、机器学习等。SVD是一种强大的数学工具,因为它适用于任何矩阵,无论其是否是方阵,是否是满秩的

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

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

相关文章

开发笔记 | 快速上手基于Dify等第三方大模型平台接口实现AI智能聊天

前置: 1.部署Dify,见官方教程及介绍https://docs.dify.ai/zh-hans,本文主要讲基于部署完之后的java实现的调用它的接口实现AI智能聊天,其他AI功能后续有用到再补充,没有就看缘分 2.什么是Dify?可以简单理解…

数据分析:转录组差异fgsea富集分析

文章目录 介绍加载R包数据链接导入数据数据预处理DE testing: 2BP vs no-BP比较limma-voomLoad steroid dataIn No-BP patientsIn 2BP patientsCompare gene expression vs bacterial mass其他系统信息介绍 转录组差异fgsea富集分析是一种基于基因集的富集分析方法,它关注的是…

查看网路信息-ifconfig命令

1.ifconfig缺点: 可以查看接口的网络类型;部分IP和掩码以及状态是否插线,看不到接口下的网关,DNS, 要想看到接口下多个IP,使用 ip addr show 命令 要想看网关,使用 ip route show 命令、route -n 命令 显示路由表内…

基于Spring Boot的中小型制造企业质量管理系统设计与实现,LW+源码+讲解

摘 要 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自…

Java:多态的调用

1.什么是多态 允许不同类的对象对同一消息做不同的响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)。多态使用了一种动态绑定(dynamic binding)技术,指在执行期间判断所引用…

并查集算法详解

文章目录 并查集概念并查集的常见操作构建并查集合并并查集和查找 关于find函数 并查集概念 并查集(Union-Find)是一种树型的数据结构,用于处理一些不交集的合并及查询问题。其主要应用是判断两个元素是否在同一个集合中,以及合并…

Redis持久化机制——针对实习面试

目录 Redis持久化机制Redis为什么要有持久化机制?Redis持久化方式有哪些?AOF持久化工作原理是什么?有什么优缺点?AOF持久化工作原理AOF的优点AOF的缺点 RDB持久化工作原理是什么?有什么优缺点?RDB持久化工作…

【系统架构设计师(第2版)】七、系统架构设计基础知识

有效的软件体系结构及其明确的描述和设计,已成为软件工程领域中重要的主题。 *注:由于历史原因,研究者和工程人员对**Software Architecture(简称SA)*的翻译不尽相同,本文中软件“体系结构”和“架构”具有…

【NLP】使用 SpaCy、ollama 创建用于命名实体识别的合成数据集

命名实体识别 (NER) 是自然语言处理 (NLP) 中的一项重要任务,用于自动识别和分类文本中的实体,例如人物、位置、组织等。尽管它很重要,但手动注释大型数据集以进行 NER 既耗时又费钱。受本文 ( https://huggingface.co/blog/synthetic-data-s…

Google推出了AI驱动的学习工具“Learn About”

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

Vue3中使用LogicFlow实现简单流程图

实现结果 实现功能&#xff1a; 拖拽创建节点自定义节点/边自定义快捷键人员选择弹窗右侧动态配置组件配置项获取/回显必填项验证 自定义节点与拖拽创建节点 拖拽节点面板node-panel.vue <template><div class"node-panel"><divv-for"(item, k…

本地部署运行 HuggingFace Diffuser 大模型

最近需要篡改大模型验证篡改定位水印的泛化性&#xff0c;但是由于网络连接原因无法直接使用&#x1f917;s Diffusers library &#xff0c;在网上找到了以下本地部署的方法。 目录 下载模型&#xff0c;部署至服务器上 1&#xff09;huggingface官网下载 2&#xff09;gi…

Bert框架详解(下)

一、Bert模型网络结构 1、Add与Normalize Add&#xff1a;将前面的数据传到后面层&#xff0c;残差网络同理。 Normalize &#xff1a;归一化&#xff0c;与batch normalize同理。 2、outputs(shifted right) outputs&#xff08;shifted right&#xff09;&#xff1a;指在…

操作系统学习笔记-3.2虚拟内存

文章目录 虚拟内存请求分页管理方式页面置换算法最佳置换算法工作原理OPT 算法的示例最佳置换算法的优点和缺点 先进先出置换算法最近最久未使用时钟置换算法时钟置换算法的工作原理&#xff1a;算法的步骤&#xff1a; 改进型时钟置换算法改进型时钟置换算法的特点&#xff1a…

【数学】通用三阶矩阵特征向量的快速求法 超简单!!!

目录 三个定理1、3个特征值&#xff08;即根互不相等&#xff09;例题实践2、2个特征值&#xff08;即有一个双重根&#xff09;3、1个特征值&#xff08;即有一个三重根&#xff09;定理证明 三个定理 本定理适用于 所有三阶矩阵 的特征向量求法&#xff01; 1、3个特征值&…

16通道AD采集方案,基于复旦微ARM + FPGA国产SoC处理器平台

测试数据汇总 表 1 本文带来的是基于复旦微FMQL20S400M四核ARM Cortex-A7(PS端) + FPGA可编程逻辑资源(PL端)异构多核SoC处理器设计的全国产工业评估板的AD采集案例。本次案例演示的开发环境如下: Windows开发环境:Windows 7 64bit、Windows 10 64bit PL端开发环境:P…

文件系统和日志管理

文件系统和日志管理 文件系统&#xff1a;文件系统提供了一个接口&#xff0c;用户用来访问硬件设备&#xff08;硬盘、光驱&#xff09;------------- 在硬件设备上对文件的管理 1、文件存储在硬盘上&#xff08;机械硬盘&#xff1a;一个扇区 2、文件中硬盘上的最小存储单位…

数据结构---排序总结

1.排序的时间复杂度&#xff08;均为平均值&#xff09; O(n^2) &#xff1a;冒泡排序&#xff0c;选择排序&#xff0c;插入排序。 O(n * log(n))&#xff1a;堆排序&#xff0c;快速排序&#xff0c;归并排序。 O(n^1.3)&#xff1a;希尔排序 2.空间复杂度&#xff1a; O(n) …

数据结构:七种排序及总结

文章目录 排序一插入排序1直接插入排序2希尔排序二选择排序3直接选择排序4堆排序三 交换排序5冒泡排序6快速排序四 归并排序7归并排序源码 排序 我们数据结构常见的排序有四大种&#xff0c;四大种又分为七小种&#xff0c;如图所示 排序&#xff1a;所谓排序&#xff0c;就是…

【操作系统】基于环形队列的生产消费模型

目录 一、单生产单消费 1.环形队列的实现 (1) void P(sem_t &sem); (2) void V(sem_t &sem); (3) RingQueue() (4) ~RingQueue() (5) void Push(const T &in); (6) void Pop(T *out); 2.上层调用逻辑 二、多生产多消费 1.环形队列的实现 (1) RingQueue…