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


Python sklearn non_negative_factorization用法及代码示例


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

用法:

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

计算非负矩阵分解 (NMF)。

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

目标函数为:

其中:

(弗罗贝尼乌斯范数)

(元素级 L1 范数)

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

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

目标函数通过 W 和 H 的交替最小化来最小化。如果给定 H 并且 update_H=False,它只求解 W。

参数

X形状类似数组 (n_samples, n_features)

常数矩阵。

W形状类似数组(n_samples,n_components),默认=无

如果 init='custom',它被用作解决方案的初始猜测。

H形状类似数组 (n_components, n_features),默认=None

如果 init='custom',它被用作解决方案的初始猜测。如果 update_H=False,则用作常数,仅求解 W。

n_components整数,默认=无

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

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

用于初始化过程的方法。

有效选项:

  • 无:‘nndsvd’ 如果 n_components < n_features,否则 ‘random’。
  • ‘random’:非负随机矩阵,按比例缩放:

    sqrt(X.mean() /n_components)

  • ‘nndsvd’:非负双奇异值分解 (NNDSVD)

    初始化(更好的稀疏性)

  • ‘nndsvda’:NNDSVD 用 X 的平均值填充零

    (不希望稀疏时更好)

  • ‘nndsvdar’:NNDSVD 用小随机值填充零

    (当不需要稀疏性时,通常是 NNDSVDa 更快、更不准确的替代方案)

  • ‘custom’:如果 update_H=True ,则使用自定义矩阵 W 和 H。如果 update_H=False ,则仅使用自定义矩阵 H。
update_H布尔,默认=真

设置为 True,W 和 H 都将根据初始猜测进行估计。设置为 False,仅估计 W。

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

要使用的数值求解器:

  • ‘cd’ 是使用快速分层的坐标下降求解器

    交替最小二乘法(快速 HALS)。

  • ‘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

超时前的最大迭代次数。

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 的组合。

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

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

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

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

verbose整数,默认=0

详细程度。

shuffle布尔,默认=假

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

返回

Wndarray 形状(n_samples,n_components)

非负最小二乘问题的解。

Hndarray 形状(n_components,n_features)

非负最小二乘问题的解。

n_iterint

实际迭代次数。

参考

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 non_negative_factorization
>>> W, H, n_iter = non_negative_factorization(X, n_components=2,
... init='random', random_state=0)

相关用法


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