聊聊特征分解和SVD分解

article/2025/9/26 21:40:17

矩阵分解

矩阵分解(decomposition,factorization):将矩阵拆分为多个矩阵的乘积的运算。矩阵的分解包括以下几种:

  • 特征分解
  • SVD分解
  • PCA
  • QR分解
  • LU分解
  • 极分解

矩阵分解在数据压缩推荐系统以及NLP等都有着比较广泛的应用。

特征分解

特征分解(eigendecomposition):能够将矩阵分解成一组特征向量和特征值,是一种使用最为广泛的矩阵分解。并不是所有的矩阵能够使用矩阵分解,只有方阵(矩阵的行数等于列数)才有特征分解,我们可以使用下面的数学形式来表示特征分解:
A v = λ v Av=\lambda v Av=λv
上面的式子中,非零向量 v v v是矩阵 A A A的特征向量,标量 λ \lambda λ是特征向量 v v v的特征值

  • 特征分解究竟有何作用?
    通过特征分解我们能够将一个矩阵分解成为下面的形式:
    A = Q Λ Q − 1 A = Q \Lambda Q^{-1} A=QΛQ1
    上式中的, Q Q Q是矩阵 A A A的特征向量组成的正交矩阵, Λ \Lambda Λ是一个对角矩阵,每一个对角线元素就是一个特征值,特征值 Λ i , i \Lambda_{i,i} Λi,i对应的特征向量是矩阵 Q Q Q的第 i i i列,特征值得大小表示对应特征向量对矩阵的重要程度
    在这里插入图片描述
    通过特征分解后,我们就能分析出矩阵中特征向量的重要程度,通过分析特征向量对应特征的大小来判断特征向量的重要性,特征值越大表示特征向量越重要。

奇异值分解

奇异值分解(singular value decomposition,SVD):将矩阵分解为奇异向量(singular vector)和奇异值(singular value),奇异值分解得到的信息和特征分解得到信息是同类型的,相对特征分解来说奇异值分解的应用更为广泛,因为每个实数矩阵都有一个奇异值分解,但不一定有特征分解。因为只有方阵才有特征分解,对于非方阵我们就可以使用奇异值分解。

通过奇异值分解,我们可以将矩阵分解成为下面的形式:
A = U D V T A = U D V^T A=UDVT
如果 A A A是一个 m × n m×n m×n的矩阵,那么 U U U就是一个 m × m m×m m×m的矩阵, D D D就是一个 m × n m × n m×n的矩阵, V V V是一个 n × n n×n n×n的矩阵。

矩阵 U U U V V V是正交矩阵,而矩阵 D D D是对角矩阵,矩阵 D D D对角线上的元素称为矩阵 A A A的奇异值。矩阵 U U U的列向量称为左奇异向量(left singular vector),矩阵 V V V的列向量称为右奇异向量(right singular vector)

我们可以利用特征分解去解释矩阵的奇异值分解, A A A左奇异向量 A A T AA^T AAT的特征向量, A A A右奇异向量 A T A A^TA ATA的特征向量。 A A A的非零奇异值是 A A T AA^T AAT特征值的平方根,同时也是 A T A A^TA ATA特征值的平方根。

除此之外,SVD还可以应用到矩阵求逆到非方阵上来。

伪逆

当我们需要求解一个线性方程的时候:
A x = y Ax=y Ax=y
我们可以在等式的左边同时乘以矩阵 A A A的逆矩阵 B B B后,就可以得到
x = B y x = By x=By
这样我们就能够求解线性方程的解。但是,如果矩阵 A A A是非方阵,那么它就没有逆矩阵。这时候就只能通过Moore-Penrose 伪逆来解决这一类问题,矩阵 A A A的伪逆的公式如下:
A + = V D + U T A^+= V D^+ U^T A+=VD+UT
上式中的矩阵 U 、 D 、 V U、D、V UDV是由矩阵 A A A通过奇异值分解之后得到的矩阵,对角矩阵 D D D的伪逆 D + D^+ D+是其非零元素取倒数之后再转置得到的。

当矩阵 A A A的列数多于行数(未知数的个数大于方程个数)时,使用伪逆求解的线性方程可能是众多解法中的一种。当矩阵 A A A的行数多于列数(方程的个数大于未知数的个数)时,方程可能没有解,在这种情况下,通过伪逆得到的 x x x使得 A x Ax Ax y y y的欧几里得距离 ∣ ∣ A x − y ∣ ∣ 2 ||Ax-y||_2 Axy2最小。

特征分解和奇异值分解的示例

我们可以利用numpy中实现的特征分解奇异值分解来测试一下

  • 特征分解
import numpy as npa = np.array([[1,2,3],[4,5,6],[7,8,9]])
#w是特征值,v是特征向量
w,v = np.linalg.eig(a)
print(w)
print(v)
#w[i]对应的特征向量是v[:,i]
print(w[0])
print(v[:,0])
[ 1.61168440e+01 -1.11684397e+00 -1.30367773e-15]
[[-0.23197069 -0.78583024  0.40824829][-0.52532209 -0.08675134 -0.81649658][-0.8186735   0.61232756  0.40824829]]
16.116843969807043
[-0.23197069 -0.52532209 -0.8186735 ]

通过对矩阵做特征分解能够很容易通过特征值去判断那些特征向量对矩阵更重要

  • SVD分解
import numpy as npa = np.array([[1,2,3,4],[4,5,6,7],[7,8,9,10]])
#SVD奇异值分解
#u左奇异向量矩阵,s奇异值矩阵,vh右奇异向量矩阵
u,s,vh = np.linalg.svd(a)
print(u.shape,s.shape,vh.shape)
#(3, 3) (3,) (4, 4)
print(s)
#[2.11562535e+01 1.55336357e+00 9.06493304e-17]#通过奇异值向量和奇异值还原矩阵
smat = np.zeros((u.shape[1], vh.shape[0]))
smat[:s.shape[0], :s.shape[0]] = np.diag(s)
restore_a = np.dot(np.dot(u,smat),vh)
# print(restore_a)#重构矩阵
num = 2
re_a = np.dot(np.dot(u[:,:num],np.diag(s[:num])),vh[:num,:])
print(re_a)
"""
[[ 1.  2.  3.  4.][ 4.  5.  6.  7.][ 7.  8.  9. 10.]]
"""

利用numpy我们能够很容易的来实现矩阵的奇异值分解,然后我们也利用了奇异值向量奇异值来还原矩阵。

最后,我们发现我们再重建矩阵的时候只利用两个奇异值和奇异向量也能够完全的还原出原始矩阵,主要是因为第三个奇异值非常的小,对整个矩阵几乎没有影响。

在奇异值矩阵 D D D中,是按照奇异值从大到小排列的,而且矩阵中的奇异值衰减的特别快。在很多情况下,前10%甚至前1%的奇异值之和就占了奇异值之和99%以上。也就是说,我们可以用前r(r远远小于m、n)个奇异值和奇异向量来近似描述矩阵。


http://chatgpt.dhexx.cn/article/U30pXSrm.shtml

相关文章

SVD奇异值分解

SVD分解 SVD分解是LSA的数学基础,本文是我的LSA学习笔记的一部分,之所以单独拿出来,是因为SVD可以说是LSA的基础,要理解LSA必须了解SVD,因此将LSA笔记的SVD一节单独作为一篇文章。本节讨论SVD分解相关数学问题&#xf…

矩阵分解 SVD分解

在认识SVD之前,先来学习两个相关的概念:正交矩阵和酉矩阵。 如果,则阶实矩阵称为正交矩阵。而酉矩阵是正交矩阵往复数域上的推广。 判断正交矩阵和酉矩阵的充分必要条件是:。或者说正交矩阵和酉矩阵的共轭转置和它的 …

SVD分解的推导,理解SVD分解及矩阵奇异值的几何意义

文章目录 SVD分解的证明推导从本质上理解SVD分解矩阵奇异值的几何意义 SVD分解的证明推导 理解SVD分解要解决的问题是什么? 从本质上理解SVD分解 从线性映射的矩阵表示角度,即从“抽象”->“具体”的角度去理解SVD分解。 矩阵奇异值的几何意义…

矩阵分解SVD原理

常用的经典矩阵分解算法: 经典算法PCA、SVD主题模型算法LDA概率矩阵分解PMF,由深度学习大牛Ruslan Salakhutdinov所写,主要应用于推荐系统中,在大规模的稀疏不平衡性Netflix数据集上取得较好的效果;非负矩阵分解&#…

精简易懂,30 分钟学会 SVD 矩阵分解,很强!

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达SVD(Singular Value Decomposition)奇异值分解分解是机器学习中最重要的矩阵分解方法。 它能够将一个任意形状的矩阵分解成一个正交矩阵和一个对角矩阵以及另一个正交矩阵…

矩阵(一):SVD分解

