我有一个documentTermMatrix,如下所示:
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
中,可以计算2个文档之间的汉明距离。但是现在我想要将汉明距离小于3的所有文档聚类。
所以在这里我希望集群1是文档1和2,集群2是文档3和4.是否有可能这样做?
答案 0 :(得分:2)
我将您的表格保存到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
然后使用hamming.distance()
库中的e1071
函数。您可以使用自己的距离(只要它们是矩阵形式)
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
所以第一和第二文件分为一组而第三组和第四组 - 另一组。