---
# System prepended metadata

title: 从数据降维角度理解SVD分解物理含义
tags: [Product Quantizer]

---

# 从数据降维角度理解SVD分解物理含义
###### tags: `Product Quantizer`
[ToC]

SVD的数学推导网上有很多，这里就不再重复了，这里的叙述主要是从数据降维角度出发，尽量从人可以直观理解的方面来解释SVD分解到底在做啥。数据降维的一般操作流程是从原始数据池中选取一个数据子集，按照每行一个的顺序组成一个数据样本矩阵$A^{\in m*n}$,其中$m$是样本数目，$n$是样本维度。然后用SVD对矩阵A进行分解
$$A=U\Sigma V^T$$
最后取$V$的前$k$列作为降维矩阵即可。后面会展开说明为什么这样可以以及其物理含义是什么。
### 普通数学中的函数分解
我们数学中有很多对复杂函数的分解方法，比如，为了分析函数中的频率成分，就会进行傅里叶分解(详情可参考[傅里叶分解](https://blog.csdn.net/l494926429/article/details/51818012/))，最前面的频率是低频，能量大，能复述出函数的基本形态，后面的是高频，能量小，能复述出函数的局部细节。泰勒分解也类似，通常，对函数进行分解就是为了更好的分析函数，比如求导，提取函数主要成分等。矩阵分解也是这个意思，通过将原来的矩阵分解成一些基本单元的线性组合，来达到提取信息主成分的目的。
### SVD
基本参考[SVD分解](https://zhuanlan.zhihu.com/p/29846048)，为了更便于理解，给出一些辅助说明
#### $m$和$n$的大小
结合$m$和$n$的物理含义，$m$一般得远大于$n$,因为如果不是这样，矩阵的秩会小于$n$，求得的降维矩阵严重拟合样本，不能代表原始数据的分布特性，后面也只考虑样本数$m$远大于维度$n$的情况。
#### 右矩阵$V$的含义
我们仅考虑原始矩阵$A^{\in m*n}$的每一行，也就是每一个样本为0均值样本，如果不是，那么可以统计处所有样本的均值，然后减去这个均值变为0均值样本，为什么要这么变换呢，因为在这种情况下，$A^TA$有明确的物理含义，那么就是所有**维度间**的自协方差矩阵,改协方差矩阵对角线代表每个维度的方差，其他元素代表两个维度之间的相关性。我们用PCA降维的目的不就是想得到一个单位正交变换矩阵$V^{\in n*n}$，使得原始数据变换到这个空间后得到新数据$AV$,维度间都不相关，这样我们选取方差最大的一些维度就能保留原始数据的最大信息量，用公式表达也就是
$$(AV)^{T}AV=\Sigma $$
其中$\Sigma$是一个仅对角线元素不为0的对角阵，代表着新空间的数据每两个维度间均不相关，简单的变换一下
$$(A^{T}A)V=\Sigma V$$
很明显了，就是要对样本维度的协方差矩阵进行特征值和特征向量的求解，就可以得到降维矩阵$V$和其对应的权重$\Sigma$,这么看，如果仅仅需要对数据进行PCA降维，是直接用求出维度协方差矩阵，然后进行特征值分解就行了，完全没必要求解左矩阵相关的东西。
### 左矩阵$U$的含义
首先从[SVD分解](https://zhuanlan.zhihu.com/p/29846048)陈述的$U$矩阵的求解过程，也可以按照$V$矩阵的分析套路来分析$U$，U是对样本间的协方差矩阵进行特征值分解得到，$U^{T}A$代表的操作是去除**样本间**的相关性，将样本映射到另一个各个样本空间。也就是样本间并不是相互独立的，他们之间有肯能可以相互表示，有信息冗余。为了去除不重要的样本，仅保留重要的样本的信息，和处理维度时候的手段一样，将样本映射到另一个正交空间。
#### 简单例子
为了更通俗的了解，举一个简单的例子，假设我是一个班主任，我班里共有50人，考试成绩一共有10（百分制）科，那么全班人的成绩就是50 * 10的一个矩阵，但是我觉得存这么多数据太浪费了，于是想着压缩一个这个矩阵，但是压缩后的矩阵仍然需要支持我分析每个同学的学习情况以及每个老师的教学情况。
##### 右矩阵$V$
首先从第一个维度，我觉得每个学生的十门成绩并不是完全独立的，比如，一个人数学99分，那他的物理会是10分吗？简单起见我认为存每个学生的理科平均分和文科平均分就能代表它的学习好坏，以及特长方向。一个学生的成绩用$\{a_{1},a_{2},a_{3},a_{4},...a_{10}\}$表示，前五个存的理科成绩，后五个存的文科成绩，那么我刚才说的仅存每个人的文科总分和理科总分就可以用两个向量表示，即$\{1,1,1,1,1,0,0,0,0,0\}$和$\{0,0,0,0,0,1,1,1,1,1\}$表示，这样，一个学生的乘积，和这两个向量点乘，就能获取它的文科总成绩和理科总成绩，我们姑且认为这两个向量相互独立（虽然很多时候，有些理科好的同学，文科也很好），他们就分别是SVD右矩阵$V$的两个轴。50 * 10 的成绩矩阵和这个$V$相乘后悔变成50*2，就实现了PCA降维。
#### 左矩阵$U$
（无意要用优等生，差生等词，方便叙述）
作为一个班主任，我不单要盯着学生，还要关注每个老师的教学情况，拿物理来说，我要看一个班50个人的物理成绩，用$\{m1,m2,...m50\}$表示，来分析这个老师教的咋样，但是我年龄大了，50个人看不过来，于是就想着选一些有代表的学生来看，但是又想尽量利用多的学生的信息，于是我构造了物理优等生，物理中等生，物理差生这三个抽象的同学，我先将乘积按照物理排序，然后将前10的物理成绩均值为物理优等生的物理成绩，中间10个的均值为物理中等生的乘积，最后10个为物理差生的乘积，能代表三个操作的向量分别为$\{ \underbrace{1,...,1}_{10},\underbrace{0,...,0}_{40},\}$，$\{ \underbrace{1,...,1}_{20},\underbrace{0,...,0}_{10},\underbrace{1,...,1}_{20}\}$，$\{ \underbrace{1,...,1}_{40},\underbrace{0,...,0}_{10},\}$，用原始的50个人的物理成绩和这三个向量求点乘积，能得到三个抽象学生的物理成绩，同理，对于每一科，我们都构造类似的抽象学生，每个学生仍然得计算10门乘积，只不过每个抽象学生10门成绩，已经不再有原始的乘积特性了，这样我们可以用30个抽象学生，代替原来50个学生，来分析各科成绩，当然，实际中的抽象学术，很可能不是只考虑一门成绩，要综合多门乘积来构造虚拟学生。
#### tips
矩阵和其转置矩阵的特征值和特征值是相等的，所以$U$和$V^{T}$的有效特征值是一样的，$U$相对于V多出的特征值，是一堆0