文章目录 0 参考链接(尊重原著)1 SVD分解原理2 SVD分解意义3 SVD分解的应用4 SVD数学举例5 为什么Ax0的解为最小奇异值对应的向量? 0 参考链接(尊重原著) 下面这个讲的很好很全面 视觉SLAM常见的QR分解SVD分解等矩阵分…

详解SVD分解过程

转 如何让奇异值分解(SVD)变得不“奇异”? 红色石头 发布于 2018-08-29 分类:机器学习 阅读(144) 评论(0) 如何让奇异值分解(SVD)变得不“奇异”?-红色石头的个人博客 http://redstonewill.com/1529/ 在之前的一篇文章:通俗解…

奇异值分解(SVD)原理详解及推导

转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/43053513 在网上看到有很多文章介绍SVD的,讲的也都不错,但是感觉还是有需要补充的,特别是关于矩阵和映射之间的对应关系。前段时间看了国外的一篇文章,叫A S…

奇异值分解(SVD)原理

奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域。是很多机器学习算法的基石。本文就对SVD的原理做一个总…

SVD(奇异值分解)

一、SVD(奇异值分解 Singular Value Decomposition) 1.1、基本概念: (1)定义:提取信息的方法:奇异值分解Singular Value Decomposition(SVD) (2&#xff0…

SVD分解

一、SVD简介 Singular Value Decomposition(奇异值分解,SVD)是一种重要的矩阵分解技术,可以将一个矩阵分解为三个矩阵的乘积。SVD的应用广泛,包括数据降维、矩阵逆运算、推荐系统等领域。 给定一个矩阵A,SV…

如何快速搭建个人网站(服务器配置篇)

关于服务器的购买和域名注册可以参考我的这篇博客 在使用之前,建议小白用户先下载一个Vmware 安装一个Ubuntu的虚拟环境学习一下linux的基础命令。 一、远程服务器的连接 服务器购买好了以后我们需要进行远程连接我们的服务器, 我个人推荐windows用…

在废旧手机里搭建个人服务器

点击跳转微信公众号原文链接 欢迎关注公众号,会不定时发些有趣的干货文章,以及一些记录性的技术文章! 正文开始: 一、目的:给手机装上Linux系统,充当服务器使用 二、流程: 1、手机装好相关软件…

个人搭建网站的服务器选择

关于这方面之前一直准备分享一下心得,由于一直比较忙,各种想写的就各种耽搁了,今天给大家总结一下个人或小型企业站该如何选择网站服务器 首先,先弄清楚自己的需求和用途: 1、是建立一个静态页面还是动态页面&#xff…

如何利用云服务器搭建个人网站

去阿里云进入官网 aliyun.com 注册账号 小林同学在这里用阿里云演示,大家也可以去腾讯云、百度云注册等大型知名企业,步骤雷同,看个人喜欢 注册完,完善个人信息,进行实名认证 主页面 点击 最新活动 并找到 新手上路 和…

【Linux】零成本在家搭建自己的私人服务器解决方案

我这个人自小时候以来就特喜欢永久且免费的东西,也因此被骗过(花巨款买了永久超级会员最后就十几天)。 长大后骨子里也是喜欢永久且免费的东西,所以我不买服务器,用GitHubPage或者GiteePage搭建自己的静态私人博客&…

如何组装、搭建一台永久运行的个人服务器?

点击关注公众号,实用技术文章及时了解 来源:segmentfault.com/a/1190000021143144 一、前言 由于本人在这段时候,看到了一个叫做树莓派的东东,初步了解之后觉得很有意思,于是想把整个过程记录下来。 二、树莓派是什么&…

完全免费快速搭建个人www服务器

想拥有自己的web服务器吗?想把服务器放到自己家里吗?通过ADSL拨号也能建立个人的服务器吗?本文告诉你答案。 要建立自己的web服务器,需要两个最重要的工作: 1 让别人知道你的主机 目前访问Internet上主机的方式主要有…

用服务器建立个人网站

首先,我们需要购买云服务器和域名。 域名建议用.com后缀的(一般五十左右),想要便宜的域名可以买.top等后缀的(一般几块钱)。 点击这里购买域名 三丰云服务器的话,根据自己的需要购买&#xf…

家庭宽带搭建个人服务器

家庭宽带搭建个人服务器 家庭宽带搭建个人服务器准备1.公网IP1.1光猫改桥接模式 2.一台PC主机 安装PVE系统1.下载PVE镜像文件2.制作U盘启动盘 PVE安装Centos1.创建虚拟机2.启动虚拟机 完成centos安装步骤即可 域名解析实现公网访问1.测试公网连接 家庭宽带搭建个人服务器 想必…