我正在寻找在JavaScript中实现主成分分析(PCA)的双图。我的问题是,如何从数据矩阵的奇异矢量分解(SVD)的输出确定箭头的坐标?
这是R生成的示例双图:
biplot(prcomp(iris[,1:4]))
我尝试在biplot上的Wikipedia文章中查找它,但它不是很有用。或正确。不知道哪个。
biplot()
。另外,为什么还要花R-JS集成一些只需要几行代码的内容。
我正在寻找在JavaScript中实现主成分分析(PCA)的双图。我的问题是,如何从数据矩阵的奇异矢量分解(SVD)的输出确定箭头的坐标?
这是R生成的示例双图:
biplot(prcomp(iris[,1:4]))
我尝试在biplot上的Wikipedia文章中查找它,但它不是很有用。或正确。不知道哪个。
biplot()
。另外,为什么还要花R-JS集成一些只需要几行代码的内容。
Answers:
产生PCA双图的方法有很多,因此,您的问题没有唯一的答案。这是一个简短的概述。
我们假设数据矩阵在行中有数据点并居中(即列均值为零)。目前,我们不假定它是标准化的,即,我们在协方差矩阵(而不是相关矩阵)上考虑PCA。PCA等于奇异值分解有关详细信息请参见我的回答:SVD与PCA之间的关系。如何使用SVD执行PCA?
在PCA双线图中,将两个第一主成分绘制为散点图,即第一列相对于其第二列。但是规范化可以有所不同。例如,可以使用:
此外,原始变量绘制为箭头。即第个箭头端点的坐标由的第一列和第二列中的第个值给出。但是同样,可以选择不同的规范化,例如:
这是Fisher Iris数据集的所有内容:
将上方的任何子图与下方的任何子图组合将构成可能的归一化。但是根据1971年在加百列(Gabriel)中引入的Biplot的原始定义,矩阵的Biplot图形显示应用于主成分分析(顺便说一下,本文有2k引用),用于Biplot的矩阵在相乘时应该近似(这就是重点)。因此,“适当的双图”可以使用和。因此,这中只有3是“适当的双线图”:即,上面的任何子图与下面的一个子图的组合。
[无论使用哪种组合,都可能需要将箭头按某个恒定常数进行缩放,以使箭头和数据点大致以相同的比例出现。]
对于箭头,使用负载,具有很大的好处,因为它们具有有用的解释(有关负载,另请参见此处)。加载箭头的长度近似于原始变量的标准偏差(平方长度近似于方差),任意两个箭头之间的标量积近似于它们之间的协方差,箭头之间的角度的余弦近似于原始变量之间的相关性。要制作“适当的双图”,应选择(即标准化PC)作为数据点。Gabriel(1971)将此称为“ PCA双图”,并写道
这个[特殊选择]很可能在解释多元观测矩阵时提供最有用的图形帮助,当然,前提是这些可以在第二级得到足够的近似。
使用和可以很好地解释:箭头是原始基矢量在PC平面上的投影,请参见@ hxd1011的插图。
甚至可以选择将原始PC与负载一起绘制。这是一个“不合适的双目图”,但是例如由@vqv在我见过的最优雅的双目图上完成:可视化一百万个PCA版本 -它显示了葡萄酒数据集的PCA。
您发布的图形(R biplot
函数的默认结果)是带有和的“适当双图” 。该功能可缩放两个子图,以使其跨越相同区域。不幸的是,该函数做出了一个奇怪的选择,将所有箭头缩小倍,并在箭头终点应显示的位置显示文本标签。(另外,不正确的,事实上结束了绘制的分数获得缩放平方和的替代,见@AntoniParellada本次详查:箭头R中潜在的PCA双标图变量。 )biplot
biplot
如果我们进一步假设数据矩阵已经标准化,因此列标准偏差都等于,那么我们将在相关矩阵上执行PCA。这是同一个人的样子:
这里的负载更具吸引力,因为(除了上述特性之外)它们还提供了原始变量和PC之间的准确(而非近似)相关系数。相关性均小于并且加载箭头必须位于半径的“相关性圆”内,有时也会在双图上绘制(我在上面的对应子图上绘制了它)。请注意,@ vqv(上面链接)的双标图是针对相关矩阵上的PCA完成的,并且还带有相关圆。