0

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

聚类方法很多,并且根据数据集而变化

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

我愿意接受任何建议

这是一个例子:

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

结果:

集群A = [用户1,用户3]

集群B = [用户2,用户4]

4

1 回答 1

0

您可以对每对点使用 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")))

树状图

于 2018-05-29T14:43:45.467 回答