scikit-learn 中 NMF 中的自定义矩阵

custom matrix in NMF in scikit-learn

我必须用 sklearn 做 NMF,我使用了这里的说明: http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.NMF.html

我想添加我的初始化矩阵 H,可以选择执行 init='custom' 但我不知道如何给他矩阵 H。 我试过:

model = NMF(n_components=2, init='custom',H=myInitializationH random_state=0);

但是没用。

此外,有人知道如何修复我的矩阵并仅更新 W 吗?

编辑:

感谢您的回答

当我选择自定义选项时,出现错误:

ValueError: input contains nan infinity or a value too large for dtype('float64')

但是,矩阵不包含任何 nan 或无穷大。 此外,我为非常小的矩阵做了它,看看它是否正常:

import numpy as np
from sklearn.decomposition import NMF

x=np.ones((2,3));
#model = NMF(n_components=1, init='custom', solver='mu',beta_loss=1,max_iter=500,random_state=0,alpha=0,verbose=0, shuffle=False);
model = NMF(n_components=1, init='custom');
fixed_W = model.fit_transform(x,H=np.ones((1,3)));
fixed_H = model.components_;

print(np.matmul(fixed_W,fixed_H));

除非我使用 'random' 而不是 'custom',否则我会遇到同样的错误。

你也有这样的经历吗?为什么会这样?

传递 fit()fit_transform() 中的 W 和 H。

根据 documentation of fit_transform():-

W : array-like, shape (n_samples, n_components)
    If init=’custom’, it is used as initial guess for the solution.

H : array-like, shape (n_components, n_features)
    If init=’custom’, it is used as initial guess for the solution.

同样适用于 fit()

做类似的事情:

model.fit(X, H=myInitializationH, W=myInitializationW)

更新: 好像如果你传递 init='custom' 参数,你需要提供 W 和 H。如果你提供 H 而不是 W,它将被视为 None,然后抛出错误。