特征值分解与奇异值分解及其应用

SVD奇异值分解


正交矩阵

正交矩阵

  正交矩阵对应着正交变换,特点在于不改变向量的尺寸(模)和任意两个向量的夹角。在x-y坐标系中,通俗地讲,就是旋转两个坐标轴,得到新的互相垂直的坐标轴,求向量在新坐标系中的投影。

正交变换举例


  图片摘自此处。 例如向量 OA O A ,在原始 e1e2 e 1 − e 2 坐标系中表示为 (a,b)T ( a , b ) T ,在旋转后的坐标系 e1e2 e 1 ′ − e 2 ′ 中表示为 (a,b)T ( a ′ , b ′ ) T ,若存在一个矩阵 U U 使得(a,b)T=U(a,b)T,则矩阵 U U 是正交矩阵(可见对应着坐标系之间的正交变换)。
  可以代入求得矩阵U,且可观察到矩阵的行向量之间都是正交的,列向量之间也是正交的。

U=[cosθsinθsinθcosθ] U = [ cos ⁡ θ sin ⁡ θ − sin ⁡ θ cos ⁡ θ ]

正交矩阵的性质

正交阵的逆等于其转置

ATA=IAT=A1 A T A = I → A T = A − 1


特征值分解

特征值分解

   A A N×N 满秩对称方阵(对称阵的特征向量之间两两正交),有 N N 个特征值λi,对应 N N 个特征向量qi,有:

