我需要對數據行向量的相關性運行聚類,即不使用單個變量作爲聚類預測變量,我打算使用向量之間的相關性數據行之間的變量。用於在R中進行基於矢量的聚類的函數和數據格式
在R中是否有一個基於矢量的聚類的函數。如果不是,我需要手動完成,那麼在cmeans或kmeans等函數中輸入什麼樣的正確數據格式?假設我有m個變量和n個數據行,m個變量構成每個數據行的一個向量。所以我有一個n×n矩陣的相關或餘弦。該矩陣可以直接插入羣集函數中,還是需要進行某些處理?
非常感謝。
我需要對數據行向量的相關性運行聚類,即不使用單個變量作爲聚類預測變量,我打算使用向量之間的相關性數據行之間的變量。用於在R中進行基於矢量的聚類的函數和數據格式
在R中是否有一個基於矢量的聚類的函數。如果不是,我需要手動完成,那麼在cmeans或kmeans等函數中輸入什麼樣的正確數據格式?假設我有m個變量和n個數據行,m個變量構成每個數據行的一個向量。所以我有一個n×n矩陣的相關或餘弦。該矩陣可以直接插入羣集函數中,還是需要進行某些處理?
非常感謝。
R聚類通常是有限的。這是R的設計限制,因爲它嚴重依賴低級C代碼來提高性能。 R中包含的快速kmeans實現就是這種低級代碼的一個例子,它反過來又與使用歐幾里德距離相關聯。
在R社區有十幾個擴展和替代品可供選擇。例如PAM,CLARA和CLARANS。他們不是,正好是 k-means,但密切相關。某處應該有一個「球形k-均值」,這對於餘弦距離是明智的。有整個家族的分層聚類(其規模相當嚴重 - 通常爲O(n^3)
,在一些例外情況下爲O(n^2)
),但概念上很容易理解)。如果你想探索更多的聚類選項,看看ELKI,它應該允許通過基於相關性的距離(並且它還包括這樣的距離函數)進行聚類(使用各種方法,包括k均值)。不過,它是而不是R,但Java。所以如果你必須使用R,它不適合你。
您可以將相關矩陣轉換爲相異矩陣,例如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)
你可以從'?kmeans'和'example(kmeans)'開始。另外,http://cran.r-project.org/web/views/Cluster.html – bdemarest 2012-03-07 19:12:22