SVD神秘值分解
SVD分解
SVD分解是LSA的数学基础,本文是我的LSA学习笔记的一部分,之所以单独拿出来,是由于SVD能够说是LSA的基础,要理解LSA必须了解SVD,因此将LSA笔记的SVD一节单独作为一篇文章。本节讨论SVD分解相关数学问题,一个分为3个部分,第一部分讨论线性代数中的一些基础知识,第二部分讨论SVD矩阵分解,第三部分讨论低阶近似。本节讨论的矩阵都是实数矩阵。
基础知识
1.
矩阵的秩:矩阵的秩是矩阵中线性无关的行或列的个数
2.
对角矩阵:对角矩阵是除对角线外全部元素都为零的方阵
3.
单位矩阵:假设对角矩阵中全部对角线上的元素都为零,该矩阵称为单位矩阵
4.
特征值:对一个M x M矩阵C和向量X,假设存在λ使得下式成立
![]()
则称λ为矩阵C的特征值,X称为矩阵的特征向量。非零特征值的个数小于等于矩阵的秩。
5.
特征值和矩阵的关系:考虑下面矩阵
![]()
该矩阵特征值λ1
= 30,λ2 = 20,λ3 = 1。相应的特征向量
![]()
如果VT=(2,4,6)
计算S x VT
![]()
![]()
有上面计算结果能够看出,矩阵与向量相乘的结果与特征值,特征向量有关。观察三个特征值λ1
= 30,λ2 = 20,λ3 = 1,λ3值最小,对计算结果的影响也最小,假设忽略λ3,那么运算结果就相当于从(60,80,6)转变为(60,80,0),这两个向量十分相近。这也表示了数值小的特征值对矩阵-向量相乘的结果贡献小,影响小。这也是后面谈到的低阶近似的数学基础。
矩阵分解
1.
方阵的分解
1)
设S是M x M方阵,则存在下面矩阵分解
![]()
当中U
的列为S的特征向量,
为对角矩阵,当中对角线上的值为S的特征值,按从大到小排列:
![]()
2)
设S是M x M 方阵,而且是对称矩阵,有M个特征向量。则存在下面分解
![]()
当中Q的列为矩阵S的单位正交特征向量,
仍表示对角矩阵,当中对角线上的值为S的特征值,按从大到小排列。最后,QT=Q-1,由于正交矩阵的逆等于其转置。
2.
神秘值分解
上面讨论了方阵的分解,可是在LSA中,我们是要对Term-Document矩阵进行分解,非常显然这个矩阵不是方阵。这时须要神秘值分解对Term-Document进行分解。神秘值分解的推理使用到了上面所讲的方阵的分解。
如果C是M
x N矩阵,U是M x M矩阵,当中U的列为CCT的正交特征向量,V为N
x N矩阵,当中V的列为CTC的正交特征向量,再如果r为C矩阵的秩,则存在神秘值分解:
![]()
当中CCT和CTC的特征值同样,为![]()
Σ为M
X N,当中![]()
,其余位置数值为0,
的值按大小降序排列。下面是Σ的完整数学定义:
![]()
σi称为矩阵C的神秘值。
用C乘以其转置矩阵CT得:
![]()
上式正是在上节中讨论过的对称矩阵的分解。
神秘值分解的图形表示:
![]()
从图中能够看到Σ尽管为M
x N矩阵,但从第N+1行到M行全为零,因此能够表示成N x N矩阵,又因为右式为矩阵相乘,因此U能够表示为M x N矩阵,VT能够表示为N
x N矩阵
3.
低阶近似
LSA潜在语义分析中,低阶近似是为了使用低维的矩阵来表示一个高维的矩阵,并使两者之差尽可能的小。本节主要讨论低阶近似和F-范数。
给定一个M
x N矩阵C(其秩为r)和正整数k,我们希望找到一个M x N矩阵Ck,其秩不大于K。设X为C与Ck之间的差,X=C
– Ck,X的F-范数为
![]()
当k远小于r时,称Ck为C的低阶近似,当中X也就是两矩阵之差的F范数要尽可能的小。
SVD能够被用与求低阶近似问题,过程例如以下:
1.
给定一个矩阵C,对其神秘值分解:![]()
2.
构造
,它是将
的第k+1行至M行设为零,也就是把
的最小的r-k个(the
r-k smallest)神秘值设为零。
3.
计算Ck:![]()
回顾在基础知识一节里以前讲过,特征值数值的大小对矩阵-向量相乘影响的大小成正比,而神秘值和特征值也是正比关系,因此这里选取数值最小的r-k个特征值设为零合乎情理,即我们所希望的C-Ck尽可能的小。完整的证明能够在Introduction
to Information Retrieval[2]中找到。
我们如今也清楚了LSA的基本思路:LSA希望通过减少传统向量空间的维度来去除空间中的“噪音”,而降维能够通过SVD实现,因此首先对Term-Document矩阵进行SVD分解,然后降维并构造语义空间。
SVD神秘值分解的更多相关文章
- 斯坦福ML公开课笔记15—隐含语义索引、神秘值分解、独立成分分析
斯坦福ML公开课笔记15 我们在上一篇笔记中讲到了PCA(主成分分析). PCA是一种直接的降维方法.通过求解特征值与特征向量,并选取特征值较大的一些特征向量来达到降维的效果. 本文继续PCA的话题, ...
- 神秘值分解(Singular Value Decomposition)
- 线性变化的几何表现 首先看下简单的矩阵,这是一个对角矩阵 M=(3001) 我们先用这个对角矩阵乘以一个点来看看它的几何变化. (3001)∗(xy)=(3xy) 在几何上就相当于把原来的向量x轴 ...
- PCB SQL SERVER 枚举分割函数(枚举值分解函数)
在SQL SERVER字段采用枚举值作为字段后,如果直接查看字段的值是很难判断这个字段的带表什么意思, 在这里介绍如用函数的方法实现枚举值分割,只有分割后才很方便知道枚举值的意思. 一.问题说明 1. ...
- GDI+_从Bitmap里得到的Color数组值分解
[这里写只是我个人的摸索经历,已经给出解决方案] 我之前写过一篇关于ARGB值的研究:https://www.cnblogs.com/lingqingxue/p/10362639.html 最近我又遇 ...
- 【SVD、特征值分解、PCA关系】
一.SVD 1.含义: 把矩阵分解为缩放矩阵+旋转矩阵+特征向量矩阵. A矩阵的作用是将一个向量从V这组正交基向量的空间旋转到U这组正交基向量的空间,并对每个方向进行了一定的缩放,缩放因子就是各 ...
- 潜在语义分析Latent semantic analysis note(LSA)原理及代码
文章引用:http://blog.sina.com.cn/s/blog_62a9902f0101cjl3.html Latent Semantic Analysis (LSA)也被称为Latent S ...
- UFLDL教程笔记及练习答案二(预处理:主成分分析和白化)
首先将本节主要内容记录下来.然后给出课后习题的答案. 笔记: :首先我想推导用SVD求解PCA的合理性. PCA原理:如果样本数据X∈Rm×n.当中m是样本数量,n是样本的维数.PCA降维的目的就是为 ...
- OpenCV 编程简单介绍(矩阵/图像/视频的基本读写操作)
PS. 因为csdn博客文章长度有限制,本文有部分内容被截掉了.在OpenCV中文站点的wiki上有可读性更好.而且是完整的版本号,欢迎浏览. OpenCV Wiki :<OpenCV 编程简单 ...
- 《学习opencv》笔记——矩阵和图像操作——cvInRange,cvInRangeS,cvInvert and cvMahalonobis
矩阵和图像的操作 (1)cvInRange函数 其结构 void cvInRange(//提取图像中在阈值中间的部分 const CvArr* src,//目标图像 const CvArr* lowe ...
随机推荐
- python 连接数据库-设置oracle ,mysql 中文字符问题
import cx_Oracle import MySQLdb def conn_oracle(): cnn = cx_Oracle.connect('用户名','密码','ip:端口号/数据库') ...
- USB OTG ID 检测原理
OTG 检测的原理是: USB OTG标准在完全兼容USB2.0标准的基础上,增添了电源管理(节省功耗)功能,它允许设备既可作为主机,也可作为外设操作(两用OTG).USB OTG技术可实现没有主机时 ...
- outlook 2007如何设置自动转发功能
"工具" => "规则和通知" => 新建规则 => "邮件到达时检查" => 设置你的条件,比如发件人是谁,主题是 ...
- iOS开发基本须要
iOS开发基本须要 1 准备好对应的硬件和软件配置------基于Intel处理器的Mac操作系统 2 具有C++,Java或其它面向对象编程语言的开发经验 3 最新的iphone SDK的下 ...
- c++基础 之 面向对象特征一 : 继承
class Base { public: void f() { cout<<"void f()"<<endl<<endl; } void f(i ...
- SQL Server2008不允许修改表结构解决办法
1.修改表结构遇到 2.点击取消 3.打开[工具]—[选项] 4.找到[Desiginers]标签,在右边找到“阻止保存要求重现创建表的更改”,取消勾选.
- BZOJ 1146: [CTSC2008]网络管理Network( 树链剖分 + 树状数组套主席树 )
树链剖分完就成了一道主席树裸题了, 每次树链剖分找出相应区间然后用BIT+(可持久化)权值线段树就可以完成计数. 但是空间问题很严重....在修改时不必要的就不要新建, 直接修改原来的..详见代码. ...
- aJax学习之Ajax工作原理
转自:http://www.cnblogs.com/mingmingruyuedlut/archive/2011/10/18/2216553.html 在写这篇文章之前,曾经写过一篇关于AJAX技术的 ...
- R与数据分析旧笔记(十四) 动态聚类:K-means
动态聚类:K-means方法 动态聚类:K-means方法 算法 选择K个点作为初始质心 将每个点指派到最近的质心,形成K个簇(聚类) 重新计算每个簇的质心 重复2-3直至质心不发生变化 kmeans ...
- Spring Jdbc使用like模糊查询
public List<WfConfigMVO> queryList(WfConfigMVO wfConfig) throws SysException { StringBuffer sq ...