IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> SVD分解 -> 正文阅读

[人工智能]SVD分解

SVD分解

先来一道题开开胃
W = [ 4 0 5 0 0 5 ] W=\left[\begin{array}{lll}4 & 0 & 5 \\ 0 & 0 & 5\end{array}\right] \quad W=[40?00?55?] Find W = U Σ V T = λ 1 u ? 1 ( v ? 1 ) T + λ 2 u ? 2 ( v ? 2 ) T W=U \Sigma V^{T}=\sqrt{\lambda_{1}} \vec{u}_{1}\left(\vec{v}_{1}\right)^{T}+\sqrt{\lambda_{2}} \vec{u}_{2}\left(\vec{v}_{2}\right)^{T} W=UΣVT=λ1? ?u 1?(v 1?)T+λ2? ?u 2?(v 2?)T

C = W T W = V D V T = V Σ T Σ V T = ( V Σ T U T ) ( U Σ V T ) C=W^{T} W=V D V^{T}=V \Sigma^{T} \Sigma V^{T}=\left(V \Sigma^{T}U^{T}\right)\left(U \Sigma V^{T}\right) C=WTW=VDVT=VΣTΣVT=(VΣTUT)(UΣVT)

B = W W T = U D U T = U Σ T Σ U T = ( U Σ T V T ) ( V Σ U T ) B=W W^{T}=U D U^{T}=U \Sigma^{T} \Sigma U^{T}=\left(U \Sigma^{T} V^{T}\right)\left(V \Sigma U^{T}\right) B=WWT=UDUT=UΣTΣUT=(UΣTVT)(VΣUT)

B = [ 4 0 5 0 0 5 ] [ 4 0 0 0 5 5 ] = [ 41 25 25 25 ] = [ 0.81 ? 0.59 0.59 0.81 ] [ 59.2 0 0 6.75 ] [ 0.81 0.59 ? 0.59 0.81 ] B=\left[\begin{array}{lll}4 & 0 & 5 \\ 0 & 0 & 5\end{array}\right]\left[\begin{array}{ll}4 & 0 \\ 0 & 0 \\ 5 & 5\end{array}\right]=\left[\begin{array}{ll}41 & 25 \\ 25 & 25\end{array}\right]=\left[\begin{array}{cc}0.81 & -0.59 \\ 0.59 & 0.81\end{array}\right]\left[\begin{array}{cc}59.2 & 0 \\ 0 & 6.75\end{array}\right]\left[\begin{array}{cc}0.81 & 0.59 \\ -0.59 & 0.81\end{array}\right] B=[40?00?55?]???405?005????=[4125?2525?]=[0.810.59??0.590.81?][59.20?06.75?][0.81?0.59?0.590.81?]

求出特征值特征向量

[ 4 0 5 0 0 5 ] = [ 0.81 ? 0.59 0.59 0.81 ] [ 7.70 0 0 0 2.60 0 ] [ 0.42 0 0.91 ? 0.91 0 0.42 0 1 0 ] \left[\begin{array}{lll}4 & 0 & 5 \\ 0 & 0 & 5\end{array}\right]=\left[\begin{array}{cc}0.81 & -0.59 \\ 0.59 & 0.81\end{array}\right]\left[\begin{array}{ccc}7.70 & 0 & 0 \\ 0 & 2.60 & 0\end{array}\right]\left[\begin{array}{ccc}0.42 & 0 & 0.91 \\ -0.91 & 0 & 0.42 \\ 0 & 1 & 0\end{array}\right] [40?00?55?]=[0.810.59??0.590.81?][7.700?02.60?00?]???0.42?0.910?001?0.910.420????

= 7.70 [ 0.81 0.59 ] [ 0.42 0 0.91 ] + 2.6 [ 0.59 0.81 ] [ ? 0.91 0 0.42 ] =7.70\left[\begin{array}{l}0.81 \\ 0.59\end{array}\right]\left[\begin{array}{lll}0.42 & 0 & 0.91\end{array}\right]+2.6\left[\begin{array}{l}0.59 \\ 0.81\end{array}\right]\left[\begin{array}{lll}-0.91 & 0 & 0.42\end{array}\right] =7.70[0.810.59?][0.42?0?0.91?]+2.6[0.590.81?][?0.91?0?0.42?]

