SVD奇异值分解之阿前爱上阿丽

前言

奇异值分解(SVD,singular value decomposition),是一种在机器学习领域被广泛使用的算法,它主要用于降维提取特征,因此在高维数据处理方面有着非常重要的地位。本文将在详细介绍SVD原理的基础上,尝试以简单“相亲系统”为例,具体演示如何在实际中运用SVD。

1. SVD是什么?

1.1 SVD定义

假设存在一个矩阵 A m × n A_{m\times n} Am×n ,我们可以把这个矩阵A分解为如下的形式:

(1) A m × n = U m × m Σ m × n ( V n × n ) T A_{m\times n} = U_{m\times m}\Sigma_{m\times n}(V_{n\times n})^T \tag{1} Am×n=Um×mΣm×n(Vn×n)T(1)

其中,U和V分别是酉矩阵 Σ \Sigma Σ 是对角阵,对角线上每个值就叫奇异值。把矩阵A像(1)这样分解的过程就叫奇异值分解。

为了之后讨论方便,我们也可以把(1)写成如下形式:

(2) A = [ u 1 u 2 ] [ σ 1 0 0 σ 2 ] [ v 1 T v 2 T ] A = \left[u_1 \quad u_2 \right] \left[\begin{matrix}\sigma_1 \quad 0\\ 0 \quad \sigma_2 \end{matrix} \right] \left[\begin{matrix}v^T_1 \\v^T_2\end{matrix} \right]\tag2{} A=[u1u2][σ100σ2][v1Tv2T](2)

其中, u 1 u_1 u1 u 2 u_2 u2 σ 1 \sigma_1 σ1 σ 2 \sigma_2 σ2 v 1 v_1 v1 v 2 v_2 v2均为 矩阵(千万注意!!!这些是矩阵!!!是矩阵!!!矩阵!!!只是我把(1)写成了分块矩阵的形式!!!)

2. 为什么要SVD

2.1 为什么需要降维

首先我们看下在实际运用中我们为什么需要降维。这里让我举一个Youtube上的例子
图1

如上图所示,考虑一个没有能量损失的简谐运动,我们以弹簧伸长压缩方向为数轴方向,那么最终的位置方程可以表示为:
f ( t ) = A cos ⁡ ( ω t + ω 0 ) f(t) = A\cos(\omega t+ \omega_0) f(t)=Acos(ωt+ω0)

现在假设我们在没有胡克的另一个平行宇宙,并且我们没有这样一个完美的公式,那么我们怎么样来描述这个简谐运动呢?实际上我们可以固定采样频率 S f S_f Sf,还是以弹簧伸长压缩方向建立坐标系,并记录一组数值序列。最后通过对这个一维的数值序列建模来近似求得一个方程。
这样做的前提是我们以弹簧伸长方向建立了坐标系,但如果我们并不知道应该以什么方向建立坐标系呢?考虑下面的模型:
在这里插入图片描述

如图,我们在弹簧周围安装了3个照相机,并在每个照相机的屏幕上建立x-y坐标系。3个照相机每隔相同时间进行拍照,记录小物块在各自坐标系中的位置。现在我们记录的数据从原来的每个时间点用一个数值表示变成了每个时间点需要六个数值,即从一维到了六维:

C a m e r a 1 : ( x a , y a ) Camera\quad1:(x_a,y_a) Camera1:(xa,ya)
C a m e r a 2 : ( x b , y b ) Camera\quad2:(x_b,y_b) Camera2:(xb,yb)
C a m e r a 1 : ( x c , y c ) Camera\quad1:(x_c,y_c) Camera1:(xc,yc)
X = [ x a ⃗ y a ⃗ x b ⃗ y b ⃗ x c ⃗ y c ⃗ ] X = \left[\begin{matrix} \vec {x_a} \\ \vec {y_a} \\ \vec {x_b} \\ \vec {y_b} \\ \vec {x_c} \\ \vec {y_c} \\\end{matrix} \right] X=xa ya xb yb xc yc

对于上面的六维数据(X是一个矩阵),我们当然也可以进行建模。但这时候会有两个主要问题:

  1. 噪声。
    测量数据本身存在噪声,即测量值和真实值之间存在误差,比如上述模型中每个照相机都会存在误差。原本我们可能只会引入一个维度数据的噪音,而现在我们引入了六个。
  2. 数据冗余。
    我们知道这里这三个照相机的数据之间明显存在冗余,并且每个照相机的x-y轴数据也是线性相关的。

