我的特定语料库包含大约20k个文档和大约9k个术语,一旦处理和阻止。
这是由于数据收集的性质 - 用户提交的在线调查是他们倾向于留下非常短的1句话甚至1或2个字的回复。
如果我在tdm上运行kmeans()
然后在dtm上运行结果会有所不同,如果我查看例如在簇的平方和内。我知道tdm只是一个转置的dtm,反之亦然。
在讨论了tdm和dtm之后,this帖子对r博主说:
其中哪些证明最方便将取决于 数据中文档和术语的相对数量。
有这么多的条款和文件,我发现绘制一个cusplot非常困难。所以我删除了一些稀缺性(.96),这给了我33个条款。但仍然是一个非常大量的文件。据推测,大多数文本挖掘场景都是相反的,相对于文档而言,文本数量更多。
根据我的描述,我会在tdm或dtm上运行kmeans吗?我正在寻求将术语组合在一起,旨在找出有关人们提交这些表格的原因的概括。
我一直在玩的示例代码块,kfit和kfit1之间究竟有什么区别?
library(tm) # for text mining
## make a example corpus
# make a df of documents a to i
# try making some docs mostly about pets
a <- "dog bunny dog cat hamster"
b <- "cat cat bunny dog hamster"
c <- "cat fish dog"
d <- "cat dog bunny hamster fish"
# try making the remaining docs about fruits
e <- "apple mango orange carrot"
f <- "cabbage apple dog"
g <- "orange mango cat apple"
h <- "apple apple orange"
i <- "apple orange carrot"
j <- c(a,b,c,d,e,f,g,h,i)
x <- data.frame(j)
# turn x into a document term matrix (dtm)
docs <- Corpus(DataframeSource(x))
tdm <- TermDocumentMatrix(docs)
dtm <- DocumentTermMatrix(docs)
# kmeans clustering
set.seed(123)
kfit <- kmeans(tdm, 2)
kfit1 <- kmeans(dtm, 2)
#plot – need library cluster
library(cluster)
clusplot(m, kfit$cluster, color=T, shade=T, labels=2, lines=0)
# t(table(kfit$cluster, 1:dtm$nrow)) for docs based analysis
table(tdm$dimnames$Terms, kfit$cluster) # for term based analysis
答案 0 :(得分:2)
通常,实现期望行中的实例。
如果要集群文档,则文档应该是实例。在转置矩阵上运行将根据它们出现的文档对术语进行聚类。
与计算行平均值与列平均值类似,它们在数学上都是相同的,但具有非常不同的语义。做错了,因为它“更方便”(?!?)听起来是个坏主意。