潛在狄利克雷分配 (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)[來源]#

使用線上變分貝氏演算法的潛在狄利克雷分配。

此實作基於 [1][2]

於 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_decaylearning_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)[原始碼]#

擬合資料,然後轉換資料。

將轉換器擬合到 Xy,並傳回 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

設定 transformfit_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

transformnormalize 參數的中繼資料路由。

傳回值:
self物件

已更新的物件。

transform(X, *, normalize=True)[來源]#

根據已擬合的模型轉換資料 X。

在 0.18 版本變更:doc_topic_distr 現在已標準化。

參數:
X形狀為 (n_samples, n_features) 的類陣列或稀疏矩陣

文件詞彙矩陣。

normalizebool,預設值=True

是否標準化文件主題分佈。

傳回值:
doc_topic_distr形狀為 (n_samples, n_components) 的 ndarray

X 的文件主題分佈。