一个标签上的Vowpal Wabbit矩阵分解

时间:2017-06-22 14:14:51

标签: machine-learning vowpalwabbit matrix-factorization

我所追求的是网络的推荐系统,类似于“相关产品”。根据用户购买的商品,我希望根据其他用户购买的内容查找相关商品。我已经按照MovieLens教程(https://github.com/JohnLangford/vowpal_wabbit/wiki/Matrix-factorization-example)制作了推荐系统。

在上面的例子中,用户给了电影一个分数(1-5)。然后,模型可以预测用户将给出特定项目的分数。

另一方面,我的数据只知道用户喜欢什么。我不知道他们不喜欢什么或者他们喜欢什么。所以我尝试在所有条目上发送1作为值,但这只给了我一个模型,在每次预测时返回1。

关于如何构建数据的任何想法,以便我可以预测用户对0到1之间的项目的可能性?

示例数据:

1.0 |user 1 |item 1
1.0 |user 1 |item 2
1.0 |user 2 |item 2
1.0 |user 2 |item 3
1.0 |user 3 |item 1
1.0 |user 3 |item 3

训练命令:

cat test.vw | vw /dev/stdin -b 18 -q ui --rank 10 --l2 0.001 --learning_rate 0.015 --passes 20 --decay_learning_rate 0.97 --power_t 0 -f test.reg --cache_file test.cache

1 个答案:

答案 0 :(得分:2)

对问题的简短回答:

获得类似于"概率的预测"你可以使用--loss_function logistic --link logistic。请注意,在此单标签设置中,您的概率风险会迅速趋于1.0(即变得毫无意义)。

附加说明:

  • 使用单个标签是有问题的,因为目标没有分离。最终学习者将所有预测挂钩到1.0。为了解决这个问题 - 建议使用--noconstant,使用强正则化,降低学习率,避免多次通过等。(IOW:避免过度拟合单个标签的任何内容)
  • 更好:添加用户没有购买/点击的示例,它们应该很丰富,这将使您的模型更加强大和有意义。
  • vw中有更好的矩阵分解实现(对于大型模型,IO更快,更轻)。检查源代码树中--lrq下的demo/movielens选项和完整演示。
  • 您应该将培训集直接传递给vw以避免Useless use of cat