潛在狄利克雷分配 (LatentDirichletAllocation)#
- class sklearn.decomposition.LatentDirichletAllocation(n_components=10, *, doc_topic_prior=None, topic_word_prior=None, learning_method='batch', learning_decay=0.7, learning_offset=10.0, max_iter=10, batch_size=128, evaluate_every=-1, total_samples=1000000.0, perp_tol=0.1, mean_change_tol=0.001, max_doc_update_iter=100, n_jobs=None, verbose=0, random_state=None)[來源]#
使用線上變分貝氏演算法的潛在狄利克雷分配。
於 0.17 版本新增。
在使用者指南中閱讀更多資訊。
- 參數:
- n_componentsint,預設值 = 10
主題數量。
在 0.19 版本中變更:
n_topics
已重新命名為n_components
- doc_topic_priorfloat,預設值 = None
文件主題分佈
theta
的先驗。如果值為 None,則預設為1 / n_components
。在 [1] 中,此值稱為alpha
。- topic_word_priorfloat,預設值 = None
主題字詞分佈
beta
的先驗。如果值為 None,則預設為1 / n_components
。在 [1] 中,此值稱為eta
。- learning_method{‘batch’, ‘online’},預設值 = ‘batch’
用於更新
_component
的方法。僅在fit
方法中使用。一般而言,如果資料量很大,線上更新將比批次更新快得多。有效選項
‘batch’:批次變分貝氏方法。在每次 EM 更新中使用所有訓練資料。舊的
components_
將在每次迭代中被覆蓋。‘online’:線上變分貝氏方法。在每次 EM 更新中,使用訓練資料的迷你批次來遞增更新
components_
變數。學習速率由learning_decay
和learning_offset
參數控制。
在 0.20 版本中變更:現在的預設學習方法為
"batch"
。- learning_decayfloat,預設值 = 0.7
它是在線上學習方法中控制學習速率的參數。該值應設定在 (0.5, 1.0] 之間,以保證漸近收斂。當值為 0.0 且 batch_size 為
n_samples
時,更新方法與批次學習相同。在文獻中,此值稱為 kappa。- learning_offsetfloat,預設值 = 10.0
一個(正)參數,用於降低線上學習中早期迭代的權重。它應該大於 1.0。在文獻中,此值稱為 tau_0。
- max_iterint,預設值 = 10
訓練資料的最大傳遞次數(又稱為 epoch)。它僅影響
fit
方法中的行為,而不影響partial_fit
方法。- batch_sizeint,預設值 = 128
在每次 EM 迭代中使用的文件數量。僅在線上學習中使用。
- evaluate_everyint,預設值 = -1
評估困惑度的頻率。僅在
fit
方法中使用。將其設定為 0 或負數表示完全不評估訓練中的困惑度。評估困惑度可以幫助您檢查訓練過程中的收斂性,但也會增加總訓練時間。在每次迭代中評估困惑度可能會將訓練時間增加一倍。- total_samplesint,預設值 = 1e6
文件總數。僅在
partial_fit
方法中使用。- perp_tolfloat,預設值 = 1e-1
困惑度容差。僅在
evaluate_every
大於 0 時使用。- mean_change_tolfloat,預設值 = 1e-3
在 E 步驟中更新文件主題分佈的停止容差。
- max_doc_update_iterint,預設值 = 100
在 E 步驟中更新文件主題分佈的最大迭代次數。
- n_jobsint,預設值 = None
在 E 步驟中使用的任務數量。
None
表示 1,除非在joblib.parallel_backend
環境中。-1
表示使用所有處理器。詳情請參閱詞彙表。- verboseint,預設值=0
詳細程度。
- random_stateint、RandomState 實例或 None,預設值=None
傳遞一個 int 值,以便在多個函式呼叫中獲得可重現的結果。請參閱詞彙表。
- 屬性:
- components_形狀為 (n_components, n_features) 的 ndarray
主題詞彙分佈的變分參數。由於主題詞彙分佈的完整條件是一個狄利克雷分佈,
components_[i, j]
可以視為偽計數,表示詞彙j
被分配給主題i
的次數。它也可以視為每個主題的詞彙分佈,在正規化後:model.components_ / model.components_.sum(axis=1)[:, np.newaxis]
。- exp_dirichlet_component_形狀為 (n_components, n_features) 的 ndarray
對數主題詞彙分佈的期望值的指數值。在文獻中,這是
exp(E[log(beta)])
。- n_batch_iter_int
EM 步驟的迭代次數。
- n_features_in_int
在fit期間看到的特徵數量。
在 0.24 版中新增。
- feature_names_in_形狀為 (
n_features_in_
,) 的 ndarray 在fit期間看到的特徵名稱。僅當
X
具有全為字串的特徵名稱時才定義。在 1.0 版中新增。
- n_iter_int
遍歷資料集的次數。
- bound_float
訓練集上的最終困惑度分數。
- doc_topic_prior_float
文件主題分佈
theta
的先驗。如果值為 None,則為1 / n_components
。- random_state_RandomState 實例
由種子、亂數產生器或
np.random
產生的 RandomState 實例。- topic_word_prior_float
主題詞彙分佈
beta
的先驗。如果值為 None,則為1 / n_components
。
另請參閱
sklearn.discriminant_analysis.LinearDiscriminantAnalysis
一個具有線性決策邊界的分類器,通過將類別條件密度擬合到資料並使用貝氏規則產生。
參考文獻
[1] (1,2,3)“Online Learning for Latent Dirichlet Allocation”,Matthew D. Hoffman、David M. Blei、Francis Bach,2010 blei-lab/onlineldavb
[2]“Stochastic Variational Inference”,Matthew D. Hoffman、David M. Blei、Chong Wang、John Paisley,2013
範例
>>> from sklearn.decomposition import LatentDirichletAllocation >>> from sklearn.datasets import make_multilabel_classification >>> # This produces a feature matrix of token counts, similar to what >>> # CountVectorizer would produce on text. >>> X, _ = make_multilabel_classification(random_state=0) >>> lda = LatentDirichletAllocation(n_components=5, ... random_state=0) >>> lda.fit(X) LatentDirichletAllocation(...) >>> # get topics for some given samples: >>> lda.transform(X[-2:]) array([[0.00360392, 0.25499205, 0.0036211 , 0.64236448, 0.09541846], [0.15297572, 0.00362644, 0.44412786, 0.39568399, 0.003586 ]])
- fit(X, y=None)[原始碼]#
使用變分貝氏方法學習資料 X 的模型。
當
learning_method
為 'online' 時,使用小批量更新。否則,使用批次更新。- 參數:
- X形狀為 (n_samples, n_features) 的類陣列或稀疏矩陣
文件詞彙矩陣。
- y忽略
不使用,此處為符合 API 一致性而存在。
- 傳回值:
- self
已擬合的估計器。
- fit_transform(X, y=None, *, normalize=True)[原始碼]#
擬合資料,然後轉換資料。
將轉換器擬合到
X
和y
,並傳回X
的轉換版本。- 參數:
- X形狀為 (n_samples, n_features) 的類陣列
輸入樣本。
- y形狀為 (n_samples,) 或 (n_samples, n_outputs) 的類陣列,預設值=None
目標值(對於無監督轉換為 None)。
- normalizebool,預設值=True
是否在
transform
中正規化文件主題分佈。
- 傳回值:
- X_new形狀為 (n_samples, n_features_new) 的 ndarray 陣列
轉換後的陣列。
- get_feature_names_out(input_features=None)[原始碼]#
取得轉換的輸出特徵名稱。
輸出的特徵名稱將以小寫的類別名稱作為前綴。例如,如果轉換器輸出 3 個特徵,則輸出的特徵名稱為:
["class_name0", "class_name1", "class_name2"]
。- 參數:
- input_features字串或 None 的類陣列,預設值=None
僅用於驗證
fit
中看到的名稱的特徵名稱。
- 傳回值:
- feature_names_out字串物件的 ndarray
轉換後的特徵名稱。
- get_metadata_routing()[原始碼]#
取得此物件的中繼資料路由。
請查閱使用者指南,了解路由機制的運作方式。
- 傳回值:
- routingMetadataRequest
一個封裝路由資訊的
MetadataRequest
。
- get_params(deep=True)[原始碼]#
取得此估計器的參數。
- 參數:
- deepbool,預設值=True
如果為 True,則會傳回此估計器和包含的子物件(屬於估計器)的參數。
- 傳回值:
- paramsdict
參數名稱對應到其值。
- partial_fit(X, y=None)[原始碼]#
使用小批量更新的線上 VB。
- 參數:
- X形狀為 (n_samples, n_features) 的類陣列或稀疏矩陣
文件詞彙矩陣。
- y忽略
不使用,此處為符合 API 一致性而存在。
- 傳回值:
- self
部分擬合的估計器。
- perplexity(X, sub_sampling=False)[原始碼]#
計算資料 X 的近似困惑度。
困惑度定義為 exp(-1. * 每個詞彙的對數似然性)
在 0.19 版中變更:doc_topic_distr 引數已過時且被忽略,因為使用者不再能夠存取未正規化的分佈
- 參數:
- X形狀為 (n_samples, n_features) 的類陣列或稀疏矩陣
文件詞彙矩陣。
- sub_samplingbool
是否進行子取樣。
- 傳回值:
- scorefloat
困惑度分數。
- score(X, y=None)[原始碼]#
計算近似對數似然性作為分數。
- 參數:
- X形狀為 (n_samples, n_features) 的類陣列或稀疏矩陣
文件詞彙矩陣。
- y忽略
不使用,此處為符合 API 一致性而存在。
- 傳回值:
- scorefloat
使用近似邊界作為分數。
- set_output(*, transform=None)[原始碼]#
設定輸出容器。
請參閱 介紹 set_output API,其中有關於如何使用 API 的範例。
- 參數:
- transform{"default", "pandas", "polars"},預設值=None
設定
transform
和fit_transform
的輸出。"default"
:轉換器的預設輸出格式"pandas"
:DataFrame 輸出"polars"
:Polars 輸出None
:轉換設定保持不變
1.4 版本新增:新增了
"polars"
選項。
- 傳回值:
- self估算器實例
估算器實例。
- set_params(**params)[來源]#
設定此估算器的參數。
此方法適用於簡單的估算器以及巢狀物件(例如
Pipeline
)。後者具有<component>__<parameter>
形式的參數,因此可以更新巢狀物件的每個元件。- 參數:
- **paramsdict
估算器參數。
- 傳回值:
- self估算器實例
估算器實例。
- set_transform_request(*, normalize: bool | None | str = '$UNCHANGED$') LatentDirichletAllocation [來源]#
請求傳遞給
transform
方法的中繼資料。請注意,此方法僅在
enable_metadata_routing=True
時才相關(請參閱sklearn.set_config
)。請參閱關於路由機制如何運作的使用者指南。每個參數的選項如下:
True
:要求中繼資料,並在提供時傳遞給transform
。如果未提供中繼資料,則會忽略該要求。False
:不要求中繼資料,且中繼估算器不會將其傳遞給transform
。None
:不要求中繼資料,如果使用者提供,則中繼估算器會引發錯誤。str
:中繼資料應以給定的別名而非原始名稱傳遞至中繼估算器。
預設值(
sklearn.utils.metadata_routing.UNCHANGED
)保留現有請求。這允許您變更某些參數的請求,而不用變更其他參數的請求。1.3 版本新增。
注意
此方法僅在此估算器用作中繼估算器的子估算器時才相關,例如在
Pipeline
內部使用。否則,它沒有任何作用。- 參數:
- normalizestr、True、False 或 None,預設值為 sklearn.utils.metadata_routing.UNCHANGED
transform
中normalize
參數的中繼資料路由。
- 傳回值:
- self物件
已更新的物件。