SVD矩阵分解

为什么要对矩阵进行分解

原始的矩阵表示数据最完整的信息,分解完之后,信息不就不完整了吗?为什么要做矩阵分解?

假如有一批电商数据,有一些用户购买了一些商品,假设100万用户,10万个商品。用矩阵表示则有100万*10万的维度 ,这是一个很大的矩阵,同时也是一个稀疏的矩阵,因为每个用户不能买所有的商品。这么庞大的矩阵中,我们也无法提取出重点信息。

因此将这个大矩阵分解成多个小矩阵相乘。

基变换

基是正交的(即内积为0,或者直观说相互垂直),并且基是线性无关的。假设如果y轴和x轴不是正交的,也就是不是垂直,夹角小于90度,意味着y可以由x来表示,x也可以由y来表示。

当y与x垂直时,y无法表示x,x也无法表示y

我们不希望一个指标可以由另一个指标来表示。一旦可以这么表示,那么另一个指标存在的意义就不大了。

变换:数据与一个基做内积运算,结果作为第一个新的坐标分量,然后与第二个基做内积运算,结果作为第二个新坐标的分量。

特征值分解

矩阵里面有很多信息,来分一分, A = U Λ U − 1 A=U \Lambda U^{-1} A=UΛU1,其中 U U U表示特征向量矩阵, Λ \Lambda Λ表示特征值矩阵。 A A A必须是n*n的方阵,且有n个线性无关的特征向量。

这时我们就可以在对角矩阵当中找到比较大的了,他们就代表了主要信息。

SVD矩阵分解

上面提到的特征值分解不是挺好的吗?但是它被限制住了,如果矩阵的形状不是n*n的呢?而是m*n的形状呢?

这时就需要使用SVD矩阵分解了。

首先选前k个的特征值(一般前10%的特征值的和就占了总体的90%)。 A m ∗ n = U m ∗ k Λ k ∗ k V k ∗ n A_{m*n}=U_{m*k}\Lambda_{k*k}V_{k*n} Amn=UmkΛkkVkn,这样就可以得到一个近似的矩阵,这个矩阵拥有与原矩阵差不多的信息,但是大小却少了很多。

SVD推导

前提:对于一个二维矩阵M可以找到一组标准正交基 v 1 v_1 v1 v 2 v_2 v2使得 M v 1 Mv_1 Mv1 M v 2 Mv_2 Mv2是正交的。
在这里插入图片描述
使用另一组正交基 u 1 u_1 u1 u 2 u_2 u2来表示 M v 1 Mv_1 Mv1 M v 2 Mv_2 Mv2的方向。

其长度分别为: ∣ M v 1 ∣ = σ 1 |Mv_1|=\sigma_1 Mv1=σ1, ∣ M v 2 ∣ = σ 2 |Mv_2|=\sigma_2 Mv2=σ2,可得: M v 1 = σ 1 u 1 , M v 2 = σ 2 u 2 Mv_1=\sigma_1u_1,Mv_2=\sigma_2u_2 Mv1=σ1u1,Mv2=σ2u2

对于向量 x x x在这组基中的表示: x = ( v 1 ⋅ x ) v 1 + ( v 2 ⋅ x ) v 2 x=(v_1 · x)v_1 + (v_2·x)v_2 x=(v1x)v1+(v2x)v2,其中 ( v 1 ⋅ x ) (v_1 · x) (v1x)表示向量的点积,点积表示投影的长度,可以通过投影到基的长度乘以基的方向来表示一个点的坐标。点积 v ⋅ x v·x vx也可以转换成行向量乘列向量 v ⋅ x = v T x v·x=v^Tx vx=vTx

可得 M x = ( v 1 ⋅ x ) M v 1 + ( v 2 ⋅ x ) M v 2 , M x = ( v 1 ⋅ x ) σ 1 u 1 + ( v 2 ⋅ x ) σ 2 u 2 Mx=(v_1·x)Mv_1 + (v_2·x)Mv_2,Mx=(v_1·x)\sigma_1u_1+(v_2·x)\sigma_2u_2 Mx=(v1x)Mv1+(v2x)Mv2Mx=(v1x)σ1u1+(v2x)σ2u2,从而得到: M x = u 1 σ 1 v 1 T x + u 2 σ 2 v 2 T x , M = u 1 σ 1 V 1 T + u 2 σ 2 v 2 T Mx=u_1\sigma_1v_1^Tx+u_2\sigma_2v_2^Tx,M=u_1\sigma_1V_1^T+u_2\sigma_2v_2^T Mx=u1σ1v1Tx+u2σ2v2TxM=u1σ1V1T+u2σ2v2T,化简得到: M = U ∑ V T M=U\sum V^T M=UVT

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值