奇异值分解(Singular Value Decomposition,SVD)是一种矩阵分解(Matrix Decomposition)的方法。除此之外,矩阵分解还有很多方法,例如特征分解(Eigendecomposition)、LU分解(LU decomposition)、QR分解(QR decomposition)和极分解(Polar decomposition)等。这篇文章主要说下奇异值分解,这个方法在机器学习的一些算法里占有重要地位。

————————————————————————————————————————————————————————

定义

下面引用 SVD 在维基百科中的定义。

In linear algebra, the singular value decomposition (SVD) is a factorization of a real or complex matrix. It is the generalization of the eigendecomposition of a positive semidefinite normal matrix (for example, a symmetric matrix with positive eigenvalues) to any m×nm×n matrix via an extension of polar decomposition.

也就是说 SVD 是线代中对于实数矩阵和复数矩阵的分解,将特征分解从 半正定矩阵 推广到任意 m×nm×n 矩阵。

注意:本篇文章内如未作说明矩阵均指实数矩阵。

假设有 m×nm×n 的矩阵 AA ,那么 SVD 就是要找到如下式的这么一个分解,将 AA 分解为 3 个矩阵的乘积:

其中,UU 和 VV 都是正交矩阵 (Orthogonal Matrix),在复数域内的话就是酉矩阵(Unitary Matrix),即

换句话说,就是说 UU 的转置等于 UU 的逆,VV 的转置等于 VV 的逆:

而 ΣΣ 就是一个非负实对角矩阵。

那么 UU 和 VV 以及 ΣΣ 是如何构成的呢?

_____________________________________________________________________________________________________

求解

UU 和 VV 的列分别叫做 AA 的 左奇异向量(left-singular vectors)和 右奇异向量(right-singular vectors),ΣΣ 的对角线上的值叫做 AA 的奇异值(singular values)。

其实整个求解 SVD 的过程就是求解这 3 个矩阵的过程,而求解这 3 个矩阵的过程就是求解特征值和特征向量的过程,问题就在于 求谁的特征值和特征向量

  • U 的列由  的单位化过的特征向量构成
  • V 的列由  的单位化过的特征向量构成
  • Σ 的对角元素来源于  或  的特征值的平方根,并且是按从大到小的顺序排列的

知道了这些,那么求解 SVD 的步骤就显而易见了:

  1. 求  的特征值和特征向量,用单位化的特征向量构成 U
  2. 求  的特征值和特征向量,用单位化的特征向量构成 V
  3. 将  或者  的特征值求平方根,然后构成 Σ

_____________________________________________________________________________________________________

举例

假设

那么可以计算得到

接下来就是求这个矩阵的特征值和特征向量了

要想该方程组有非零解(即非零特征值),那么系数矩阵 −λE 的行列式必须为 0

求解这个行列式我就不再赘述了,这个直接使用行列式展开定理就可以了,可以得到 λ1≈29.86606875,λ2≈0.13393125,λ3=λ4=0,有 4 个特征值,因为特征多项式 |−λE| 是一个 4 次多项式。对应的单位化过的特征向量为

这就是矩阵 U 了。

同样的过程求解  的特征值和特征向量,求得 λ1≈0.13393125,λ2≈29.86606875,将特征值降序排列后对应的单位化过的特征向量为

这就是矩阵 V 了。

而矩阵 Σ 根据上面说的为特征值的平方根构成的对角矩阵

到此,SVD 分解就结束了,原来的矩阵 A 就被分解成了 3 个矩阵的乘积。

____________________________________________________________________________________________________

Numpy 实现

Python 中可以使用 numpy 包的 linalg.svd() 来求解 SVD。

奇异值分解 (SVD)原理及python实现相关推荐

  1. 奇异值分解(SVD)原理详解

    奇异值分解(SVD)原理详解 一.奇异值与特征值基础知识: 特征值分解和奇异值分解在机器学习领域都是属于满地可见的方法.两者有着很紧密的关系,我在接下来会谈到,特征值分解和奇异值分解的目的都是一样,就 ...

  2. 【机器学习】这次终于彻底理解了奇异值分解(SVD)原理及应用

    奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,有相当多的应用与奇异值都可以扯上关系,它不光可以用于降维算法中的特征分解,比如做f ...

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

    很不错的文章,适合入门. 转载出处http://blog.csdn.net/zhongkejingwang/article/details/43053513 在网上看到有很多文章介绍SVD的,讲的也都 ...

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

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

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

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

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

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

  7. 二次型、特征值/向量、奇异值、特征值、奇异值分解、奇异值分解(SVD)原理与在降维中的应用

    一.二次型 通过矩阵来研究二次函数(方程),这就是线性代数中二次型的重点. 1 二次函数(方程)的特点 1.1 二次函数 最简单的一元二次函数就是: 给它增加一次项不会改变形状: 增加常数项就更不用说 ...

  8. 矩阵分解之特征值分解(EVD)、奇异值分解(SVD)、SVD++

    矩阵分解之: 特征值分解(EVD).奇异值分解(SVD).SVD++_人鱼线的博客-CSDN博客_evd分解 矩阵的特征分解和奇异值(SVD)分解--求法和意义_奔跑的Yancy的博客-CSDN博客_ ...

  9. 奇异值分解SVD数学原理及代码(Python)

    奇异值分解SVD数学原理及代码(Python) 首先简单介绍一下什么是正交矩阵(酉矩阵) 如果 或 其中,E为单位矩阵,或,则n阶实矩阵A称为正交矩阵.正交矩阵是实数特殊化的酉矩阵,因此总是属于正规矩 ...

最新文章

  1. php读取西门子plc_简单说一些PLC中模拟量的相关概念
  2. java中封装日期加时间_java日期处理简单封装
  3. HashMap 怎么 hash?又如何 map?
  4. python导入自定义文件_python引入导入自定义模块和外部文件的实例
  5. 服务器芯片镜像测试,模拟镜像服务器磁盘问题的两个测试【转】
  6. (转载)使用 Anthem.NET 的常见回调(Callback)处理方式小结
  7. python函数手册pdf_Python参考手册(第4版 修订版) ([美]大卫 M.比兹利) 中文pdf扫描版[102MB]...
  8. 1024 科学计数法 (20 分) C语言
  9. 20155305《网络对抗》信息搜集与漏洞扫描
  10. 什么时候使用PHP设计模式和为什么要使用?
  11. 笔记本突然不能连接无线网解决办法
  12. win7-32位系统SqlServer2014版本下载与安装
  13. TIA博途中通过关键字AT实现变量覆盖的具体方法及示例程序
  14. Python词法分析器实现
  15. mysql 为表添加索引
  16. 清理kdevtmpfsi、dbused挖矿木马程序
  17. Android 的 LiveReload — jimu Mirror
  18. CentOS中的目录处理命令
  19. 5G NR - 38.101-1协议笔记(一)
  20. CPU卡程序设计实例(二十六)卡和ESAM之间外部认证

热门文章

  1. base64转音频blob
  2. 树莓派+腾讯连连,打造智能鱼缸,养鱼从未如此简单
  3. H5 canvas画布总结 (绘制哆啦A梦)
  4. 程序员工作时有很多戴耳机
  5. linux设备树of常用API
  6. bfs( L2-016 愿天下有情人都是失散多年的兄妹 (25 分))
  7. 浙江省计算机单考单招分数线 2011,浙江:2011年高考录取分数线发布 理科一本550分...
  8. 关于如何通过kali linux 攻击以及破解WPA/WPA2无线加密
  9. 成佩涛-利用haproxy作为mysql的负载均衡器
  10. delphi打开外部.exe