【如有错误,敬请指正】
注:本文举例中,实线表示看过且默认5星评价。橙色底色表示相似项目/用户,蓝色实线表示依据,红色虚线表示推荐结果。
1. 非协同过滤
将用户X作为目标用户.
1.1 基于人口统计信息的推荐
∵
X
∼
Z
\because \mathrm X \sim \mathrm Z
∵X∼Z (同为25岁女性)
∴
\therefore
∴ 给X推荐Z喜欢的电影A.
∵
Z
→
A
\because \mathrm Z\rarr \mathrm A
∵Z→A
∴
X
→
A
\therefore \mathrm X\rarr \mathrm A
∴X→A
1.2 基于物品内容的推荐
∵
B
∼
C
\because \mathrm B \sim \mathrm C
∵B∼C (同为韩寒导演的喜剧)
∴
\therefore
∴ 给喜欢C电影的用户推荐B.
∵
X
→
C
\because \mathrm X\rarr \mathrm C
∵X→C
∴
X
→
B
\therefore \mathrm X\rarr \mathrm B
∴X→B
2. 协同过滤
2.1 基于用户的协同过滤
基于用户的协同过滤核心是依靠用户对项目的喜好程度来计算用户间的相似性。
∵
Y
→
A
,
Y
→
B
,
Z
→
A
\because \mathrm Y \rarr \mathrm A, \mathrm Y \rarr \mathrm B, \mathrm Z \rarr \mathrm A
∵Y→A,Y→B,Z→A
∴
Y
∼
Z
\therefore \mathrm Y \sim \mathrm Z
∴Y∼Z 相似度最高,因为
X
\mathrm X
X只喜欢
C
\mathrm C
C
∴
\therefore
∴ 给用户
Z
\mathrm Z
Z推荐用户
Y
\mathrm Y
Y喜欢的电影
{
A
,
B
}
∖
{
A
}
=
{
B
}
\{\mathrm A, \mathrm B\}\setminus\{\mathrm A\}=\{\mathrm B\}
{A,B}∖{A}={B}
∴
Z
→
B
\therefore \mathrm Z \rarr \mathrm B
∴Z→B
2.2 基于物品的协同过滤
为了更好说明物品的相似性,在这里加上一个新用户
W
\mathrm W
W.
∵
Y
→
A
,
W
→
A
\because \mathrm Y \rarr \mathrm A, \mathrm W \rarr \mathrm A
∵Y→A,W→A
and
Y
→
B
,
W
→
B
\mathrm Y \rarr \mathrm B, \mathrm W \rarr \mathrm B
Y→B,W→B
∴
A
∼
B
\therefore \mathrm A\sim \mathrm B
∴A∼B (青色点横线)A和B最可能是相似电影
∴
\therefore
∴ 给喜欢电影
A
\mathrm A
A的用户
Z
\mathrm Z
Z推荐电影
B
\mathrm B
B
∴
Z
→
B
\therefore \mathrm Z \rarr \mathrm B
∴Z→B
3. 一些比较
3.1 基于内容vs基于项目的协同过滤
先从1.2基于内容的推荐结果看,向用户推荐了和电影飞驰人生相似的电影四海,因为基于内容的推荐仅利用电影本身的标签信息。比如本文的举例中,除去电影名,描述一个电影用到了两个属性,分别是导演和类型。飞驰人生和四海两个电影有相同的导演和类型,所以在基于内容的推荐算法中被判定为相似项目,那么就将四海推荐给了看过飞驰人生的用户小明。
但是这样有一个弊端,就是虽然小明看过飞驰人生,但是可能小明并不喜欢四海,假如给飞驰人生的评价是1星,那么小明很有可能也不喜欢四海,这次推荐就起不到很好的效果。
再看2.2基于物品的协同过滤推荐,协同过滤中,相似性的计算一般涉及到用户对电影的评分,本文中无特殊说明默认都是五星,即每个电影可以用每个用户给予的评分建模,如电影A:[0, 5, 5, 5] B:[0, 5, 0, 5]. 可以用余弦定理等方法计算相似度,得出A和B相似,因为有Y和W两个用户都打出了相同的评价,那么推荐的依据就是A和B很可能相似。可以理解为:A和B同时被一个用户喜欢的概率很大。
但是长津湖和飞驰人生其实内容毫不相关,所谓的“相似”不是指内容,而是不同用户的喜好程度,这个思路认为你喜欢A或B就会喜欢另一个.
3.2 基于人口信息vs基于用户的协同过滤
在1.1基于人口信息的推荐中,一个25岁的女性用户Z看了长津湖,所以当另一个25岁女性X需要推荐时,就将Z的喜好推荐给了X,但是可以看到X的观看记录是四海,可能她喜欢的是喜剧片而不是长津湖,推荐的依据仅仅是和她相似的用户喜欢看长津湖。这也是非协同过滤的弊端,没考虑喜好程度。
在2.1基于用户的协同过滤中,思路其实和基于物品的协同过滤很像,只不过把物品收到的评价换成了用户给出的评价,由此计算相似度。可以看到用户Z和Y都给长津湖打了5分的评价,Z和Y的相似度高可以理解为他们的口味很像,越高的相似度说明对越多的电影有相同的评价,如果Y对飞驰人生打了很高的评分,那么很可能Z也会很喜欢飞驰人生。