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)[源代码]#

采用在线变分Bayes算法的潜在Dirichlet分配。

实施基于 [1][2].

Added in version 0.17.

阅读更多的 User Guide .

参数:
n_componentsint,默认值=10

题目数。

在 0.19 版本发生变更: n_topics 更名为 n_components

doc_topic_priorfloat,默认=无

文件主题分发之前 theta .如果值为无,则默认为 1 / n_components .在 [1], 这被称为 alpha .

topic_word_priorfloat,默认=无

主题词分布先验 beta .如果值为无,则默认为 1 / n_components .在 [1], 这被称为 eta .

learning_method'批','在线'},默认='批'

用于更新的方法 _component .仅用于 fit 法一般来说,如果数据量较大,在线更新会比批量更新快得多。

有效选项:

  • “批处理”:批处理变分Bayes方法。在每次EM更新中使用所有训练数据。老 components_ 将在每次迭代中被覆盖。

  • “在线”:在线变分Bayes方法。在每次EM更新中,使用小批训练数据来更新 components_ 增量变量。学习率由 learning_decaylearning_offset 参数

在 0.20 版本发生变更: 默认的学习方法是现在 "batch" .

learning_decay浮点数,默认值=0.7

它是在线学习方法中控制学习率的参数。该值应设置在(0.5,1.0)之间,以保证渐进收敛。当值为0.0且batch_size为 n_samples ,更新方法与批量学习相同。在文献中,这被称为kappa。

learning_offset浮点数,默认值=10.0

一个(正)参数,可以减轻在线学习中早期迭代的权重。 它应该大于1.0。在文献中,这被称为tau_0。

max_iterint,默认值=10

训练数据(又名epochs)的最大传递次数。它只会影响 fit 方法,而不是 partial_fit

batch_sizeint,默认=128

每个EM迭代中使用的文档数量。仅用于在线学习。

evaluate_everyint,默认=-1

评估困惑的频率。仅用于 fit 法将其设置为0或负值,根本不评估训练中的困惑。评估困惑度可以帮助您检查训练过程中的收敛性,但也会增加总训练时间。在每次迭代中评估困惑度可能会将训练时间增加两倍。

total_samplesint, default=1e6

文档总数。仅用于 partial_fit

perp_tol浮动,默认= 1 e-1

困惑宽容。仅在当 evaluate_every 大于0。

mean_change_tol浮点数,默认值= 1 e-3

Stopping tolerance for updating document topic distribution in E-step.

max_doc_update_iterint,默认=100

E步骤中更新文档主题分发的最大迭代次数。

n_jobsint,默认=无

E步骤中要使用的作业数。 None 意思是1,除非在a中 joblib.parallel_backend 上下文 -1 意味着使用所有处理器。看到 Glossary 了解更多详细信息。

verboseint,默认=0

冗长级别。

random_stateint,RandomState实例或无,默认=无

传递int以获得跨多个函数调用的可重复结果。看到 Glossary .

属性:
components_ndrow形状数组(n_components,n_features)

主题词分布的变分参数。由于主题词分布的完整条件是Dirichlet, components_[i, j] 可以被视为代表单词次数的伪计数 j 被分配到主题 i .它也可以被视为归一化后每个主题的单词分布: model.components_ / model.components_.sum(axis=1)[:, np.newaxis] .

exp_dirichlet_component_ndrow形状数组(n_components,n_features)

日志主题词分布期望的指数值。在文献中,这是 exp(E[log(beta)]) .

n_batch_iter_int

EM步骤的迭代次数。

n_features_in_int

期间看到的功能数量 fit .

Added in version 0.24.

feature_names_in_ :nd形状数组 (n_features_in_ ,)nd数组形状(

Names of features seen during fit. Defined only when X has feature names that are all strings.

Added in version 1.0.

n_iter_int

数据集的传递次数。

bound_浮子

训练集的最终困惑分数。

doc_topic_prior_浮子

文件主题分发之前 theta .如果值为None,则为 1 / n_components .

random_state_RandomState实例

RandomState实例,该实例由种子、随机数生成器或 np.random .

topic_word_prior_浮子

主题词分布先验 beta .如果值为None,则为 1 / n_components .

参见

sklearn.discriminant_analysis.LinearDiscriminantAnalysis

具有线性决策边界的分类器,通过将类别条件密度与数据匹配并使用Bayes规则生成。

引用

[1] (1,2,3)

“潜在狄利克雷分配的在线学习”,马修·D。大卫·M·霍夫曼布莱,弗朗西斯·巴赫,2010年https://github.com/blei-lab/onlineldavb

[2]

“随机变分推理”,马修·D。大卫·M·霍夫曼布莱、王冲、约翰·佩斯利,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)[源代码]#

