0

我追求的是网络推荐系统,比如“相关产品”。根据用户购买的商品,我想根据其他用户购买的商品查找相关商品。我按照 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
4

1 回答 1

2

问题的简短回答:

要获得类似于“概率”的预测,您可以使用--loss_function logistic --link logistic. 请注意,在这种单标签设置中,您的概率可能会迅速趋于 1.0(即变得毫无意义)。

补充说明:

  • 从没有分离目标的意义上说,使用单个标签是有问题的。最终,学习者会将所有预测都与 1.0 挂钩。为了解决这个问题 - 建议使用--noconstant,使用强正则化,降低学习率,避免多次通过等(IOW:任何避免过度拟合到单个标签的东西)
  • 更好的是:添加用户没有购买/点击的示例,它们应该很丰富,这将使您的模型更加健壮和有意义。
  • 有一个更好的矩阵分解实现vw(对于大型模型来说,IO 更快更轻)。检查源代码树下的--lrq选项和完整演示。demo/movielens
  • 您应该直接通过训练集vw以避免无用使用 cat
于 2017-06-23T16:59:13.260 回答