o365邮箱登录-365bet提款速度-外勤365官方网站

一文弄懂奇异值分解(SVD)原理及应用

一文弄懂奇异值分解(SVD)原理及应用

以下内容参考于知乎奇异值分解(SVD)学习笔记以及矩阵分析之奇异值分解(SVD),总结如下:

1 简介

奇异值分解(Singular Value Decomposition,以下简称SVD) 是在机器学习领域广泛应用的算法, 是一种提取信息的强大工具,它提供了一种非常便捷的矩阵分解的方式,能够发现数据中十分有意思的潜在模式。本文就对SVD的原理做一个介绍,并给出实际的使用案例。

2 特征值和特征向量

在做 SVD 推导之前,先了解一下特征值和特征向量的定义:

A

x

=

λ

x

Ax=\lambda x

Ax=λx

其中 A 是一个

n

×

n

n\times n

n×n 的矩阵,

x

x

x 是一个 n 维向量,则

λ

\lambda

λ 是矩阵 A 的一个特征值,而

x

x

x 是矩阵 A 的特征值

λ

\lambda

λ 所对应的特征向量。

求出特征值和特征向量有什么好处呢? 就是我们可以将矩阵A特征分解。

也就是说矩阵A的信息可以由其特征值和特征向量表示。

如果我们求出了矩阵A的n个特征值

λ

1

λ

2

.

.

.

λ

n

\lambda_{1}\leq \lambda_{2}\leq... \leq \lambda_{n}

λ1​≤λ2​≤...≤λn​ ,以及这 n 个特征值所对应的特征向量

w

1

,

w

2

,

.

.

.

,

w

n

{{ w_{1},w_{2}},...,w_{n}}

w1​,w2​,...,wn​ ,

那么矩阵 A 就可以用下式的特征分解表示: 其中 W 是这 n 个特征向量所张成的

n

×

n

n\times n

n×n 维矩阵,而 Σ 为这 n 个特征值为主对角线的

n

×

n

n\times n

n×n 维矩阵。

一般我们会把W的这n个特征向量标准化,即满足

w

i

2

=

1

\left| \left| w_{i} \right| \right|_{2}=1

∣∣wi​∣∣2​=1 ,或者

w

i

T

w

i

=

1

w_{i}^{T}w_{i}=1

wiT​wi​=1 ,此时W的 n个特征向量为标准正交基,满足

W

T

W

=

I

W^{T}W=I

WTW=I ,即

W

T

=

W

1

W^{T}=W^{-1}

WT=W−1 ,也就是说W为酉矩阵。

正交矩阵(Orthogonal Matrix)是指其转置等于其逆的矩阵

A

T

=

A

1

A^T=A^{-1}

AT=A−1 酉矩阵是正交矩阵往复数域上的推广

这样我们的特征分解表达式可以写成 总结一下,特征值分解可以得到特征值与特征向量,特征值表示的是这个特征到底有多重要,而特征向量表示这个特征是什么。不过,特征值分解也有很多的局限,比如说变换的矩阵必须是方阵。

3 SVD分解

特征值分解是一个提取矩阵特征很不错的方法,但是它只是对方阵而言的,在现实的世界中,我们看到的大部分矩阵都不是方阵,比如说有M个学生,每个学生有N科成绩,这样形成的一个 M* N 的矩阵 A 就不可能是方阵,我们怎样才能描述这样普通的矩阵的重要特征呢?奇异值分解是一个能适用于任意的矩阵的一种分解的方法: 其中 U 是一个

m

×

m

m\times m

m×m 的矩阵,

Σ

\Sigma

Σ 是一个

m

×

n

m\times n

m×n 的矩阵,除了主对角线上的元素以外全为 0,主对角线上的每个元素都称为奇异值, V 是一个

n

×

n

n\times n

n×n 的矩阵。 U 和 V 都是酉矩阵,即满足:

U

T

U

=

I

,

V

T

V

=

I

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

UTU=I,VTV=I 下图可以很形象的看出上面SVD的定义: 那么我们如何求出SVD分解后的U,Σ,V这三个矩阵呢?

如果我们将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

A^{T}A

ATA 的 n 个特征值和对应的n个特征向量v了。将

A

T

A

A^{T}A

ATA 的所有特征向量张成一个

n

×

n

n×n

n×n的矩阵V,就是我们SVD公式里面的V矩阵了。一般我们将V中的每个特征向量叫做A的右奇异向量。

如果我们将A和A的转置做矩阵乘法,那么会得到

m

×

m

m×m

m×m 的一个方阵

A

A

T

AA^{T}

AAT 。既然

A

A

T

AA^{T}

AAT 是方阵,那么我们就可以进行特征分解,得到的特征值和特征向量满足下式: 这样我们就可以得到矩阵

A

A

T

AA^{T}

AAT 的m个特征值和对应的m个特征向量u了。将

A

A

T

AA^{T}

AAT 的所有特征向量张成一个

m

×

m

m×m

m×m的矩阵U,就是我们SVD公式里面的U矩阵了。一般我们将U中的每个特征向量叫做A的左奇异向量。

