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

感謝您的詳細解釋;) –

相關問題