真正理解SVD直观的核心理念
今天,奇异值分解已经通过许多科学分支传播,特别是心理学和社会学、气候和大气科学以及天文学。它在机器学习以及描述性和预测性统计中也非常有用。
历史
奇异值分解技术(简称SVD)具有长期且有些令人惊讶的历史。它开始于社会科学与智力测试。早期的情报研究人员指出,用于衡量智力的不同方面的测试,例如口头和空间,通常是密切相关的。
因此,他们假设有一个共同的智力的一般衡量标准,他们称之为“g”,因为“一般情报”,现在通常被称为“智商”,所以他们着手解释构成的不同因素智力,以便拉出最重要的一个。
今天,奇异值分解已经通过许多科学分支传播,特别是心理学和社会学,气候和大气科学以及天文学。它在机器学习以及描述性和预测性统计中也非常有用。
力学的启发
回顾基本力学,力的分解是力的合成的逆运算,求一个力的分力的过程,同样遵守平行四边形法则。如果分解后的两个力是互相垂直的,就类似于坐标分解,一般可有无数种分法,如图所示。
所以,任何力矢量都可以沿x轴和y轴分解为其组件:
令人失望的是,几乎所有网上SVD方面的博客都讲的使其比必要的更复杂,而核心思想是非常简单的。
SVD只不过是将矢量分解为正交轴 - 我们只是认为它可能需要更堂皇的名称。
让我们看看情况如何。
当矢量a被分解时,我们得到3个信息:
第一、 投影方向的单元矢量(v ₁和v ₂)我们进行矢量分解的方向。在上面它们是x和y轴,但可以是任何其他正交轴。
第二、长度投影(线段sa1和sa2),这告诉我们有多少矢量被包含在投影的各个方向(a在v₁比在v₂上的投影更多,因此,sa1>sa2)。
第三、矢量投影(矢量pa1和pa2),用于重建原始矢量的分量(矢量和为原始矢量),以及用于其可以很容易地验证pa1 = sa1* v₁和pa2= sa2* v₂ ,很容易从以前的2个推断出来。
关键结论:
任何向量都可以用下式表示:
1.投影方向单位向量(v 1,v 2,...)。
2.投影到它们上面的长度(sₐ1,sₐ2,......)。
SVD所做的就是将这个结论扩展到多个向量(或点)和所有维度:
这是数据集的一个示例,一个点可以被认为是从原点出发的矢量。但是要处理这么多数据就是一个比较棘手的混乱。
如何处理这个混乱
如果不先处理单个向量,我们就无法处理这个混乱!
数学中的许多概括,主要使用矩阵。因此,我们必须找到一种方法来表示使用矩阵的向量分解的操作。
事实证明这是很自然的事情:
与之前的数字相同,但通过倾斜投影轴,来表明不限于x和y。aₓ和aᵧ是向量a的坐标,按照惯例放入列矩阵(列向量)。对于v1和v2也是如此。
我们想要沿着单位矢量v 1和v 2分解或者说投影矢量a。
该投影是由点积来实现的 ,它为我们提供了长度投影sa1和sa2:
将a投射到v1和v2上。
但是如果我们可以利用矩阵,那么效率是出色的......
通过为每个单位矢量添加更多的列,一次写入两个方程式。
我们甚至可以添加更多点......
添加一个额外的行就相当于添加了点。S是包含投影长度的矩阵。
在添加点b之后,它就是这样的样子:
现在可以很容易地推广到任意数量的点和维度:
n =点的个数;
d =维度大小;
A =包含点的矩阵;
V =包含分解轴的矩阵;
S =包含投影长度的矩阵。
下面的动态很好的体现了数学优雅:
总结概括:
在这种情况下,点积只是普通的矩阵乘法。
这就是说:
因为V列是正交的,所以它的逆=它的转置(正交矩阵的属性)。
这就是SVD的关键结论:
任何一组矢量(A)可以用其在某组正交轴(V)上的投影长度(S)表示。
传统的SVD公式说:
但这只是意味着我们想看看如何:
这就是接下来需要我们推导的。
如果仔细查看矩阵S,您会发现它包括:
事实证明(出于后面会看到的原因)我们最好能够对这些列向量进行归一化,即使它们具有单位长度。
这是通过相当于将每个列向量除以其大小来完成的,以矩阵形式。
看一个例子,来看看这个'分裂'的事情是如何完成的。
假设我们想将M的第1列除以2。要求必须乘以另一个矩阵来保持恒等:
可以直接验证未知矩阵只不过是单位矩阵,第1行第1列被除数2替换:
第二列除以3现在变成了直接的事-只需用元素3有来更换单位阵第2行第2列:
应该明白如何将此操作推广到任何大小的任何矩阵。
现在,我们要在上面的'除法'的概念应用到矩阵。
为了标准化S的列,我们将它们除以它们的大小......
.通过使用S,我们在上面的例子中用M做了什么:
最后得到:
这不就是奇异值分解的形式吗?
解释
我们来谈谈这个U和Σ ......
σ是什么?为什么我们要把S标准化来找到它们?
由上面我们已经知道,σᵢ是所有点在单位矢量vᵢ投影长度的平方和的平方根。
这是什么意思?
红色部分= 向量在v1上的投影。蓝色部分= 向量在v2上的投影。点越接近特定投影轴,相应σ的值越大。
因为σ在其定义中包含特定轴上的投影长度之和,因此它们表示所有点与该轴的接近程度。
例如,如果σ1>σ2,那么大多数点比v2更接近v1,反之亦然。
这在SVD的无数应用中具有巨大的实用性。
主要应用
找到矩阵的SVD分解的算法并不是不随机选择投影方向(矩阵V的列)的。
他们选择要投影的向量作为数据集的主成分(矩阵A)。
它们是变化最大的线(最大方差)。
特征降维的目的是把数据集投影到方差最大的线(或平面):
洋红色:投射前的点。紫罗兰:投影后的点(维数减少)。
现在,使用SVD投影数据集的行为变得非常简单,因为所有点都已经在所有主成分(vᵢ单位向量)上投影(分解):
因此,例如,将数据集投影到第一个主成分上......
现在,我们要做的就是删除与第一主成分无关的所有列。现在A'中的投影数据集 。
将两个矩阵(上面的S和Vᵀ)相乘得到包含投影点的矩阵A'。