2017-07-05 30 views
0

我有觀察的樣本集如下如何根據頻率對分類變量執行聚類/分組?

var1 var2 var3 var4 
1 2 1  1 
3 2 1  3 
1 2 0  1 
3 2 2  3 

所有值在本質上分類。我想將第一行和第三行分組到一個集羣,將第二行和第四行分組到另一個集羣。我認爲在這種情況下單熱編碼不是有效的,因爲分類變量不具有任何等級,並且它們純粹是名義上的。

(這些行不一定必須完全相同)。是否有預先建立的數學算法來根據相似性/頻率對這些行進行分組?任何人都可以提出一個好辦法嗎?或者我應該使用熱門編碼嗎?

+0

而且聚類可以圍繞中心點算法分區使用高爾的距離,如果我沒看錯進行。 –

回答

1

您可以使用高爾距離來計算分類變量之間的距離。

下面的例子:

# Import data 
dta <- read.table(header = TRUE, textConnection("Var1 var2 var3 var4 
1 2 1  1 
3 2 1  3 
1 2 0  1 
3 2 2  3")) 
dta <- as.data.frame(lapply(dta, as.factor)) 


# Create distance matrix using gower distance using gower package (fast) 
# The code below computes the complete distance matrix, while only the upper 
# or lower half is needed; so this could be improved. 
library(gower) 
pairs <- expand.grid(x = seq_len(nrow(dta)), y = seq_len(nrow(dta))) 
dist <- gower_dist(dta[pairs$x,], dta[pairs$y, ]) 
dist <- array(dist, dim = c(nrow(dta), nrow(dta))) 

# Convert matrix to distance object 
dist <- as.dist(dist) 

# Cluster using distance matrix; for this there are numerous options 
# Use hierarchical clustering in this case 
cl <- hclust(dist) 
plot(cl) 

使用羣集包的另一種溶液(ALS中含有大量的 聚類方法)

library(cluster) 
dist <- daisy(dta, metric = "gower") 

cl <- hclust(dist) 
plot(cl) 

爲了從分級聚類導出聚類,該樹需要被「剪切」到集羣中。這可以通過指定樹需要被切割的高度來完成,或者通過指定簇的數量來完成。下面我指定集羣的數量:在分類數據

dta$cluster <- cutree(cl, k = 2) 
+0

我對這種方法很陌生。如果我問錯了問題,請原諒我?那麼,是否可以將相應的羣集名稱添加到每個行?你能展示如何? –

+0

@EdwinVarghese添加了一個示例,但如果要使用這些方法,則應該閱讀這些方法。例如,從統計學習入門的第10章開始:http://www-bcf.usc.edu/~gareth/ISL/ISLR%20Seventh%20Printing.pdf。 –

相關問題