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
参数控制。目标函数通过交替最小化
W
和H
来最小化。注意,变换后的数据命名为
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'
: 使用自定义矩阵W
和H
,两者都必须提供。
- 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).
[3]“Online algorithms for nonnegative matrix factorization with the Itakura-Saito divergence” Lefevre, A., Bach, F., Fevotte, C. (2011). WASPA.
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
配置
transform
和fit_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)
转换后的数据。