对矩阵特征值分解和SVD奇异值分解的理解

  矩阵分解是非常常见的操作矩阵方式。尤其是在推荐系统里,我们往往会有一个用户-物品矩阵,这个矩阵非常大,比如100w个用户*1000w个物品矩阵,这个时候我们可以通过矩阵分解一方面降低矩阵的维度,另一方面提取用户和物品各自的信息

  举个例子,对于100w*1000w的用户-物品矩阵,我们可以得到100w*10的用户矩阵和10*1000w物品矩阵。这样子其中的10维向量就是我们提取的主要特征。一般来说我们会把矩阵先分成三块再得到其中的这两块,具体原因看完这两种分解方式就懂了~

  下面没有涉及公式推导,主要是想整理两者的主要区别和记录一下对基本道理的理解。

特征值分解

  对于维度为n*n并且有n个线性无关的特征向量的矩阵A,按特征值分解,可以分解为:

(下面为了方便打我把中间的符号打成V) 

  其中U是由矩阵的特征向量组成的,V是由矩阵的特征值组成的对角阵。

  这就是特征值分解。

  我感觉特征值分解就是帮助我们我们得到矩阵A的特征向量和特征值的。这样子我们就可以在特征向值V中再选取较大的前几个,再提取它们对应的特征向量进一步提取矩阵的主要特征。

  但很显然特征值分解的条件很苛刻:需要n*n的方阵,并且要求有n个线性无关的特征向量,所以用的并不多。

奇异值分解(SVD)

  特征值分解对矩阵的限制是很大的,需要是一个方阵。如果对于一个m*n的矩阵,则更多用的是svd矩阵分解。

  对于一个m*n的矩阵A,按SVD分解,可以分解为:

  其中分解出的三项分为 m*m矩阵×m*n矩阵×n*n矩阵

  比如对于一个100w用户*1000w物品的矩阵,通过SVD矩阵分解,我们就得到了:

100w*100w的矩阵,和100w*1000w的矩阵以及1000w*1000w的矩阵。乍一看,好像这分解之后的维度并没有减少,并且还多了几个矩阵出来!?好像没什么用呀?

  实际上,和上面的特征值分解类似,中间的m*n的矩阵也同样是由原矩阵的特征值组成的对角矩阵!因此我们可以只取前k大的特征值(往往这k个特征值对应的特征向量就可以代表矩阵95%甚至99%的信息!)。这样一来,原矩阵A就可以被分解为:m*k的矩阵、k*k的矩阵以及k*n的矩阵了。这样分解,一方面减少了维度和计算量,另一方面提取了主要信息。

  现在对于100w用户*1000w物品的矩阵A,我们得到了100w*k的矩阵U,k*k的矩阵2以及k*1000w的矩阵V的转置(即1000w*k的矩阵V)。这里矩阵U其实就是用户信息,每个用户用k维向量来表示;矩阵V就是物品信息,每个商品的向量也是k维。

  最后对开头问题表达我自己的理解:为什么对于100w*1000w用户-物品矩阵,不直接分解成100w*k和k*1000w的两个矩阵呢?还需要这么麻烦分解出三个?(原来我学推荐系统的时候经常想这个问题,后来也一直是不了了之,一知半解。)现在我认为原因是这样分解并不能通过中间的特征值提取关键信息!就算分出来,也是没有使用意义的,分解出来的k维向量基本就是等于随机抽取而已。

  而通过特征值分解或者奇异值SVD分解的话,有一个存放特征值的中间矩阵充当桥梁作用,可以帮助我们提取特征值最大的特征向量进而提取主要信息~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JunanP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值