我在Spark中运行了一系列主题建模实验,改变了主题的数量。所以,鉴于RDD docsWithFeatures
,我做了类似的事情:
for (n_topics <- Range(65,301,5) ){
val s = n_topics.toString
val lda = new LDA().setK(n_topics).setMaxIterations(20) // .setAlpha(), .setBeta()
val ldaModel = lda.run(docsWithFeatures)
// now do some eval, save results to file, etc...
这一直很好用,但如果我首先用TF-IDF规范我的数据,我也想比较结果。现在,据我所知,LDA严格要求术语频率为整数值的词袋格式。但是原则上(我已经看到了很多这样的例子),如果我们首先将整数项频率转换为浮点TF-IDF值,则数学运算正常。我目前采取的方法如下(再次给出我的docsWithFeatures
rdd):
val index_reset = docsWithFeatures.map(_._2).cache()
val idf = new IDF().fit(index_reset)
val tfidf = idf.transform(index_reset).zipWithIndex.map(x => (x._2,x._1))
然后我可以运行与第一个块相同的代码,用tfidf
代替docsWithFeatures
。这没有任何崩溃,但我的主要问题是这是否可行。也就是说,我想确保Spark没有做任何有趣的事情,比如将TFIDF中出现的浮点值转换成整数等等。