2013-06-24 210 views
7

是否有將距離矩陣轉換爲一組座標的包? 我經歷了以下問題。我希望能有這樣的套餐。距離矩陣R中的座標

Finding the coordinates of points from distance matrix

我已經考慮薩蒙斯投影爲此但是從我的理解,這是一個優化,並讓你的最佳解決方案。我認爲應該有一個算法來獲得這個獨特的解決方案。

+1

沒有一個獨特的解決這個問題,因爲你可以旋轉你的數據集而不影響距離矩陣。 – Backlin

回答

7

多維尺度(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) 

延伸閱讀:https://stats.stackexchange.com/questions/14002/whats-the-difference-between-principal-components-analysis-and-multidimensional

mds projection

+0

感謝您的回答。但正如我上面評論的,這是一個確切的解決方案還是另一個優化器? – Avinash

+1

這是一個特徵值問題 (如在[這個答案](http://stackoverflow.com/a/17177833/1129973)) 所以它可以被看作是一個優化。 如果有確切的解決方案,它將返回一個確切的解決方案,如果沒有確切的解決方案,它不會失敗,但會給出一個近似的解決方案。 –

2

查找稱爲Multi-Dimensional Scaling(MDS)的算法。中的R的實施是從所述statscmdscale功能:

多維尺度採用一組不相似的,並返回一組點,使得所述點之間的距離是大約等於不相似的。

的文檔還具有這樣一個距離矩陣變成的xy座標兩個向量的一例,然後繪圖。

+0

這不是另一種優化嗎?在我鏈接的另一個問題中定義的算法對我來說很有意義。 MDS做同樣的事情嗎? 正如已經指出的那樣,沒有獨特的解決方案,但它有一個解決方案,所以我不認爲需要一個近似/最佳的解決方案時,可以實現精確的解決方案。除非我在這裏完全誤解了MDS,否則請原諒我的無知。 – Avinash