scala语言中LDA模型使用的2个小问题?

lda模型有两个参数
我在“em”模式下
docConcentrationtopicDistribution 一般设置多少合适

我想输出logLikelihoodlogPerplexity看看效果
但是我这样写
ldaModel.logPerplexity(input)
会返回NaN
这里的input输入格式是怎么样的?

谢谢~~~

阅读 1.9k
1 个回答

关于你提到的LDA模型参数设置问题:
docConcentration和topicDistribution的合适设置取决于你的具体数据集和需求。通常情况下,docConcentration(文档-主题分布)的默认值为1.0,而topicDistribution(主题-词汇分布)的默认值为0.01。这些值可能不适用于所有数据集,建议你尝试使用交叉验证或其他模型选择方法来确定最佳参数。
关于logPerplexity返回NaN的问题,这可能是由于输入数据格式不正确导致的。logPerplexity方法接受一个参数,即一个已经被处理为org.apache.spark.ml.linalg.Vector类型的文档词频向量的数据集。你需要确保输入数据集已经通过CountVectorizer或其他适当的转换方法处理,以便每个文档都表示为一个词频向量。一个简单的例子说明如何准备输入数据:

import org.apache.spark.ml.feature.{CountVectorizer, CountVectorizerModel}
import org.apache.spark.sql.DataFrame

val data: DataFrame = ... // 原始数据
val countVectorizer = new CountVectorizer()
  .setInputCol("rawTokens")
  .setOutputCol("features")
  .setVocabSize(10000)
  .setMinDF(5)

val countVectorizerModel: CountVectorizerModel = countVectorizer.fit(data)
val input: DataFrame = countVectorizerModel.transform(data)

在这个例子中,原始数据集中的"rawTokens"列应包含每个文档的分词结果。CountVectorizer会将这些分词结果转换为词频向量,然后将结果存储在"features"列中。这就可以将这个处理后的数据集传递给logPerplexity方法。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