推荐系统之--CF算法
上一节我们已经讲了CB算法这一次我们就来介绍推荐系统下一个算法:
CF(Collaborative Filterin)基于协同过滤的推荐算法
CF算法包含如下两类:
User-Base CF 和 Item-Base CF
CF算法和CB算法不同的是数据源是基于用户历史行为和物品的矩阵数据即UI(User—Iterm)矩阵数据,用户的行为通过一个表格来归纳起来。
协同过滤输入数据只需要三个维度:userid ,itemid, score :就是这个人对这个物品的打分,打分就是对一个物品的喜爱程度。
工作原理:
1.从用户的历史行为信息里抽取出了UI矩阵。UserA->item:score item:score
2.得到了UI矩阵,就可以生成UI的转置IU矩阵*UI矩阵 得到 II矩阵【行和列都是Item】就是我给你一个itemA->item1:score item2:score 和UI矩阵*IU矩阵得到UU矩阵【行和列都是User】,UserA->user1:score user2:score
3.将得到的II矩阵放入II矩阵 NoSQL数据库中和UU矩阵放入UU矩阵 NoSQL数据库。
4.若此时用户点击《张学友的爱情片》,这时系统会拿到这个item将《张学友的爱情片》作为key 去查 II 矩阵 NoSQL数据库的其他的item1:score item2:score
5.若此时业务场景为QQ一个用户B,在用户的首页去推荐给其他好友,这时候就会去请求UU矩阵,因为这时候用户作为key,给你推荐相关的其他好友当然也是用户。
6.最终根据推荐返回相似度较高的再经过一些精排的过程,展示前5名在用户的推荐列表中。
优缺点:
优点 | 缺点 |
充分利用群体智慧【积累很多的用户量】 | 推荐结果解释性差【通过好友推荐,无法解释item为什么推荐给你】 |
推荐精度高于CB【UI矩阵积累的数据量越多,精度越高,CB只基于文本的分词内容,信息量少】 | 对实时性强的item不适用【新上架的物品,系统里的矩阵没有相关数据,即达不到推荐】 |
利于挖掘隐含的相关性【不能表达为什么你喜欢这个物品】 | 冷启动问题【UI矩阵没有数据,无法通过协同过滤进行推荐】 |
1.User-Base CF
原理:
-
用户喜欢那些跟他有相似爱好的用户喜欢的东西 【用户与用户之间做比较】
-
具有相似兴趣的用户在未来也具有相似的兴趣
方法:
-
给定用户u,找到一个用户的群体也就是集合N(U),他们具有相似的兴趣
-
将N(u)喜欢的物品推荐给该用户
通俗理解:
User | Item |
U1 | 足球,排球,篮球,高尔夫 |
U2 | 足球,排球,篮球 |
例子一:以上表格U1喜欢足球,排球,篮球,高尔夫,U2也喜欢足球,排球,篮球,但是U1还喜欢高尔夫,由于U1和U2是好友,于是就将高尔夫推荐给U2用户。
例子二:使用UI矩阵解释:假设有四个用户,他们分别喜欢如下电影,那么我们要对c用户来推荐Titanic,这个概率该怎么计算呢,首先我们知道四个用户的Ui矩阵,然后我们根据矩阵公式,转换成UU矩阵,这里要提出一点的是,在转换的过程中要求相似度,怎么求呢 ? 其实就是计算cosin的相似度:
我们通过以上计算能得到UU矩阵,然后开始对C用户做数据分析,跟c关系好的,看UU矩阵,我们用BD两个人来给C推荐Titanic,
那么途中是如何计算的? 首先看右边的UU矩阵,B和C的相似度为0.97 ,而B对Titanic打了5分,因此喜爱程度为0.97*5,同理
D和C的相似度为0.87 ,而D对Titanic打了3分,因此喜爱程度为0.87*3,二者相加除以相加然后除以各相似度之和,因此最终的相似度为右下角的公式。
2.Item-Base CF
原理:
-
用户喜欢跟他过去喜欢的物品相似的物品 【从用户的历史行为中进行比较】
-
历史上相似的物品在未来也相似
方法:
-
给定用户u,找到他过去喜欢的物品集合R(u)
-
把和R(u)相似的物品推荐给u
通俗理解:
User | Item |
U1 | 手机,手机膜 |
U1 | 手机耳机 |
例子一:以上表格U1在淘宝上购买了手机,手机膜,基于用户的历史推荐和历史物品相似的物品如手机耳机等。
例子二:同样用刚刚那个例子,用户c没有看过Titanic,我们怎么根据用户看过的电影来推荐Titanic,同样通过UI 矩阵我们得到II矩阵,这里计算相似度方法一样得到右边这个II矩阵
这里我们就要基于用户C的历史行为来给C推荐Titanic,那么途中是如何计算的? 首先看右边的UU矩阵,Matrix和Titanic的相似度为0.57 ,而C对Matrix打了2分,因此喜爱程度为0.57*2,同理DieHard和Titanic的相似度为0.80 ,而C对DieHard打了3分,因此喜爱程度为0.80*3,依次类推,将用户C所有观看的电影的喜爱程度相加除以相加然后除以各相似度之和,因此最终的相似度为右下角的公式。
通过两种方法,存在一定的差别,但是这个不重要,生活中我们一般是基于用户给用户推荐Top问题,而不是打分情况,即只要排好序就可以。
使用准则:
一般我们有这么个准则,哪个维度小用哪个,电商网站物品的矩阵远大于用户矩阵,规模太大有时候造成一些慢,相反一样。
优缺点:
项目 |
UserCF |
ItemCF |
性能 |
适用于用户较少的场合,如果用户过多,计算用户相似度矩阵的代价交大 |
适用于物品数明显小于用户数的场合,如果物品很多,计算物品相似度矩阵的代价交大 |
领域 |
实效性要求高,用户个性化兴趣要求不高,注重实效性 |
长尾物品丰富,用户个性化需求强烈,注重个性化 |
实时性 |
用户有新行为,不一定需要推荐结果立即变化,矩阵计算很长时间,等计算出来结果已经不实时了,实时性差 |
用户有新行为,一定会导致推荐结果的实时变化 |
冷启动 |
在新用户对少的物品产生行为后,不能立即对他进行个性化推荐,因为用户相似度是离线计算的 新物品上线后一段时间,一旦有用户对物品产生行为,就可以将新物品推荐给其他用户 |
新用户只要对一个物品产生行为,就能推荐相关物品给他,但无法在不离线更新物品相似度表的情况下将新物品推荐给用户 |
推荐理由 |
很难提供 |
可以根据用户历史行为归纳推荐理由 |
冷启动:
用户冷启动:在用户登录的时候要求其对一些物品反馈,收集这些信息,然后给用户推荐其他好友喜欢的物品。
物品冷启动:将新物品推荐给可能对他感兴趣的用户,利用内容信息,将他们推荐给喜欢过和他们相似的物品的用户。
系统冷启动:引入专家知识,通过一定的高效性建立起物品的相关性矩阵。