本文为对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}$的最优解
个人体会
- 在这个系统中首先需要给出每部电影的特征,以及部分用户对电影的打分
- 一方面,可以利用用户的$\theta$来评估未打分的电影的$\hat{y}$,从而将预测打分比较高的推荐给用户
- 另一方面,可以通过相似性比较找到$\theta$相近的用户,互相为他们推荐电影
协同过滤
在之前的基于内容的推荐系统中,对于每一部电影,我们都掌握了可用的特征,使用这些特征训练出了每一个用户的参数。相反地,如果我们拥有用户的参数,我们可以学习得出电影的特征。
但如果我们既没有用户的参数,也没有电影的特征,这两种方法都不可行了。协同过滤算法可以同时学习这两者。此时的优化目标便改为同时针对$\bf{x}$和$\bf{\theta}$进行。
此时损失函数为:
同时通过梯度下降法对$\bf{x}$和$\bf{\theta}$更新,即可得到所有的特征,并利用这些特征为用户提供推荐。
在协同过滤方法中,我们很显然的会发现,基于协同过滤的推荐系统用可以分为两类:
- 基于项(item-based)的推荐系统。主要依据的是项与项之间的相似性。
- 基于用户(user-based)的推荐系统。主要依据的是用户与用户之间的相似性。
而衡量相似性的方式有欧式距离、皮尔逊相关系数和余弦相似度