U和V我们都求出来了,现在就剩下奇异值矩阵 Σ 没有求出了,由于 Σ 除了对角线上是奇异值其他位置都是0,那我们只需要求出每个奇异值 σ 就可以了。

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

上面还有一个问题没有讲,就是我们说

A

T

A

A^{T}A

ATA 的特征向量组成的就是我们SVD中的V矩阵,而

A

A

T

AA^{T}

AAT 的特征向量组成的就是我们SVD中的U矩阵,这有什么根据吗?这个其实很容易证明,我们以V矩阵的证明为例。 上式证明使用了

U

U

=

I

,

Σ

T

=

Σ

U^{U}=I,\Sigma^{T}= \Sigma

UU=I,ΣT=Σ 。可以看出

A

T

A

A^{T}A

ATA 的特征向量组成的的确就是我们SVD中的V矩阵。类似的方法可以得到

A

A

T

AA^{T}

AAT 的特征向量组成的就是我们SVD中的U矩阵。

进一步我们还可以看出我们的特征值矩阵等于奇异值矩阵的平方,也就是说特征值和奇异值满足如下关系: 这样也就是说,我们可以不用

σ

i

=

A

v

i

u

i

\sigma_{i}=\frac{Av_{i}}{u_{i}}

σi​=ui​Avi​​ 来计算奇异值,也可以通过求出

A

T

A

A^{T}A

ATA 的特征值取平方根来求奇异值。

4 SVD计算举例

对于矩阵A的奇异值,我们可以先通过 wolframalpha 计算出来: 手工计算步骤:

矩阵分析之奇异值分解(SVD) https://www.bilibili.com/video/av15971352/?p=5

如上图,我们可以看出SVD可以把矩阵分割成不同的矩阵相加,而分割后前面的系数就是SVD值,对于奇异值,它跟我们特征分解中的特征值类似,在奇异值矩阵中也是按照从大到小排列,而且奇异值的减少特别的快,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上的比例。

也就是说,我们也可以用最大的k个的奇异值和对应的左右奇异向量来近似描述矩阵。

由于这个重要的性质,SVD可以用于PCA降维,来做数据压缩和去噪,也可以用于推荐算法,将用户和喜好对应的矩阵做特征分解,进而得到隐含的用户需求来做推荐。

5 SVD用于PCA

PCA降维,需要找到样本协方差矩阵

X

T

X

X^{T}X

XTX 的最大的 d 个特征向量,然后用这最大的d个特征向量张成的矩阵来做低维投影降维。可以看出,在这个过程中需要先求出协方差矩阵

X

T

X

X^{T}X

XTX ,当样本数多样本特征数也多的时候,这个计算量是很大的。

注意到我们的SVD也可以得到协方差矩阵

X

T

X

X^{T}X

XTX 最大的d个特征向量张成的矩阵,但是SVD有个好处,有一些SVD的实现算法可以不求先求出协方差矩阵

X

T

X

X^{T}X

XTX ,也能求出我们的右奇异矩阵V。

也就是说,我们的PCA算法可以不用做特征分解,而是做SVD来完成,这个方法在样本量很大的时候很有效。

实际上,scikit-learn的PCA算法的背后真正的实现就是用的SVD,而不是我们我们认为的暴力特征分解。

另一方面,注意到PCA仅仅使用了我们SVD的右奇异矩阵,没有使用左奇异矩阵,那么左奇异矩阵有什么用呢?

假设我们的样本是

m

×

n

m×n

m×n 的矩阵X,如果我们通过SVD找到了矩阵

X

X

T

XX^{T}

XXT 最大的d个特征向量张成的

m

×

d

m×d

m×d 维矩阵U,则我们如果进行如下处理: 可以得到一个

d

×

n

d×n

d×n 的矩阵X‘, 这个矩阵和我们原来的

m

×

n

m×n

m×n 维样本矩阵X相比,行数从m减到了k,可见对行数进行了压缩。

左奇异矩阵可以用于行数的压缩。

右奇异矩阵可以用于列数即特征维度的压缩,也就是我们的PCA降维。

6 总结

1.SVD分解是将一个矩阵分解为它的左特征空间矩阵和右特征空间矩阵,而中间的特征值矩阵则是代表着权值,因此我们每次只要选取那些重要的特征留存下来,就可以几乎没有损耗的还原原矩阵;

2.SVD分解可以看成是原矩阵的一种低秩表达;

3.SVD可以用于数据的去噪;

4.SVD可以用于特征维度的压缩;

相关推荐
发现 la Sicile
外勤365官方网站

发现 la Sicile

📅 07-26 🔥 696
魏晨是哪里的人
365bet提款速度

魏晨是哪里的人

📅 07-09 🔥 875
微信中如何打出繁体字 微信中打出繁体字方法
365bet提款速度

微信中如何打出繁体字 微信中打出繁体字方法

📅 07-21 🔥 852
石上真男人
365bet提款速度

石上真男人

📅 08-02 🔥 89
流放之路1开荒大概需要多久,新人第一次玩
365bet提款速度

流放之路1开荒大概需要多久,新人第一次玩

📅 08-03 🔥 651