原文链接:奇异值分解(SVD)的计算方法

奇异值分解是线性代数中一种重要的矩阵分解方法,这篇文章通过一个具体的例子来说明如何对一个矩阵A进行奇异值分解。

首先,对于一个m*n的矩阵,如果存在正交矩阵U(m*m阶)和V(n*n阶),使得(1)式成立:
\[A=U \Sigma V^T \tag{1}\]

则将式(1)的过程称为奇异值分解,其中\(\Sigma_{mn}=\begin{bmatrix}\Sigma_1 & 0 \\ 0 & 0\end{bmatrix}\),且
\(\Sigma_1=diag(\sigma_1,\sigma_1,\dots,\sigma_r)\),U和V分别称为A的左奇异向量矩阵和右奇异向量矩阵。 下面用一个具体的例子来说明如何得到上述的分解。

假设我们有一个矩阵\(A=\begin{bmatrix} 1&1\\1&1\\0&0\end{bmatrix}\)

第一步计算U

计算矩阵\(AA^T=\begin{bmatrix} 2&2&0\\2&2&0\\0&0&0\end{bmatrix}\)

对其进行特征分解,分别得到特征值4,0,0和对应的特征向量\([\frac{1}{\sqrt{2}},\frac{1}{\sqrt{2}},0]^T,[-\frac{1}{\sqrt{2}},\frac{1}{\sqrt{2}},0]^T,[0,0,1]^T\),可以得到
\[U=\begin{bmatrix} \frac{1}{\sqrt{2}}&-\frac{1}{\sqrt{2}}&0 \\ \frac{1}{\sqrt{2}}&\frac{1}{\sqrt{2}}&0 \\ 0&0&1 \end{bmatrix}\]

第二步计算V

计算矩阵\(A^TA=\begin{bmatrix} 2&2 \\ 2&2 \end{bmatrix}\)

对其进行特征分解,分别得到特征值4,0和对应的特征向量\([\frac{1}{\sqrt{2}},\frac{1}{\sqrt{2}}]^T,[-\frac{1}{\sqrt{2}},\frac{1}{\sqrt{2}}]^T\),可以得到
\[V=\begin{bmatrix} \frac{1}{\sqrt{2}}&-\frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}}&\frac{1}{\sqrt{2}}\end{bmatrix}\]

第三步计算\(\Sigma^{m×n}\)

\(\Sigma_{mn}=\begin{bmatrix}\Sigma_1 & 0 \\ 0 & 0\end{bmatrix}\),其中\(\Sigma_1=diag(\sigma_1,\sigma_1,\dots,\sigma_r)\)是将第一或第二步求出的非零特征值从大到小排列后开根号的值,这里\(\Sigma=\begin{bmatrix} 2&0 \\ 0&0 \\ 0&0 \end{bmatrix}\)

最终,我们可以得到A的奇异值分解
\[A=U \Sigma V^T= \begin{bmatrix} \frac{1}{\sqrt{2}}&-\frac{1}{\sqrt{2}}&0 \\ \frac{1}{\sqrt{2}}&\frac{1}{\sqrt{2}}&0 \\ 0&0&1 \end{bmatrix} \begin{bmatrix} 2&0 \\ 0&0 \\ 0&0 \end{bmatrix} {\begin{bmatrix} \frac{1}{\sqrt{2}}&-\frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}}&\frac{1}{\sqrt{2}}\end{bmatrix}}^T=\begin{bmatrix} 1&1\\1&1\\0&0\end{bmatrix}\]

矩阵的特征值分解和奇异值分解有什么区别?

首先,特征值只能作用在一个mm的正方矩阵上,而奇异值分解则可以作用在一个mn的长方矩阵上。其次,奇异值分解同时包含了旋转、缩放和投影三种作用,(1)式中,U和V都起到了对A旋转的作用,而Σ起到了对A缩放的作用。特征值分解只有缩放的效果。

MARSGGBO♥原创







2018-12-21

