前言

之前的博客中SVD推荐算法写得不是很严谨,r̂ ui=∑Ff=1PufQfi+μ+bu+bir^ui=∑f=1FPufQfi+μ+bu+bi\hat{r}_{ui}=\sum_{f=1}^{F}{P_{uf}Q_{fi}}+\mu+b_u+b_i 更像是矩阵分解多一点,没有涉及到SVD的数学意义,这篇博客大概会写一些数学SVD的数学理解,以及SVD在PCA和推荐算法上面的应用。

特征值与特征向量

如果一个向量vvv是 方阵 A" role="presentation" style="position: relative;">AAA的特征向量,将可以表示成下面的形式:

Av=λvAv=λv

Av=\lambda v
此时 λλλ就被称为特征向量v" role="presentation" style="position: relative;">vvv对应的特征值,并且一个矩阵的一组特征向量是一组正交向量。特征值分解是将一个矩阵分解成下面的形式:

A=QΣQ−1A=QΣQ−1

A=Q\Sigma Q^{-1}
其中 QQQ是这个矩阵A" role="presentation" style="position: relative;">AAA的特征向量组成的矩阵, ΣΣΣ是一个对角阵,每一个对角线上的元素就是一个特征值。可以简单理解为提取矩阵最重要的特征,Σ" role="presentation" style="position: relative;">ΣΣΣ为线性变换中矩阵变换的主要方向(可以参考链接1)。

缺点也非常明显,就是只适用于方阵,但对于实际情景中我们数据大部分都不是方阵,此时就要引入奇异值分解SVD了。

奇异值分解

奇异值分解(Singular Value Decomposition, SVD)是线性代数中一种重要的矩阵分解,在信号处理、统计学等领域有重要应用。奇异值分解是一个能适用于任意的矩阵的一种分解的方法:

A=UΣVTA=UΣVT

A=U\Sigma V^T
假设 AAA是一个N * M的矩阵,那么得到的U" role="presentation" style="position: relative;">UUU是一个N * N的方阵(里面的向量是正交的,U里面的向量称为左奇异向量), ΣΣΣ是一个N * M的矩阵(除了对角线的元素都是0,对角线上的元素称为奇异值),VT" role="presentation" style="position: relative;">VTVTV^T是一个N * N的矩阵,里面的向量也是正交的,V里面的向量称为右奇异向量)

那么,我们有

AAT=UΣVTVΣTUT=U(ΣΣT)UTATA=VΣTUTUΣVT=V(ΣTΣ)VTAAT=UΣVTVΣTUT=U(ΣΣT)UTATA=VΣTUTUΣVT=V(ΣTΣ)VT

AA^T=U\Sigma V^TV\Sigma^TU^T=U(\Sigma \Sigma^T)U^T \\A^TA=V\Sigma^T U^TU\Sigma V^T=V(\Sigma^T \Sigma) V^T

这也就是说,UUU 的列向量(左奇异向量),是 AAT" role="presentation" style="position: relative;">AATAATAA^T 的特征向量;同时,VVV 的列向量(右奇异向量),是 ATAATAA^TA 的特征向量;另一方面,MMM 的奇异值(ΣΣΣ 的非零对角元素)则是 AAT" role="presentation" style="position: relative;">AATAATAA^T 或者 ATAATAA^TA 的非零特征值的平方根。

将奇异值和特征值是对应起来:我们将一个矩阵AT∗AAT∗AA^T* A,将会得到一个方阵,我们用这个方阵求特征值可以得到:

(ATA)vi=λivi(ATA)vi=λivi

(A^TA)v_i=\lambda_iv_i

这里的向量viviv_i,就是我们上面的右奇异向量。此外我们还可以得到:

σi=λ√i  ,  ui=1σiAviσi=λi,ui=1σiAvi

\sigma_i=\sqrt \lambda_i \ \ ,\ \ u_i=\frac{1}{\sigma_i}Av_i

