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)[源代码]#
非负矩阵分解(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\) (弗罗贝尼乌斯规范)和 \(||vec(A)||_1 = \sum_{i,j} abs(A_{ij})\) (基本L1规范)。
一般规范 \(||X - WH||_{loss}\) 可能代表弗罗贝尼乌斯规范或另一种支持的β-背离损失。选项之间的选择由
beta_loss
参数.正规化项的缩放方式为
n_features
为W
和n_samples
为H
保持其相互影响平衡,并尽可能独立于规模的数据匹配项n_samples
训练集的。通过W和H的交替最小化来最小化目标函数。
请注意,转换后的数据命名为W,分量矩阵命名为H。在NMF文献中,命名惯例通常相反,因为数据矩阵X是转置的。
阅读更多的 User Guide .
- 参数:
- n_componentsint或' Auto '}或无,默认=' Auto '
组件数量。如果
None
,所有功能均保留。如果n_components='auto'
,从W或H形状自动推断出元件的数量。在 1.4 版本发生变更: 添加
'auto'
值在 1.6 版本发生变更: 默认值更改为
None
到'auto'
.- init' random ',' nnddsvda ',' nndsdar ',
用于初始化过程的方法。有效选项:
None
:如果n_components <= min(n_samples,n_features),则“nndsvda”,否则随机。'random'
:非负随机矩阵,按以下方式缩放:sqrt(X.mean() / n_components)
'nndsvd'
非负双奇异值分解(NNDSVD)初始化(更好的稀疏性)'nndsvda'
:NNDS VD,零填充X的平均值(当不需要稀疏时更好)'nndsvdar'
NDNDS VD,零填充小随机值(通常在不需要稀疏性时代替NNDSVDa,通常更快、准确性较低)'custom'
:使用自定义矩阵W
和H
两者都必须提供。
在 1.1 版本发生变更: 当
init=None
并且n_components小于n_samples,并且n_features默认为nndsvda
而不是nndsvd
.- solver' CD ',',默认=' CD '
要使用的数字求解器:
“CD”是一个坐标下降解算器。
“ku”是一个相乘更新解算器。
Added in version 0.17: 协调下降求解器。
Added in version 0.19: 乘法更新解算器。
- beta_lossfloat或' frobenius ',' ' itakura-saito '},默认=' frobenius '
将Beta偏差最小化,测量X和点积WH之间的距离。请注意,与“frobenius”(或2)和“kullback-leibler”(或1)不同的值会导致拟合速度明显变慢。请注意,对于Beta_loss <= 0(或“itakura-saito”),输入矩阵X不能包含零。仅用于“mo”求解器。
Added in version 0.19.
- tolfloat,默认= 1 e-4
停止条件的容忍度。
- max_iterint,默认=200
超时前的最大迭代次数。
- random_stateint,RandomState实例或无,默认=无
用于初始化(当
init
==' nndsvdar '或' random '),并在坐标下降中。传递int以获得跨多个函数调用的可重复结果。看到 Glossary .- alpha_Wfloat,默认=0.0
乘以的正规化项的常数
W
.将其设置为零(默认)以没有规则化W
.Added in version 1.0.
- alpha_Hfloat或“same”,默认=“same”
乘以的正规化项的常数
H
.将其设置为零以不进行正规化H
.如果“相同”(默认),则采用与alpha_W
.Added in version 1.0.
- l1_ratiofloat,默认=0.0
正规化混合参数,0 <= l1_ratio <= 1。对于l1_ratio = 0,罚分是元素L2罚分(又名Frobenius Norm)。对于l1_ratio = 1,这是一个元素L1罚分。对于0 <l1_ratio < 1,罚分是L1和L2的组合。
Added in version 0.17: 正则化参数 l1_ratio 用于坐标下降解算器。
- verboseint,默认=0
是否冗长。
- shuffle布尔,默认=假
如果为真,请随机化CD求解器中的坐标顺序。
Added in version 0.17: shuffle 坐标下降解算器中使用的参数。
- 属性:
- components_ndrow形状数组(n_components,n_features)
因式分解矩阵,有时称为“词典”。
- n_components_int
组件的数量。它和
n_components
参数(如果已给出)。否则,它将与特征数量相同。- reconstruction_err_浮子
训练数据之间矩阵差或β-偏差的弗罗贝尼乌斯规范
X
以及重建的数据WH
来自合适的模型。- n_iter_int
实际迭代次数。
- n_features_in_int
期间看到的功能数量 fit .
Added in version 0.24.
- feature_names_in_ :nd形状数组 (
n_features_in_
,)nd数组形状( Names of features seen during fit. Defined only when
X
has feature names that are all strings.Added in version 1.0.
参见
DictionaryLearning
找一个对数据进行稀疏编码的字典。
MiniBatchSparsePCA
小批量稀疏主成分分析。
PCA
主成分分析。
SparseCoder
Find a sparse representation of data from a fixed, precomputed dictionary.
SparsePCA
稀疏主成分分析
TruncatedSVD
使用截断的奇异值降低维度。
引用
[1]"Fast local algorithms for large scale nonnegative matrix and tensor factorizations" 西西斯基、安杰伊和PH A. N.安惠。IEICE电子、通信和计算机科学基础交易92.3:708-721,2009年。
[2]"Algorithms for nonnegative matrix factorization with the beta-divergence" C.费沃特& Idier,J.(2011)。神经计算,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)[源代码]#
了解数据X的NMF模型。
- 参数:
- X形状(n_samples,n_features)的{类数组,稀疏矩阵}
训练载体,在哪里
n_samples
是样本数量和n_features
是功能的数量。- y忽视
未使用,按照惯例,为了API一致性而存在。
- **paramskwargs
传递给fit_transform实例的参数(关键字参数)和值。
- 返回:
- self对象
返回实例本身。
- fit_transform(X, y=None, W=None, H=None)[源代码]#
学习数据X的NMF模型并返回转换后的数据。
这比调用fit然后调用transform更有效。
- 参数:
- X形状(n_samples,n_features)的{类数组,稀疏矩阵}
训练载体,在哪里
n_samples
是样本数量和n_features
是功能的数量。- y忽视
未使用,按照惯例,为了API一致性而存在。
- W形状类似阵列(n_samples,n_components),默认=无
If
init='custom'
, it is used as initial guess for the solution. IfNone
, uses the initialisation method specified ininit
.- H形状类似阵列(n_components,n_features),默认=无
If
init='custom'
, it is used as initial guess for the solution. IfNone
, uses the initialisation method specified ininit
.
- 返回:
- W形状的nd数组(n_samples,n_components)
转换的数据。
- get_feature_names_out(input_features=None)[源代码]#
获取用于转换的输出要素名称。
输出的功能名称将以大写的类别名称为开头。例如,如果Transformer输出3个特征,则输出的特征名称为:
["class_name0", "class_name1", "class_name2"]
.- 参数:
- input_features字符串或无的类数组,默认=无
仅用于通过中看到的名称验证要素名称
fit
.
- 返回:
- feature_names_out字符串对象的nd数组
转换的功能名称。
- get_metadata_routing()[源代码]#
获取此对象的元数据路由。
请检查 User Guide 关于路由机制如何工作。
- 返回:
- routingMetadataRequest
A
MetadataRequest
封装路由信息。
- get_params(deep=True)[源代码]#
获取此估计器的参数。
- 参数:
- deep布尔,默认=True
如果为True,将返回此估计量和包含的作为估计量的子对象的参数。
- 返回:
- paramsdict
参数名称映射到其值。
- inverse_transform(X=None, *, Xt=None)[源代码]#
将数据转换回其原始空间。
Added in version 0.18.
- 参数:
- X形状(n_samples,n_components)的{nd数组,稀疏矩阵}
转换后的数据矩阵。
- Xt形状(n_samples,n_components)的{nd数组,稀疏矩阵}
转换后的数据矩阵。
自 1.5 版本弃用:
Xt
在1.5中已废弃,并将在1.7中删除。使用X
而不是.
- 返回:
- X形状的nd数组(n_samples,n_features)
返回原始形状的数据矩阵。
- set_output(*, transform=None)[源代码]#
设置输出容器。
看到 介绍 set_output API 了解如何使用API的示例。
- 参数:
- transform{“默认”,“pandas”,“polars”},默认=无
配置输出
transform
和fit_transform
."default"
:Transformer的默认输出格式"pandas"
:DataFrame输出"polars"
:两极输出None
:转换配置不变
Added in version 1.4:
"polars"
添加了选项。
- 返回:
- self估计器实例
估计实例。