我有一个文档TermMatrix,如下所示:
artikel naam product personeel loon verlof
doc 1 1 1 2 1 0 0
doc 2 1 1 1 0 0 0
doc 3 0 0 1 1 2 1
doc 4 0 0 0 1 1 1
在tm
包中,可以计算两个文档之间的汉明距离。但现在我想对所有汉明距离小于 3 的文档进行聚类。
所以在这里我希望簇 1 是文档 1 和 2,簇 2 是文档 3 和 4。有可能这样做吗?
最佳答案
我将您的表格保存到myData
:
myData
artikel naam product personeel loon verlof
doc1 1 1 2 1 0 0
doc2 1 1 1 0 0 0
doc3 0 0 1 1 2 1
doc4 0 0 0 1 1 1
然后使用 e1071
库中的 hamming.distance()
函数。您可以使用自己的距离(只要它们是矩阵形式)
lilbrary(e1071)
distMat <- hamming.distance(myData)
随后使用“完整”链接方法进行分层聚类,以确保稍后可以指定一个簇内的最大距离。
dendrogram <- hclust(as.dist(distMat), method="complete")
根据组中点之间的最大距离(最大值 = 5)选择组
groups <- cutree(dendrogram, h=5)
最后绘制结果:
plot(dendrogram) # main plot
points(c(-100, 100), c(5,5), col="red", type="l", lty=2) # add cutting line
rect.hclust(dendrogram, h=5, border=c(1:length(unique(groups)))+1) # draw rectangles
查看每个文档的集群成员资格的另一种方法是使用table
:
table(groups, rownames(myData))
groups doc1 doc2 doc3 doc4
1 1 1 0 0
2 0 0 1 1
因此,第 1 个和第 2 个文档属于一组,而第 3 个和第 4 个文档属于另一组。
关于R:聚类文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26584797/