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

相关概念
参考自维基百科。

正交矩阵:若一个方阵其行与列皆为正交的单位向量,则该矩阵为正交矩阵,且该矩阵的转置和其逆相等。两个向量正交的意思是两个向量的内积为 0
正定矩阵:如果对于所有的非零实系数向量 zz,都有 zTAz>0zTAz>0,则称矩阵 AA 是正定的。正定矩阵的行列式必然大于 0, 所有特征值也必然 > 0。相对应的,半正定矩阵的行列式必然 ≥ 0。
定义
下面引用 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 个矩阵的乘积:

Am×n=Um×mΣm×nVTn×n
Am×n=Um×mΣm×nVn×nT
其中,UU 和 VV 都是正交矩阵 (Orthogonal Matrix),在复数域内的话就是酉矩阵(Unitary Matrix),即

UTU=Em×m
UTU=Em×m
VTV=En×n
VTV=En×n
换句话说,就是说 UU 的转置等于 UU 的逆,VV 的转置等于 VV 的逆:

UT=U−1
UT=U−1
VT=V−1
VT=V−1
而 ΣΣ 就是一个非负实对角矩阵。

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

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

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

UU 的列由 AATAAT 的单位化过的特征向量构成
VV 的列由 ATAATA 的单位化过的特征向量构成
ΣΣ 的对角元素来源于 AATAAT 或 ATAATA 的特征值的平方根,并且是按从大到小的顺序排列的
知道了这些,那么求解 SVD 的步骤就显而易见了:

求 AATAAT 的特征值和特征向量,用单位化的特征向量构成 UU
求 ATAATA 的特征值和特征向量,用单位化的特征向量构成 VV
将 AATAAT 或者 ATAATA 的特征值求平方根,然后构成 ΣΣ
举例
假设

A=⎛⎝⎜⎜⎜21004300⎞⎠⎟⎟⎟
A=(24130000)
那么可以计算得到

AAT=⎛⎝⎜⎜⎜20140014100000000000⎞⎠⎟⎟⎟
AAT=(20140014100000000000)
接下来就是求这个矩阵的特征值和特征向量了

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

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

⎛⎝⎜⎜⎜0.817415560.5760484400−0.576048440.817415560000100001⎞⎠⎟⎟⎟
(0.81741556−0.57604844000.576048440.817415560000100001)
这就是矩阵 UU 了。

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

(0.404553580.9145143−0.91451430.40455358)
(0.40455358−0.91451430.91451430.40455358)
这就是矩阵 VV 了。

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

⎛⎝⎜⎜⎜5.464985700000.3659661900⎞⎠⎟⎟⎟
(5.4649857000.365966190000)
到此,SVD 分解就结束了,原来的矩阵 AA 就被分解成了 3 个矩阵的乘积。

A4×2=U4×4Σ4×2VT2×2
A4×2=U4×4Σ4×2V2×2T
⎛⎝⎜⎜⎜21004300⎞⎠⎟⎟⎟=⎛⎝⎜⎜⎜0.817415560.5760484400−0.576048440.817415560000100001⎞⎠⎟⎟⎟⎛⎝⎜⎜⎜5.464985700000.3659661900⎞⎠⎟⎟⎟(0.404553580.9145143−0.91451430.40455358)T
(24130000)=(0.81741556−0.57604844000.576048440.817415560000100001)(5.4649857000.365966190000)(0.40455358−0.91451430.91451430.40455358)T
Numpy 实现
Python 中可以使用 numpy 包的 linalg.svd() 来求解 SVD。

import numpy as np

A = np.array([[2, 4], [1, 3], [0, 0], [0, 0]])
print(np.linalg.svd(A))
1
2
3
4
输出

(array([[-0.81741556, -0.57604844, 0. , 0. ],
[-0.57604844, 0.81741556, 0. , 0. ],
[ 0. , 0. , 1. , 0. ],
[ 0. , 0. , 0. , 1. ]]),
array([ 5.4649857 , 0.36596619]),
array([[-0.40455358, -0.9145143 ],
[-0.9145143 , 0.40455358]]))
1
2
3
4
5
6
7
END
---------------------
作者:secondsilverman
来源:CSDN
原文:https://blog.csdn.net/u010099080/article/details/68060274
版权声明:本文为博主原创文章,转载请附上博文链接!

