下面的公式是基于物品的计算:

我之所以要把粘出来,是因为这种计算模式是公式界常用的一种方式:体会一下,单个来讲SiN*Run / |Sin|,分子分母公约之后只剩下了Run了;但是公式记录的是一种和运算,所以这就代表Run的某种运算,试想,如果两个物品完全相同,那么真的就是可以分子分母约分;那评分本来就是应该一样的;

当然没有两个物品是完全相似的。

 

U是用于行压缩(减少样本数),V是用于列压缩(降维)

 

通过压缩图像的例子,我们看出来其实本质来讲最终输出的内容是一致的(无论是压缩还是不压缩);但是关键在于压缩的过程中,正常模式要构建一个32*32的像素点阵要1024个数据;但是如果会用svd,你会发现其实只是需要两个32 * 2(U和VT)以及2个奇异值(如果算上0值是4个数据),搞掂;压缩了将近10倍。

其实SVD最迷人的地方还是在存储上,就像上面说的正常要存储1024个点,但是基于SVD,只需要存储130个点就可以了,比如只是存储U,S,VT,只有在需要的时候计算一下就可了。

 

下面介绍一下SVD的原理;讲解SVD原理之前,想要介绍几个线性代数的概念:首先是向量的长度和角度;向量的长度又称之为向量的模,是向量元素(坐标)的平方和的根。

至于向量的角度,就是在当前坐标系向,向量和坐标轴的夹角(向量的角度并没有明确的定义,可以这样来理解)。

下面再来说说正交矩阵;正交矩阵是这样的来的;作为一个向量A,在e1,e2坐标系下;然后现在还有另外一个坐标系,我们称之为e1',e2',在此坐标系下构建一个向量A',这个A'要和A重合,虽然是两个不同的坐标系,但是A和A'在e1,e2坐标系下来看和A是同一个位置;

这里就存在一个映射关系,然后,对于e1',e2'的坐标系:

(a',b').T=U*(a,b).T

这里的U就是一个正交矩阵。那么怎么来计算这个U呢?

观察一下上面的图,e1'在e1的映射中,x轴代表sinx,y周代表cosx(夹角对应边的映射是sin,非夹角对应边是cos,建立e1',和e2'的值,注意夹角寻找θ):

这样,由上面的一系列过程我们就推知了U值,因为U值就是:

为什么是这个值?因为U是(参看上面的推导):

其实这里正在讲的是线性代数和空间几何中常见的一种场景:正交旋转。将一个坐标系旋转到另外一个坐标系下,这个变换,也叫做正交变换。

正交矩阵完事了,在讲述SVD之前还要在介绍一个计算:EVD(eigenvalue decomposition),特征值分解。

我们介绍一下EVD的一个特例,EVD我们知道是Ax = λx(在PCA小节中曾经提到过,那个时候使用的v,本节使用的x),给定了向量A,右乘一个x等价于与一个标量λ右乘一个x;其中λ称之为特征值,x称之为特征向量。这里我们拿一个特例来说明,对称矩阵,加入有一个m*m的对称矩阵,特定的λ为λi,对应的特征向量为xi,则有下面的推导:

令U和Λ为:

则有:

继续推导:

到此,注意Ax等式的右边是UT*x,这说明了什么,上大段我们讲述了旋转,U是一个正交矩阵,右乘了一个x,代表着要把x进行旋转,旋转到新的坐标轴下,旋转后的结果就是[a1, a2, a3...am];于是有:

到了最后等到Ax的结果其实是对于原数据伸缩,完成这个的伸缩就是特征值 λi;然后U再左乘这个值,就实现了对于拉伸后数据的旋转。

 

 

 

参考:

向量的长度:

https://baike.baidu.com/item/%E5%90%91%E9%87%8F%E7%9A%84%E6%A8%A1/2073854?fr=aladdin

SVD原理:

https://blog.csdn.net/y1535766478/article/details/76944404

 

