MiniBatchNMF#

class sklearn.decomposition.MiniBatchNMF(n_components='auto', *, init=None, batch_size=1024, beta_loss='frobenius', tol=0.0001, max_no_improvement=10, max_iter=200, alpha_W=0.0, alpha_H='same', l1_ratio=0.0, forget_factor=0.7, fresh_restarts=False, fresh_restarts_max_iter=30, transform_max_iter=None, random_state=None, verbose=0)[源代码]#

小批量非负矩阵分解(NMF)。

Added in version 1.1.

找到两个非负矩阵,即具有所有非负元素的矩阵, (W , H )其积接近非负矩阵 X .例如,这种因式分解可以用于降维、源分离或主题提取。

目标函数是:

\[ \begin{align}\begin{aligned}L(W, H) &= 0.5 * ||X - WH||_{loss}^2\\ &+ alpha\_W * l1\_ratio * n\_features * ||vec(W)||_1\\ &+ alpha\_H * l1\_ratio * n\_samples * ||vec(H)||_1\\ &+ 0.5 * alpha\_W * (1 - l1\_ratio) * n\_features * ||W||_{Fro}^2\\ &+ 0.5 * alpha\_H * (1 - l1\_ratio) * n\_samples * ||H||_{Fro}^2,\end{aligned}\end{align} \]

哪里 \(||A||_{Fro}^2 = \sum_{i,j} A_{ij}^2\) (弗罗贝尼乌斯规范)和 \(||vec(A)||_1 = \sum_{i,j} abs(A_{ij})\) (基本L1规范)。

一般规范 \(||X - WH||_{loss}^2\) 可能代表弗罗贝尼乌斯规范或另一种支持的β-背离损失。选项之间的选择由 beta_loss 参数.

通过交替最小化来最小化目标函数 WH .

请注意,转换后的数据被命名 W 并命名组件矩阵 H .在NMF文献中,命名惯例通常相反,因为数据矩阵 X 被调换了。

阅读更多的 User Guide .

参数:
n_componentsint或' Auto '}或无,默认=' Auto '

组件数量。如果 None ,所有功能均保留。如果 n_components='auto' ,从W或H形状自动推断出元件的数量。

在 1.4 版本发生变更: 添加 'auto'

在 1.6 版本发生变更: 默认值更改为 None'auto' .

init' random ',' nnddsvda ',' nndsdar ',

用于初始化过程的方法。有效选项:

  • None :“nndsvda”如果 n_components <= min(n_samples, n_features) ,否则随机。

  • 'random' :非负随机矩阵,按以下方式缩放: sqrt(X.mean() / n_components)

  • 'nndsvd' 非负双奇异值分解(NNDSVD)初始化(更好的稀疏性)。

  • 'nndsvda' :NNDS VD,零填充X的平均值(当不需要稀疏时更好)。

  • 'nndsvdar' NDNDS VD,零填充小随机值(通常在不需要稀疏性时代替NNDSVDa,通常更快、准确性较低)。

  • 'custom' :使用自定义矩阵 WH 两者都必须提供。

batch_sizeint,默认值=1024

每个小批次中的样本数量。大批量可以提供更好的长期收敛,但代价是启动速度较慢。

beta_lossfloat或' frobenius ',&#39 ' itakura-saito '},默认=' frobenius '

Beta偏差最小化,测量之间的距离 X 以及点积 WH .请注意,与“frobenius”(或2)和“kullback-leibler”(或1)不同的值会导致拟合速度明显变慢。注意对于 beta_loss <= 0 (or“itakura-saito”),输入矩阵 X 不能包含零。

tolfloat,默认= 1 e-4

Control early stopping based on the norm of the differences in H between 2 steps. To disable early stopping based on changes in H, set tol to 0.0.

max_no_improvementint,默认值=10

根据小型批次的连续数量控制提前停止,但不会改善平滑成本函数。要禁用基于成本函数的收敛检测,请设置 max_no_improvement 到无。

max_iterint,默认=200

超时前完整数据集的最大迭代次数。

alpha_Wfloat,默认=0.0

乘以的正规化项的常数 W .将其设置为零(默认)以没有规则化 W .

alpha_Hfloat或“same”,默认=“same”

乘以的正规化项的常数 H .将其设置为零以不进行正规化 H .如果“相同”(默认),则采用与 alpha_W .

l1_ratiofloat,默认=0.0

正规化混合参数,0 <= l1_ratio <= 1。对于l1_ratio = 0,罚分是元素L2罚分(又名Frobenius Norm)。对于l1_ratio = 1,这是一个元素L1罚分。对于0 <l1_ratio < 1,罚分是L1和L2的组合。

forget_factor浮点数,默认值=0.7

