簡體   English   中英

如何根據頻率對分類變量執行聚類/分組?

[英]How to perform clustering/grouping on categorical variables based on frequencies?

我有一組樣本觀察結果,如下所示

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

所有值本質上都是分類的。 我想將第1行和第3行分組到一個群集中,將第2行和第4行分組到另一個群集中。我相信在這種情況下,單熱編碼是無效的,因為分類變量不具有任何等級,並且它們本質上純粹是名義上的。

(行也不必完全相同)。 是否有一個預先建立的數學算法可以根據相似度/頻率對這些行進行分組? 誰能建議一個好方法嗎? 還是應該使用一鍵編碼?

您可以使用行距來計算類別變量之間的距離。

下面是一個例子:

# 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM