我要用滑雪板做NMF,我在这里使用了说明:http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.NMF.html
我想添加已初始化的矩阵H,有选项可以执行init=“定制”,但我不知道如何给他矩阵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));我得到了同样的错误,除非我做‘随机’而不是‘定制’。
这也发生在你身上吗?为什么会发生这种事?
发布于 2018-04-16 07:51:16
在fit()或fit_transform()中传递W和H。
根据fit_transform():-
W:类似数组的形状(n_samples,n_components)如果init=‘定制’,则用作解决方案的初始猜测。H:类似数组的形状(n_components,n_features)如果init=‘定制’,则用作解决方案的初始猜测。
fit()也是如此。
做以下事情:
model.fit(X, H=myInitializationH, W=myInitializationW)更新:似乎如果您通过init='custom'参数,您需要同时提供W和H,如果您提供H而不是W,它将被视为无,然后抛出一个错误。
https://stackoverflow.com/questions/49850435
复制相似问题