我试图找出在sklearn(Python)上拟合不同概率模型(如Latent Dirichlet Allocation,Non-negative Matrix Factorization等)的最佳方法。
查看sklearn文档中的示例,我想知道为什么LDA模型适合TF阵列,而NMF模型适合TF-IDF阵列。有这个选择的确切原因吗?
此外,有关如何找到适合我的模型的最佳参数(迭代次数,主题数...)的任何提示都被广泛接受。
提前谢谢。
答案 0 :(得分:3)
要明确答案,首先必须检查两种模型的定义。
LDA是一种概率生成模型,它通过为每个单词抽样主题,然后从抽样主题中抽取一个单词来生成文档。生成的文档表示为一袋文字。
NMF在其一般定义中搜索2个矩阵W和H,使得W*H=V
其中V是观察到的矩阵。这些矩阵的唯一要求是它们的所有元素都必须是非负的。
从上面的定义可以清楚地看出,在LDA中,只能使用词包频率计数,因为实数矢量没有意义。我们创建了一个单词1.2次吗?另一方面,我们可以使用NMF的任何非负表示,并且在示例中使用tf-idf。
就选择迭代次数而言,对于scikit中的NMF,我不知道停止标准,尽管我认为损失函数的相对改善小于阈值所以你&#39 ;我得来试验。对于LDA,我建议手动检查保持的验证集中的对数似然的改进,并在它低于阈值时停止。
其余参数在很大程度上取决于数据,因此我建议,正如@rpd所建议的,您进行参数搜索。
总之,LDA 只能生成频率,NMF 可以生成任何非负矩阵。