推荐系统与协同过滤

本文为对Andrew Ng的推荐系统与协同过滤一章的个人理解。

定义

根据不同的数据源发现数据相关性的方法可以分为以下几种

  • 根据系统用户的基本信息发现用户的相关程度,这种被称为基于人口统计学的推荐(Demographic-based Recommendation)
  • 根据推荐物品或内容的元数据,发现物品或者内容的相关性,这种被称为基于内容的推荐(Content-based Recommendation)
  • 根据用户对物品或者信息的偏好,发现物品或者内容本身的相关性,或者是发现用户的相关性,这种被称为基于协同过滤的推荐(Collaborative Filtering-based Recommendation)。

本文中主要涉及的为基于内容的推荐和基于协同过滤的推荐。

标记

$n_{user}$代表用户的数量

$n_{movie}$代表电影的数量

$r^{(i, j)}$代表用户i给电影j评过分

$y^{(i, j)}$代表用户i给电影j 的评分

$\hat{y}^{(i, j)}$代表系统预测的用户i给电影j 的评分

$m_j$代表用户j 评过分的电影的总数

基于内容的推荐系统

假设每部电影都有一个特征向量$\bf{x}^i$

假设每个用户心中有一个用于打分的参数向量$\bf{\theta}^j$

则对预测评分$\hat{y}^{(i, j)}$有:

对代价函数$L(\bf{\theta})$有:

最后通过梯度下降法得到$\bf{\theta}$的最优解

个人体会

  1. 在这个系统中首先需要给出每部电影的特征,以及部分用户对电影的打分
  2. 一方面,可以利用用户的$\theta$来评估未打分的电影的$\hat{y}$,从而将预测打分比较高的推荐给用户
  3. 另一方面,可以通过相似性比较找到$\theta$相近的用户,互相为他们推荐电影

协同过滤

在之前的基于内容的推荐系统中,对于每一部电影,我们都掌握了可用的特征,使用这些特征训练出了每一个用户的参数。相反地,如果我们拥有用户的参数,我们可以学习得出电影的特征。

但如果我们既没有用户的参数,也没有电影的特征,这两种方法都不可行了。协同过滤算法可以同时学习这两者。此时的优化目标便改为同时针对$\bf{x}$和$\bf{\theta}​$进行。

此时损失函数为:

同时通过梯度下降法对$\bf{x}$和$\bf{\theta}$更新,即可得到所有的特征,并利用这些特征为用户提供推荐。

在协同过滤方法中,我们很显然的会发现,基于协同过滤的推荐系统用可以分为两类:

  • 基于项(item-based)的推荐系统。主要依据的是项与项之间的相似性。
  • 基于用户(user-based)的推荐系统。主要依据的是用户与用户之间的相似性。

而衡量相似性的方式有欧式距离、皮尔逊相关系数和余弦相似度

0%