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

时间:2018-03-16 16:25:56

标签: r cluster-analysis text-mining

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

这里是TFIDF矩阵 enter image description here

这是我使用的代码

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表示结果不应重叠。这是图像 enter image description here

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

Wishnu,雅加达

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

通常来说,根据语料库的特征和组成您正在使用的词汇量的单词数量,在文本挖掘中很难实现完全分离的类。

但是,可以通过指定不同数量的群集并按照主管的要求检查群集是否更加分离来改善结果。

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