我正在尝试找出在 sklearn (Python) 上拟合不同概率模型(如 Latent Dirichlet Allocation、Non-negative Matrix Factorization 等)的最佳方法。
看了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可以生成任意非负矩阵。
关于python - scikit-learn - 我应该用 TF 还是 TF-IDF 拟合模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40171208/