在 R 中手动完成 MDS

数据挖掘 机器学习 统计数据 降维
2021-09-26 07:42:39

给定一个矩阵A,我想手动完成多维缩放,而不是使用任何给定的 R 函数。

因此,我B使用以下代码计算了中心矩阵:

 n<-nrow(A)
 id<-diag(n)
 e<-diag(id)
 H <- id - (1/n)*e %*% etranspose
 B <- (-1/2)* H %*% A %*% H

我的问题是:如何使用我的 B 矩阵在我的 A 矩阵上完成多维缩放,而无需cmdscale函数或任何类似的东西?

1个回答

如果您对经典的 MDS 算法感兴趣,可以在 Wikipedia 页面上很好地说明它

经典 MDS 使用的事实是坐标矩阵可以通过特征值分解从B=XX. 和矩阵B可以从邻近矩阵计算D通过使用双中心。

  1. 设置平方邻近矩阵D(2)=[dij2]
  2. 应用双居中: =-12ĴD(2)Ĵ 使用居中矩阵 Ĵ=一世-1n11', 在哪里 n 是对象的数量。

  3. 确定 最大特征值 λ1,λ2,...,λ 和相应的特征向量 e1,e2,...,e (在哪里 是输出所需的维数)。

  4. 现在, X=Λ1/2, 在哪里 是矩阵 特征向量和 Λ 是对角矩阵 的特征值 .

我真的不知道你的 一个 矩阵是,但如果每个条目都是距离 一世HjH条目,那么这将是您的邻近矩阵

还, 11'是一个全为 1 的 n×n 矩阵。这应该是不言自明的,但是如果您不确定,可以用谷歌搜索这些术语中的大多数。它实际上不应该超过 10 行代码。