MiniBatchNMF#

class sklearn.decomposition.MiniBatchNMF(n_components='warn', *, 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)#

Mini-Batch 非负矩阵分解 (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\) (Frobenius 范数)

\(||vec(A)||_1 = \sum_{i,j} abs(A_{ij})\) (元素级 L1 范数)

通用范数 \(||X - WH||_{loss}^2\) 可以表示 Frobenius 范数或另一种支持的 beta-散度损失。选项之间的选择由 beta_loss 参数控制。

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

注意,变换后的数据命名为 W ,而组件矩阵命名为 H 。在 NMF 文献中,命名惯例通常是相反的,因为数据矩阵 X 被转置。

更多信息请参阅 用户指南

Parameters:
n_componentsint 或 {‘auto’} 或 None, 默认=None

组件数量,如果 n_components 未设置,则保留所有特征。 如果 n_components='auto' ,则组件数量会根据 W 或 H 的形状自动推断。

Changed in version 1.4: 添加了 'auto' 值。

init{‘random’, ‘nndsvd’, ‘nndsvda’, ‘nndsvdar’, ‘custom’}, 默认=None

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

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

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

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

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

  • 'nndsvdar' : NNDSVD 用小的随机值填充零(通常更快,但准确性较低,当不需要稀疏性时是 NNDSVDa 的替代方案)。

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

batch_sizeint, 默认=1024

每个小批量中的样本数量。较大的批量大小在长期收敛方面更好,但启动速度较慢。

beta_lossfloat 或 {‘frobenius’, ‘kullback-leibler’, ‘itakura-saito’}, 默认=’frobenius’

要最小化的 beta 散度,测量 X 和点积 WH 之间的距离。注意,不同于 ‘frobenius’(或 2)和 ‘kullback-leibler’(或 1)的值会导致显著较慢的拟合。注意,对于 beta_loss <= 0 (或 ‘itakura-saito’),输入矩阵 X 不能包含零。

tolfloat, 默认=1e-4

基于 H 在两个步骤之间的范数差异控制早期停止。要禁用基于 H 变化的早期停止,请将 tol 设置为 0.0。

max_no_improvementint, 默认=10

基于连续的小批量数量控制早期停止,这些小批量不会导致平滑成本函数的改进。要禁用基于成本函数的收敛检测,请将 max_no_improvement 设置为 None。

max_iterint, 默认=200

在超时之前对整个数据集进行迭代的最大次数。

alpha_Wfloat, 默认=0.0

乘以 W 正则化项的常数。将其设置为零(默认)表示对 W 没有正则化。

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

乘以 H 正则化项的常数。将其设置为零表示对 H 没有正则化。如果为 “same”(默认),则取与 alpha_W 相同的值。

l1_ratiofloat, 默认=0.0

正则化混合参数,0 <= l1_ratio <= 1。 对于 l1_ratio = 0,惩罚是元素级的 L2 惩罚(即 Frobenius 范数)。 对于 l1_ratio = 1,惩罚是元素级的 L1 惩罚。 对于 0 < l1_ratio < 1,惩罚是 L1 和 L2 的组合。

forget_factorfloat, 默认=0.7

过去信息的重新缩放量。其值可以是 1,在有限数据集上。建议在在线学习中选择值 < 1,因为更近的批量将比过去的批量权重更大。

fresh_restartsbool, 默认=False

是否在每一步完全求解 W。进行新鲜重启可能会在相同数量的迭代中得到更好的解决方案,但速度会慢得多。

fresh_restarts_max_iterint, 默认=30

每一步求解 W 时的最大迭代次数。仅在执行新鲜重启时使用。这些迭代可能会基于 tol 控制的小变化提前停止。

transform_max_iterint, 默认=None

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

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

用于初始化(当 init == ‘nndsvdar’ 或 ‘random’)和坐标下降。传递一个 int 以在多次函数调用中获得可重复的结果。 参见 Glossary

verbosebool, 默认=False

是否详细输出。

Attributes:
components_ndarray of shape (n_components, n_features)

分解矩阵,有时称为“字典”。

n_components_int

组件数量。如果给出了 n_components 参数,则与该参数相同。否则,将与特征数量相同。

reconstruction_err_float

训练数据 X 和拟合模型重建数据 WH 之间的矩阵差异的 Frobenius 范数,或 beta-散度。

n_iter_int

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

n_steps_int

处理的小批量数量。

n_features_in_int

fit 期间看到的特征数量。

feature_names_in_ndarray of shape ( n_features_in_ ,)

fit 期间看到的特征名称。仅当 X 的特征名称均为字符串时定义。

See also

NMF

非负矩阵分解。

MiniBatchDictionaryLearning

找到一个字典,可以使用稀疏编码最好地表示数据。

References

[1]

