R:聚类文档

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。有可能这样做吗?

Kar*_*ius 5

我将您的表保存到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 个文档属于另一组。