2012-03-07 48 views
0

我需要對數據行向量的相關性運行聚類,即不使用單個變量作爲聚類預測變量,我打算使用向量之間的相關性數據行之間的變量。用於在R中進行基於矢量的聚類的函數和數據格式

在R中是否有一個基於矢量的聚類的函數。如果不是,我需要手動完成,那麼在cmeans或kmeans等函數中輸入什麼樣的正確數據格式?假設我有m個變量和n個數據行,m個變量構成每個數據行的一個向量。所以我有一個n×n矩陣的相關或餘弦。該矩陣可以直接插入羣集函數中,還是需要進行某些處理?

非常感謝。

+0

你可以從'?kmeans'和'example(kmeans)'開始。另外,http://cran.r-project.org/web/views/Cluster.html – bdemarest 2012-03-07 19:12:22

回答

1

R聚類通常是有限的。這是R的設計限制,因爲它嚴重依賴低級C代碼來提高性能。 R中包含的快速kmeans實現就是這種低級代碼的一個例子,它反過來又與使用歐幾里德距離相關聯。

在R社區有十幾個擴展和替代品可供選擇。例如PAM,CLARA和CLARANS。他們不是,正好是 k-means,但密切相關。某處應該有一個「球形k-均值」,這對於餘弦距離是明智的。有整個家族的分層聚類(其規模相當嚴重 - 通常爲O(n^3),在一些例外情況下爲O(n^2)),但概念上很容易理解)。如果你想探索更多的聚類選項,看看ELKI,它應該允許通過基於相關性的距離(並且它還包括這樣的距離函數)進行聚類(使用各種方法,包括k均值)。不過,它是而不是R,但Java。所以如果你必須使用R,它不適合你。

+0

我之所以贊成這個原因有兩個:(1)有93個R軟件包提供聚類方法,一些是非常常用和引用的。 (2)問題特別要求在R. – bdemarest 2012-03-08 01:15:52

+0

的解決方案那麼,它們通常還是相當有限的。當你使用R(本身,而不是一些擴展)的kmeans聚類時,你不能插入不同的距離或相似度矩陣。這甚至可能是有這麼多擴展包的原因。有一些重疊和不一致。 – 2012-03-08 07:23:21

+0

很好的說明。我學到了一些新東西,並扭轉了我的失望。 – bdemarest 2012-03-08 19:18:27

1

您可以將相關矩陣轉換爲相異矩陣,例如1-cor(x)(或2-cor(x)1-abs(cor(x)))。

# Sample data 
n <- 200 
k <- 10 
x <- matrix(rnorm(n*k), nr=k) 
x <- x * row(x) # 10 dimensions, with less information in some of them 

# Clustering 
library(cluster) 
r <- pam(1-cor(x), diss=TRUE, k=5) 

# Check the results 
plot(prcomp(t(x))$x[,1:2], col=r$clustering, pch=16, cex=3)