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'
:使用自定义矩阵W
和H
,两者都必须提供。
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
配置
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)#
根据拟合的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)
变换后的数据。