Ani*_*ita 2 r cluster-analysis matrix hamming-distance term-document-matrix
我有一个文档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
Run Code Online (Sandbox Code Playgroud)
在包中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
Run Code Online (Sandbox Code Playgroud)
然后使用库hamming.distance()中的函数e1071。您可以使用自己的距离(只要它们是矩阵形式)
lilbrary(e1071)
distMat <- hamming.distance(myData)
Run Code Online (Sandbox Code Playgroud)
随后使用“完整”链接方法进行分层聚类,以确保稍后可以指定一个簇内的最大距离。
dendrogram <- hclust(as.dist(distMat), method="complete")
Run Code Online (Sandbox Code Playgroud)
根据组中点之间的最大距离选择组(最大值 = 5)
groups <- cutree(dendrogram, h=5)
Run Code Online (Sandbox Code Playgroud)
最后绘制结果:
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
Run Code Online (Sandbox Code Playgroud)

查看每个文档的集群成员资格的另一种方法是table:
table(groups, rownames(myData))
groups doc1 doc2 doc3 doc4
1 1 1 0 0
2 0 0 1 1
Run Code Online (Sandbox Code Playgroud)
因此,第 1 个和第 2 个文档属于一组,而第 3 个和第 4 个文档属于另一组。