【转载】奇异值分解(SVD)计算过程示例的更多相关文章

  1. 降维之奇异值分解(SVD)

    看了几篇关于奇异值分解(Singular Value Decomposition,SVD)的博客,大部分都是从坐标变换(线性变换)的角度来阐述,讲了一堆坐标变换的东西,整了一大堆图,试图“通俗易懂”地 ...

  2. 转载:奇异值分解(SVD) --- 线性变换几何意义(下)

    本文转载自他人: PS:一直以来对SVD分解似懂非懂,此文为译文,原文以细致的分析+大量的可视化图形演示了SVD的几何意义.能在有限的篇幅把这个问题讲解的如此清晰,实属不易.原文举了一个简单的图像处理 ...

  3. 奇异值分解(SVD)原理详解及推导(转载)

    转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/43053513 在网上看到有很多文章介绍SVD的,讲的也都不错,但是感觉还是有 ...

  4. 奇异值分解(SVD)原理详解及推导 (转载)

    转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/43053513 在网上看到有很多文章介绍SVD的,讲的也都不错,但是感觉还是有 ...

  5. 转载:奇异值分解(SVD) --- 线性变换几何意义(上)

    本文转载自他人: PS:一直以来对SVD分解似懂非懂,此文为译文,原文以细致的分析+大量的可视化图形演示了SVD的几何意义.能在有限的篇幅把这个问题讲解的如此清晰,实属不易.原文举了一个简单的图像处理 ...

  6. 奇异值分解(SVD) --- 几何意义 (转载)

    PS:一直以来对SVD分解似懂非懂,此文为译文,原文以细致的分析+大量的可视化图形演示了SVD的几何意义.能在有限的篇幅把 这个问题讲解的如此清晰,实属不易.原文举了一个简单的图像处理问题,简单形象, ...

  7. CFD计算过程发散诸多原因分析【转载】

    转载自: http://blog.sina.com.cn/s/blog_5fdfa7e601010rkx.html 今天探讨引起CFD计算过程中发散的一些原因.cfd计算是将描述物理问题的偏微分方程转 ...

  8. 一步步教你轻松学奇异值分解SVD降维算法

    一步步教你轻松学奇异值分解SVD降维算法 (白宁超 2018年10月24日09:04:56 ) 摘要:奇异值分解(singular value decomposition)是线性代数中一种重要的矩阵分 ...

  9. 奇异值分解(SVD)原理与在降维中的应用

    奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域.是 ...

随机推荐

  1. BSGS与exBSGS学习笔记

    \(BSGS\)用于解决这样一类问题: 求解\(A^x ≡B(modP)\)的最小\(x\),其中\(P\)为质数. 这里我们采用分块的方法,把\(x\)分解为\(i *t-b\)(其中\(t\)是分 ...

  2. python: with的使用;

    with适用于对资源进行访问的场合,不论使用过程中是否发生异常都执行必要的“清理”操作,释放资源,比如文件资源的关闭,线程锁的获取和释放等: with与上下文管理器相关: 上下文管理协议:  包含__ ...

  3. Storm 使用手册

    一.Storm相关术语: Nimbus: Storm集群主节点,负责资源的分配和任务的调度 Supervisor:Storm集群工作节点,接受Nimbus分配的任务,管理Worker Worker:S ...

  4. 设计模式_策略模式_在Spring中的应用

    一.理论 在spring中经常有读取配置文件的需求,这里就会用到一个Spring提供的Resource接口 Resource 接口是具体资源访问策略的抽象,也是所有资源访问类所实现的接口.Resour ...

  5. python mysql 视图 触发器 事物 存储过程 用户授权 数据备份还原

    ###################总结########### 视图是一个虚拟表(非真实存在) 是跑在内存中的表,真实表是在硬盘上的表 使用视图我们可以把查询过程中的临时表摘出来,保存下来,用视图去 ...

  6. Ado.NET基础必备

    一.SqlConnection对象 第一次需要连接数据库时要和服务器握手,解析连接字符串,授权,约束的检查等等操作,而物理连接建立后,这些操作就不会去做了(默认使用了连接池技术). SqlConnec ...

  7. HDU - 1698 Just a Hook (线段树区间修改)

    https://cn.vjudge.net/problem/HDU-1698 题意 大小为n的数组,数组元素初始值为1,有q次操作,x,y,z表示从第x到第y所有的元素的值变为z,最后问1到n的和. ...

  8. PHP7 学习笔记(十五)Repository 模式实现业务逻辑和数据访问的分离

    参考: 1.http://laravelacademy.org/post/3063.html

  9. Tornado基本应用

    Tornado简介 Tornado有自己的socket(异步非阻塞,原生支持WebSocket),Django没有. Tornado的模板语言更接近Python风格,比Django要好理解. Demo ...

  10. 【转载】C++ getline函数用法

    https://www.cnblogs.com/xiaofeiIDO/p/8574042.html 摘要: 通过getline()函数一个小小的实例,那么把getline()函数作为while的判断语 ...