我在尝试获取Spark LDA模型(使用Spark 2.1)的困惑度和对数似然值。以下代码无法运行(找不到logLikelihood
和logPerplexity
方法),尽管我可以保存模型。
from pyspark.mllib.clustering import LDAfrom pyspark.mllib.linalg import Vectors# 构建语料库# 运行LDAldaModel = LDA.train(corpus, k=10, maxIterations=10)logll = ldaModel.logLikelihood(corpus)perplexity = ldaModel.logPerplexity(corpus)
请注意,dir(LDA)
中不会出现这些方法。
有什么可行的示例吗?
回答:
我可以训练但不能拟合。’LDA’对象没有’fit’属性
这是因为您使用的是旧的,基于RDD的API(MLlib),即
from pyspark.mllib.clustering import LDA # 错误的导入
其LDA
类确实不包含fit
、logLikelihood
或logPerplexity
方法。
为了使用这些方法,您应该切换到新的,基于数据框的API(ML):
from pyspark.ml.clustering import LDA # 注意:不同的导入# 加载数据。dataset = (spark.read.format("libsvm") .load("data/mllib/sample_lda_libsvm_data.txt"))# 训练LDA模型。lda = LDA(k=10, maxIter=10)model = lda.fit(dataset)ll = model.logLikelihood(dataset)lp = model.logPerplexity(dataset)