PYTHON代寫進行主題模型LDA分析

原文連接:http://tecdat.cn/?p=6227

 

主題建模是一種在大量文檔中查找抽象主題的藝術方法。一種做爲監督無的機器學習方法,主題模型不容易評估,由於沒有標記的「基礎事實」數據可供比較。然而,因爲主題建模一般須要預先定義一些參數(首先是要發現的主題ķ的數量),所以模型評估對於找到給定數據的「最佳」參數集是相當重要的。微信

 

 

機率LDA主題模型的評估方法

 

使用未標記的數據時,模型評估很難。這裏描述的指標都試圖用理論方法評估模型的質量,以便找到「最佳」模型。app

 

評估後部分佈的密度或發散度

有些指標僅用於評估後驗分佈(主題 - 單詞和文檔 - 主題分佈),而無需以某種方式將模型與觀察到的數據進行比較。機器學習

 

使用美聯社數據查找最佳主題模型

 

計算和評估主題模型

 

主題建模的主要功能位於tmtoolkit.lda_utils函數

import matplotlib.pyplot as plt   # for plotting the results
plt.style.use('ggplot')

# for loading the data:
from tmtoolkit.utils import unpickle_file
# for model evaluation with the lda package:
from tmtoolkit.lda_utils import tm_lda
# for constructing the evaluation plot:
from tmtoolkit.lda_utils.common import results_by_parameter
from tmtoolkit.lda_utils.visualize import plot_eval_results

 

接下來,咱們加載由文檔標籤,詞彙表(惟一單詞)列表和文檔 - 術語 - 矩陣組成的數據dtm。咱們確保dtm尺寸合適:post

doc_labels, vocab, dtm = unpickle_file('ap.pickle')
print('%d documents, %d vocab size, %d tokens' % (len(doc_labels), len(vocab), dtm.sum()))
assert len(doc_labels) == dtm.shape[0]
assert len(vocab) == dtm.shape[1]

 

如今咱們定義應該評估的參數集咱們設置了一個常量參數字典。const_params,它將用於每一個主題模型計算並保持不變咱們還設置了。varying_params包含具備不一樣參數值的字典的不一樣參數列表:學習

 

在這裏,咱們想要從一系列主題中計算不一樣的主題模型ks = [10, 20, .. 100, 120, .. 300, 350, .. 500, 600, 700]。因爲咱們有26個不一樣的值ks,咱們將建立和比較26個主題模型。請注意,還咱們alpha爲每一個模型定義了一個參數1/k(有關LDA中的α和測試超參數的討論,請參見下文)。參數名稱必須與所使用的相應主題建模包的參數匹配。在這裏,咱們將使用lda,所以咱們經過參數,如n_itern_topics(例如,而與其餘包的參數名稱也會有所不一樣num_topics,不是而n_topics在gensim)。測試

咱們如今可使用模塊中的evaluate_topic_models函數開始評估咱們的模型tm_lda,並將不一樣參數列表和帶有常量參數的字典傳遞給它:大數據

 

默認狀況下,這將使用全部CPU內核來計算模型並並行評估它們。 ui

plot_eval_results函數使用在評估期間計算的全部度量建立³³繪圖。以後,若是須要,咱們可使用matplotlib方法調整繪圖(例如添加繪圖標題),最後咱們顯示和/或保存繪圖。lua

結果

 

主題模型評估,alpha = 1 / k,beta = 0.01

 

請注意,對於「loglikelihood」度量,僅報告最終模型的對數似然估計,這與Griffiths和Steyvers使用的調和均值方法不一樣。沒法使用Griffiths和Steyvers方法,由於它須要一個特殊的Python包(gmpy2) ,這在我運行評估的CPU集羣機器上是不可用的。可是,「對數似然」將報告很是類似的結果。

阿爾法和貝塔參數

除了主題數量以外,還有alphabeta(有時是文獻中的eta)參數。二者都用於定義Dirichlet先驗,用於計算各自的後驗分佈.Alpha是針對特定於文檔的主題分佈的先驗的「濃度參數」,而且是針對主題特定的單詞分佈的先前的β 。 

 

主題模型,alpha = 1 / k,beta = 0.1

當咱們使用與上述相同的alpha參數和相同的k範圍運行評估時,可是當β= 0.1而不是β= 0.01時,咱們看到對數似然在k的較低範圍內最大化,即大約70到300(見上圖) 。

組合這些參數有不少種可能性,可是解釋這些參數一般並不容易。下圖顯示了不一樣情景的評估結果:(1)α和β的固定值取決於k,(2)α和β都固定, (3)α和β均取決於k

 

(1)主題模型,alpha = 0.1,beta = 1 /(10k)

 

(2)主題模型,alpha = 0.1,beta = 0.01

 

(3)主題模型,alpha = 1 / k,beta = 1 /(10k)

LDA超參數α,β和主題數量都相互關聯,相互做用很是複雜。在大多數狀況下,用於定義模型「粒度」的beta的固定值彷佛是合理的,這也是Griffiths和Steyvers所推薦的。一個更精細的模型評估,具備不一樣的alpha參數(取決於k)使用解釋的指標能夠完成不少主題。

 

 

 

 

 

 

若是您有任何疑問,請在下面發表評論。 

 

大數據部落 -中國專業的第三方數據服務提供商,提供定製化的一站式數據挖掘和統計分析諮詢服務

統計分析和數據挖掘諮詢服務:y0.cn/teradat(諮詢服務請聯繫官網客服

點擊這裏給我發消息QQ:3025393450

 

​QQ交流羣:186388004 

【服務場景】  

科研項目; 公司項目外包;線上線下一對一培訓;數據爬蟲採集;學術研究;報告撰寫;市場調查。

【大數據部落】提供定製化的一站式數據挖掘和統計分析諮詢

歡迎選修咱們的R語言數據分析挖掘必知必會課程!

 

 
歡迎關注 微信公衆號,瞭解更多數據乾貨資訊!
 
相關文章
相關標籤/搜索