通过SVD对推荐系统的优化

    我们平时逛淘宝的时候,是常常发现淘宝会推荐一些自己感兴趣的东西,这么神奇的事情是怎么实现的呢?淘宝现在的手机客户端都有一个叫“千人千面”的推荐系统,它根据每个人的浏览、购买记录来推荐可能感兴趣的物品,其中往往就有你真的感兴趣甚至极度想买的东西。那么推荐系统又是个啥,它是怎么实现的呢?本文参考《机器学习实战》一书来为咱们揭开简单推荐系统的面目。

    首先有两个关键词,第一是SVD特征值分解,第二是基于相似度的推荐系统。

    让我们虚构一个场景:一天晚上,你(Peter)需要晚餐的补给来继续你繁忙的工作,然而你并不知道吃什么而且并不想花时间去研究哪家饭店的哪道菜肴适合你。这个时候,你就需要一个推荐系统来帮助你选择,而且它有很高的可信度。假设你对吃过的菜肴做了评价,而没吃过的自然评价是0,于是就有一个属于你自己的菜肴评价记录。我们假设这个记录是这样的。每道菜都有一个评分,满分为5分。


我们看到你还未尝过炸鸡排和寿司饭,那么很显然你就很需要知道推荐系统对于这两道菜的评分是多少。假如你想吃其他菜的话,那么你也不需要推荐系统的帮助了,因为你已经知道自己对它们的评分,根据你以往的评分来选择就好了,推荐系统只会给你推荐你未尝过的菜,这是这个场景的前提。

    推荐系统是根据什么来对物品进行评分的?那就是相关度,通过比较用户和用户之间的相关度或者物品与物品之间的相关度,我们就可以来预测未知物品的评分了。这个相关度怎么计算呢?对于相关度有三种可供选择的计算方法。

    第一种 ,欧式距离。比如计算鳗鱼饭和炸鸡排的欧氏距离,

    第二种,皮尔逊相关系数,它度量的是两个向量之间的相似度,但对于用户的量级不敏感,比如A用户对所有的菜肴都是5分,而B用户对所有的菜肴都是1分,那么皮尔逊相关系数认为这两个向量是相等的,取值为[-1,1]。

    第三种,余弦相似度,它计算的是两个向量之间的夹角的余弦值如果两个向量的方向完全相同,则相似度为1。取值为[-1,1]。

    根据具体的场景分析来选择相关度的度量方式。

    在开始推荐系统的代码敲写之前,有一个重要的问题需要解决,是基于用户的相似度推荐还是基于物品的相似度推荐?这个答案很简单,想要计算时间少就是看谁的数量少。一般都是用户数量远远大于物品数量,所以是基于物品相似度推荐,当然具体的情况也要具体分析。这里的采用基于物品相似度的推荐。

    推荐系统伪代码:

<

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值