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矩阵的秩,则存在奇异值分解:
Σ为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可以被用与求低阶近似问题,步骤如下:
2. 构造,它是将的第k+1行至M行设为零,也就是把的最小的r-k个(the r-k smallest)奇异值设为零。
回忆在基础知识一节里曾经讲过,特征值数值的大小对矩阵-向量相乘影响的大小成正比,而奇异值和特征值也是正比关系,因此这里选取数值最小的r-k个特征值设为零合乎情理,即我们所希望的C-Ck尽可能的小。完整的证明可以在Introduction to Information Retrieval[2]中找到。
我们现在也清楚了LSA的基本思路:LSA希望通过降低传统向量空间的维度来去除空间中的“噪音”,而降维可以通过SVD实现,因此首先对Term-Document矩阵进行SVD分解,然后降维并构造语义空间。
相关推荐
1.领域:FPGA,SVD奇异值分解算法,纯verilog开发,不使用IP核,可以移植到其他平台 2.内容:基于FPGA的SVD奇异值分解verilog编程实现,含testbench测试程序+代码操作视频 3.用处:用于SVD奇异值分解算法编程学习 ...
CUDA 7.5的SVD奇异值分解实现,使用cuSolver实现的,工程是VS2013的工程,需要自己设置VC++库的include、library目录,里面有一点opencv的svd分解比较,不想看的就注释掉对应的部分就行。
### SVD奇异值分解详解 #### 一、引言 SVD(Singular Value Decomposition,奇异值分解)是一种强大的矩阵分析工具,在许多领域都有着广泛的应用,如数据分析、图像处理、机器学习等。通过SVD,我们可以将一个复杂...
Java SVD奇异值分解是一种在数据挖掘和机器学习领域广泛应用的数学技术,它主要用于矩阵的分解和数据分析。奇异值分解可以将一个矩阵分解为三个矩阵的乘积:U * Σ * V^T,其中U和V是正交矩阵,Σ是对角矩阵,对角线...
SVD 奇异值分解代码,矩阵分析的利器,可以高精度的分解各种类型的矩阵
一、SVD奇异值分解简介 SVD全称为Singular Value Decomposition,即奇异值分解。对于任意一个m×n的矩阵A,可以分解为三个矩阵的乘积形式:A = UΣV^T,其中U和V是对称正交矩阵,Σ是一个对角矩阵,其对角线上的元素...
在给定的标题“svd.c.rar_SVD_SVD奇异值分解_SVD算法_svd.c_奇异值算法”中,我们可以看到SVD与编程语言C的结合,表明这是一个关于如何用C语言实现SVD算法的资源。 SVD是线性代数中的一个重要概念,它将任意一个m×...
奇异值分解(Singular Value Decomposition,简称SVD)是线性代数中一个非常重要的技术,它在数据处理和机器学习领域有着广泛的应用。SVD可以将任意矩阵分解为三个矩阵的乘积,形式为\( A = U \Sigma V^\top \),...
奇异值分解(Singular Value Decomposition,简称SVD)是线性代数中一个非常重要的概念,它在信号处理、图像分析、机器学习等多个IT领域都有广泛应用。SVD能够将任何矩阵分解为三个矩阵的乘积,即: \[ A = U \...
SVD奇异值分解代码:包含完整工程,可直接运行,代码有C++和C两种。奇异值分解在数据降维中有较多的应用,这里把它的原理简单总结一下,并且举一个图片压缩的例子,最后做一个简单的分析,希望能够给大家带来帮助。
基于Python实现SVD奇异值分解.rar
这个名为"SVD奇异值分解代码"的压缩包文件包含了两个文件:svdexp2.m和www.pudn.com.txt,其中svdexp2.m应该是MATLAB实现的SVD算法示例代码,而www.pudn.com.txt可能是发布者提供的额外信息或者链接。 首先,我们要...
用于矩阵的奇异值分解,解决了自己计算的复杂度
实验2 svd 奇异值分解 实验3 LDA 和 TF-IDF 文本标识 - - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用...
根据奇异值分解的基本原理及其特点,给出了运羽奇异值分解进行图像压缩的方法.通过简单的例子说明了该方法进行图像压缩的基本过程,给出了压缩流程.并通过MATLAB编程对实际图像进行处理,表明了该方法的有效性
奇异值分解(Singular Value Decomposition,简称SVD)是一种在数学、计算机科学和信号处理等领域广泛应用的矩阵分解方法。SVD将一个矩阵分解为三个矩阵的乘积,分别是单位矩阵U、对角奇异值矩阵Σ和单位矩阵V的转置...
依据奇异值理论把行列式构造成Hankle矩阵,依据特征值进行重构,形成多个分量信号
摘要阵最本质的变换. 使SVD对矩阵进分解, 能得到代表矩阵最本质变化的矩阵元素. 这就好个合数能表为若质数之积, 分解合数能得到表该合数的质因数;复杂周期信号
奇异值分解是线性代数中一种重要的矩阵分解,在信号处理、统计学等领域有重要应用。
Elad2006年的论文以及论文的实现代码