为什么 PCA 中的主成分相互正交?我知道 PCA 可以通过 计算eig(cov(X))
,其中X
居中。但我不明白为什么特征向量应该是正交的。
为什么 PCA(协方差矩阵的特征向量)中的主成分相互正交?
协方差矩阵是对称的。如果矩阵是对称的,并且具有两个特征向量和,则考虑和。
然后通过对称(并写为转置):
更直接:
由于这些相等,我们得到。所以要么并且两个向量是正交的,或者并且两个特征值相等。在后一种情况下,该重复特征值的特征空间可以包含非正交的特征向量。因此,您本能地质疑为什么特征向量必须是正交的,这是一个很好的直觉。如果有重复的特征值,它们可能不会!如果您的样本协方差是单位矩阵怎么办?这具有重复的特征值,并且任何两个非零向量都是特征向量,正交与否。(思考这些特殊情况通常是发现反例的好方法。)
如果一个对称矩阵有一个重复的特征值,我们可以选择从它的特征空间中挑选出正交的特征向量。这就是我们想要在 PCA 中做的事情,因为找到正交分量是整个练习的重点。当然,您的样本协方差矩阵不太可能有重复的特征值 - 如果是这样,它只会对您的数据进行少量扰动以使它们不相等 - 但我们应该注意定义我们的算法,以便它确实挑选出正交特征向量. (请注意,它选择哪个以及按什么顺序是任意的。回想一下单位矩阵及其所有可能的正交特征向量集!这是对和为唯一的特征值。来自 PCA 的两种不同实现的输出看起来可能完全不同。)
要了解为什么可以保证我们可以以这种方式设置我们的实现eig(cov(X))
——换句话说,为什么总是有“刚好足够”的正交向量我们可以从那个特征空间中挑选出来——你需要理解为什么几何和代数的多重性是相等的对于对称矩阵。如果特征值出现两次,我们可以挑出两个正交的特征向量;三次,我们可以挑出三个,依此类推。在这个数学堆栈交换线程中提出了几种方法,但通常的方法是通过Schur 分解。您所追求的结果可能在您的线性代数教科书中被证明为“谱定理”(尽管该短语也可以指几个更一般的结果) 或者更具体的名称,例如“对称特征值分解”。对称矩阵有几个值得了解的好性质,例如它们的特征值是实数,因此我们可以找到实数特征向量,这对 PCA 有明显的影响。
最后,我们如何编写实现这一点的实现?我将考虑在R
. 我们可以看到代码princomp
: 看看methods(princomp)
然后getAnywhere(princomp.default)
我们观察edc <- eigen(cv, symmetric = TRUE)
。因此eigen
将对对称矩阵使用 LAPACK 例程。查看LAPACK 用户指南(第 3 版)的“对称特征问题”,我们看到它首先分解,其中是对称三对角线,是正交的,然后分解,其中是对角线,正交。然后写我们已经对角化。这里是特征值的向量(和- 它们的结果相同),因为是两个正交矩阵的乘积,所以它也是正交的。计算的特征向量是的列,因此我们可以看到 LAPACK 保证它们将是正交的(如果您想知道的正交向量是如何被挑选的,使用相对稳健的表示过程,请查看DSYEVR的文档) . 所以这是一种方法,但出于数字原因,最好进行奇异值分解. 如果您在 中查看另一个 PCA 函数的引擎盖R
,您会发现这是如何prcomp
工作的。R
使用一组不同的 LAPACK 例程来解决这个问题。
我认为这可能有助于从数学中回过头来思考 PCA 的目标。在我看来,PCA 用于以尽可能最清晰的方式表示大维数据集(许多变量)——即尽可能多地揭示底层数据结构的方式。
例如,让我们考虑一个包含 3 个变量的数据集:人的身高、体重和年龄。如果您有这些数据,您可以创建 3 个单独的二维散点图,身高与体重、体重与年龄和年龄与身高 - 如果您绘制它们,它们看起来都像带有底数的“正方形” =X 轴,高度 =Y 轴。
但是,如果您怀疑所有 3 个变量之间存在有趣的关系,您可能希望创建一个包含 X、Y 和 Z 轴的数据的 3 维图 - 这将创建一个 3-D“立方体”图。这个情节可能会揭示一种你想与人们交流的有趣关系。但是当然,您不能打印 3 维图,因此您必须将数据投影到 2 维纸上,这意味着您必须选择 2 维进行优先排序,而牺牲了第 3 维(即将与您正在打印的纸张正交)。
您可以尝试使用颜色编码或各种大小的气泡来直观地包含第 3 维。或者,您可以旋转绘图(在您的脑海中或使用软件),直到找到一个新的投影,该投影在 2-D 空间中表达尽可能多的 3-D 信息——想象一下只是旋转“立方体”直到您要显示的基础数据关系尽可能清晰地打印在纸上。当您在 2-D 空间中旋转 3-D“立方体”时,您创建了新的合成轴,这些新的合成轴相互正交——并且对应于您正在打印的纸张的长度和宽度。如果您沿着这些新的合成轴移动,您将同时在原始数据的多个维度(身高、体重和年龄)中移动,
我们可以直观地想到这一点,因为我们的大脑理解 3 维空间,但是如果你谈论的是更高维的数据集,事情很快就会出现问题。我们无法想象 9 维“超立方体”(至少我不能),但我们经常不得不处理包含许多变量的数据集。我们可以使用软件(或艰苦的数学)在空间中“旋转” 9 维数据,直到找到代表尽可能多的高维数据结构的新投影——用于在 2 维页面上打印.
这正是 PCA 所做的。同样,为简单起见,考虑早期绘制在“立方体”空间中的 3-D 数据集示例——我们会看到类似点云的东西。PCA 只是简单地旋转该云,直到找到可能穿过该云的“最长”直线——这条线的方向变为 PC1。然后,在 PC1 固定的情况下,数据点云再次沿 PC1 旋转,直到找到下一个“最长”正交轴,即 PC2。然后,您可以打印一个新的 2-D 图(PC1 与 PC2),尽可能多地捕获 3-D 数据结构。当然,如果有助于理解数据,您可以继续查找 PC3、PC4 等。
然后,PCA 结果将告诉您新的合成主成分解释了多少数据方差,并且如果 PCA 轴捕获的数据方差比您预期随机发生的更多,我们可以推断存在原始测量变量之间的有意义的关系。
在我看来,所有关于特征向量和矩阵代数的讨论都有点离题(而且,我在数学上也没有那么大的倾向)——正交轴只是这种矩阵代数的固有部分。因此,引用正交轴的数学基础并不能真正解释为什么我们将这种方法用于 PCA。我们在统计分析中使用这个矩阵代数,因为它可以帮助我们揭示我们感兴趣的数据结构的重要特征。