我已经使用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')
然而,矩阵不包含任何纳米或无穷大。 而且,我为非常小的矩阵做了它,看它是否很好而不是:
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));
我得到了同样的错误,除非我做了随机的'而不是' custom'。
是否也发生在你身上?为什么会这样?
答案 0 :(得分:0)
在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,它将被视为无,然后抛出错误。