我是聚类的初学者,我有一个二进制矩阵,其中每个学生都有他们注册的会话。我想聚集具有相同会话的学生。
聚类方法如此之多,并根据数据集
而变化例如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]
答案 0 :(得分: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")))