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,然后抛出错误。
我必须用 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,然后抛出错误。