【无监督机器学习】9.推荐系统

发布时间 2023-10-21 11:21:22作者: asdio

推荐系统

推荐系统的定义

推荐系统是利用用户产生的行为数据,对用户的兴趣进行建模,从而给用户推荐可能感兴趣的物品。

推荐系统的应用

  • 电商网站
  • 新闻网站
  • 流媒体平台

协同过滤

协同过滤是一种基于用户行为的推荐算法,它的基本思想是利用用户的历史行为数据,计算用户之间的相似度,然后根据相似度为用户生成推荐列表。

以电影网站预测为例,有以下数据:

电影名称 用户1 用户2 用户3 用户4 \(x_1\)(爱情) \(x_2\)(动作)
电影1 5 5 0 0 0.9 0
电影2 5 0 1 0
电影3 4 0 0.99 0
电影4 0 0 5 4 0 1
电影5 0 0 5 0 0.9

对于每一个电影可能的类型,我们可以定义一个特征,比如\(x_1\)表示爱情,\(x_2\)表示动作。记为\(x^{(i)}\),其中\(i\)表示电影的编号。

以电影1为例,\(x^{(1)}=(0.9,0)\),表示电影1的类型为爱情。

参数\(W\)\(b\)的学习

预测用户对电影评分的公式为:

\[\hat{y}^{(i,j)}=W^{(j)}x^{(i)}+b^{(j)} \]

其中,\(W^{(j)}\)表示用户\(j\)的参数,\(b^{(j)}\)表示用户\(j\)的偏置。

评分预测的损失函数为:

\[J(W^{(1)},...,W^{(n_u)},b^{(1)},...,b^{(n_u)})=\frac{1}{2}\sum_{j=1}^{n_u}\sum_{i:r(i,j)=1}((W^{(j)}x^{(i)}+b^{(j)})-y^{(i,j)})^2+\frac{\lambda}{2}\sum_{j=1}^{n_u}\sum_{k=1}^{n}((W_k^{(j)})^2) \]

其中,\(n_u\)表示用户的数量,\(n\)表示特征的数量,\(r(i,j)\)表示用户\(j\)是否对电影\(i\)评分。

参数\(X\)的学习

电影类型预测是的损失函数为:

\[J(X^{(1)},...,X^{(n_m)})=\frac{1}{2}\sum_{i=1}^{n_m}\sum_{j:r(i,j)=1}((W^{(j)}x^{(i)}+b^{(j)})-y^{(i,j)})^2+\frac{\lambda}{2}\sum_{i=1}^{n_m}\sum_{k=1}^{n}((X_k^{(i)})^2) \]

其中,\(n_m\)表示电影的数量,\(n\)表示特征的数量,\(r(i,j)\)表示用户\(j\)是否对电影\(i\)评分。

协同过滤算法

协同过滤的损失函数

将上面两个损失函数合并,得到协同过滤的损失函数:

\[J(X,W,b)=\frac{1}{2}\sum_{(i,j):r(i,j)=1}((W^{(j)}x^{(i)}+b^{(j)})-y^{(i,j)})^2+\frac{\lambda}{2}\sum_{i=1}^{n_m}\sum_{k=1}^{n}((X_k^{(i)})^2)+\frac{\lambda}{2}\sum_{j=1}^{n_u}\sum_{k=1}^{n}((W_k^{(j)})^2) \]

协同过滤的梯度下降

对于参数\(X\)\(W\)\(b\),它们的梯度分别为:

\[\frac{\partial J}{\partial X_k^{(i)}}=\sum_{j:r(i,j)=1}((W^{(j)}x^{(i)}+b^{(j)})-y^{(i,j)})W_k^{(j)}+\lambda X_k^{(i)}\\ \frac{\partial J}{\partial W_k^{(j)}}=\sum_{i:r(i,j)=1}((W^{(j)}x^{(i)}+b^{(j)})-y^{(i,j)})X_k^{(i)}+\lambda W_k^{(j)}\\ \frac{\partial J}{\partial b_k^{(j)}}=\sum_{i:r(i,j)=1}((W^{(j)}x^{(i)}+b^{(j)})-y^{(i,j)}) \]

梯度下降的更新公式为:

