1、概述
推荐系统是现实生活中应用最广泛的积极学习问题,通过对历史数据的分析,把用户感兴趣的商品、服务推荐给用户。
2、基于内容的推荐算法
基于内容的推荐算法,其实就是已知商品的特征,根据特征建立模型,实现推荐系统的方式。
我们以一个案例来介绍推荐算法,这个案例讲贯穿整章内容。
2.1 电影推荐案例

介绍一下上述表格的组成部分:
- 第一列:代表电影的名称,一共有5个电影。
- 第二列:分成4个小列,代表每个人对各个电影的评分。问号代表用户没有进行评分。
- 第三列:电影的特征值,x1代表电影是爱情电影的概率;x2代表是动作电影的概率。
2.2 符号说明
为了描述方便,我们把本章使用到的符号做个定义:
-
nn:用户数量。
-
nm:电影数量。
- r(i,j)=1:代表用户j对电影i进行了评价。
- y(i,j):代表用户j对电影i的评分。
-
m(j):代表用户j评价的电影数量。
-
θ(j):用户j的向量参数。
-
x(i):电影i的特征向量。
-
nu:代表θ的数量。
-
nm:代表特征x的数量。
2.3 基本原理
我们假设用户j对电影i的评分为:(θ(j))T∗X(i)。具体原因,恕我无可奉告。
在已知θ和X的前提下,就能计算每个用户对每个电影的评分了。
这就是基于内容的推荐算法。
那θ如何计算呢,请看下节。
2.4 θ的计算
θ 是拟合参数,需要保证预测值与真实值最接近的情况下,求最小值,公式为:
minθj:2m(j)1i:r(i,j)=1∑((θj)TX(i)−y(i,j))2+2m(j)λk=1∑n(θk(j))2
m(j)代表用户评价的电影的数量,是一个常量,可以从商户公式中去掉:
minθj:21i:r(i,j)=1∑((θj)TX(i)−y(i,j))2+2λk=1∑n(θk(j))2
求所有的θ值:
J(θ(1),θ(2),θ(3)......θ(nu))=21j=1∑nui:r(i,j)=1∑((θj)TX(i)−y(i,j))2+2λj=1∑nuk=1∑n(θk(j))2
通过梯度下降的方式来计算θ:
θk(j):=θk(j)−α(∑i:r(i,j)=1((θ(j))TX(i)−y(i,j))xk(i))(for k=0)
θk(j):=θk(j)−α(∑i:r(i,j)=1((θ(j))TX(i)−y(i,j))xk(i)+λθk(j))(for k!=0)
3、协同过滤
上面介绍的是已知特征的情况下,可以推导出θ,从而构建推荐模型。
本节讲的是另外一种情况,假设θ是已知的,特征是未知的,通过θ来自动构建特征的过程,这种方式称为协同过滤。
3.1 前提
前提:每个用户都对数个电影进行了评分,通过观察大量的数据,得到每个电影的特征值,相当于每个用户都在协助改进算法。
3.2 原理
根据之前的定义我们知道用户j对电影i的评分为(θ(j))TX(i),现在已知θ、评分求解X,则公式为:
minx(i):21∑j:r(i,j)=1((θ(j))TX(i)−y(i,j))2+2λ∑k=1n(xk(i))2
求解所有的X:
minx(1),x(2)...x(nm):21∑i=1nm∑j:r(i,j)=1((θ(j))TX(i)−y(i,j))2+2λ∑i=1nm∑k=1n(xk(i))2
3.3 计算步骤
- 先取一个随机的θ
- 根据上述公式计算出X。
- 对θ进行优化。
- 重新计算x
- …
3.4 同时计算θ、X
有一种同时计算θX的方式,公式为:
J(x(1),x(2),x(3)...,x(nm),θ(1),θ(2),θ(3)......θ(nu))=21(i,j):r(i,j)=1∑((θj)TX(i)−y(i,j))2+2λj=1∑nuk=1∑n(θk(j))2+2λi=1∑nmk=1∑n(xk(i))2
注意:该算法中,不包含x0θ0的值。
计算步骤为:
- 随机初始化θ x为较小的值。
- 使用梯度下降算法优化θ x。
θk(j):=θk(j)−α(∑i:r(i,j)=1((θ(j))TX(i)−y(i,j))xk(i)+λθk(j))
xk(i):=xk(i)−α(∑i:r(i,j)=1((θ(j))TX(i)−y(i,j))θk(j)+λX(i))
4、矢量化实现
矢量化是一种表示方式的变化。

我们来看一下上面的这张图:
- Y:每行代表每个用户对一个电影的评分结果。
- Predicted ratings:预测的公式,(θ(j))2x(i)。用这个来预测Y的值。
- 假设X Θ 为两个矩阵,则Y=XΘT
这就是矢量化表示方式,也称为“低秩矩阵分解算法”。
5、均值归一化
有些用户从来不对电影进行评分,针对于这种用户,如何进行推送呢?
通过上面的方式,因为r(i,j)!=1,所以该用户对所有电影的评分结果计算出来都是0,这对于推荐系统没有任何意义,而均值归一化是一种解决思路。
均值归一化:就是计算所有用户对电影的评分的平均值,作为该用户的评分返回。

介绍一下上图的元素:
- Y:代表用户对电影的评分,可以看出最后一个用户,没有进行任何评分。
-
μ代表每个电影评分的平均值。
- 使用Y减去平均值得到新的Y。
- 预测评分的公式为:(θ(j))Tx(i),由于每个y值都减去了平均值,所以公式需要加上平均值:(θ(j))Tx(i)+μi
- 所以没有评分的用户的评分:(θ(j))Tx(i)+μi=0+μi=μi