这就是为什么我们需要降维:一是尽量减少噪声所带来的干扰,这有助于我们建立更加准确的模型;二是减少冗余,有助于压缩;此外,降维后的三个矩阵都是有实际意义的,不要着急,让我们一步一步来讨论。

2.2 为什么说(1)是降维

可能你会有疑问,经过(1)的分解之后,矩阵A并没有得到简化啊,为什么说是降维呢?或许在有的地方你也会看到有的人在解释SVD时的分解形式并不是如(1)所示,而是如下形式:

(3) A m × n = U m × k Σ k × k ( V n × k ) T A_{m\times n} = U_{m\times k}\Sigma_{k\times k}(V_{n\times k})^T \tag{3} Am×n=Um×kΣk×k(Vn×k)T(3)

经过(3)之后,使得原来的n个属性被降维到了k个属性(k<n),实现了我们的目标:降维提取特征(为什么是特征后面会具体解释)。但实际上(3)并不是严格意义上的SVD,它已经经过了一定的处理,严格来说(3)并不成立,只是一个近似。而(1)则具有严格的数学证明,后面我们也会说怎么样从(1)到(3)实现真正降维。

现在我们知道了,SVD可以降维,而我们想要降维,所以我们需要SVD!!!

3. 为什么矩阵A一定能按(1)分解

很多人在刚学习SVD时不是很理解为什么我们一定能找到(1)中的矩阵U、 Σ \Sigma Σ 和V,这一节就专门来证明这件事情。这部分证明需要一定的线代知识,我已经先把证明过程可能会涉及的相关名词列了出来,即使你不知道它们的含义也没关系,不需要急着去维基。这里我主要列了三个证明,证明过程也只写了最后一个,因为怎么证明已经有无数前人做过了,我做的是尽量解释为什么我们需要这个证明得证。你可以看我为什么想要证明这个?证明之后能得到什么?然后再去看证明过程,如果这当中你有什么不知道的概念或者思路不连贯的地方再去百科。
当然也可以选择先跳过这部分证明,并假设我们已经找到了形如(1)的矩阵,这基本不会影响理解。可以在看了例子之后再回过头来看证明过程。
好了,下面开始这部分内容。首先,我们需要列举几个和向量、矩阵有关系的名词和性质:

3.1 向量

我们把每一个数据表示成列向量的形式,即n维向量 x ⃗ = ( x 1 x 2 ⋮ x n ) \vec{x} = \left( \begin{matrix} x_1 \\x_2 \\ \vdots \\x_n\end{matrix} \right) x =x1x2xn

3.2 矩阵

我们把矩阵看成是坐标变换的过程,即对一个k*n的矩阵,我们把它看成是从n维到k维的坐标变换。举一个例子,假设我们未变换前的坐标系是标准的笛卡尔坐标系XOY。而新的坐标系如下图所示,即 i n e w ⃗ = i ⃗ + j ⃗ \vec{i_{new} }= \vec{i} +\vec{j} inew =i +j j n e w ⃗ = j ⃗ \vec{j_{new} }= \vec{j} jnew =j
那么我们的坐标变换矩阵为:
[ 1 1 0 1 ] \left[\begin{matrix}1 &amp;1\\0&amp;1 \end{matrix} \right] [1011]

3.3 共轭转置

3.4 正规矩阵(normal matrix)

3.5 特征值(eigenvalue),特征向量(eigenvector)

3.6 正定矩阵(positive definite matrix)

3.7 正交矩阵(orthogonal matrix)

3.8 酉矩阵(unitary matrix)

3.9 可对角化矩阵

3.10 实对称矩阵

3.11 三个关键证明

1. 证明:n阶实对称矩阵一定可以对角化

如果这个证明得证,那么对于(1)来说,也就是 A A T AA^T AAT这个实对称矩阵( A A T AA^T AAT的转置是它本身​)必可以对角化;同理,​ A T A A^TA ATA必可以对角化。

2. 证明:n阶实对称矩阵可用正交矩阵对角化

如果这个证明得证,那么对于(1)来说, A T A = ( V Σ T U T ) ( U Σ V T ) = V Σ T Σ V T A^TA =(V\Sigma^T U^T)(U\Sigma V^T)=V\Sigma^T \Sigma V^T ATA=(VΣTUT)(UΣVT)=VΣTΣVT中的V就可以是这个正交矩阵;而U就是 A T A A^TA ATA所对应的正交矩阵。
更进一步, Σ T Σ \Sigma^T \Sigma ΣTΣ就是 A T A A^TA A

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值