关于SVD的更多相关文章

  1. 奇异值分解(SVD)原理与在降维中的应用

    奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域.是 ...

  2. SVD奇异值分解的基本原理和运用

    SVD奇异值分解: SVD是一种可靠的正交矩阵分解法.可以把A矩阵分解成U,∑,VT三个矩阵相乘的形式.(Svd(A)=[U*∑*VT],A不必是方阵,U,VT必定是正交阵,S是对角阵<以奇异值 ...

  3. 奇异值分解 SVD

    一基本知识 A是一个m*n的矩阵,那么A的SVD分解为\(A_{mn} = U_{mm}\Sigma _{mn}V^T_{nn}\),其中\(U^TU = I\),\(V^TV = I\),UV的列向 ...

  4. SVD的几何意义,以及在去噪,推荐系统中的应用

    很多文章说到奇异值分解的时候总是大概罗列下它的功能,并没有对功能及物理意义进行过多的阐述,现在我来对奇异值进行整理一下. 一 奇异值分解 对任意的矩阵A∈Fmn,rank(A)=r(矩阵的秩),总可以 ...

  5. Matrix Factorization SVD 矩阵分解

    Today we have learned the Matrix Factorization, and I want to record my study notes. Some kownledge ...

  6. PCA本质和SVD

    一.一些概念 线性相关:其中一个向量可以由其他向量线性表出. 线性无关:其中一个向量不可以由其他向量线性表出,或者另一种说法是找不到一个X不等于0,能够使得AX=0.如果对于一个矩阵A来说它的列是线性 ...

  7. 协同过滤和简单SVD优化

    协同过滤(collaborative filtering) 推荐系统: 百度百科的定义是:它是利用电子商务网站向客户提供商品信息和建议,帮助用户决定应该购买什么产品,模拟销售人员帮助客户完成购买过程主 ...

  8. 奇异值分解(SVD)和简单图像压缩

    SVD(Singular Value Decomposition,奇异值分解) 算法优缺点: 优点:简化数据,去除噪声,提高算法结果 缺点:数据的转换可能难于理解 适用数据类型:数值型数据 算法思想: ...

  9. 数值分析之奇异值分解(SVD)篇

    在很多线性代数问题中,如果我们首先思考若做SVD,情况将会怎样,那么问题可能会得到更好的理解[1].                                       --Lloyd N. ...

  10. paper 128:奇异值分解(SVD) --- 线性变换几何意义[转]

    PS:一直以来对SVD分解似懂非懂,此文为译文,原文以细致的分析+大量的可视化图形演示了SVD的几何意义.能在有限的篇幅把这个问题讲解的如此清晰,实属不易.原文举了一个简单的图像处理问题,简单形象,真 ...

随机推荐

  1. docker学习端口映射---第二章节

    一.运行一个web应用 首先,下载一个docker镜像: [root@k8s-01 ~]# docker pull training/webapp 运行webapp的容器: [root@k8s-01 ...

  2. python之常用模块学习

    1.模块调用 import module from module import xx from module.xx.xx import xx as rename from module.xx.xx i ...

  3. 专业的“python爬虫工程师”需要学习哪些知识?

    学到哪种程度 暂且把目标定位初级爬虫工程师,简单列一下吧: (必要部分) 熟悉多线程编程.网络编程.HTTP协议相关 开发过完整爬虫项目(最好有全站爬虫经验,这个下面会说到) 反爬相关,cookie. ...

  4. 解决getElementsByClassName()在IE8下的兼容问题

    getElementsByClassName,这个方法让我们可以通过 class 属性中的类名来访问元素,但是IE9 以下的浏览器不支持 .为解决这个问题,我们写一个兼容函数 getByClass() ...

  5. python基础17_列表推导式 vs 生成器表达式

    [ ] 列表推导式,是用简单的语法来生成列表, ( ) 生成器表达式,是用简单的语法创建个生成器. 外观上仅括号不一样. 虽然写起来方便,但是读起来稍显费力,另外,不易调试. # 列表推导式 prin ...

  6. 最常用的JavaScript类的定义

    混合的构造函数/原型方式 联合使用构造函数和原型方式,就可像用其他程序设计语言一样创建对象.这种概念非常简单,即用构造函数定义对象的所有非函数属性,用原型方式定义对象的函数属性(方法).结果是,所有函 ...

  7. 宝塔面板安装SSL证书

    2016年阿里云与国内证书颁发机构天威诚信推出了基于Symantec(赛门铁克)的免费SSL证书,有需要免费SSL证书产品的可以前往阿里云进行申请. 申请地址:阿里云云盾证书服务—Symantec免费 ...

  8. linux下磁盘管理(du、df)命令使用

    DF :disk free 磁盘可用量 DU: disk usage 磁盘使用 df:列出文件系统的整体磁盘使用量: df参数: -a:列出所有的文件系统,包括系统特有的/proc等文件系统 -k:以 ...

  9. Cannot create PoolableConnectionFactory (Communications link failure The last packet sent successfu

    SQL: Cannot create JDBC driver of class '' for connect URL 使用数据库数据源的web 项目,发布后,访问数据库500报错: 浏览器端: 控制台 ...

  10. 联想Y410P在Ubuntu系统下开关机及插耳机破音“啪啪”的解决办法

    转载自:https://blog.csdn.net/YiKangJ/article/details/81239556 1.解决开关机“啪啪响”: options snd-hda-intel model ...