协同过滤 Collaborative Filtering
协同过滤算法是推荐系统中最古老,也是最简单高效的推荐算法。简单说协同过滤就是根据以往的用户产生的数据分析,对用户的新行为进行匹配分析来给用户推荐用户最有可能感兴趣的内容。
协同过滤算法是为了解决长尾现象,也就是说推荐系统是为了解决长尾现象而诞生的。因为在之前在有限的空间(如:书店的书架、服装店的衣架、商店的货架、网页的展示区域)只能摆有限的物品进行展示,造成大量的非热门物品很难进入人们的视野,也就无法产生任何价值。研究表明挖掘长尾内容,产生的效益很可能会超过头部。因为网络、计算机的发展使关注大数据量下的长尾内容成本下降,使得关注长尾效益成为可能。
简单说就是推荐系统会在有限空间内针对到单个用户推荐内容,帮助用户发现长尾内容中对自己更有价值的内容,发挥长尾内容的效益。也就是推荐算法和推荐系统的存在价值。
协同过滤算法的数学模型有一个假设前提:
每个人会有一个或多个自己感兴趣的领域
看起来有点废话,但是这是一切的基础,这样我们可以推论:
1、如果两个事物同属于一个人的兴趣范围,那么这两个事物有较大可能属于不同类型的事物;
2、如果两个事物同时属于很多人的兴趣范围,那么这两个事物有较大可能属于同一类型的事物。
比较绕,仔细理解一下。
ps :以上内容写自三月11号,现在是九月29号。。。 好吧,真心很久没写blog了。。捋一捋继续写~~~ --!
基于以上假设,我们可以把两个事物的相关度量化出来(计算机也只能理解量化的东西了):
ps :弄公式太麻烦了,想用latex,没有可视化的太麻烦,还是用word弄好导出图片吧。
描述一下符号的意义:
N(i):对i事物感兴趣的用户集合
S(a,k):与事物a最相似的k个事物的集合
Rui:用户u对事物i的兴趣度
Wij:事物ij的相似度
Pua:用户u对事物a喜欢程度的预测值
解释一下三个公式:
(1)这个公式就是最开始的推论的表述,比较好理解,值域范围是[0,1],值越大相关度越大。就是说两个事物有更多用户同时喜欢就相似度越大。大家如果看另外一篇相似性度量,会发现这里的公式其实是用的余弦相似度公式。所有推荐系统都需要计算两个事物之间的相似度以量化后便于进行计算,有兴趣可以看看各种相似度度量的计算方法,这篇里也只是介绍一些比较多用到的,相似度计算时根据实际情形来设计的。选择或设计出一个更准确的相似度度量方法是推荐系统很重要的一块。
(2)这个公式是修整(1)公式,因为做推荐的时候会发现,很多热门的东西比如j,基本人人都喜欢或者说是绝大多数人都喜欢,这样容易得到i与j有极高相似度的结论。如果不修正的话,那么热门的事物跟任何事物都具有较高的相似度了,所以需要加权降低热门事物的影响。也可以理解为了推荐的新颖度,降低热门事物被推荐的机会。
(3)这个公式就是计算针对用户u,a事物的推荐度。公式里那个Wij写错了,应该是Wai ,可以理解一下公式,不是很难。
至此可以根据用户已喜欢或评分的事物来进行用户最有可能喜欢的新的事物的推荐了。虽然已经可以用了,但是想推荐的更准确仍有很多工作需要做,比如:
1、不活跃用户应该比活跃用户有更多的权重来确定物品相关性,因为活跃用户总会对很多事物点赞之类的,即使他只是感觉差不多而已。
2、对热门事物的惩罚力度、推荐事物的新颖度等控制,都是一个需要试验后设置好一个理想的阈值。
3、最后还需要根据推荐系统所推荐的事物,进行各种数据的优化和过滤以满足产品定位的各种需求。
协同过滤优缺点简单罗列一下,更多问题也需要自己在实践中总结,先说优点:
1、简单明了,无论从模型的建立,到程序的编写都非常简单清晰。程序简单完成复杂工作这是非常优雅的一种。记得之前说过google的一个外号是AK47的程序猿,说过类似的。
2、适用场景比较广泛,基本上是万金油了。
3、准确度还是不错的,添加更复杂逻辑也不会有很好的结果了,看推荐系统设计比赛里,各种复杂设计,最终推荐准确度是提高了,但是也不是那种特别多的提高。
缺点,也是硬伤:
1、冷启动问题。推荐系统初期缺乏基础的计算数据,无法进行相关推荐数据的计算。新用户推荐也属于这类冷启动。
2、需要针对推荐的事物和用户群体二次过滤。
3、另外还有很多说数据稀疏感觉完全不算个缺点,为了凑够传统的123点,就加一条吧~ --!
建议继续学习:
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:三江小渡 来源: 三江小渡 » 三江小渡
- 标签: 协同过滤
- 发布时间:2016-03-21 12:11:45
- [2527] 代理的加密部分
- [1327] 创业笔记 | 从0到1开公司是什么体验
- [646] vimgtd-在vim(gvim)中实现GT
- [570] 查找第K小的元素
- [70] Oracle MTS模式下 进程地址与会话信
- [65] Go Reflect 性能
- [65] 【社会化设计】自我(self)部分――欢迎区
- [61] 如何拿下简短的域名
- [61] 图书馆的世界纪录
- [60] android 开发入门