8 SVD矩阵分解

8 SVD矩阵分解在进行 SVD 矩阵分解前需要先复习一些基础知识 如正交矩阵 正交变换以及基向量 正交矩阵如果 或 则 n 阶实矩阵 A 称为正交矩阵 若 A 为正交阵 则满足以下条件 是正交矩阵 的各行是单位向量且两两正交 的各列是单位向量且两两正交 A 1 或

欢迎大家来到IT世界,在知识的湖畔探索吧!

在进行SVD矩阵分解前需要先复习一些基础知识,如正交矩阵、正交变换以及基向量。

正交矩阵

如果。或,则n阶实矩阵A称为正交矩阵,若A为正交阵,则满足以下条件 :

  • 是正交矩阵;
  • 的各行是单位向量且两两正交;
  • 的各列是单位向量且两两正交;
  • ||A||=1或-1 ;
  • 正交矩阵通常用字母Q表示。

常见等式

则有:

原始矩阵存储的是矩阵的原始信息,分解矩阵会使信息变得不完整,但如果原始信息量非常大,而矩阵中的数据又非常稀疏(矩阵中大部分的元素都为0),只有少量个别位置的元素不为0。这样就需要提取矩阵特征进行分解来简化矩阵复杂度。

正交矩阵定理

在矩阵论中,实数正交矩阵是方块矩阵Q,它的转置矩阵是它的逆矩阵,如果正交矩阵的行列式为+1,则称之为特殊正交矩阵。

  1. 方阵A正交的充要条件是A的行(列)向量组是单位正交向量组;
  2. 方阵A正交的充要条件是A的n个行(列)向量是n维向量空间的一组标准正交基;
  3. A是正交矩阵的充要条件是:A的行向量组两两正交且都是单位向量;
  4. A的列向量组也是正交单位向量组。
  5. 正交方阵是欧氏空间中标准正交基到标准正交基的过渡矩阵。

摘自百度百科

正交变换

正交变换公式: X=UY

其中:X是Y的正交变换 ,其中U是正交矩阵,X和Y为列向量 。

假设有两个单位列向量a和b,两向量的夹角为θ。

现对向量a,b进行正交变换:

(1)

由上式可知,正交变换后的向量组的内积相等。

如上述两个式子,θ=θ’ (2)

如等式(1)(2)其几何含义,如下图所示:

8 SVD矩阵分解

正交变换的几何意义



欢迎大家来到IT世界,在知识的湖畔探索吧!

正交变换的性质

1)正交变换不改变向量的长度(模)。

2)正交变换不改变向量的夹角。

从以上性质可以推论:基向量正交表换后的结果仍是基向量。基向量是表示向量最简洁的方法,向量在基向量上的投影就是所在基向量的坐标。

特征值分解

对称方阵A的特征值分解为:

其中U为正交矩阵,Σ是对角阵。

为了便于展示特征分解几何含义,假设A为2×2对称矩阵,

则对AU=UΣ进行展开:

用几何意义表示如下:

8 SVD矩阵分解

特征值分解的几何意义

由上图所示,矩阵A没有旋转特征向量,它只是对特征向量进行了拉伸或缩短(取决于特征值的大小),因此,对称矩阵对其特征向量(基向量)的变换仍然是基向量(单位化) 。

SVD矩阵分解

虽然当基向量是对称矩阵的特征向量时,矩阵变换后仍是基向量。然而,大多数时候我们遇到的向量都是行列不等的矩阵。

假设:系统中有100万用户,10万件商品。则用户购买商品记录就需要表示为一个100万×10万的矩阵。

8 SVD矩阵分解

再假设用户信息有10个用户标签,则将用户购买商品的表分解成A、B两个矩阵。A×B就还原了原始矩阵。

8 SVD矩阵分解

上述的场景,可以考虑对矩阵进行SVD分解,进行矩阵的优化、降维等处理。

SVD矩阵分解

SVD(奇异值分解)是一种重要的矩阵分解方法,它将一个矩阵分解为三个矩阵的乘积。具体来说,对于一个×的矩阵,其SVD矩阵分解可以表示为:

其中:

  • U是一个m×m的正交矩阵,其列向量称为左奇异向量;
  • Σ是一个m×n的对角矩阵,其对角线上的元素称为奇异值,按照降序排列,即σi≥0;
  • V是一个n×n的正交矩阵,其行向量称为右奇异向量。

SVD是特征分解在任意矩阵上的推广,在信号处理、统计学等领域有重要应用。通过SVD,可以将一个矩阵分解为更易于处理的形式,这种新的形式是两个或多个矩阵的乘积,从而可以方便地对数据进行进一步的分析和处理。在实际应用中,SVD常用于推荐系统、自然语言处理、图像处理等领域,通过降低数据的维度或提取数据的主要特征,达到降维、降噪、特征提取等目的。

由于推导过程较为复杂,且本合集是写给程序员的数学,附上Python代码,进行验证SVD分解变换的正确性。

import numpy as np from scipy.linalg import svd # 假设A是一个m x n矩阵 A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 计算矩阵A的SVD分解 U, S, Vh = svd(A, full_matrices=False) # full_matrices=False表示只返回需要的矩阵大小 # 输出结果 print("单位正交矩阵U:\n", U) print("对角矩阵S:\n", S) print("矩阵V的转置Vh:\n", V^T) # 可以通过U, S, Vh重构矩阵A进行验证 A_reconstructed = U.dot(np.diag(S)).dot(Vh) print("重构矩阵A:\n", A_reconstructed)

欢迎大家来到IT世界,在知识的湖畔探索吧!

输出结果,最后通过变换后的U、S、V,可以将矩阵还原成原矩阵A:

8 SVD矩阵分解

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/100500.html

(0)
上一篇 14小时前
下一篇 14小时前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信