使用变分Bayes方法学习数据X的模型。

learning_method 是“在线”,请使用小批量更新。否则,请使用批量更新。

参数:
X形状(n_samples,n_features)的{类数组,稀疏矩阵}

文档单词矩阵。

y忽视

未使用,此处列出是为了按照惯例实现API一致性。

返回:
自我

拟合估计量。

fit_transform(X, y=None, *, normalize=True)[源代码]#

适应数据,然后对其进行转换。

适合变压器 Xy 并返回的转换版本 X .

参数:
X形状类似阵列(n_samples,n_features)

输入样本。

y形状为(n_samples,)或(n_samples,n_outputs)的阵列状, 默认值=无

目标值(无监督转换)。

normalize布尔,默认=True

是否规范文档主题分布 transform .

返回:
X_newndray形状数组(n_samples,n_features_new)

变形的数组。

get_feature_names_out(input_features=None)[源代码]#

获取用于转换的输出要素名称。

输出的功能名称将以大写的类别名称为开头。例如,如果Transformer输出3个特征,则输出的特征名称为: ["class_name0", "class_name1", "class_name2"] .

参数:
input_features字符串或无的类数组,默认=无

仅用于通过中看到的名称验证要素名称 fit .

返回:
feature_names_out字符串对象的nd数组

转换的功能名称。

get_metadata_routing()[源代码]#

获取此对象的元数据路由。

请检查 User Guide 关于路由机制如何工作。

返回:
routingMetadataRequest

A MetadataRequest 封装路由信息。

get_params(deep=True)[源代码]#

获取此估计器的参数。

参数:
deep布尔,默认=True

如果为True,将返回此估计量和包含的作为估计量的子对象的参数。

返回:
paramsdict

参数名称映射到其值。

partial_fit(X, y=None)[源代码]#

在线VB,带有迷你批量更新。

参数:
X形状(n_samples,n_features)的{类数组,稀疏矩阵}

文档单词矩阵。

y忽视

未使用,此处列出是为了按照惯例实现API一致性。

返回:
自我

部分适合的估计量。

perplexity(X, sub_sampling=False)[源代码]#

计算数据X的大致困惑度。

困惑被定义为BEP(-1。* 每个词的log似然度)

在 0.19 版本发生变更: doc_topic_distr 参数已被弃用并被忽略,因为用户不再有权访问非规范化分发

参数:
X形状(n_samples,n_features)的{类数组,稀疏矩阵}

文档单词矩阵。

sub_samplingbool

是否进行二次抽样。

返回:
score浮子

困惑分数。

score(X, y=None)[源代码]#

计算大致的log似然度作为分数。

参数:
X形状(n_samples,n_features)的{类数组,稀疏矩阵}

文档单词矩阵。

y忽视

未使用,此处列出是为了按照惯例实现API一致性。

返回:
score浮子

使用大致界限作为分数。

set_output(*, transform=None)[源代码]#

设置输出容器。

看到 介绍 set_output API 了解如何使用API的示例。

参数:
transform{“默认”,“pandas”,“polars”},默认=无

配置输出 transformfit_transform .

  • "default" :Transformer的默认输出格式

  • "pandas" :DataFrame输出

  • "polars" :两极输出

  • None :转换配置不变

Added in version 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 ).请参阅 User Guide 关于路由机制如何工作。

The options for each parameter are:

  • True :元数据被请求并传递给 transform 如果提供的话。如果未提供元数据,则会忽略请求。

  • False :未请求元数据,元估计器不会将其传递给 transform .

  • None :不请求元数据,如果用户提供元估计器,则元估计器将引发错误。

  • str :元数据应通过此给定别名而不是原始名称传递给元估计器。

默认 (sklearn.utils.metadata_routing.UNCHANGED )保留现有请求。这允许您更改某些参数的请求,而不是其他参数。

Added in version 1.3.

备注

只有当该估计器用作元估计器的子估计器时,该方法才相关,例如在 Pipeline .否则就没有效果了。

参数:
normalize字符串、真、假或无, 默认=sklearn.utils. metalics_Routing.UNChanged

元数据路由 normalize 参数 transform .

返回:
self对象

更新的对象。

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

根据匹配的模型转换数据X。

在 0.18 版本发生变更: doc_topic_distr 现已正常化。

参数:
X形状(n_samples,n_features)的{类数组,稀疏矩阵}

文档单词矩阵。

normalize布尔,默认=True

是否规范文档主题分布。

返回:
doc_topic_distr形状的nd数组(n_samples,n_components)

文档X的主题分发。