给定一个矩阵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函数或任何类似的东西?
给定一个矩阵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函数或任何类似的东西?
如果您对经典的 MDS 算法感兴趣,可以在 Wikipedia 页面上很好地说明它:
经典 MDS 使用的事实是坐标矩阵可以通过特征值分解从. 和矩阵可以从邻近矩阵计算通过使用双中心。
- 设置平方邻近矩阵
应用双居中: 使用居中矩阵 , 在哪里 是对象的数量。
确定 最大特征值 和相应的特征向量 的 (在哪里 是输出所需的维数)。
现在, , 在哪里 是矩阵 特征向量和 是对角矩阵 的特征值 .
我真的不知道你的 矩阵是,但如果每个条目都是距离 到 条目,那么这将是您的邻近矩阵。
还, 是一个全为 1 的 n×n 矩阵。这应该是不言自明的,但是如果您不确定,可以用谷歌搜索这些术语中的大多数。它实际上不应该超过 10 行代码。