推荐系统入门学习笔记


推荐系统分类

基于内容

基于用户喜欢的物品的属性/内容进行推荐,需要分析物品的内容,无需考虑用户与用户之间的关联,通常在文本相关的产品上进行推荐

  • 对于每个要推荐的内容,我们要建立一份"资料"
    1. 比如词$k_i$在文件$d_j$中的权重$w_{ij}$
    2. 常用的方法比如TFIDF
  • 对于每个用户,也要建立一份"资料"
    1. 定义一个权重向量$w_{c1},\dots ,w_{ck}$
    2. 其中$w_{ci}$表示第$k_i$个词对用户$c$的重要程度

基于协同过滤

协同过滤是一种基于"近邻"的推荐算法:根据用户在物品上的行为找到物品或者用户"近邻"

协同过滤又分为两种:基于用户的协同过滤,基于

基于用户的协同过滤(user-based)

  • 基于跟用户有共同行为的物品,计算用户与用户相似度

  • 根据相似度找到近邻用户(也就是相似度高的),将近邻用户对新物品的评价(打分)加权(权重为相似度)进行推荐

    图中就是选取了跟米老鼠行为相似度前二的兔子和唐老鸭作为近邻用户,然后用兔子和唐老鸭对右边三种食物进行评价的结果综合起来推荐给米老鼠

基于物品的协同过滤(item-based)

  • 对于有相同用户交互的物品,计算物品相似度
  • 找到物品的近邻物品,进行推荐

一个例子:下图每一列表示一个用户,每一行表示一部电影,黄色的值代表用户对该部电影的评分,空白则表示没有进行评分,现在要求的是:如果给用户5推荐第一部电影,用户5给出的评分可能是多少,这个值越大就表示电影1越值得推荐给用户5

首先就是计算剩下2~5这5部电影跟电影1的相似度,计算时要选取同时评价过两部电影的用户数据进行计算,比如计算第2部电影跟第1部电影的相似度,就要选择用户3和用户11,具体的相似度可以参考后文的几种方法,这里选择Pearson相似度,结果如下:

可以看出第2部电影跟第1部电影的相似度较低,其实看评分也能看得出来,然后就是选取相似度较大的两个(排除电影1,这里选择N部电影就是TopN),即为电影3和电影6,将对应的相似度作为权值对用户5给电影3、6的评分进行加权,即可简单的算出用户5对于电影1可能给出的评分
$$
score_{51}=\frac{0.41\times2+0.59\times3}{0.41+0.59}=2.6
$$
最后,就通过item-base协同过滤的方法计算出了用户5对于电影1可能给出的评分,可以看出分数不高,所以可以选择不推荐,或者放在推荐的靠后位置

几种相似度的衡量方法

距离

计算公式1如下:

当p=2时即为常用的欧氏距离,p=1时为曼哈顿距离

很显然的是:距离越小,两物体越相似

Jaccard相似度

计算公式:
$$
J(A,B)=\frac{\left | A\cap B \right |}{\left | A\cup B \right |}
$$
举例说明:假设$A={a, b, c, d, e}, \quad B={a, g, c, x, y}$,那么
$$
J(A,B)=\frac{\left | A\cap B \right |}{\left | A\cup B \right |}=\frac{2}{8}=\frac{1}{4}
$$
值越大相似度越大,常用于TopN推荐的场景中

余弦相似度

计算公式:
$$
\cos(\theta)=\frac{a^Tb}{\left | a \right | \cdot \left | b \right |}
$$
把$a、b$看成向量,在对应的空间中,计算两向量夹角的余弦值,如果值越大说明两向量的夹角度数越小,两向量就越接近,相似度就越大

Pearson相似度

计算公式
$$
\operatorname{sim}(X, Y)=\frac{\sum_{i=1}^{n}\left(X_{i}-\mu_{X}\right)\left(Y_{i}-\mu_{Y}\right)}{\sqrt{\sum_{i=1}^{n}\left(X_{i}-\mu_{X}\right)^{2}} \sqrt{\sum_{i=1}^{n}\left(Y_{i}-\mu_{Y}\right)^{2}}}
$$


文章作者: Reset Ran
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Reset Ran !
  目录