过去信息的重新缩放量。对于有限的数据集,其值可能为1。建议在在线学习中选择< 1的值,因为最近的批次的权重将大于过去的批次。

fresh_restarts布尔,默认=假

是否在每一步彻底解决W。重新启动可能会在相同迭代次数的情况下获得更好的解决方案,但速度要慢得多。

fresh_restarts_max_iterint,默认=30

在每一步求解W时的最大迭代次数。仅在重新启动时使用。这些迭代可能会根据以下控制的W的微小变化而提前停止 tol .

transform_max_iterint,默认=无

在变换时求解W时的最大迭代次数。如果无,则默认为 max_iter .

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

用于初始化(当 init ==' nndsvdar '或' random '),并在坐标下降中。传递int以获得跨多个函数调用的可重复结果。看到 Glossary .

verbose布尔,默认=假

是否冗长。

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

因式分解矩阵,有时称为“词典”。

n_components_int

组件的数量。它和 n_components 参数(如果已给出)。否则,它将与特征数量相同。

reconstruction_err_浮子

训练数据之间矩阵差或β-偏差的弗罗贝尼乌斯规范 X 以及重建的数据 WH 来自合适的模型。

n_iter_int

整个数据集中开始迭代的实际次数。

n_steps_int

处理的小批次数量。

n_features_in_int

期间看到的功能数量 fit .

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.

参见

NMF

Non-negative matrix factorization.

MiniBatchDictionaryLearning

查找最适合使用稀疏代码表示数据的字典。

引用

[1]

"Fast local algorithms for large scale nonnegative matrix and tensor factorizations" 西西斯基、安杰伊和PH A. N.安惠。IEICE电子、通信和计算机科学基础交易92.3:708-721,2009年。

[2]

"Algorithms for nonnegative matrix factorization with the beta-divergence" C.费沃特& Idier,J.(2011)。神经计算,23(9)。

[3]

"Online algorithms for nonnegative matrix factorization with the Itakura-Saito divergence" Lefevre,A.,巴赫,F.,费沃特,C.(2011)。WASPA。

示例

>>> import numpy as np
>>> X = np.array([[1, 1], [2, 1], [3, 1.2], [4, 1], [5, 0.8], [6, 1]])
>>> from sklearn.decomposition import MiniBatchNMF
>>> model = MiniBatchNMF(n_components=2, init='random', random_state=0)
>>> W = model.fit_transform(X)
>>> H = model.components_
fit(X, y=None, **params)[源代码]#

了解数据X的NMF模型。

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

训练载体,在哪里 n_samples 是样本数量和 n_features 是功能的数量。

y忽视

未使用,按照惯例,为了API一致性而存在。

**paramskwargs

传递给fit_transform实例的参数(关键字参数)和值。

返回:
self对象

返回实例本身。

fit_transform(X, y=None, W=None, H=None)[源代码]#

学习数据X的NMF模型并返回转换后的数据。

这比调用fit然后调用transform更有效。

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

要分解的数据矩阵。

y忽视

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

W形状类似阵列(n_samples,n_components),默认=无

If init='custom', it is used as initial guess for the solution. If None, uses the initialisation method specified in init.

H形状类似阵列(n_components,n_features),默认=无

If init='custom', it is used as initial guess for the solution. If None, uses the initialisation method specified in init.

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

转换的数据。

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

参数名称映射到其值。

inverse_transform(X=None, *, Xt=None)[源代码]#

将数据转换回其原始空间。

Added in version 0.18.

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

转换后的数据矩阵。

Xt形状(n_samples,n_components)的{nd数组,稀疏矩阵}

转换后的数据矩阵。

自 1.5 版本弃用: Xt 在1.5中已废弃,并将在1.7中删除。使用 X 而不是.

返回:
X形状的nd数组(n_samples,n_features)

返回原始形状的数据矩阵。

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

使用中的数据更新模型 X 作为一个小批量。

该方法预计将在数据集的不同块上连续调用多次,以实现核外或在线学习。

当整个数据集太大而无法同时放入内存时,这尤其有用(请参阅 计算扩展策略:更大的数据 ).

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

要分解的数据矩阵。

y忽视

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

W形状类似阵列(n_samples,n_components),默认=无

如果 init='custom' ,它被用作解决方案的初始猜测。仅用于第一次致电 partial_fit .

H形状类似阵列(n_components,n_features),默认=无

如果 init='custom' ,它被用作解决方案的初始猜测。仅用于第一次致电 partial_fit .

返回:
自我

返回实例本身。

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估计器实例

估计实例。

transform(X)[源代码]#

根据匹配的MiniBatchNMF模型对数据X进行转换。

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

模型要转换的数据矩阵。

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

转换的数据。