文章目录
基于近邻的推荐算法UserCF算法原理1. 构建用户物品评分表2. 相似度度量3. 计算推荐结果4. 惩罚热门物品ItemCF算法原理1. 计算物品之间的相似度1. 建立用户物品倒排表2. 构建同现矩阵3. 构建评分矩阵2. 计算推荐结果UserCF与ItemCF的对比分析基于近邻的推荐算法
基于近邻的推荐算法是比较基础的算法,应用较为广泛,这里的近邻算法指的是协同过滤算法。包含基于用户的协同过滤算法(UserCF)和基于物品的协同过滤算法(ItemCF)。
协同过滤的核心思想就是基于相似性度量。
UserCF算法原理
核心思想:先找到相似用户,再找到他们喜欢的物品。
给用户推荐“和他兴趣相投的用户”喜欢的物品。
1. 构建用户物品评分表
这里以用户A、B、C、D对五个物品a、b、c、d、e的评分情况建立一张表:
2. 相似度度量
采用余弦相似度衡量用户之间的相似度,计算公式如下:
Wuv=∣N(u)∩N(v)∣∣N(u)∣∗∣N(v)∣W_{uv}=\frac{|N(u)\cap N(v)|}{\sqrt{|N(u)|*|N(v)|}}Wuv=∣N(u)∣∗∣N(v)∣∣N(u)∩N(v)∣
上述公式中,u、v分别代表两个用户,N(u)表示用户u有过评分的物品集合。
下面计算用户C与其他用户的相似度:
WCA=∣{b,e}∩{a,b,d}∣∣{b,e}∣∗∣{a,b,d}=16W_{CA}=\frac{|\{b,e\}\cap \{a,b,d\}|}{\sqrt{|\{b,e\}|*|\{a,b,d\}}}=\frac{1}{\sqrt{6}}WCA=∣{b,e}∣∗∣{a,b,d}∣{b,e}∩{a,b,d}∣=61
WCB=∣{b,e}∩{a,c,e}∣∣{b,e}∣∗∣{a,c,e}=16W_{CB}=\frac{|\{b,e\}\cap \{a,c,e\}|}{\sqrt{|\{b,e\}|*|\{a,c,e\}}}=\frac{1}{\sqrt{6}}WCB=∣{b,e}∣∗∣{a,c,e}∣{b,e}∩{a,c,e}∣=61
WCD=∣{b,e}∩{b,d,e}∣∣{b,e}∣∗∣{b,d,e}=26W_{CD}=\frac{|\{b,e\}\cap \{b,d,e\}|}{\sqrt{|\{b,e\}|*|\{b,d,e\}}}=\frac{2}{\sqrt{6}}WCD=∣{b,e}∣∗∣{b,d,e}∣{b,e}∩{b,d,e}∣=62
所以我们得出D用户与C用户的相似度最大。
3. 计算推荐结果
用户C进行评分的物品是b和c。那么接下来计算用户C对物品a、c、d的偏好程度:
P(C,a)=wCA∗3.0+WCB∗4.0+WCD∗0=2.858P(C,a)=w_{CA}*3.0+W_{CB}*4.0+W_{CD}*0=2.858P(C,a)=wCA∗3.0+WCB∗4.0+WCD∗0=2.858
P(C,c)=wCA∗0+WCB∗4.5+WCD∗0=1.837P(C,c)=w_{CA}*0+W_{CB}*4.5+W_{CD}*0=1.837P(C,c)=wCA∗0+WCB∗4.5+WCD∗0=1.837
P(C,d)=wCA∗3.5+WCB∗0+WCD∗3.5=4.287P(C,d)=w_{CA}*3.5+W_{CB}*0+W_{CD}*3.5=4.287P(C,d)=wCA∗3.5+WCB∗0+WCD∗3.5=4.287
根据偏好程度给用户C推荐物品的顺序依次为d>a>c。
4. 惩罚热门物品
对于热门物品比如《高等数学》,并不能说明两个用户的喜好相似,所以要对热门物品进行一定的惩罚。可以用如下的公式进行计算:
Wuv=∑i∈N(u)∩N(v)1lg(1+N(i))∣N(u)∣∗∣N(v)∣W_{uv}=\frac{\sum_{i\in N(u)\cap N(v)} \frac{1}{lg(1+N(i))}} {\sqrt{|N(u)|*|N(v)|}}Wuv=∣N(u)∣∗∣N(v)∣∑i∈N(u)∩N(v)lg(1+N(i))1
其中,N(i)是对物品i有过评分行为的用户集合。
ItemCF算法原理
核心思想:先找到用户喜欢的物品,再找到这些物品的相似物品。
给用户推荐他之前喜欢物品的相似物品。
1. 计算物品之间的相似度
1. 建立用户物品倒排表
仍采用上例中的数据,首先建立用户物品倒排表:
A-a-b-d
B-a-c-e
C-b-e
D-b-d-e
2. 构建同现矩阵
同现矩阵表示同时喜欢两个物品的用户数,根据用户物品倒排表计算得到:
采用如下公式计算item之间的相似度:
wij=∣N(i)∩N(j)∣N(i)w_{ij}=\frac{|N(i)\cap N(j)|}{N(i)}wij=N(i)∣N(i)∩N(j)∣
分母中N(i)是喜欢物品i的用户数,分子表示同时喜欢物品i和j的用户数。
根据上述公式可以计算得到物品之间的相似度矩阵,这里略去。
3. 构建评分矩阵
用户C的评分矩阵:
2. 计算推荐结果
构建相似度矩阵之后,ItemCF通过如下公式计算用户u对物品i的兴趣:
P(u,i)=∑j∈S(i,K)∩N(u)wijrujP_{(u,i)}=\sum_{j \in S(i,K)\cap N(u)}w_{ij}r_{uj}P(u,i)=j∈S(i,K)∩N(u)∑wijruj
N(u)是用户u喜欢的物品集合。
S(i,K)是和物品i最相似的K个物品集合。
wijw_{ij}wij是物品i和j的相似度。$
r_{uj}$使用户u对物品j的兴趣,若用户u对物品j有过行为,则令其为1。
推荐结果为相似度矩阵和评分矩阵的乘积:
那么除去b和e之外,为用户C推荐顺序为d>a>c。