NMF#
- class sklearn.decomposition.NMF(n_components='auto', *, 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)[source]#
非负矩阵分解 (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 被转置了。
在 用户指南 中阅读更多内容。
- 参数:
- n_componentsint or {‘auto’} or None, default=’auto’
组件数量。如果为
None,则保留所有特征。如果n_components='auto',则组件数量会从 W 或 H 的形状自动推断。版本 1.4 中更改: 添加了
'auto'值。版本 1.6 中更改: 默认值从
None更改为'auto'。- init{‘random’, ‘nndsvd’, ‘nndsvda’, ‘nndsvdar’, ‘custom’}, default=None
用于初始化过程的方法。有效选项:
None: 如果 n_components <= min(n_samples, n_features),则为 'nndsvda',否则为 random。'random': 非负随机矩阵,按sqrt(X.mean() / n_components)缩放'nndsvd': Nonnegative Double Singular Value Decomposition (NNDSVD) 初始化(适用于稀疏性)'nndsvda': NNDSVD,其中零值用 X 的平均值填充(适用于不要求稀疏性时)'nndsvdar'NNDSVD,其中零值用小的随机值填充(通常更快,精度低于 NNDSVDa,适用于不要求稀疏性时)'custom': 使用自定义矩阵W和H,两者都必须提供。
版本 1.1 中更改: 当
init=None且 n_components 小于 n_samples 和 n_features 时,默认为nndsvda而不是nndsvd。- solver{‘cd’, ‘mu’}, default=’cd’
使用的数值求解器
‘cd’ 是坐标下降求解器。
‘mu’ 是乘法更新求解器。
版本 0.17 中新增: 坐标下降求解器。
版本 0.19 中新增: 乘法更新求解器。
- beta_lossfloat or {‘frobenius’, ‘kullback-leibler’, ‘itakura-saito’}, default=’frobenius’
要最小化的 beta 散度,用于衡量 X 和点积 WH 之间的距离。请注意,与 ‘frobenius’(或 2)和 ‘kullback-leibler’(或 1)不同的值会导致拟合速度明显变慢。请注意,对于 beta_loss <= 0(或 ‘itakura-saito’),输入矩阵 X 不能包含零值。仅在 ‘mu’ 求解器中使用。
Added in version 0.19.
- tolfloat, default=1e-4
停止条件的容差。
- max_iter整型, 默认为 200
超时前的最大迭代次数。
- random_stateint, RandomState instance or None, default=None
用于初始化(当
init== ‘nndsvdar’ 或 ‘random’)和坐标下降中。传入一个整数可以在多次函数调用中获得可重现的结果。参见 Glossary。- alpha_Wfloat, default=0.0
乘以
W的正则化项的常数。将其设置为零(默认值)表示不对W进行正则化。1.0 版本新增。
- alpha_Hfloat or “same”, default=”same”
乘以
H的正则化项的常数。将其设置为零表示不对H进行正则化。如果为 “same”(默认值),则取与alpha_W相同的值。1.0 版本新增。
- l1_ratiofloat, default=0.0
正则化混合参数,0 <= l1_ratio <= 1。当 l1_ratio = 0 时,惩罚项是元素级的 L2 惩罚(又称 Frobenius 范数)。当 l1_ratio = 1 时,惩罚项是元素级的 L1 惩罚。当 0 < l1_ratio < 1 时,惩罚项是 L1 和 L2 的组合。
版本 0.17 中新增: 在坐标下降求解器中使用的正则化参数 l1_ratio。
- verboseint, default=0
是否启用详细模式。
- shufflebool, default=False
如果为 true,则在 CD 求解器中随机化坐标的顺序。
版本 0.17 中新增: 在坐标下降求解器中使用的 shuffle 参数。
- 属性:
- components_ndarray of shape (n_components, n_features)
分解矩阵,有时称为“字典”。
- n_components_int
组件数量。如果给定了
n_components参数,则与该参数相同。否则,它将与特征数量相同。- reconstruction_err_float
训练数据
X与拟合模型重建的数据WH之间的矩阵差的 Frobenius 范数或 beta-散度。- n_iter_int
实际迭代次数。
- n_features_in_int
在 拟合 期间看到的特征数。
0.24 版本新增。
- feature_names_in_shape 为 (
n_features_in_,) 的 ndarray 在 fit 期间看到的特征名称。仅当
X具有全部为字符串的特征名称时才定义。1.0 版本新增。
另请参阅
DictionaryLearning查找一个稀疏编码数据的字典。
MiniBatchSparsePCAMini-batch 稀疏主成分分析。
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).
示例
>>> 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)[source]#
为数据 X 学习 NMF 模型。
- 参数:
- Xshape 为 (n_samples, n_features) 的 {array-like, sparse matrix}
训练向量,其中
n_samples是样本数,n_features是特征数。- y被忽略
未使用,按照惯例为保持 API 一致性而存在。
- **paramskwargs
传递给 fit_transform 实例的参数(关键字参数)和值。
- 返回:
- selfobject
返回实例本身。
- fit_transform(X, y=None, W=None, H=None)[source]#
为数据 X 学习 NMF 模型并返回转换后的数据。
这比先调用 fit 再调用 transform 更高效。
- 参数:
- Xshape 为 (n_samples, n_features) 的 {array-like, sparse matrix}
训练向量,其中
n_samples是样本数,n_features是特征数。- y被忽略
未使用,按照惯例为保持 API 一致性而存在。
- Warray-like of shape (n_samples, n_components), default=None
如果
init='custom',则用作解的初始猜测。如果为None,则使用init中指定的初始化方法。- Harray-like of shape (n_components, n_features), default=None
如果
init='custom',则用作解的初始猜测。如果为None,则使用init中指定的初始化方法。
- 返回:
- Wndarray of shape (n_samples, n_components)
转换后的数据。
- get_feature_names_out(input_features=None)[source]#
获取转换的输出特征名称。
The feature names out will prefixed by the lowercased class name. For example, if the transformer outputs 3 features, then the feature names out are:
["class_name0", "class_name1", "class_name2"].- 参数:
- input_featuresarray-like of str or None, default=None
Only used to validate feature names with the names seen in
fit.
- 返回:
- feature_names_outstr 对象的 ndarray
转换后的特征名称。
- get_metadata_routing()[source]#
获取此对象的元数据路由。
请查阅 用户指南,了解路由机制如何工作。
- 返回:
- routingMetadataRequest
封装路由信息的
MetadataRequest。
- get_params(deep=True)[source]#
获取此估计器的参数。
- 参数:
- deepbool, default=True
如果为 True,将返回此估计器以及包含的子对象(如果它们是估计器)的参数。
- 返回:
- paramsdict
参数名称映射到其值。
- inverse_transform(X)[source]#
将数据转换回其原始空间。
版本 0.18 新增。
- 参数:
- X{ndarray, sparse matrix} of shape (n_samples, n_components)
转换后的数据矩阵。
- 返回:
- X_original形状为 (n_samples, n_features) 的 ndarray
返回原始形状的数据矩阵。
- set_output(*, transform=None)[source]#
设置输出容器。
有关如何使用 API 的示例,请参阅引入 set_output API。
- 参数:
- transform{“default”, “pandas”, “polars”}, default=None
配置
transform和fit_transform的输出。"default": 转换器的默认输出格式"pandas": DataFrame 输出"polars": Polars 输出None: 转换配置保持不变
1.4 版本新增: 添加了
"polars"选项。
- 返回:
- selfestimator instance
估计器实例。