我試圖找出適合Sklearn(Python)的不同概率模型(如潛在Dirichlet分配,非負矩陣分解等)的最佳方法。scikit-learn - 我應該使用TF還是TF-IDF模型?
查看sklearn文檔中的示例,我想知道爲什麼LDA模型適合TF陣列,而NMF模型適合TF-IDF陣列。這種選擇有明確的理由嗎?
此外,關於如何找到最佳參數擬合模型我任何提示(迭代次數,主題數...)廣爲接受。
預先感謝您。
我試圖找出適合Sklearn(Python)的不同概率模型(如潛在Dirichlet分配,非負矩陣分解等)的最佳方法。scikit-learn - 我應該使用TF還是TF-IDF模型?
查看sklearn文檔中的示例,我想知道爲什麼LDA模型適合TF陣列,而NMF模型適合TF-IDF陣列。這種選擇有明確的理由嗎?
此外,關於如何找到最佳參數擬合模型我任何提示(迭代次數,主題數...)廣爲接受。
預先感謝您。
要明確答案,首先必須檢查兩個模型的定義。
LDA是一種概率生成模型,它通過對每個單詞抽取一個主題,然後從抽樣主題抽取一個單詞來生成文檔。生成的文檔被表示爲一包字。
NMF在其一般定義中搜索2個矩陣W和H,使得其中V是觀察矩陣。這些矩陣的唯一要求是它們的所有元素都必須是非負的。
從上面的定義可以清楚地看出,在LDA中只能使用單詞包的頻率計數,因爲實數的矢量是沒有意義的。我們是否創造了一個詞1.2次?另一方面,我們可以使用NMF的任何非負數表示,並且在示例中使用tf-idf。
就選擇迭代次數而言,對於scikit中的NMF學習,我不知道停止標準,但我相信它是損失函數小於閾值的相對改進,因此您必須實驗。對於LDA,我建議手動檢查持續驗證集中日誌可能性的改善,並在其低於閾值時停止。
其餘參數在很大程度上取決於數據,所以我建議您按照@rpd的建議進行參數搜索。
綜上所述,LDA 只能產生頻率而NMF 可以產生任何非負性矩陣。
非常感謝@katharas!至於調整其他參數,我用混淆作爲我的模型的良好擬合的一個模型,試圖估計讓我更低困惑的參數(alpha,tau_0和批量大小)。你認爲這也是評估LDA參數的好方法嗎? –
是的困惑很好(實際上可能更好)。本質上困惑是指數每個詞對數的可能性。它被用來讓人們可以比較不同文檔和語料庫的值。 – katharas
感謝您的詳細解釋;) –
只是參數優化的評論。您應該檢查有關元優化技術的資源(例如,應用遺傳算法或PSO-粒子羣優化算法 - 確保您的算法爲給定設置生成最優參數值)。元優化是遍歷每個可能的參數組合的搜索空間的快速且有效的方式。 – rpd
謝謝@rpd! –