老王:“啥是协同过滤啊” - 推荐系统入门(三)

“咳,我老婆最近买了个口红,然后加了个群,那个群里天天就分享什么购物经验啦,哪里哪里又上新啦,结果我老婆越买越多...”

是啊,我喜欢看科幻片,如果他们也爱看科幻片,并且告诉我了一些我没看过的,我肯定想看啊。

“哟,你说的还真有道理,上次那个基于内容的推荐,我记得只考虑一个用户自己的喜好,忽略了其他人,你的意思是我们可以找到相同喜好的人,然后把他们看过的电影互相推荐一下?”

你买的书都看了吗,这不就是书里的协同过滤算法吗?

“啊?是吗,哈哈哈。最近还真没看,这不是天天操心我老婆这烦心事嘛。”

得了吧。你就是懒。

“不过你还别说,从口红群那个事儿啊,我觉得这种方式肯定靠谱。不过协同过滤,这名字听着真是别扭。”

你一听这恶心的名字,那肯定是翻译过来的咯。协同就是利用其它用户的喜好,比如他们对电影打的分,过滤嘛,就是滤出你要的东西咯,比如推荐给某个用户的电影啊。

“哦,那具体是怎么弄?”

简单,就是填空。

“填空?填什么空?”

你看,这里有个表,里面填的是每个用户对每个电影打的分数。但是你想想,一个人怎么可能看过所有的电影呢? 我们就是把这些空给填上,也就是猜猜他会给这些没看过的电影打多少分,把他可能打高分的电影推荐给他就好啦。

“哦,我懂了,可这空怎么填啊。我怎么知道他会打多少分啊。”

用协同过滤咯,看看别的人打多少分呗。

“你是说算一下其他人给这个电影打分的平均值?不对吧,那不成了高分电影推荐嘛,所有人都会推一样的电影啊。”

当然不是了。我们得找到他相似的人。

“那怎么去衡量两个人相似呢?”

最简单的就这样,用我们都看过的电影数除以我看过的加上你看过的。

 

你看 A 和 B 这两个人,他们都看过的电影只有 1 个,就是 HP1,他们一共看过的是 5 个,重复的不算哦,HP1,HP2,HP3,TW,SW1,那他们的相似度,1 除以 5 ,就是 0.2, A 和 C 呢,他们的相似度是 2 除 4, 是 0.5。 所以 A 和 C 更相似。

很好懂吧,我们一共就看过 4 个不同的电影,居然有两个是一样的,难道我们口味不是一样的吗?

“听起来不错,可是完全没考虑他们打的分啊。”

那可以用上次我们说的余弦相似度啊,我们把这些空着的地方当做 0 就好了。

 

用户 A 可以表示为 [4, 0, 0, 5, 1, 0, 0], B 可以表示为 [5, 5, 4, 0, 0, 0, 0],

C 可以表示为 [0, 0, 0, 2, 4, 5, 0], 所以 A 和 B 的相似度是 0.38,而 A 和 C 的相似度是 0.32,所以 A 和 B 更相似一些。

“这样直接用 0 填不行的吧。这不是在假设他打了 0 分么,说不定他很喜欢,会打 5 分呢。”

嗯,那这样吧,我们填这个用户所有打分的平均分吧,然后再把他所有的分都减去这个平均分,比如,A 用户打分的平均分是 (4 + 5 + 1) /3 ,我们先把用户 A 变成 [4, 10/3, 10/3, 5, 1, 10/3, 10/3], 然后每个值再减去平均分 10/3, 得到 [2/3, 0, 0, 5/3, -7/3, 0, 0]。这样的话,每个分值就是他喜欢或者讨厌的程度了,得负数的电影他肯定是不喜欢吧。

“这个好,这样的话爱打高分的人和爱打低分的人也能放在一起比较了。”

行,那就先用这种方法吧。

“别急啊,找到相似的人了之后呢,不是还要填空么?”

跟他相似的人打了多少分,就认为他也会打多少分咯。

“ok,那我就找跟他最相似的 5 个人,算他们每个人对这个电影打的平均分吧。这个当做他会对这个电影打的分数。”

别忘了,跟他 最相似的 5 个人,相似程度也是不一样的,所以,还得考虑一下。

“ok,小意思,我知道怎么弄了。”

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值