4

只是在寻找一些简短的建议,让我回到正确的轨道上。我一直在研究一个问题的解决方案,其中我有一个非常稀疏的输入矩阵(大约 25% 的信息填充,其余为 0)存储在 sparse.coo_matrix 中:

sparse_matrix = sparse.coo_matrix((value, (rater, blurb))).toarray()

在从我的数据集中构建这个数组并弄乱了一些其他选项之后,我目前将我的 NMF 模型拟合器函数定义如下:

def nmf_model(matrix): 
  model = NMF(init='nndsvd', random_state=0)

  W = model.fit_transform(matrix);
  H = model.components_;
  result = np.dot(W,H)

  return result

现在,问题是我的输出似乎没有正确解释 0 值。任何为 0 的值都会被撞到小于 1 的某个值,并且我的已知值与实际值有很大的波动(所有数据都是 1 到 10 之间的评级)。谁能发现我做错了什么?从 scikit 的文档中,我假设使用 nndsvd 初始化将有助于解释正确的空值。样本输出:

#Row / Column / New Value
35 18 6.50746917334 #Actual Value is 6
35 19 0.580996641675 #Here down are all "estimates" of my function
35 20 1.26498699492
35 21 0.00194119935464
35 22 0.559623469753
35 23 0.109736902936
35 24 0.181657421405
35 25 0.0137801897011
35 26 0.251979684515
35 27 0.613055371646
35 28 6.17494590041 #Actual values is 5.5

感谢任何更有经验的 ML 编码员可以提供的任何建议!

4

0 回答 0