Aq1=λ1q1Aq2=λ2q2AqN=λNqN { A q 1 = λ 1 q 1 A q 2 = λ 2 q 2 ⋯ A q N = λ N q N

  可以理解为向量 qi q i A A 的作用下,保持方向不变,只进行比例为λi的缩放。特征向量所在的直线包含了所有特征向量(称为特征空间)。
  以上 N N 个等式写成矩阵形式(qi N×1 N × 1 的列向量!)
A[q1,q2,,qN]=[q1,q2,,qN]λ100λNAQ=QΛ A [ q 1 , q 2 , ⋯ , q N ] = [ q 1 , q 2 , ⋯ , q N ] [ λ 1 ⋯ 0 ⋮ ⋱ ⋮ 0 ⋯ λ N ] A Q = Q Λ

  等式两边右乘 Q Q 的逆,得到A的特征值分解:
A=QΛQ1 A = Q Λ Q − 1

  进一步,由于特征向量矩阵 Q Q 各列相互正交,所以Q是正交阵,正交阵的逆等于其转置:

A=QΛQT A = Q Λ Q T

A=[q1,q2,,qN]λ100λN[q1,q2,,qN]T A = [ q 1 , q 2 , ⋯ , q N ] [ λ 1 ⋯ 0 ⋮ ⋱ ⋮ 0 ⋯ λ N ] [ q 1 , q 2 , ⋯ , q N ] T

特征值分解的几何意义

  矩阵 A A 是一个既有旋转又有缩放的变换,用A对向量 x x 进行矩阵变换Ax,即对它进行旋转操作和缩放操作。整个过程在矩阵做EVD之后,可以看成 QΛQTx Q Λ Q T x ,即 x x 依次经过QT Λ Λ Q Q 的变换,特别地,如果x恰与矩阵 A A 的某个特征向量平行,那么它将不会发生旋转,只发生缩放。

  1. QTx:将 x x 由原始空间变换到由Q各两两正交的特征向量构成的空间中

    • ΛQTx Λ Q T x :将变换后的 x x 在特征空间中缩放,轴qi的缩放因子正是对应的特征值 λi λ i
    • QΛQTx Q Λ Q T x :将缩放过的 x x 变换回原始空间

矩阵变换举例

A=[1112]x=[0,1]T


奇异值分解SVD

SVD定义

M×N M × N 矩阵 A A 的SVD:

A=UVT

SVD推导

  首先把 A A 变成N×N方阵 ATA A T A ,于是就能做EVD:

(ATA)vi=λivi(ATA)V=VΛ ( A T A ) v i = λ i v i ( A T A ) V = V Λ

  然后把 A A 变成方阵M×M,于是就又能做EVD:

(AAT)ui=λiui(AAT)U=UΛ ( A A T ) u i = λ i u i ( A A T ) U = U Λ

  非方阵的秩最多为M和N较小值,两种情况下非零特征值是一样的,多余的特征值都是0。现在假设 A A 可以分解成A=UVT的形式,现在求出这三部分:

AT=VUTATA=V()2VTAAT=U()2UT A T = V ′ ∑ ′ U ′ T A T A = V ′ ( ∑ ′ ) 2 V ′ T A A T = U ′ ( ∑ ′ ) 2 U ′ T

所以 V=V V ′ = V U=U U ′ = U =Λ ∑ ′ = Λ ,也就是说中间对角矩阵 的元素可以这样求:
σi=λi σ i = λ i

SVD性质

  对角阵 的奇异值从左上到右下按从大到小排序,一般来说少量几个奇异值(例如 k k 个)就占据了奇异值之和的绝大部分,因此可以只用这k个奇异值和对应的左右特征向量表示原矩阵 A A

A=UM×MM×NVN×NTUM×kk×kVk×NT

总结

  SVD可以把任意形状的矩阵分解成 A=UVT A = U ∑ V T 的形式, U U V都是有特征值分解得到的特征向量矩阵,它们都是正交阵, 可以由特征值开平方得到。只选择较大的奇异值就能很好地表示原矩阵。


EVD应用-PCA

初衷——最大方差投影

  希望找到一个新的正交坐标系,将样本变换过去(投影过去),使得所有样本之间尽可能地分开(方差最大)。

  1. 样本集 X X 在坐标系W(W的每行就是一个标准正交基,即两两之间正交,且模为1)下的投影是 WTX W T X (原因参见正交变换)
  2. 假设样本是去中心化的(均值为0),投影的方差为 WTXXTW W T X X T W
  3. 写出有约束优化问题

maxs.t.tr(WTXXTW)WTW=I max t r ( W T X X T W ) s . t . W T W = I

用拉格朗日乘子法求解:

L(W)=WTXXTW+λ(IWTW)L(W)W=2XTXW2λW(XTX)W=λW L ( W ) = W T X X T W + λ ( I − W T W ) ∂ L ( W ) ∂ W = 2 X T X W − 2 λ W ( X T X ) W = λ W

  如此可见,我们所需的新坐标系正是样本协方差 XTX X T X d×d d × d )做特征值分解后的特征向量矩阵。总结一下PCA的流程:首先样本去中心化,然后计算样本协方差 XTX X T X ,再对 XTX X T X 做EVD,选取最大的部分特征值所对应的特征向量,构成投影矩阵 W W


SVD应用-LSA潜在语义分析

构造单词-文档矩阵

  假设有D(Document)篇文章,每篇文章都是由很多个单词构成的结构(bag-of-words,单词的位置不重要,只关心数量),而单词来自于一个大小为 W W (Word)的字典,则构造W×D矩阵,第 i i 行第j列表示单词 Wi W i 在文档 j j 中出现的次数(或者tf-idf)。通常来说,该矩阵会相当地稀疏。
  具体地,会先遍历所有文章进行分词,在这个过程中过滤掉停止词(例如a、the之类的)和标点等,然后进行词频计数等操作。

SVD

  将单词-文档矩阵进行SVD,并且只选取部分足够大的奇异值(例如k个),对应于不同的主题(语义):

AW×D=UW×kSk×kVTD×k A W × D = U W × k S k × k V D × k T

  其中 UW×k U W × k 描述了每个单词与不同主题之间的关系, Sk×k S k × k 描述了主题本身, VD×k V D × k 描述了每篇文章与不同主题之间的关系。我们可以从 UW×k U W × k 挖掘同义词,从 VD×k V D × k 挖掘相似文档。那么到底为什么需要做SVD呢?是因为单纯地统计词频或tf-idf并不能描述单词之间或文本之间的关系。然而SVD有一个问题,就是每一个语义具体是什么不可解释,只知道他们是互相正交的。

