2

我试图找出适合Sklearn(Python)的不同概率模型(如潜在Dirichlet分配,非负矩阵分解等)的最佳方法。scikit-learn - 我应该使用TF还是TF-IDF模型?

查看sklearn文档中的示例,我想知道为什么LDA模型适合TF阵列,而NMF模型适合TF-IDF阵列。这种选择有明确的理由吗?

这里是例子:http://scikit-learn.org/stable/auto_examples/applications/topics_extraction_with_nmf_lda.html#sphx-glr-auto-examples-applications-topics-extraction-with-nmf-lda-py

此外,关于如何找到最佳参数拟合模型我任何提示(迭代次数,主题数...)广为接受。

预先感谢您。

+0

只是参数优化的评论。您应该检查有关元优化技术的资源(例如,应用遗传算法或PSO-粒子群优化算法 - 确保您的算法为给定设置生成最优参数值)。元优化是遍历每个可能的参数组合的搜索空间的快速且有效的方式。 – rpd

+0

谢谢@rpd! –

回答

3

要明确答案,首先必须检查两个模型的定义。

LDA是一种概率生成模型,它通过对每个单词抽取一个主题,然后从抽样主题抽取一个单词来生成文档。生成的文档被表示为一包字。

NMF在其一般定义中搜索2个矩阵W和H,使得其中V是观察矩阵。这些矩阵的唯一要求是它们的所有元素都必须是非负的。

从上面的定义可以清楚地看出,在LDA中只能使用单词包的频率计数,因为实数的矢量是没有意义的。我们是否创造了一个词1.2次?另一方面,我们可以使用NMF的任何非负数表示,并且在示例中使用tf-idf。

就选择迭代次数而言,对于scikit中的NMF学习,我不知道停止标准,但我相信它是损失函数小于阈值的相对改进,因此您必须实验。对于LDA,我建议手动检查持续验证集中日志可能性的改善,并在其低于阈值时停止。

其余参数在很大程度上取决于数据,所以我建议您按照@rpd的建议进行参数搜索。

综上所述,LDA 只能产生频率而NMF 可以产生任何非负性矩阵

+0

非常感谢@katharas!至于调整其他参数,我用混淆作为我的模型的良好拟合的一个模型,试图估计让我更低困惑的参数(alpha,tau_0和批量大小)。你认为这也是评估LDA参数的好方法吗? –

+0

是的困惑很好(实际上可能更好)。本质上困惑是指数每个词对数的可能性。它被用来让人们可以比较不同文档和语料库的值。 – katharas

+0

感谢您的详细解释;) –

相关问题