我试图找出在 sklearn(Python)上拟合不同概率模型(如潜在狄利克雷分配、非负矩阵分解等)的最佳方法。
查看 sklearn 文档中的示例,我想知道为什么 LDA 模型适合 TF 数组,而 NMF 模型适合 TF-IDF 数组。这种选择有确切的理由吗?
此外,任何关于如何找到适合我的模型的最佳参数(迭代次数、主题数......)的提示都被广泛接受。
先感谢您。
我试图找出在 sklearn(Python)上拟合不同概率模型(如潜在狄利克雷分配、非负矩阵分解等)的最佳方法。
查看 sklearn 文档中的示例,我想知道为什么 LDA 模型适合 TF 数组,而 NMF 模型适合 TF-IDF 数组。这种选择有确切的理由吗?
此外,任何关于如何找到适合我的模型的最佳参数(迭代次数、主题数......)的提示都被广泛接受。
先感谢您。
为了使答案清楚,首先必须检查这两个模型的定义。
LDA 是一种概率生成模型,它通过为每个单词采样一个主题,然后从采样的主题中抽取一个单词来生成文档。生成的文档被表示为一个词袋。
NMF 在其一般定义中是搜索 2 个矩阵 W 和 H,使得W*H=V
其中 V 是观察矩阵。这些矩阵的唯一要求是它们的所有元素都必须是非负的。
从上面的定义可以清楚地看出,在 LDA 中只能使用词袋频率计数,因为实数向量没有意义。我们创造了一个单词 1.2 次吗?另一方面,我们可以对 NMF 使用任何非负表示,并且在示例中使用了 tf-idf。
至于选择迭代次数,对于 scikit learn 中的 NMF,我不知道停止标准,尽管我相信这是损失函数小于阈值的相对改进,因此您必须进行实验。对于 LDA,我建议手动检查保留验证集中对数可能性的改进,并在它低于阈值时停止。
其余参数在很大程度上取决于数据,因此我建议您按照@rpd 的建议进行参数搜索。
综上所述,LDA只能生成频率,而 NMF可以生成任何非负矩阵。