这里的σiσiσ_i就是上面说的奇异值,uiuiu_i就是上面说的左奇异向量。奇异值σiσiσ_i跟特征值类似,在矩阵ΣΣΣ中也是从大到小排列,而且σi" role="presentation" style="position: relative;">σiσiσ_i的减少特别的快,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上了。也就是说,我们也可以用前r大的奇异值来近似描述矩阵。

定义一下部分奇异值分解:r是一个远小于m和n的数

Am∗n≈Um∗rΣr∗rVTr∗nAm∗n≈Um∗rΣr∗rVr∗nT

A_{m*n}\approx U_{m*r}\Sigma_{r*r}V^T_{r*n}

奇异值分解和推荐算法

在之前的博客中的SVD推荐本质上是model-based,跟传统数学意义的SVD没有太大关系,只不过借鉴了SVD分解R=U∗S∗VR=U∗S∗VR=U*S*V这个形式,通过最优化方法进行模型拟合,求得R=U∗VR=U∗VR=U*V。

我们可以拿这个维度减少的U作为user特征,V作为item特征,之后用降维后的特征去计算相似度。
具体例子可以看参考链接2

奇异值与主成分分析(PCA)

PCA的原理可以理解为对原始的空间中顺序地找一组相互正交的坐标轴,第一个轴是使得方差最大的,第二个轴是在与第一个轴正交的平面中使得方差最大的,第三个轴是在与第1、2个轴正交的平面中方差最大的,这样假设在N维空间中,我们可以找到N个这样的坐标轴,我们取前r个去近似这个空间,这样就从一个N维的空间压缩到r维的空间了,但是我们选择的r个坐标轴能够使得空间的压缩使得数据的损失最小。

具体可以参考之前的PCA博客

回到原问题中,奇异值和PCA是怎么扯上关系的呢?

将上式右乘VVV可以得到

Am∗nVn∗r≈Um∗rΣr∗rVr∗nTVr∗n=Um∗rΣr∗r=A^m∗r" role="presentation">Am∗nVn∗r≈Um∗rΣr∗rVTr∗nVr∗n=Um∗rΣr∗r= m∗rAm∗nVn∗r≈Um∗rΣr∗rVr∗nTVr∗n=Um∗rΣr∗r=A^m∗r

A_{m*n}V_{n*r}\approx U_{m*r}\Sigma_{r*r}V^T_{r*n}V_{r*n}=U_{m*r}\Sigma_{r*r}=\hat A_{m*r}

即可以表示为

Am∗nVn∗r= m∗rAm∗nVn∗r=A^m∗r

A_{m*n}V_{n*r}=\hat A_{m*r}

可以理解为将一个m * n的矩阵A变换成一个m * r的矩阵,这样就会使得本来有n个feature的,变成了有r个feature了(r < n),这r个其实就是对n个feature的一种提炼,我们就把这个称为feature的压缩。SVD得出的奇异向量也是从奇异值由大到小排列的,按PCA的观点来看,就是方差最大的坐标轴就是第一个奇异向量,方差次大的坐标轴就是第二个奇异向量。

可以看出,其实PCA几乎可以说是对SVD的一个包装,如果我们实现了SVD,那也就实现了PCA了,而且更好的地方是,有了SVD,我们就可以得到两个方向的PCA,如果我们对A’A进行特征值的分解,只能得到一个方向的PCA。

参考

  1. http://www.cnblogs.com/leftnoteasy/archive/2011/01/19/svd-and-applications.html
  2. https://yanyiwu.com/work/2012/09/10/SVD-application-in-recsys.html
  3. https://liam0205.me/2017/11/22/SVD-for-Human-Beings/

