NMF#

class sklearn.decomposition.NMF(n_components='warn', *, init=None, solver='cd', beta_loss='frobenius', tol=0.0001, max_iter=200, random_state=None, alpha_W=0.0, alpha_H='same', l1_ratio=0.0, verbose=0, shuffle=False)#

非负矩阵分解(NMF)。

找到两个非负矩阵,即所有元素均为非负的矩阵(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}\) 可以表示Frobenius范数或另一种支持的beta-散度损失。选项之间的选择由 beta_loss 参数控制。

正则化项按 n_features 缩放 W ,按 n_samples 缩放 H ,以保持它们相对于彼此和数据拟合项的影响平衡,尽可能独立于训练集的大小 n_samples

目标函数通过交替最小化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' :使用自定义矩阵 WH ,两者都必须提供。

Changed in version 1.1: init=None 且n_components小于n_samples和n_features时,默认值为 nndsvda 而不是 nndsvd

solver{‘cd’, ‘mu’}, 默认=’cd’

使用的数值求解器:

  • ‘cd’ 是坐标下降求解器。

  • ‘mu’ 是乘法更新求解器。

Added in version 0.17: 坐标下降求解器。

Added in version 0.19: 乘法更新求解器。

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

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

Added in version 0.19.

tolfloat, 默认=1e-4

停止条件的容差。

max_iterint, 默认=200

超时前的最大迭代次数。

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

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

alpha_Wfloat, 默认=0.0

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

Added in version 1.0.

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

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

Added in version 1.0.

l1_ratiofloat, 默认=0.0

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

Added in version 0.17: 在坐标下降求解器中使用的正则化参数*l1_ratio*。

verboseint, 默认=0

是否详细。

shufflebool, 默认=False

如果为真,在CD求解器中随机化坐标的顺序。

Added in version 0.17: *shuffle*参数用于坐标下降求解器。

Attributes:
components_ndarray of shape (n_components, n_features)

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

n_components_int

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

reconstruction_err_float

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

n_iter_int

实际迭代次数。

n_features_in_int

fit 期间看到的特征数量。

Added in version 0.24.

feature_names_in_ndarray of shape ( n_features_in_ ,)

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

Added in version 1.0.

See also

DictionaryLearning

找到一个稀疏编码数据的字典。

MiniBatchSparsePCA

小批量稀疏主成分分析。

PCA

主成分分析。

SparseCoder

从固定的预计算字典中找到数据的稀疏表示。

SparsePCA

稀疏主成分分析。

TruncatedSVD

使用截断SVD进行降维。

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 NMF
>>> model = NMF(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)

训练向量,其中 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)

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

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)#

根据拟合的NMF模型对数据X进行变换。

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

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

Returns:
Wndarray of shape (n_samples, n_components)

变换后的数据。