奇异值分解 SVD 的数学解释的更多相关文章

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

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

  2. 矩阵奇异值分解(SVD)及其应用

    机器学习中的数学(5)-强大的矩阵奇异值分解(SVD)及其应用(好文) [简化数据]奇异值分解(SVD) <数学之美> 第15章 矩阵运算和文本处理中的两个分类问题

  3. 数学基础系列(六)----特征值分解和奇异值分解(SVD)

    一.介绍 特征值和奇异值在大部分人的印象中,往往是停留在纯粹的数学计算中.而且线性代数或者矩阵论里面,也很少讲任何跟特征值与奇异值有关的应用背景. 奇异值分解是一个有着很明显的物理意义的一种方法,它可 ...

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

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

  5. 奇异值分解(SVD) --- 几何意义

    原文:http://blog.sciencenet.cn/blog-696950-699432.html PS:一直以来对SVD分解似懂非懂,此文为译文,原文以细致的分析+大量的可视化图形演示了SVD ...

  6. 机器学习实战(Machine Learning in Action)学习笔记————10.奇异值分解(SVD)原理、基于协同过滤的推荐引擎、数据降维

    关键字:SVD.奇异值分解.降维.基于协同过滤的推荐引擎作者:米仓山下时间:2018-11-3机器学习实战(Machine Learning in Action,@author: Peter Harr ...

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

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

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

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

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

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

随机推荐

  1. ACGAN 论文笔记

    <Conditional Image Synthesis With Auxiliary Classifier GANs> Odena A, Olah C, Shlens J. Condit ...

  2. bzoj 5281: [Usaco2018 Open]Talent Show【dp】

    注意到sum_t比较小,所以设f[i][j]为选前i头牛,当前sum_t为j的最小sum_w值,转移是f[i][j]=min(f[i-1][j],f[i-1][j-t[i]]+w[i]),然后i维用滚 ...

  3. 洛谷 P3358 最长k可重区间集问题 【最大费用最大流】

    同 poj 3680 https:www.cnblogs.com/lokiii/p/8413139.html #include<iostream> #include<cstdio&g ...

  4. SpringBoot使用MongoDB

    一.什么是MongoDB MongoDB是一个基于分布式文件存储的数据库,由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的 ...

  5. Ubuntu 必装软件及安装教程

    安装搜狗拼音输入法 因为sogou是基于fcitx的,所以先添加fcitx键盘输入法系统[系统默认是iBus].在终端中,输入命令将下载源添加至系统源(添加依赖). sudo add-apt-repo ...

  6. 洛谷 P2312 解方程

    题目 首先,可以确定的是这题的做法就是暴力枚举x,然后去计算方程左边与右边是否相等. 但是noip的D2T3怎么会真的这么简单呢?卡常卡的真是熟练 你需要一些优化方法. 首先可以用秦九韶公式优化一下方 ...

  7. Ignatius and the Princess III HDU - 1028 || 整数拆分,母函数

    Ignatius and the Princess III HDU - 1028 整数划分问题 假的dp(复杂度不对) #include<cstdio> #include<cstri ...

  8. 题解报告:hdu 2069 Coin Change(暴力orDP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2069 Problem Description Suppose there are 5 types of ...

  9. 转-iOS开发系列--地图与定位

    来自: http://www.cnblogs.com/kenshincui/p/4125570.html#autoid-3-4-0 概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功 ...

  10. [转]Android项目快速开发框架探索(Mysql + OrmLite + Hessian + Sqlite)

    前言 结合之前所用的ormlite和hessian,再加上SAE已经支持JAVA,把服务端切换到JAVA,也就有了本文.使用hessian来做数据传输,ormlite来实现客户端与服务端的数据存储,极 ...