SVD奇异值分解 中特征值与奇异值的数学理解与意义相关推荐

  1. 特征值和奇异值(svd)

    版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@gm ...

  2. 机器学习中特征值分解与奇异值分解的区别及应用

    前言: 上一次写了关于PCA与LDA的文章,PCA的实现一般有两种,一种是用特征值分解去实现的,一种是用奇异值分解去实现的.在上篇文章中便是基于特征值分解的一种解释.特征值和奇异值在大部分人的印象中, ...

  3. 解方程AX=b与矩阵分解:奇异值分解(SVD分解) 特征值分解 QR分解 三角分解 LLT分解

    文章目录 1. 前言 2. LU三角分解 3. Cholesky分解 - LDLT分解 4. Cholesky分解 - LLT分解 5. QR分解 6. 奇异值分解 7. 特征值分解 1. 前言 本博 ...

  4. 矩阵中的特征值和奇异值,物理意义

    一.奇异值与特征值基础知识: 特征值分解和奇异值分解在机器学习领域都是属于满地可见的方法.两者有着很紧密的关系,我在接下来会谈到,特征值分解和奇异值分解的目的都是一样,就是提取出一个矩阵最重要的特征. ...

  5. 【数学和算法】最小二乘法,SVD奇异值分解、LU分解的应用场景

    多项式拟合曲线时使用最小二乘法,把问题化简为A*x=B的线性方程组: 然后使用LU矩阵分解算法求解线性方程组A*x=B,具体做法是: 先对矩阵A进行行初等变换得到上三角矩阵U: 再求出下三角矩阵L,就 ...

  6. 奇异值分解 VS 特征值分解

    参考文章:http://www.cnblogs.com/liangflying/archive/2012/09/25/2701148.html 本文由LeftNotEasy发布于http://left ...

  7. svd奇异值分解_奇异值分解SVD

    点击上方蓝字关注我们 奇异值分解(SVD)在计算机视觉中有着广泛的应用,如数据降维.推荐系统.自然语言处理等.本文是介绍SVD的数学计算过程,并从SVD的性质说明其应用的原理. 01特征值与特征向量 ...

  8. SVD奇异值分解(PCA,LSI)

    版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@gm ...

  9. 特征值与奇异值的对比及应用

    版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@gm ...

最新文章

  1. 非递归一次性加载分类数据到TreeViw
  2. 鱼缸式百分比信息图表,这样计算才正确
  3. C# 尝试读取或写入受保护的内存,这通常指示其他内存已损坏。错误类型为:System.AccessViolationException。...
  4. SpringBoot | 第一章:第一个SpringBoot应用
  5. html二级导航栏随一级居中,html – 1.在css中链接不起作用2.如何垂直居中导航栏并在每个导航栏上添加填充...
  6. 使用MeanJS Yeoman Generator
  7. css用一张大图片来设置背景的技术真相
  8. 我被面试官给虐懵了,竟然是因为我不懂Spring中的@Configuration
  9. mysql代码提示_聊一聊 php 代码提示
  10. C# 海康DVR客户端开发系列(3)—— 连接DVR和图像预览
  11. 微服务学习之服务治理、服务注册与发现、Eureka【Hoxton.SR1版】
  12. 蒙版操作—剪切蒙版制作艺术字
  13. 论文笔记:Straight to the Tree: Constituency Parsing with Neural Syntactic Distance
  14. Linux 虚拟机VMware安装失败,提示没有选择磁盘no disks selected
  15. [UOJ311]积劳成疾
  16. 讯飞智能录音笔SR502:七夕值得入手的资料备忘好物
  17. 3.3.4.2.2 Decimation-in-Frequency (DIF) Radix-2 FFT
  18. idea 根目录获取方法
  19. cocos2d-html5 游戏实战源代码大集合和下载(包括flappy,popstar等----持续更新中----)...
  20. Mac全部文件夹在哪?Mac 查看全部文件夹

热门文章

  1. SEE 中的数据结构及之间的关系
  2. ABAP使用BDC录屏实现供应商付款功能(F-02)
  3. github上Android开源项目汇总(带效果图)
  4. 零售行业的六大主要EDI报文
  5. **潘老师 领导力\管理效能提升专家**
  6. Hexo中Buttefly最新教程总览
  7. 做国外LEAD需要一些邮箱怎么办
  8. 写论文之mathpix snipping tool识别图片中的公式并通过MathType粘贴到word
  9. jsp牛刀小试之在线报名系统
  10. 权力的游戏凛冬将至手游辅助升级脚本工具 新手操作指南