scikit-learn - 我应该使用TF或TF-IDF模型吗?

时间:2016-10-21 07:55:59

标签: python scikit-learn tf-idf matrix-factorization latent-semantic-indexing

我试图找出在sklearn(Python)上拟合不同概率模型(如Latent Dirichlet Allocation,Non-negative Matrix Factorization等)的最佳方法。

查看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

此外,有关如何找到适合我的模型的最佳参数(迭代次数,主题数...)的任何提示都被广泛接受。

提前谢谢。

1 个答案:

答案 0 :(得分:3)

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

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

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

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

就选择迭代次数而言,对于scikit中的NMF,我不知道停止标准,尽管我认为损失函数的相对改善小于阈值所以你&#39 ;我得来试验。对于LDA,我建议手动检查保持的验证集中的对数似然的改进,并在它低于阈值时停止。

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

总之,LDA 只能生成频率,NMF 可以生成任何非负矩阵