SVD(奇异值分解)的原理与应用

1. 前言

前段时间做三维模型参数化的过程中接触到了SVD(singular value decomposition),翻译成中文就是奇异值分解。它的作用简单来说,就是提取一个较复杂矩阵中的关键部分,然后用一个简单的矩阵表示其关键部分,以达到简化的目的。基于这个原因,它的应用范围也十分广泛,比如:LSA(隐性语义分析)、推荐系统、特征压缩(或称数据降维)、PCA(主成分分析)、模型参数化等。

2. SVD原理

特征值分解和奇异值分解两者有着很紧密的关系,特征值分解和奇异值分解的目的都是一样,就是提取出一个矩阵最重要的特征。先谈谈特征值分解吧:

A 特征值:
如果说一个向量v是方阵A的特征向量,将一定可以表示成下面的形式:
Alt
这时候λ就被称为特征向量v对应的特征值,一个矩阵的一组特征向量是一组正交向量。特征值分解是将一个矩阵分解成下面的形式:
在这里插入图片描述
其中Q是这个矩阵A的特征向量组成的矩阵,Σ是一个对角阵,每一个对角线上的元素就是一个特征值,里面的特征值是由大到小排列的,这些特征值所对应的特征向量就是描述这个矩阵变化方向(从主要的变化到次要的变化排列)。在这里要明确一点,一个矩阵乘以一个向量后得到的向量,其实就相当于将这个向量进行了线性变换。
比如说下面的一个矩阵:
在这里插入图片描述
M乘以向量(x,y):
在这里插入图片描述
也就是拉伸向量的x轴,示意图如下:
在这里插入图片描述
B 奇异值
特征值分解是一个提取矩阵特征很不错的方法,但是它只是对方阵而言的,但在实际应用过程中方阵并没有普遍性,奇异值分解可以用来干这个事情,奇异值分解是一个能适用于任意的矩阵的一种分解的方法:
在这里插入图片描述
奇异值跟特征值类似,在矩阵Σ中也是从大到小排列,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上了。也就是说,我们也可以用前 r 个的奇异值来近似描述矩阵,这里定义一下部分奇异值分解:
在这里插入图片描述
右边的三个矩阵相乘的结果将会是一个接近于A的矩阵,在这儿,r越接近于n,则相乘的结果越接近于A。而这三个矩阵的面积之和(在存储观点来说,矩阵面积越小,存储量就越小)要远远小于原始的矩阵A,我们如果想要压缩空间来表示原矩阵A,我们存下这里的三个矩阵:U、Σ、V就好了。通常我们只保留前三个或前几个奇异值就可以近似表示矩阵A了。

3. SVD的应用

A 三维模型参数化过程中会涉及到SVD的内容(ARAP算法中应用到),参数化效果示意图如下图:
在这里插入图片描述
参数化至
在这里插入图片描述

B 用SVD解PCA的问题,示意图如下:

在这里插入图片描述
其实SVD在还有很多实际应用(如数据压缩等),我暂时还没接触过,就先写这么多吧。

  • 11
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值