R 字符串的无监督聚类

R 字符串的无监督聚类,r,machine-learning,nlp,cluster-analysis,k-means,R,Machine Learning,Nlp,Cluster Analysis,K Means,我有1000多个关键字的列表,我想按相似性分组 例如: “庭院家具” “客厅家具” “旧椅子” “新椅子” 我想把“家具”和“椅子”这两个词组合在一起 我知道有一种方法可以做到这一点,那就是指定一些预先选定的“质心”项,然后计算每个项的Levenshtein距离,并使用kmeans对它们进行聚类 但我感兴趣的是如何在不预先指定质心术语(如“椅子”和“家具”)的情况下做到这一点 谢谢。您可以使用stringdist包计算距离矩阵: str <- c("patio furniture",

我有1000多个关键字的列表,我想按相似性分组

例如:

  • “庭院家具”
  • “客厅家具”
  • “旧椅子”
  • “新椅子”
我想把“家具”和“椅子”这两个词组合在一起

我知道有一种方法可以做到这一点,那就是指定一些预先选定的“质心”项,然后计算每个项的Levenshtein距离,并使用kmeans对它们进行聚类

但我感兴趣的是如何在不预先指定质心术语(如“椅子”和“家具”)的情况下做到这一点


谢谢。

您可以使用
stringdist
包计算距离矩阵:

str <- c("patio furniture", 
  "living room furniture",
  "used chairs",
  "new chairs")

library(stringdist)
d <- stringdistmatrix(str, str)
hclust
有许多不同的方法。请参见
?hclust
。要创建固定数量的组(此处为2个),请执行以下操作:


但是,这可能是许多可能的解决方案之一

您可以使用
stringdist
包计算距离矩阵:

str <- c("patio furniture", 
  "living room furniture",
  "used chairs",
  "new chairs")

library(stringdist)
d <- stringdistmatrix(str, str)
hclust
有许多不同的方法。请参见
?hclust
。要创建固定数量的组(此处为2个),请执行以下操作:


但是,这可能是许多可能的解决方案之一

基本上,它可以通过使用分层聚类来实现:

cl <- hclust(as.dist(d))
plot(cl)
library(tm)
library(arules) # or other package with (dis)similarity measures... 
docs <- c("patio furniture", "living room furniture", "used chairs", "new chairs")
dtm <- as.matrix(DocumentTermMatrix(Corpus(VectorSource(docs))))
# comparse & choose measure, e.g. Jaccard vs Dice Distance
plot(hc <- hclust(dist(dtm, method="binary")), main="Jaccard Dist")
plot(hc <- hclust(dissimilarity(dtm, method="Dice")), main="Dice Dist")
# determine cutting distance (e.g. 0.6)_
clusters <- cutree(hc, h=.6)
# result
cbind.data.frame(docs, clusters)
#                    docs clusters
# 1       patio furniture        1
# 2 living room furniture        1
# 3           used chairs        2
# 4            new chairs        2
library(tm)
库(arules)#或具有(dis)相似性度量的其他包。。。

docs基本上,它可以使用分层聚类进行如下工作:

cl <- hclust(as.dist(d))
plot(cl)
library(tm)
library(arules) # or other package with (dis)similarity measures... 
docs <- c("patio furniture", "living room furniture", "used chairs", "new chairs")
dtm <- as.matrix(DocumentTermMatrix(Corpus(VectorSource(docs))))
# comparse & choose measure, e.g. Jaccard vs Dice Distance
plot(hc <- hclust(dist(dtm, method="binary")), main="Jaccard Dist")
plot(hc <- hclust(dissimilarity(dtm, method="Dice")), main="Dice Dist")
# determine cutting distance (e.g. 0.6)_
clusters <- cutree(hc, h=.6)
# result
cbind.data.frame(docs, clusters)
#                    docs clusters
# 1       patio furniture        1
# 2 living room furniture        1
# 3           used chairs        2
# 4            new chairs        2
library(tm)
库(arules)#或具有(dis)相似性度量的其他包。。。
文件