python - scikit-learn - 我应该用 TF 还是 TF-IDF 拟合模型?

标签 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

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

提前谢谢你。

最佳答案

要弄清楚答案,必须首先检查这两个模型的定义。

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/

相关文章:

python - 在 PostgreSQL 9.5 plpython3u 中使用 Anaconda scikit-learn?

python - XGBoost CV 和早期停止

python-3.x - 提取每个簇的顶部单词

python - 来自 python 守护进程的 "sudo"操作

python - 在 Python 中过滤匹配向量所有值的数据框

python - Pandas:字符串的多个条件

python - 在Python中将一个循环包装在另一个循环中?

python - 解释来自 RandomForestClassifier 的特征重要性值

python - 属性错误 : getfeature_names not found ; using scikit-learn

python-3.x - 从一些外部 tf-idf 矩阵和术语列表中使用 gensim 训练 LDA 模型