R中使用余弦的术语聚类和可视化

问题描述 投票:0回答:2

我是文本挖掘和R的新手。我使用一组文档中的kmeans进行术语聚类。在对术语进行分组时,我使用了余弦公式。我要集群的有839个文件的57个术语。但不知何故,我的主管说我的过程不正确,因为绘图中有重叠。

这是TFIDF矩阵

这是我使用的代码

dokumen <- read.csv("dokumen.csv", stringsAsFactors = FALSE, header=TRUE)
corp <- Corpus(DataframeSource(dokumen))
corp <- tm_map(corp, content_transformer(tolower))
corp <- tm_map(corp, removeNumbers)
removeURL <- function(x) gsub("http[[:alnum:][:punct:]]*", "", x)
removeURL2 <- function(x) gsub("www[[:alnum:][:punct:]]*", "", x)
removeEmail <- function(x) gsub ("[[:alnum:] [:punct:]] *?@ [:alnum:][:punct:]]*", "", x)
delPunct <- content_transformer(function(x) {return (gsub("[[:punct:]]", " ", x))})
corp <- tm_map(corp, content_transformer(removeURL))
corp <- tm_map(corp, content_transformer(removeURL2))
corp <- tm_map(corp, content_transformer(removeEmail))
corp <- tm_map(corp, delPunct)
corp <- tm_map(corp, removeWords, stopwords("smart"))
corp <- tm_map(corp, stemDocument, language = "english")
corp <- tm_map(corp, removeWords, c("australia", "australian", "indonesia", "indonesian", "embassi", "january", "february", "march", "april", "may", "june", "july", "august", "september", "october", "november", "december", "past", "yesterday", "today", "present", "tomorrow", "day", "week", "month", "year", "time", "hundred", "thousand", "million", "billion", "countri", "world", "nation", "one", "two", "three", "four", "six", "seven", "eight", "nine", "ten", "eleven", "twelve"))
corp <- tm_map(corp, stripWhitespace)
tdm <- DocumentTermMatrix(corp)
m <- as.matrix(tdm)
dtmi <- DocumentTermMatrix(corp, control = list(weighting = weightTfIdf))
m1 <- as.matrix(dtmi)
dtms <- removeSparseTerms(dtmi, 0.79)
m2 <- as.matrix(dtms)
m3 <- 1 - crossprod_simple_triplet_matrix(dtms)/(sqrt(col_sums(dtms^2) %*% t(col_sums(dtms^2))))
km.res <- eclust(m3, "kmeans", k = 3, nstart = 100, graph = FALSE)

但是,当我想象成4个集群时,我的主管说错误的结果是重叠的。 K表示结果不应重叠。这是图像

有没有人可以帮助我是否使用了正确的代码。或者在聚类之前我应该​​对dtm采取任何措施?非常感谢你!

Wishnu,雅加达

r cluster-analysis text-mining
2个回答
0
投票

Kmeans不应该在两个维度上重叠。

但是您的数据具有更多维度,因此它们可能会在投影中重叠。


0
投票

一般来说,完全分离的聚类在文本挖掘中很难实现,这取决于语料库的特征以及组成您正在使用的词汇的单词数量。

但是,通过指定不同数量的群集并根据主管的请求检查群集是否变得更加分离,可以改善结果。

为了估计最佳聚类数,可以尝试应用一些方法,例如Elbow方法,Silhouette方法和Gap统计。由于您已经使用FactoExtra软件包进行集群分析(代码中的最常用功能),因此您可以使用同一软件包的fviz_nbclust函数计算所有三个度量标准。你可以找到here这个函数的有用文档。

© www.soinside.com 2019 - 2024. All rights reserved.