所谓的协同过滤算法就是:通过找到兴趣相投,或者有共同经验的群体,来向用户推荐感兴趣的信息。所以说,当一个用户 A 需要个性化推荐时,可以先找到和他兴趣相似的用户群体 G,然后把 G 喜欢的、并且 A 没有听说过的物品推荐给 A,这就是基于用户的系统过滤算法。
例如:利用协同过滤向用户A推荐他喜欢的电影。
Process:找到用户A(user_id_1)的兴趣爱好
找到与用户A(user_id_1)具有相同电影兴趣爱好的用户群体集合Set<user_id>
找到该群体喜欢的电影集合Set<movie_id>
将这些电影Set<Movie_id>推荐给用户A(user_id_1)
具体步骤:
(1)从用户数据库里导出数据分析,如下表:画一个大表格,横坐标是所有的movie_id,纵坐标所有的user_id,
交叉处代表这个用户喜爱这部电影
| Move_id_1 | Move_id_2 | Move_id_3 | Move_id_4 | Move_id_5 | …… | Move_id_110w |
User_id_1 | 1 | 1 | 1 |
|
|
|
|
User_id_2 | 1 | 1 | 1 | 1 |
|
|
|
User_id_3 | 1 | 1 | 1 |
| 1 |
|
|
…………. |
|
|
|
|
|
|
|
…………. |
|
|
|
|
|
|
|
User_id_10w | 1 |
| 1 |
| 1 |
|
|
横坐标,假设有10w部电影,所以横坐标有10w个movie_id,数据来源自数据库
纵坐标,假设有10w个用户,所以纵坐标有10w个user_id,数据也来自数据库
“1”代表用户喜爱这部电影,数据来自日志,至于什么是“喜欢”,需要自己定义,例如浏览过,查找过,点赞过,日志文
件里有这些记录的数据。
(2)找到用户A(user_id_1)的兴趣爱好
| Move_id_1 | Move_id_2 | Move_id_3 | Move_id_4 | Move_id_5 | …… | Move_id_110w |
User_id_1 | 1 | 1 | 1 |
|
|
|
|
User_id_2 | 1 | 1 | 1 | 1 |
|
|
|
User_id_3 | 1 | 1 | 1 |
| 1 |
|
|
…………. |
|
|
|
|
|
|
|
…………. |
|
|
|
|
|
|
|
User_id_10w | 1 |
| 1 |
| 1 |
|
|
如上表,可以看到,用户A喜欢电影{m1,m2, m3}。
(3)找到与用户A(user_id_1)具有相同电影兴趣爱好的用户群体集合Set<user_id>,这里涉及相似度算法的实现
| Move_id_1 | Move_id_2 | Move_id_3 | Move_id_4 | Move_id_5 | …… | Move_id_110w |
User_id_1 | 1 | 1 | 1 |
|
|
|
|
User_id_2 | 1 | 1 | 1 | 1 |
|
|
|
User_id_3 | 1 | 1 | 1 |
| 1 |
|
|
…………. |
|
|
|
|
|
|
|
…………. |
|
|
|
|
|
|
|
User_id_10w | 1 |
| 1 |
| 1 |
|
|
(4)找到该群体喜欢的电影集合Set<movie_id>
| Move_id_1 | Move_id_2 | Move_id_3 | Move_id_4 | Move_id_5 | …… | Move_id_110w |
User_id_1 | 1 | 1 | 1 |
|
|
|
|
User_id_2 | 1 | 1 | 1 | 1 |
|
|
|
User_id_3 | 1 | 1 | 1 |
| 1 |
|
|
…………. |
|
|
|
|
|
|
|
…………. |
|
|
|
|
|
|
|
User_id_10w | 1 |
| 1 |
| 1 |
|
|
具备相同喜好的用户群里{u2, u3},还喜好的电影集合是{m4, m5}
以上过程大致就是“协同”。
(5)当用户A(use_id_1)来访问网站时,按照以上算法要推荐电影{m4, m5}给他了。
(后续程序实现将会更新,程序中将会设计相似度的计算公式)