关于SVD
下面的公式是基于物品的计算:
我之所以要把粘出来,是因为这种计算模式是公式界常用的一种方式:体会一下,单个来讲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的更多相关文章
- 奇异值分解(SVD)原理与在降维中的应用
奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域.是 ...
- SVD奇异值分解的基本原理和运用
SVD奇异值分解: SVD是一种可靠的正交矩阵分解法.可以把A矩阵分解成U,∑,VT三个矩阵相乘的形式.(Svd(A)=[U*∑*VT],A不必是方阵,U,VT必定是正交阵,S是对角阵<以奇异值 ...
- 奇异值分解 SVD
一基本知识 A是一个m*n的矩阵,那么A的SVD分解为\(A_{mn} = U_{mm}\Sigma _{mn}V^T_{nn}\),其中\(U^TU = I\),\(V^TV = I\),UV的列向 ...
- SVD的几何意义,以及在去噪,推荐系统中的应用
很多文章说到奇异值分解的时候总是大概罗列下它的功能,并没有对功能及物理意义进行过多的阐述,现在我来对奇异值进行整理一下. 一 奇异值分解 对任意的矩阵A∈Fmn,rank(A)=r(矩阵的秩),总可以 ...
- Matrix Factorization SVD 矩阵分解
Today we have learned the Matrix Factorization, and I want to record my study notes. Some kownledge ...
- PCA本质和SVD
一.一些概念 线性相关:其中一个向量可以由其他向量线性表出. 线性无关:其中一个向量不可以由其他向量线性表出,或者另一种说法是找不到一个X不等于0,能够使得AX=0.如果对于一个矩阵A来说它的列是线性 ...
- 协同过滤和简单SVD优化
协同过滤(collaborative filtering) 推荐系统: 百度百科的定义是:它是利用电子商务网站向客户提供商品信息和建议,帮助用户决定应该购买什么产品,模拟销售人员帮助客户完成购买过程主 ...
- 奇异值分解(SVD)和简单图像压缩
SVD(Singular Value Decomposition,奇异值分解) 算法优缺点: 优点:简化数据,去除噪声,提高算法结果 缺点:数据的转换可能难于理解 适用数据类型:数值型数据 算法思想: ...
- 数值分析之奇异值分解(SVD)篇
在很多线性代数问题中,如果我们首先思考若做SVD,情况将会怎样,那么问题可能会得到更好的理解[1]. --Lloyd N. ...
- paper 128:奇异值分解(SVD) --- 线性变换几何意义[转]
PS:一直以来对SVD分解似懂非懂,此文为译文,原文以细致的分析+大量的可视化图形演示了SVD的几何意义.能在有限的篇幅把这个问题讲解的如此清晰,实属不易.原文举了一个简单的图像处理问题,简单形象,真 ...
随机推荐
- Django中Model-Form验证
Django中Model-Form验证 class UserType(models.Model): caption=models.CharField(max_length=32) class User ...
- float样式的使用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- page用法
分页一般场景用于查询所有数据 包引用 import org.springframework.data.domain.Page;import org.springframework.data.domai ...
- python学习第三次记录
python学习第三次记录 python中常用的数据类型: 整数(int) ,字符串(str),布尔值(bool),列表(list),元组(tuple),字典(dict),集合(set). int.数 ...
- Delphi编程之爬取贴吧多页帖子图片
接着上一篇文章说一下我们如何爬取多页帖子的图片. 第一步,还是随便找个贴吧,这次我们就找图片相对较少的射雕英雄传吧. 把页面拉到最底下,在页码区域单击右键,选择检查. 在这里我们看到了页码的代码区域, ...
- JPype1使用总结
目的:使用Locust+Python压测账号资料接口,使用JPype调用java代码,缩短压测脚本编写 前提条件:进行性能压测过程中,需要压测账号相关接口,由于账号相关接口设计到加密解密,用Pytho ...
- select 下拉选择自动到textarea框
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- ubuntu安装tensorboardx
先安装tensorboardX,因为tensorboard依赖于tensorflow中的一些东西,所以安装完tensorboard之后,需要再安装tensorflow pip install tens ...
- redis的LRU算法(一)
最近加班比较累,完全不想写作了.. 刚看到一篇有趣的文章,是redis的作者antirez对redis的LRU算法的回顾.LRU算法是Least Recently Used的意思,将最近最少使用的资源 ...
- hightcharts详细教程
1.初始化highcharts var chart = Highcharts.chart('container', options); 2.options 自定义图表的配置项 const option ...