从SVD到SVD++

SVD在电影推荐中的应用
问题提出
  1. 稀疏矩阵没法直接SVD,有很多数据是缺失的
  2. SVD很慢,超过1000维的矩阵做SVD已经相当慢了
电影推荐

  现有一个矩阵,行表示用户,列表示电影,矩阵中每个元素表示某个用户对某个电影的打分,显然这个矩阵是极其稀疏的(不是每个用户都看过所有电影的,大多只看过几部),有大量缺失值。现在的问题是,如何预测这些缺失值?即如何预测一个用户对他没看过的电影的评分?
  首先,如果把U乘S看成一个矩阵,则SVD可以写成两个矩阵相乘:

AW×D=[UW×kSk×k]VTD×k A W × D = [ U W × k S k × k ] V D × k T

  那么电影评分矩阵也存在这种分解:

RU×M=PU×kQk×M R U × M = P U × k Q k × M

  现在P和Q是未知的,如果能通过R中已知的评分训练P和Q,使得P和Q相乘的结果能最好地拟合R中未缺失值,则缺失值就可以通过P的一行乘上Q的一列得到:

r^um=pTuqm r ^ u m = p u T q m

P和Q的训练(基于梯度下降法):Basic SVD

  要拟合真实的已知评分 rum r u m ,选取平方误差:

E=12um(rumr^um)2=12um(rumjpujqjm)2 E = 1 2 ∑ u ∑ m ( r u m − r ^ u m ) 2 = 1 2 ∑ u ∑ m ( r u m − ∑ j p u j q j m ) 2

  计算梯度(当然只能代入R矩阵中 rum r u m 有取值的计算),漂亮的对称结构:

Epuk=(rumr^um)qkm=eumqkmEqkm=(rumr^um)puk=eumpuk ∂ E ∂ p u k = − ( r u m − r ^ u m ) q k m = − e u m q k m ∂ E ∂ q k m = − ( r u m − r ^ u m ) p u k = − e u m p u k

  接下来只需要将P和Q用随机数初始化,然后梯度下降迭代即可。

P和Q的训练:RSVD

  引入正则化:

E=12u,me2um+12λu,kp2uk+12λk,mq2km E = 1 2 ∑ u , m e u m 2 + 1 2 λ ∑ u , k p u k 2 + 1 2 λ ∑ k , m q k m 2

  计算梯度:

Epuk=(rumr^um)qkm=eumqkm+λpukEqkm=(rumr^um)puk=eumpuk+λqkm ∂ E ∂ p u k = − ( r u m − r ^ u m ) q k m = − e u m q k m + λ p u k ∂ E ∂ q k m = − ( r u m − r ^ u m ) p u k = − e u m p u k + λ q k m

有偏置的RSVD:RSVD 改

  用户对电影的打分不仅取决于用户与电影之间的关系,还应该受到用户自身 bu b u 和电影自身性质 bm b m 的影响:

r^um=pTuqm+bu+bm+μ r ^ u m = p u T q m + b u + b m + μ

  其中 μ μ 是全局平均分,他描述了整个打分网站的整体打分水平。
  引入正则化和惩罚:

E=12u,me2um+12λu,kp2uk+12λk,mq2km+12λub2u+12λmb2m E = 1 2 ∑ u , m e u m 2 + 1 2 λ ∑ u , k p u k 2 + 1 2 λ ∑ k , m q k m 2 + 1 2 λ ∑ u b u 2 + 1 2 λ ∑ m b m 2

  如此对于P和Q的导数不变,新增加的三个参数中,两个b是需要学习的,仍然用梯度下降迭代更新,初始值设0即可。


考虑邻域影响的SVD++

P和Q的训练:SVD++

  在有偏置RSVD的基础上,还考虑了用户对电影的历史评分。ItemCF衡量用户 u u 对电影m的兴趣:

r^um=1|N(u)|jN(u)wmj r ^ u m ′ = 1 | N ( u ) | ∑ j ∈ N ( u ) w m j

  这里 N(u) N ( u ) 是用户 u u 喜欢的电影集合,wmj是电影 m m 和电影j的相似度(在ItemCF中,相似度通过统计所有用户观看的电影列表获得,但注意在SVD++中 w w 实际上是需要学习的参数),这个式子中求和项的意思是用户过去感兴趣的所有电影和电影m的整体相似程度,左边分式用于归一化。
  现在嫌矩阵 W W 太大,用SVD的思想它也能分解 W=XY,即用 xTmyj x m T y j 代替 wmj w m j xm x m yj y j 都是向量

r^um=1|N(u)|jN(u)xTmyj=1|N(u)|xTmjN(u)yj r ^ u m ′ = 1 | N ( u ) | ∑ j ∈ N ( u ) x m T y j = 1 | N ( u ) | x m T ∑ j ∈ N ( u ) y j

  将这个兴趣加到RSVD上

r^um=bu+bm+μ+qTmpu+1|N(u)|xTmjN(u)yj r ^ u m = b u + b m + μ + q m T p u + 1 | N ( u ) | x m T ∑ j ∈ N ( u ) y j

  又嫌参数太多,让 x=q x = q

r^um=bu+bm+μ+qTmpu+1|N(u)|jN(u)yj r ^ u m = b u + b m + μ + q m T ( p u + 1 | N ( u ) | ∑ j ∈ N ( u ) y j )

  如此一来,需要迭代学习的参数包括 bu b u bm b m puk p u k qkm q k m yj y j 。手撸梯度之后,梯度下降求解。


总结

  1. PCA和SVD都能用来降维,只是PCA用的是特征值分解。
  2. PCA需要对数据去中心化,可能使样本由稀疏变稠密,提高计算复杂度。
  3. PCA只能获得矩阵一个方向的分解,SVD能获得两个方向的分解。
  4. SVD实际上很慢,而且无法处理缺失值,所以采取矩阵分解梯度下降拟合未缺失值
  5. 梯度下降拟合可能会过拟合,因此采用RSVD
  6. 有偏置的RSVD是出于对用户和物品各自固有属性的考虑
  7. SVD++是在有偏置的RSVD基础上,基于ItemCF考虑了用户历史喜好的SVD

参考资料

奇异值分解(SVD)原理详解及推导
知乎-如何理解特征值
《推荐系统实践》

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
假设有一个 $m\times n$ 的矩阵 $A$,我们希望将其分解成三个矩阵的乘积:$A=U\Sigma V^T$,其中 $U$ 是一个 $m\times m$ 的酉矩阵,$\Sigma$ 是一个 $m\times n$ 的对角矩阵,$V$ 是一个 $n\times n$ 的酉矩阵。这个分解过程就是奇异值分解(SVD)。 具体步骤如下: 1. 首先,我们计算 $A^TA$,得到一个对称的 $n\times n$ 矩阵。然后,我们可以通过求解这个矩阵的特征值和特征向量,得到一个酉矩阵 $V$(列为特征向量)和一个对角矩阵 $\Sigma^2$(对角线上为特征值的平方)。 2. 接下来,我们计算 $AA^T$,得到一个对称的 $m\times m$ 矩阵。然后,我们可以通过求解这个矩阵的特征值和特征向量,得到一个酉矩阵 $U$(列为特征向量)和一个对角矩阵 $\Sigma^2$(对角线上为特征值的平方)。 3. 最后,我们可以将 $\Sigma$ 中的非零元素取平方根,得到一个 $m\times n$ 的对角矩阵 $\Sigma$。这个矩阵就是 $A$ 的奇异值矩阵。 将 $U$、$\Sigma$ 和 $V$ 相乘,就可以得到原始矩阵 $A$。 这个分解的含义是,我们将原始矩阵 $A$ 分解成三个矩阵的乘积,其中 $U$ 和 $V$ 是酉矩阵,表示变换;$\Sigma$ 是对角矩阵,表示缩放。通过这个分解,我们可以更好地理解矩阵的结构和性质,例如矩阵的秩、奇异值等。在机器学习和数据分析中,SVD 也被广泛应用于降维、矩阵近似、信号处理等领域。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值