【问题标题】:Predicting missing values in recommender System在推荐系统中预测缺失值
【发布时间】:2016-01-31 03:53:21
【问题描述】:

我正在尝试实现非负矩阵分解,以便为推荐引擎项目找到矩阵的缺失值。我正在使用 nimfa 库来实现矩阵分解。但似乎无法弄清楚如何预测缺失值。 这个矩阵中的缺失值用0表示。

a=[[ 1.          0.45643546  0.          0.1         0.10327956  0.0225877 ]
 [ 0.15214515  1.          0.04811252  0.07607258  0.23570226  0.38271325]
 [ 0.          0.14433757  1.          0.07905694  0.          0.42857143]
 [ 0.1         0.22821773  0.07905694  1.          0.          0.27105237]
 [ 0.06885304  0.47140452  0.          0.          1.          0.13608276]
 [ 0.00903508  0.4592559   0.17142857  0.10842095  0.08164966  1.        ]]

import nimfa
model = nimfa.Lsnmf(a, max_iter=100000,rank =4)
#fit the model
fit = model()
#get U and V matrices from fit
U = fit.basis()
V = fit.coef()
print numpy.dot(U,V)

但给出的 ans 几乎与 a 相同,我无法预测零值。 请告诉我要使用哪种方法或任何其他可能的实现以及任何可能的资源。

我想使用这个函数来最小化预测值的错误。

错误=|| a - UV ||_F + c*||U||_F + c*||V||_F

其中 _F 表示 frobenius 范数

【问题讨论】:

  • 你想用什么方法来预测零值?意思是?频率?
  • 我现在已经编辑了问题。
  • 推荐引擎的整个想法是计算这些缺失值。我对 nimfa 不熟悉,但您是否必须了解框架用于计算推荐的背后的理论?
  • 我已经阅读了许多与此相关的研究论文。但似乎无法弄清楚如何实现这一点以预测缺失值。
  • 我否决了这个问题,因为它实际上缺乏研究。在不了解所用框架的情况下,我所做的第一件事是检查它的官方文档。 (这也被很好地引用了)似乎 Lsnmf 方法用于为每个子问题创建一个使用投影梯度的交替非负最小二乘矩阵分解方法。这样一个起点就设定好了。

标签: python numpy sparse-matrix recommendation-engine matrix-factorization


【解决方案1】:

我之前没有使用过 nimfa,所以我无法确切回答如何做到这一点,但是使用 sklearn 您可以执行预处理器来转换缺失值,就像这样:

In [28]: import numpy as np

In [29]: from sklearn.preprocessing import Imputer

# prepare a numpy array 
In [30]: a = np.array(a)

In [31]: a
Out[31]: 
array([[ 1.        ,  0.45643546,  0.        ,  0.1       ,  0.10327956,
         0.0225877 ],
       [ 0.15214515,  1.        ,  0.04811252,  0.07607258,  0.23570226,
         0.38271325],
       [ 0.        ,  0.14433757,  1.        ,  0.07905694,  0.        ,
         0.42857143],
       [ 0.1       ,  0.22821773,  0.07905694,  1.        ,  0.        ,
         0.27105237],
       [ 0.06885304,  0.47140452,  0.        ,  0.        ,  1.        ,
         0.13608276],
       [ 0.00903508,  0.4592559 ,  0.17142857,  0.10842095,  0.08164966,
         1.        ]])

In [32]: pre = Imputer(missing_values=0, strategy='mean')

# transform missing_values as "0" using mean strategy
In [33]: pre.fit_transform(a)
Out[33]: 
array([[ 1.        ,  0.45643546,  0.32464951,  0.1       ,  0.10327956,
         0.0225877 ],
       [ 0.15214515,  1.        ,  0.04811252,  0.07607258,  0.23570226,
         0.38271325],
       [ 0.26600665,  0.14433757,  1.        ,  0.07905694,  0.35515787,
         0.42857143],
       [ 0.1       ,  0.22821773,  0.07905694,  1.        ,  0.35515787,
         0.27105237],
       [ 0.06885304,  0.47140452,  0.32464951,  0.27271009,  1.        ,
         0.13608276],
       [ 0.00903508,  0.4592559 ,  0.17142857,  0.10842095,  0.08164966,
         1.        ]])

您可以阅读更多here。

【讨论】:

  • 感谢您的回答。但我不想使用均值,但我想要均方误差或梯度解决方案类型的东西。
  • @user3131706,好的,因为事先不太清楚。也许看看GrapghLassoCV?我出去了,所以会尽量在周末回来:)
  • 这对缺失值也有效吗?即如果我想预测稀疏矩阵中的缺失值,这种方法会起作用吗?
  • @Sangram,抱歉我没有早点回复,是的Imputer 可以预测和填充数组(按列)和稀疏矩阵的缺失值。
  • @Sangram,这里是来自scikit-learn Imputer的文档
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-10
  • 1970-01-01
  • 2012-12-19
  • 1970-01-01
相关资源
最近更新 更多