【问题标题】:Understanding Alternating Least Squares for Collaborative Filtering了解用于协同过滤的交替最小二乘法
【发布时间】:2016-04-04 14:27:56
【问题描述】:

过去几天我一直在研究推荐引擎,偶然发现了这个非常好的教程,它演示了在协作过滤器中使用交替最小二乘法:http://bugra.github.io/work/notes/2014-04-19/alternating-least-squares-method-for-collaborative-filtering/

我设法按照说明进行到最后一步。这是作者编写代码以打印推荐的部分。代码sn-p如下:-

def print_recommendations(W=W, Q=Q, Q_hat=Q_hat, movie_titles=movie_titles):
  Q_hat -= np.min(Q_hat)
  Q_hat *= float(5) / np.max(Q_hat)
  movie_ids = np.argmax(Q_hat - 5 * W, axis=1)
  for jj, movie_id in zip(range(m), movie_ids):

  print('User {} liked {}\n'.format(jj + 1, ', '.join([movie_titles[ii] for ii, qq in enumerate(Q[jj]) if qq > 3])))

  print('\n User {} recommended movie is {} - with predicted rating: {}'.format( jj + 1, movie_titles[movie_id], Q_hat[jj, movie_id]))

  print('\n' + 100 *  '-' + '\n')

在这个sn-p中,W是权重矩阵。 Q 矩阵用于形式化评级衡量的置信度概念。因此:

Q = 1 if user u rated item i

Q= 0  if user u did not rate item i

Q_hat 是执行 ALS 算法后,经过指定迭代次数后得到的新矩阵。

我不明白为什么作者特别实现了这两个步骤:

Q_hat -= np.min(Q_hat)
Q_hat *= float(5) / np.max(Q_hat)

有人可以指导我并帮助我理解这一点吗?我真的很感激。

谢谢

编辑:这是原始函数的要点链接:https://gist.github.com/arjun180/71124392b0b70f7b96a8826b59400b99

【问题讨论】:

    标签: python recommendation-engine least-squares collaborative-filtering


    【解决方案1】:

    这是预测评级的标准化。

    Q_hat -= np.min(Q_hat)
    

    这里作者将预测评分矩阵中的最小值减去所有预测值。

    这保证了所有预测的评分都从 0 开始。

    Q_hat *= float(5) / np.max(Q_hat)
    

    在这里,作者将预测评分标准化为从 0 到 5 的范围。

    【讨论】:

    • 非常感谢!欣赏它。
    猜你喜欢
    • 2015-12-13
    • 2018-01-03
    • 1970-01-01
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多