\[X_k^{(i)}:=X_k^{(i)}-\alpha\frac{\partial J}{\partial X_k^{(i)}}\\ W_k^{(j)}:=W_k^{(j)}-\alpha\frac{\partial J}{\partial W_k^{(j)}}\\ b_k^{(j)}:=b_k^{(j)}-\alpha\frac{\partial J}{\partial b_k^{(j)}} \]

二元标签分类

二元标签分类中,用户对电影的评价只有两种情况,例如:是否点赞、是否收藏等。

分类公式

预测用户二元评价的公式为:

\[\hat{y}^{(i,j)}=\sigma(W^{(j)}x^{(i)}+b^{(j)}) \]

其中,\(\sigma\)表示Sigmoid函数。

损失函数

损失函数为:

\[J(W^{(1)},...,W^{(n_u)},b^{(1)},...,b^{(n_u)})=-\frac{1}{m}\sum_{j=1}^{n_u}\sum_{i=1}^{m}(y^{(i,j)}log(\hat{y}^{(i,j)})+(1-y^{(i,j)})log(1-\hat{y}^{(i,j)}))+\frac{\lambda}{2}\sum_{j=1}^{n_u}\sum_{k=1}^{n}((W_k^{(j)})^2) \]

均值归一化

对于未评分的新用户,利用原始数据(0-5分)进行预测,会导致预测结果均为0分。

为了解决这个问题,我们可以对原始数据进行均值归一化。

原始数据的计算公式为:

\[Y^{'}=Y-\mu,\mu=\frac{1}{n}\sum_{i=1}^{n}Y_i \]

用户的预测公式为:

\[\hat{y}^{(i,j)}=\sigma(W^{(j)}x^{(i)}+b^{(j)})+\mu_i \]

相似度计算

相似度计算是协同过滤算法的核心,它的目的是计算用户之间的相似度,从而为用户生成推荐列表。

欧式距离

欧式距离是最常用的相似度计算方法,它的计算公式为:

\[d(x,y)=\sqrt{\sum_{i=1}^{n}(x_i-y_i)^2} \]

协同过滤求相似度的缺点

  1. 冷启动问题
    对于新用户,由于没有历史行为数据,无法计算用户之间的相似度。

  2. 无法使用用户的其他信息
    对于用户的其他信息,比如年龄、性别等,无法利用这些信息计算用户之间的相似度。

基于内容的推荐系统

基于内容的推荐系统是一种基于物品的推荐算法,它的基本思想是利用物品的特征,计算物品之间的相似度,然后根据相似度为用户生成推荐列表。

基于内容的推荐系统和协同过滤的区别在于,基于内容的推荐系统是基于物品或用户的特征,而协同过滤是基于用户的评分数据。

基于内容的推荐系统的过程

  1. 特征提取
    对于物品,我们可以定义一些特征,比如电影的类型、电影的导演、电影的演员等。
  2. 特征向量维度压缩
    不同的向量之间进行点积运算,须保持向量的维度一致,通过特征向量压缩,可以减少向量的维度,从而提高运算效率。
    img
  3. 特征相似度计算

深度学习在推荐系统中的应用

维度压缩

为了将特征向量压缩到相同低维度,我们可以使用深度学习实现。
img

相似度计算

深度学习的损失函数为:

\[J=\sum_{i,j:r(i,j)=1}(v_u^{(j)}\cdot v_i^{(i)}-y^{(i,j)})^2+\lambda\sum_{i=1}^{n_m}||v_i^{(i)}||^2+\lambda\sum_{j=1}^{n_u}||v_u^{(j)}||^2 \]

其中,\(v_u^{(j)}\)表示用户\(j\)的特征向量,\(v_i^{(i)}\)表示物品\(i\)的特征向量,\(y^{(i,j)}\)表示用户\(j\)对物品\(i\)的评分。

相似度计算的公式为:

\[d = ||v_u^{(k)}-v_u^{(i)}||^2 \]

预测过程如图所示:
img

大型数据集的处理

系统中可能被推荐的数目往往是非常大的,比如电商网站可能有上百万的商品,流媒体平台可能有上万部电影。

对于这种大型数据集,可以使用检索和排名的方法进行推荐

检索

  • 生成一系列候选物品

    以电影推荐为例,可选的候选方式有:用户看过最接近的电影、用户最喜欢题材中的热门电影,所在地区最热门的电影等。

  • 合并候选物品:去除重复的物品以及用户已经看过的物品

排名

+利用深度学习计算用户对候选物品的评分
+对评分进行排序,得到最终的推荐列表