是否有将距离矩阵转换为一组坐标的包? 我经历了以下问题。我希望能有这样的套餐。距离矩阵R中的坐标
Finding the coordinates of points from distance matrix
我已经考虑萨蒙斯投影为此但是从我的理解,这是一个优化,并让你的最佳解决方案。我认为应该有一个算法来获得这个独特的解决方案。
是否有将距离矩阵转换为一组坐标的包? 我经历了以下问题。我希望能有这样的套餐。距离矩阵R中的坐标
Finding the coordinates of points from distance matrix
我已经考虑萨蒙斯投影为此但是从我的理解,这是一个优化,并让你的最佳解决方案。我认为应该有一个算法来获得这个独特的解决方案。
多维尺度(MDS)旨在数据的距离矩阵投影到低维ķ,其中期望K = 2在你的情况下,同时试图保持数据点之间的距离:
# Multidimensional scaling
library(MASS)
set.seed(1)
labels <- as.factor(sample(LETTERS[1:5], 100, replace=TRUE))
dat <- mvrnorm(n=100, mu = c(1:4), Sigma=matrix(1:16, ncol=4)) + as.numeric(labels)^2
#> dim(dat)
#[1] 100 4
# Euclidean distance matrix (100x100)
d <- dist(dat)
# Classical MDS for distance matrix d
# http://en.wikipedia.org/wiki/Multidimensional_scaling
mds <- cmdscale(d, k = 2)
x <- mds[,1]
y <- mds[,2]
plot(x,y, col=rainbow(5)[as.numeric(labels)], pch=16, main="MDS for object 'dat'")
legend("topright", legend=unique(labels), col=rainbow(5)[unique(as.numeric(labels))], pch=16)
感谢您的回答。但正如我上面评论的,这是一个确切的解决方案还是另一个优化器? – Avinash
这是一个特征值问题 (如在[这个答案](http://stackoverflow.com/a/17177833/1129973)) 所以它可以被看作是一个优化。 如果有确切的解决方案,它将返回一个确切的解决方案,如果没有确切的解决方案,它不会失败,但会给出一个近似的解决方案。 –
查找称为Multi-Dimensional Scaling
(MDS)的算法。中的R的实施是从所述stats
包cmdscale
功能:
多维尺度采用一组不相似的,并返回一组点,使得所述点之间的距离是大约等于不相似的。
的文档还具有这样一个距离矩阵变成的x
和y
坐标两个向量的一例,然后绘图。
这不是另一种优化吗?在我链接的另一个问题中定义的算法对我来说很有意义。 MDS做同样的事情吗? 正如已经指出的那样,没有独特的解决方案,但它有一个解决方案,所以我不认为需要一个近似/最佳的解决方案时,可以实现精确的解决方案。除非我在这里完全误解了MDS,否则请原谅我的无知。 – Avinash
没有一个独特的解决这个问题,因为你可以旋转你的数据集而不影响距离矩阵。 – Backlin