sklearn.decomposition.non_negative_factorization

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

[源码]

计算非负矩阵分解(NMF)

找出两个非负矩阵(W, H),它们的乘积近似于非负矩阵x。这种分解可以用于降维、源分离或主题提取。

目标函数为:

0.5 * ||X - WH||_Fro^2
+ alpha * l1_ratio * ||vec(W)||_1
+ alpha * l1_ratio * ||vec(H)||_1
0.5 * alpha * (1 - l1_ratio) * ||W||_Fro^2
0.5 * alpha * (1 - l1_ratio) * ||H||_Fro^2

Where:

||A||_Fro^2 = \sum_{i,j} A_{ij}^2 (Frobenius norm)
||vec(A)||_1 = \sum_{i,j} abs(A_{ij}) (Elementwise L1 norm)

对于乘更新(' mu ')求解器,通过改变参数beta_loss,可以将Frobenius范数(0.5 * ||X - WH||_Fro^2)变为另一个散度损失。

目标函数通过WH的交替最小化最小化,如果H给定,update_H=False,则只求解W。

参数 说明
X array-like, shape (n_samples, n_features)
常数矩阵。
W array-like, shape (n_samples, n_components)
如果init= ' custom ',则使用它作为解决方案的初始猜测。
H array-like, shape (n_components, n_features)
如果init= ' custom ',则使用它作为解决方案的初始猜测。如果update_H=False,则将其作为常数,只求解W。
n_components integer
组件的数量,如果没有设置n_components,则保留所有特性。
init None , ‘random’ ,‘nndsvd’ , ‘nndsvda’ , ‘nndsvdar’ , ‘custom’
用于初始化过程的方法。默认值:None。
选项:
None:如果n_components <n_features个,则为'nndsvd',否则为'random'。
'random':非负随机矩阵,缩放比例为:sqrt(X.mean()/ n_components)
'nndsvd':非负双奇异值分解(NNDSVD)初始化(更好的稀疏性)
'nndsvda':NNDSVD,其零被X的平均值填充
(最好在不需要稀疏的情况下使用)
'nndsvdar':NNDSVD,零填充小随机值(当不需要稀疏性时,通常是NNDSVDa的更快,更不准确的替代品)
'custom':使用自定义矩阵W和H

在版本0.23中更改:在0.23中,默认值init从'random'更改为None。
update_H boolean, default: True
设为True, W和H都将根据最初的猜测进行估计。设为False,只有W会被估计。
solver ‘cd’/'mu'
数值求解器使用:
' cd '是一个使用快速分层的坐标下降求解器

交替最小二乘(快速HALS)。
' mu '是一个乘法更新求解器。

新版本0.17:坐标下降求解器。
版本0.19中的新版本:乘法更新求解器。
beta_loss float or string, default ‘frobenius’
字符串必须是{' frobenius ', ' kullback-leibler ', ' itakura-saito '}。为了使散度最小,测量X和点积WH之间的距离。注意,与“frobenius”(或2)和“kullback-leibler”(或1)不同的值会导致匹配速度明显较慢。注意,对于beta_loss <= 0(或' itakura-saito '),输入矩阵X不能包含0。只在求解器中使用。

新版本为0.19。
tol float, default: 1e-4
停止条件的容忍度。
max_iter integer, default: 200
超时前的最大迭代次数。
alpha double, default: 0.
乘正则化项的常数。
l1_ratio double, default: 0.
正则化混合参数,0 <= l1_ratio <= 1。对于l1_ratio = 0,罚分为元素L2罚分(又名Frobenius Norm)。对于l1_ratio = 1,它是元素上的L1惩罚。对于0 < l1_ratio < 1,惩罚为L1和L2的组合。
regularization ‘both’/‘components’/‘transformation’/None
选择正则化是否影响组件(H)、变换(W)、两个或不影响它们。
random_state int, RandomState instance, default=None
用于NMF初始化(当init == ' nndsvdar '或' random '),并在坐标下降。在多个函数调用中传递可重复的结果。看到术语表。
verbose integer, default: 0
冗长的水平。
shuffle boolean, default: False
如果为真,在CD求解器中随机化坐标的顺序。
返回值 参数
W array-like, shape (n_samples, n_components)
非负最小二乘问题的解。
H array-like, shape (n_components, n_features)
非负最小二乘问题的解。
n_iter int
实际迭代次数。

参考文献

Cichocki, Andrzej, and P. H. A. N. Anh-Huy. “Fast local algorithms for large scale nonnegative matrix and tensor factorizations.” IEICE transactions on fundamentals of electronics, communications and computer sciences 92.3: 708-721, 2009.

Fevotte, C., & Idier, J. (2011). Algorithms for nonnegative matrix factorization with the beta-divergence. Neural Computation, 23(9).

示例

>>> import numpy as np
>>> X = np.array([[1,1], [21], [31.2], [41], [50.8], [61]])
>>> from sklearn.decomposition import non_negative_factorization
>>> W, H, n_iter = non_negative_factorization(X, n_components=2,
... init='random', random_state=0)