聚类二进制矩阵的合适方法是什么

what is the appropriate method to cluster binary matrix

我是聚类的初学者,我有一个二进制矩阵,其中每个学生都有他们注册的课程。我想对具有相同课程的学生进行聚类。

聚类方法很多,而且根据数据集不同

例如 k-means 是不合适的,因为数据是二进制的,标准 "mean" 操作对二进制没有多大意义。

我愿意接受任何建议

这是一个例子:

+------------+---------+--------+--------+
|  session1  | session2|session3|session4|
+------------+---------+--------+--------+
|     1      |    0    |   1    |    0   |
|     0      |    1    |   0    |    1   |
|     1      |    0    |   1    |    0   | 
|     0      |    1    |   0    |    1   |
+------------+---------+--------+--------+

结果:

clusterA = [user1,user3]

clusterB = [user2,user4]

您可以对每对点使用 Jaccard 距离。

在 R 中:

# create data table
mat = data.frame(s1 = c(T,F,T,F), s2 = c(F,T,F,T), 
                 s3 = c(T,F,T,F), s4 = c(F,T,F,T))

结果:

     s1    s2    s3    s4
1  TRUE FALSE  TRUE FALSE
2 FALSE  TRUE FALSE  TRUE
3  TRUE FALSE  TRUE FALSE
4 FALSE  TRUE FALSE  TRUE

 dist(mat, method="binary") # jaccard distance

结果:

  1 2 3
2 1    
3 0 1  
4 1 0 1

第 3 行与第 4 行的距离为 1。 碰巧的是,这里的距离都正好是 1 和 0。这些实际上是花车。 (您的玩具数据集在这里可能过于简单)

将它们聚类:

hclust(dist(mat, method="binary"))

结果(信息量不大):

Call:
hclust(d = dist(mat, method = "binary"))

Cluster method   : complete 
Distance         : binary 
Number of objects: 4 

创建树状图

plot(hclust(dist(mat, method="binary")))