= [ 2.62 0 5.68 1.91 0 4.12 ] + [ 1.38 0 ? 0.64 ? 1.91 0 0.88 ] =\left[\begin{array}{lll}2.62 & 0 & 5.68 \\ 1.91 & 0 & 4.12\end{array}\right]+\left[\begin{array}{ccc}1.38 & 0 & -0.64 \\ -1.91 & 0 & 0.88\end{array}\right] =[2.621.91?00?5.684.12?]+[1.38?1.91?00??0.640.88?]

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

1.回顾特征值和特征向量

首先回顾下特征值和特征向量的定义如下:

A x = λ x A x=\lambda x Ax=λx

其中 A A A 是一个 n × n n \times n n×n 矩阵, x x x 是一个 n n n 维向量,则 λ \lambda λ 是矩阵 A A A 的一个特征值,而 x x x 是矩阵 A A A 的特征值 λ \lambda λ 所对应的特征向量

求出特征值和特征向量有什么好处呢? 就是我们可以将矩阵 A A A 特征分解。如果我们求出了矩阵 A A A 的n个特征值 λ 1 ≤ λ 2 ≤ … ≤ λ n \lambda_{1} \leq \lambda_{2} \leq \ldots \leq \lambda_{n} λ1?λ2?λn?,以及这 n n n 个特征值所对应的特征向量 w 1 , w 2 , … , w n w_{1}, w_{2}, \ldots, w_{n} w1?,w2?,,wn?

那么矩阵A就可以用下式的特征分解表示:
A = W Σ W ? 1 A=W \Sigma W^{-1} A=WΣW?1

其中 W W W 是这 n n n 个特征向量所张成的 n × n n×n n×n维矩阵,而 Σ \Sigma Σ 为这 n n n个特征值为主对角线的 n × n n×n n×n维矩阵。

一般我们会把 W W W的这 n n n个特征向量标准化,即满足 ∥ w i ∥ 2 = 1 \left\|w_{i}\right\|_{2}=1 wi?2?=1 ,或者 w i T w i = 1 w_{i}^{T} w_{i}=1 wiT?wi?=1,此时 W W W n n n 特征向量为标准正交基,满足 W T W = I W^{T} W=I WTW=I ,即 W T = W ? 1 W^{T}=W^{-1} WT=W?1,也就是说 W W W 为酉矩阵。

这样我们的特征分解表达式可以写成

A = W Σ W T A=W \Sigma W^{T} A=WΣWT

注意到要进行特征分解,矩阵A必须为方阵
那么如果A不是方阵,即行和列不相同时,我们还可以对矩阵进行分解吗?答案是可以,此时我们的SVD登场了。

2. SVD定义

SVD也是对矩阵进行分解,但是和特征分解不同,SVD并不要求要分解的矩阵为方阵。假设我们的矩阵A是一个m×n的矩阵,那么我们定义矩阵A的SVD为:

A = U Σ V T A=U \Sigma V^{T} A=UΣVT

其中 U U U 是一个 m × m m \times m m×m 的矩阵, Σ \Sigma Σ 是一个 m × n m \times n m×n 的矩阵,除了主对角线上的元素以外全为 0 0 0,主对角线上的每个元素都称为奇异值, V V V 是一个 n × n n \times n n×n 的矩阵。 U U U V V V 都是酉矩阵,即满足。

下图可以很形象的看出上面SVD的定义:

U T U = I , V T V = I U^{T} U=I, V^{T} V=I UTU=I,VTV=I

那么我们如何求出SVD分解后的 U , Σ , V U,Σ,V U,Σ,V这三个矩阵呢?

如果我们将 A A A的转置和 A A A做矩阵乘法,那么会得到 n × n n×n n×n的一个方阵 A T A A^{T} A ATA 。既然 A T A A^{T} A ATA是方阵,那么我们就可以进行特征分解,得到的特征值和特征向量满足下式:

( A T A ) v i = λ i v i \left(A^{T} A\right) v_{i}=\lambda_{i} v_{i} (ATA)vi?=λi?vi?

这样我们就可以得到矩阵 A T A A^{T} A ATA n n n个特征值和对应的 n n n个特征向量 v v v了。将 A T A A^{T} A ATA 的所有特征向量张成一个 n × n n×n n×n的矩阵 V V V,就是我们SVD公式里面的 V V V矩阵了。一般我们将 V V V中的每个特征向量叫做 A A A右奇异向量

如果我们将 A A A A A A的转置做矩阵乘法,那么会得到 m × m m×m m×m的一个方阵 A A T A A^{T} AAT。既然 A A T A A^{T} AAT 是方阵,那么我们就可以进行特征分解,得到的特征值和特征向量满足下式:
( A A T ) u i = λ i u i \left(A A^{T}\right) u_{i}=\lambda_{i} u_{i} (AAT)ui?=λi?ui?

这样我们就可以得到矩阵 A A T AA^{T} AAT m m m个特征值和对应的 m m m个特征向量 u u u了。将 A A T AA^{T} AAT 的所有特征向量张成一个 m × m m×m m×m的矩阵 U U U,就是我们SVD公式里面的 U U U矩阵了。一般我们将 U U U中的每个特征向量叫做 A A A左奇异向量

U U U V V V我们都求出来了,现在就剩下奇异值矩阵 Σ Σ Σ没有求出了.

由于 Σ Σ Σ除了对角线上是奇异值其他位置都是0,那我们只需要求出每个奇异值 σ σ σ就可以了。

我们注意到:

A = U Σ V T ? A V = U Σ V T V ? A V = U Σ ? A v i = σ i u i ? σ i = A v i / u i A=U \Sigma V^{T} \Rightarrow A V=U \Sigma V^{T} V \Rightarrow A V=U \Sigma \Rightarrow A v_{i}=\sigma_{i} u_{i} \Rightarrow \sigma_{i}=A v_{i} / u_{i} A=UΣVT?AV=UΣVTV?AV=UΣ?Avi?=σi?ui??σi?=Avi?/ui?

这样我们可以求出我们的每个奇异值,进而求出奇异值矩阵 Σ Σ Σ

上面还有一个问题没有讲,就是我们说 A T A A^{T}A ATA 的特征向量组成的就是我们SVD中的 V V V矩阵,而 A A T AA^{T} AAT的特征向量组成的就是我们SVD中的 U U U矩阵,这有什么根据吗?这个其实很容易证明,我们以 V V V矩阵的证明为例。

A = U Σ V T ? A T = V Σ U T ? A T A = V Σ U T U Σ V T = V Σ 2 V T A=U \Sigma V^{T} \Rightarrow A^{T}=V \Sigma U^{T} \Rightarrow A^{T} A=V \Sigma U^{T} U \Sigma V^{T}=V \Sigma^{2} V^{T} A=UΣVT?AT=VΣUT?ATA=VΣUTUΣVT=VΣ2VT

类似的方法可以得到 A A T AA^{T} AAT的特征向量组成的就是我们SVD中的 U U U 矩阵。

进一步我们还可以看出我们的特征值矩阵等于奇异值矩阵的平方,也就是说特征值和奇异值满足如下关系:
σ i = λ i \sigma_{i}=\sqrt{\lambda_{i}} σi?=λi? ?

这样也就是说,我们可以用 σ i = A v i u i \sigma_{i}=\frac{A v_{i}}{u_{i}} σi?=ui?Avi?? 来计算奇异值,也可以通过求出 A T A A^{T} A ATA 的特征值取平方根来求奇异值。

https://zhuanlan.zhihu.com/p/29846048

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-08-28 09:00:22  更:2021-08-28 09:21:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/1 10:22:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码