矩阵分解背后数学原理

面试时遇到这个问题,试图解释SVD,PCA等方法,总感觉没有很好地解释问题。

矩阵分解是机器学习常用的处理方法,包括PCA降维,协同过滤里面的分解MF等。
这里简单总结一下SVD, PCA, MF有关矩阵分解的问题。

矩阵分解

先看一下特征值分解:
设A为n*n的方阵,则 A x = λ ∗ x Ax = \lambda*x Ax=λx, 称 λ \lambda λ为方阵A的特征值,x为方阵A的特征向量。 特征值不是唯一的, 一个满秩方阵就有n个特征值,每个特征值对应一个特征向量,满秩方阵的特征向量也是线性无关的。如果A 是非满秩的,则对应的n个特征向量有线性相关性。(矩阵分解 也叫做 谱分析)

A = X B X − 1 A=XBX^{-1} A=XBX1其中X是特征向量组成的矩阵,B是对角阵,对角线的值都是特征值。(A是方阵的时候,可以直接做特征分解,A不是方阵的时候无法直接特征值分解,所以成为奇异值分解)

特征值与特征向量
  • 首先要明确一点: 一个矩阵代表的是一个线性变换规则,而一个矩阵的乘法运行代表的是一个变换;(矩阵与向量相乘,其实就是对该向量进行旋转和伸缩变化,一个矩阵和该矩阵的非特征向量相乘是对该向量的旋转伸缩变换;一个矩阵和该矩阵的特征向量相乘是对该向量的伸缩变换。那一个实数和一个向量相乘有什么意义呢?这个我们很清楚是对一个向量的伸缩变换。)
  • 矩阵乘法对应了一个变换,是把任意一个向量变成另一个方向或长度都大多不同的新向量。在这个变换的过程中,原向量主要发生旋转、伸缩的变化。如果矩阵对某一个向量或某些向量只发生伸缩变换,不对这些向量产生旋转的效果,那么这些向量就称为这个矩阵的特征向量,伸缩的比例就是特征值。特征值特征向量的理解
  • 如果把矩阵代表的变化看成一种运动,特征值就是运动的速度(拉伸的大小),特征向量就是运动的方向,其他方向的运动就是由特征向量方向的运动合成。所以最大的特征值对应的特征向量指明了运动速度的最大方向。
  • 应用PCA: 特征值对应的特征向量就是理想中想取得正确的坐标轴,而特征值就等于数据在旋转之后的坐标上对应维度上的方差.也就是说,直接求出矩阵A的特征向量得出对应的特征向量。我们就能找到旋转后正确的坐标轴。这个就是特征值和特征向量的一个实际应用:“得出使数据在各个维度区分度达到最大的坐标轴。” 所以,在数据挖掘中,就会直接用特征值来描述对应特征向量方向上包含的信息量,而某一特征值除以所有特征值的和的值就为:该特征向量的方差贡献率(方差贡献率代表了该维度下蕴含的信息量的比例)。通常经过特征向量变换下的数据被称为变量的主成分,当前m个主成分累计的方差贡献率达到一个较高的百分数(如85%以上)的话,就保留着这m个主成分的数据。实现了对数据进行降维的目的。整个主成分分析的算法原理也就是这个。