“Fast local algorithms for large scale nonnegative matrix and tensor factorizations” Cichocki, Andrzej, and P. H. A. N. Anh-Huy. IEICE transactions on fundamentals of electronics, communications and computer sciences 92.3: 708-721, 2009.

[2]

“Algorithms for nonnegative matrix factorization with the beta-divergence” Fevotte, C., & Idier, J. (2011). Neural Computation, 23(9).

Examples

>>> 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 模型。

Parameters:
X{array-like, sparse matrix},形状为 (n_samples, n_features)

训练向量,其中 n_samples 是样本数量, n_features 是特征数量。

y忽略

未使用,为了保持 API 一致性而存在。

**paramskwargs

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

Returns:
selfobject

返回实例本身。

fit_transform(X, y=None, W=None, H=None)#

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

这比调用fit再调用transform更高效。

Parameters:
X{array-like, sparse matrix},形状为 (n_samples, n_features)

要分解的数据矩阵。

y忽略

未使用,此处仅为了API一致性而存在。

W形状为 (n_samples, n_components) 的array-like,默认=None

如果 init='custom' ,它被用作解决方案的初始猜测。 如果 None ,使用 init 中指定的初始化方法。

H形状为 (n_components, n_features) 的array-like,默认=None

如果 init='custom' ,它被用作解决方案的初始猜测。 如果 None ,使用 init 中指定的初始化方法。

Returns:
W形状为 (n_samples, n_components) 的ndarray

转换后的数据。

get_feature_names_out(input_features=None)#

获取转换后的输出特征名称。

输出特征名称将以小写的类名作为前缀。例如,如果转换器输出3个特征,那么输出特征名称将是: ["class_name0", "class_name1", "class_name2"]

Parameters:
input_features类似数组的对象或None,默认为None

仅用于验证特征名称与 fit 中看到的名称。

Returns:
feature_names_outndarray of str对象

转换后的特征名称。

get_metadata_routing()#

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

请查看 用户指南 以了解路由机制的工作原理。

Returns:
routingMetadataRequest

MetadataRequest 封装的 路由信息。

get_params(deep=True)#

获取此估计器的参数。

Parameters:
deepbool, 默认=True

如果为True,将返回此估计器和包含的子对象(也是估计器)的参数。

Returns:
paramsdict

参数名称映射到它们的值。

inverse_transform(X=None, *, Xt=None)#

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

Added in version 0.18.

Parameters:
X{ndarray, sparse matrix} of shape (n_samples, n_components)

转换后的数据矩阵。

Xt{ndarray, sparse matrix} of shape (n_samples, n_components)

转换后的数据矩阵。

Deprecated since version 1.5: Xt 在 1.5 版本中已弃用,并将在 1.7 版本中移除。请使用 X 代替。

Returns:
Xndarray of shape (n_samples, n_features)

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

partial_fit(X, y=None, W=None, H=None)#

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

此方法预计会连续调用多次,对数据集的不同部分进行处理,以实现外存学习或在线学习。

当整个数据集太大而无法一次性放入内存时,这尤其有用(参见 计算扩展策略:更大的数据 )。

Parameters:
X{array-like, sparse matrix},形状为 (n_samples, n_features)

要分解的数据矩阵。

y忽略

未使用,此处仅为了API一致性而存在。

Warray-like,形状为 (n_samples, n_components),默认=None

如果 init='custom' ,则用作解决方案的初始猜测。仅在第一次调用 partial_fit 时使用。

Harray-like,形状为 (n_components, n_features),默认=None

如果 init='custom' ,则用作解决方案的初始猜测。仅在第一次调用 partial_fit 时使用。

Returns:
self

返回实例本身。

set_output(*, transform=None)#

设置输出容器。

请参阅 介绍 set_output API 以了解如何使用API的示例。

Parameters:
transform{“default”, “pandas”, “polars”}, 默认=None

配置 transformfit_transform 的输出。

  • "default" : 转换器的默认输出格式

  • "pandas" : DataFrame 输出

  • "polars" : Polars 输出

  • None : 转换配置不变

Added in version 1.4: "polars" 选项已添加。

Returns:
self估计器实例

估计器实例。

set_params(**params)#

设置此估计器的参数。

该方法适用于简单估计器以及嵌套对象(例如 Pipeline )。后者具有形式为 <component>__<parameter> 的参数,以便可以更新嵌套对象的每个组件。

Parameters:
**paramsdict

估计器参数。

Returns:
selfestimator instance

估计器实例。

transform(X)#

Transform the data X according to the fitted MiniBatchNMF model.

Parameters:
X{array-like, sparse matrix} of shape (n_samples, n_features)

需要通过模型转换的数据矩阵。

Returns:
Wndarray of shape (n_samples, n_components)

转换后的数据。