User-based推荐算法
来源:互联网 发布:java导出pdf 编辑:程序博客网 时间:2024/04/29 12:25
转载:http://www.cnblogs.com/technology/p/4467895.html
基于用户的协同过滤推荐算法原理和实现
在推荐系统众多方法中,基于用户的协同过滤推荐算法是最早诞生的,原理也较为简单。该算法1992年提出并用于邮件过滤系统,两年后1994年被 GroupLens 用于新闻过滤。一直到2000年,该算法都是推荐系统领域最著名的算法。
本文简单介绍基于用户的协同过滤算法思想以及原理,最后基于该算法实现园友的推荐,即根据你关注的人,为你推荐博客园中其他你有可能感兴趣的人。
基本思想
俗话说“物以类聚、人以群分”,拿看电影这个例子来说,如果你喜欢《蝙蝠侠》、《碟中谍》、《星际穿越》、《源代码》等电影,另外有个人也都喜欢这些电影,而且他还喜欢《钢铁侠》,则很有可能你也喜欢《钢铁侠》这部电影。
所以说,当一个用户 A 需要个性化推荐时,可以先找到和他兴趣相似的用户群体 G,然后把 G 喜欢的、并且 A 没有听说过的物品推荐给 A,这就是基于用户的系统过滤算法。
原理
根据上述基本原理,我们可以将基于用户的协同过滤推荐算法拆分为两个步骤:
1. 找到与目标用户兴趣相似的用户集合
2. 找到这个集合中用户喜欢的、并且目标用户没有听说过的物品推荐给目标用户
1. 发现兴趣相似的用户
通常用 Jaccard 公式或者余弦相似度计算两个用户之间的相似度。设 N(u) 为用户 u 喜欢的物品集合,N(v) 为用户 v 喜欢的物品集合,那么 u 和 v 的相似度是多少呢:
Jaccard 公式:
余弦相似度:
假设目前共有4个用户: A、B、C、D;共有5个物品:a、b、c、d、e。用户与物品的关系(用户喜欢物品)如下图所示:
如何一下子计算所有用户之间的相似度呢?为计算方便,通常首先需要建立“物品—用户”的倒排表,如下图所示:
然后对于每个物品,喜欢他的用户,两两之间相同物品加1。例如喜欢物品 a 的用户有 A 和 B,那么在矩阵中他们两两加1。如下图所示:
计算用户两两之间的相似度,上面的矩阵仅仅代表的是公式的分子部分。以余弦相似度为例,对上图进行进一步计算:
到此,计算用户相似度就大功告成,可以很直观的找到与目标用户兴趣较相似的用户。
2. 推荐物品
首先需要从矩阵中找出与目标用户 u 最相似的 K 个用户,用集合 S(u, K) 表示,将 S 中用户喜欢的物品全部提取出来,并去除 u 已经喜欢的物品。对于每个候选物品 i ,用户 u 对它感兴趣的程度用如下公式计算:
其中 rvi 表示用户 v 对 i 的喜欢程度,在本例中都是为 1,在一些需要用户给予评分的推荐系统中,则要代入用户评分。
举个例子,假设我们要给 A 推荐物品,选取 K = 3 个相似用户,相似用户则是:B、C、D,那么他们喜欢过并且 A 没有喜欢过的物品有:c、e,那么分别计算 p(A, c) 和 p(A, e):
看样子用户 A 对 c 和 e 的喜欢程度可能是一样的,在真实的推荐系统中,只要按得分排序,取前几个物品就可以了。
园友推荐
在社交网络的推荐中,“物品”其实就是“人”,“喜欢一件物品”变为“关注的人”,这一节用上面的算法实现给我推荐 10 个园友。
1. 计算 10 名与我兴趣最相似的园友
由于只是为我一个人做用户推荐,所以没必要建立一个庞大的用户两两之间相似度的矩阵了,与我兴趣相似的园友只会在这个群体产生:我关注的人的粉丝。除我自己之外,目前我一共关注了23名园友,这23名园友一共有22936个唯一粉丝,我对这22936个用户逐一计算了相似度,相似度排名前10的用户及相似度如下:
2. 计算对推荐园友的兴趣度
这10名相似用户一共推荐了25名园友,计算得到兴趣度并排序:
只需要按需要取相似度排名前10名就可以了,不过看起来整个列表的推荐质量都还不错!
- User-based推荐算法
- 推荐决策 对比user-based 和item-based推荐算法
- 推荐系统user-based和item-based协同过滤算法定性比较
- 【推荐系统】协同过滤(CF)算法详解,item-base,user-based,SVD,SVD++
- 基于用户(user-based)的协同过滤推荐算法的初步理解以及代码实现
- Based Graph 推荐算法学习
- 推荐算法1-content based recommendation
- 协同过滤user-based CF算法与item-based CF算法对比
- User-Based Authorization(wanax)
- 10-user-based-data
- soledede--User-based Rating Prediction(基于用户的评分预测推荐)
- 基于用户的协同过滤(user-based CF)推荐系统【1】
- 基于用户的协同过滤(user-based CF)推荐系统【2】
- 协同过滤Item-based算法实现电影推荐系统
- 5.基于记忆的推荐算法(memory-based model)
- 基于内容的推荐算法(Content-based Recommendations)
- 新闻推荐系统:基于内容的推荐算法(Recommender System:Content-based Recommendation)
- 基于用户协同过滤(User-CF)的推荐算法
- C语言_数据结构和算法之_排序和查找
- POJ 1185
- 选择题--01
- Xamarin Android自定义文本框
- php学习之数组
- User-based推荐算法
- HTTP 408 错误 – 请求超时 (Request timeout)
- Java是绑定于一种语言的跨系统的平台
- TLS和SSL的区别比较
- 浅谈Java String内幕(1)
- 例题:单词(UVa 10129h)
- [LeetCode-Java]15. 3Sum
- Java起手的过程比较漫长
- CCPC长春赛区流水账