SVD 与PCA的关系
  • Step-1 特征分解:
    对于方阵,特征分解 A = U B U t A=UBU^t A=UBUt,其中B是对角阵,U里面的向量是特征向量,其实是把A代表的变换 分解成了旋转->伸缩->旋转。也是表征出A对应实际代表的变换。特征分解得到的U和U^t 得到的是一组特征向量 及 该特征向量对应矩阵的 转置矩阵。

  • Step-2 SVD非方阵奇异值分解:
    那么对于非方阵,无法直接进行特征分解,怎么办呢?SVD奇异值分解。
    SVD与特征分解有什么关系呢?如果A是m*n的非方阵,那么 A = U B V t A=UBV^t A=UBVt 这里面的B还是对角阵,U和 V t V^t Vt与方阵的U 有什么区别呢?
    我们来进行如下分析:

    • A: m * n, A t A^t At: n*m
    • A A t AA^t AAt: mm 方阵, A t A A^tA AtA: nn 方阵。我们对这两个方阵进行矩阵分解,得到如下结果:
    • A A t = U C U t AA^t=UCU^t AAt=UCUt, A t A = V D V t A^tA=VDV^t AtA=VDVt 上面两个方阵可以分别得到C和D两个特征值对角阵,和U与V两个特征向量。
    • 我们可以看到,对 A = U B V t A=UBV^t A=UBVt 的奇异值分解SVD, 左右分别得到的是 A A t AA^t AAt A t A A^tA AtA的特征向量。
    • 我们可以继续推导:
      A = U B V t A= UBV^t A=UBVt A t A^t At 可以表示为 A t = ( U B V t ) t = V B U t A^t = (UBV^t)^t = VBU^t At=(UBVt)t=VBUt,其中B是对角阵。
      A t = V B U t A^t = VBU^t At=VBUt
      A A t = ( U B V t ) ( V B U t ) = U B 2 V t V U t = U B 2 U t AA^t=(UBV^t)(VBU^t) = UB^2V^tVU^t=UB^2U^t AAt=(UBVt)(VBUt)=UB2VtVUt=UB2Ut 因为B是对角阵 所以B可以移动位置到前面, V t V = E V^tV=E VtV=E因为V是特征向量组成的正交阵。 A t A = ( V B U t ) ( U B V t ) = V B 2 V t A^tA=(VBU^t)(UBV^t) =VB^2V^t AtA=(VBUt)(UBVt)=VB2Vt
    • 所以 A A t AA^t AAt的特征值大小为A做奇异值分解的特征值的平方, U是 A A t AA^t AAt的特征向量,V是 A t A A^tA AtA的特征向量。
      我们可以知道A非方阵的时候,做SVD分解对应的特征值是 A A t AA^t AAt的特征值得平方根, SVD分解对应的左右奇异矩阵分别是 A A t AA^t AAt A t A A^tA AtA的特征向量。
  • Step-3 SVD与PCA的关系
    PCA的解释可以参考:PCA
    PCA的实现步骤是什么?对X进行PCA分析时:
    1)求数据的协方差矩阵 X X t XX^t XXt
    2)将 X X t XX^t XXt做矩阵分解得到k个top大的特征值,
    3)用该K个特征值对应的特征向量组成PCA。
    其中 X X t XX^t XXt对应的是SVD中的左奇异矩阵。假设样本为mn,则 X X t XX^t XXt得到的左奇异阵U(取topk特征值对应的特征向量) 大小为mk , U t X U^tX UtX为 k*n,相当于数据压缩。
    sklearn里面PCA主成分分解时用的也是SVD,因为SVD可以不需要计算协方差矩阵直接得到奇异值分解后的左右特征向量,具体可以参考:sklearn-pca-svd

其他矩阵计算
  1. 实对称矩阵 A t = A A^t=A At=A,转置等于它本身, A t A = E A^tA=E AtA=EA为正交阵。
  2. 实对称矩阵,不同的特征值对应的特征向量是正交的
  3. 正交矩阵 A t A = E A^tA=E AtA=E,E是单位阵, A − 1 A = E , A − 1 = A t A^{-1}A=E,A^{-1}=A^t A1A=E,A1=At 正交矩阵的转置和逆矩阵相等。
  4. 理解 逆矩阵:对于矩阵A可以认为是A=AE 可以认为是在单位阵的基础上左乘矩阵A 也就是进行旋转变换得到矩阵A,那么逆矩阵其实就是在A的基础左乘 A − 1 A^{-1} A1后 又可以恢复原来的单位矩阵E,这就是逆矩阵在矩阵变换中的意义。

MF 与SVD的关系

SVD奇异值分解,计算量很大,SVD分解时要求矩阵是稠密的,但是实际的推荐场景很多矩阵是稀疏的,不满足这个要求,解决方法有哪些? 伪SVD,FunkSVD, LFM.
伪SVD: ∑ I ∈ 有 评 分 的 地 方 ( y i − u i A v i t ) 2 \sum_{I\in 有评分的地方}(y_i - u_iAv_i^t)^2 I(yiuiAvit)2
将奇异值融入到U和V中,就是LFM ∑ i ∈ 有 评 分 ( y i − u i v i t ) 2 \sum_{i\in 有评分}(y_i - u_iv_i^t)^2 i(yiuivit)2 这个就是LFM.

未完待续。。。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值