当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python sklearn NMF用法及代码示例


本文简要介绍python语言中 sklearn.decomposition.NMF 的用法。

用法:

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

非负矩阵分解 (NMF)。

找到两个非负矩阵 (W, H),其乘积近似于非负矩阵 X。这种分解可用于例如降维、源分离或主题提取。

目标函数为:

其中:

(弗罗贝尼乌斯范数)

(元素级 L1 范数)

通用范数 可能代表 Frobenius 范数或其他支持的 beta-divergence 损失。选项之间的选择由beta_loss 参数控制。

正则化项按n_featuresWn_samplesH 进行缩放,以使它们的影响相互之间保持平衡,并尽可能独立于数据拟合项的大小n_samples训练集。

通过交替最小化 W 和 H 来最小化目标函数。

在用户指南中阅读更多信息。

参数

n_components整数,默认=无

组件数,如果未设置 n_components 则保留所有特征。

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

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

  • None : ‘nndsvd’ 如果 n_components <= min(n_samples, n_features),否则随机。
  • 'random' :非负随机矩阵,缩放比例: sqrt(X.mean() /n_components)
  • 'nndsvd':非负双奇异值分解 (NNDSVD) 初始化(更适合稀疏性)
  • 'nndsvda' : NNDSVD 用 X 的平均值填充零(在不需要稀疏性时更好)
  • 'nndsvdar' NNDSVD 用小随机值填充零(当不需要稀疏性时,通常是 NNDSVDa 更快、更不准确的替代方案)
  • 'custom':使用自定义矩阵 W 和 H
solver{‘cd’, ‘mu’},默认='cd'

要使用的数值求解器:‘cd’ 是坐标下降求解器。 ‘mu’ 是一个乘法更新求解器。

beta_loss浮点数或 {‘frobenius’, 'kullback-leibler', 'itakura-saito'}, 默认='frobenius'

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

tol浮点数,默认=1e-4

停止条件的容差。

max_iter整数,默认=200

超时前的最大迭代次数。

random_stateint、RandomState 实例或无,默认=无

用于初始化(当init == ‘nndsvdar’或‘random’时)和坐标下降。传递 int 以获得跨多个函数调用的可重现结果。请参阅术语表。

alpha浮点数,默认=0.0

乘以正则化项的常数。将其设置为零以不进行正则化。当使用 alpha 而不是 alpha_Walpha_H 时,正则化项不会被 n_features(分别为 n_samples )因子缩放为 W(分别为 H )。

alpha_W浮点数,默认=0.0

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

alpha_H浮点数或“same”,默认=”same”

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

l1_ratio浮点数,默认=0.0

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

verbose整数,默认=0

是否冗长。

shuffle布尔,默认=假

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

regularization{‘both’, ‘components’, ‘transformation’,无},默认='两者'

选择正则化是否影响分量 (H)、变换 (W),两者都影响或都不影响。

属性

components_ndarray 形状(n_components,n_features)

分解矩阵,有时称为‘dictionary’。

n_components_int

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

reconstruction_err_浮点数

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

n_iter_int

实际迭代次数。

n_features_in_int

拟合期间看到的特征数。

feature_names_in_ndarray 形状(n_features_in_,)

拟合期间看到的特征名称。仅当 X 具有全为字符串的函数名称时才定义。

参考

Cichocki、Andrzej 和 P.H.A.N.Anh-Huy。 “用于大规模非负矩阵和张量分解的快速局部算法。” IEICE 电子、通信和计算机科学基础交易 92.3: 708-721, 2009。

Fevotte, C. 和 Idier, J. (2011)。 beta-divergence 的非负矩阵分解算法。神经计算,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_

相关用法


注:本文由纯净天空筛选整理自scikit-learn.org大神的英文原创作品 sklearn.decomposition.NMF。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。