16、Recommender Systems(推荐系统)
16.2 Content-based recommendations(基于内容的推荐算法)
这一节的内容其实就是把线性回归用到推荐系统这个具体问题上,对每个用户求解一组参数(权重+阈值) θ \theta θ。以下面电影推荐系统为例。
问题描述如下:
优化目标如下:
其实这两个优化出来的结果在数学上来说是一样的,因为它是对每个用户都优化了一组参数
θ
(
j
)
\theta^{(j)}
θ(j)。不对用户统一优化一组参数的原因在于,每个用户对不同特征的权重不同。
优化算法:
就是普通的线性回归的梯度下降算法的优化,也可以用其它的优化算法(LBFGS等等)。是不是也可以将这个问题建模成神经网络而非线性回归。
16.3 Collaborative filtering(协同过滤)
这个方法有一个有意思的特性——特征学习:能自行学习要使用的特征。
问题动机:假设我们不知道每个产品的特征值,但是我们知道用户的喜好设置(这就是注册软件的时候让用户选择的感兴趣的内容),然后就能根据一些用户的喜好设置(对某些特征的权重)和这些用户对某部产品的打分,逆推出(拟合出)该产品对应的这些特征的特征值。
已知一些用户的喜好设置(对某些特征的权重
θ
\theta
θ),要得到用户评价过的产品
i
i
i 的对应上述特征的特征值,算法如下:
所以,将上述算法和上一节的基于内容的推荐算法互相套娃,就可以得到下述的协同过滤(Collaborative filtering):
总的来说,协同过滤算法指的是:当你执行算法时要,要观察大量的用户,观察这些用户的实际行为来协同地得到更佳的每个人对产品的评分值。因为每个用户都对一部分产品作出了评价,那么每个用户都在帮助算法学习出更合适特征;然后这些学习出的特征又可以被用来更好地预测其他用户的评分。协同的另一层意思是说,每一位用户都在帮助算法更好地进行特征学习。
16.4 Collaborative filtering algorithm(协同过滤算法)
上一节提到的协同过滤需要反复计算
θ
\theta
θ 和
x
x
x,本节把两个结合起来,优化目标如下所示:
注:不再需要
x
0
=
1
x_0=1
x0=1这个截距项,因为之前是特征固定需要有截距项;现在要学习特征可以理解为截距项是一个特征,没有必要强制设为1。所以,不再存在
x
0
x_0
x0 和
θ
0
\theta_0
θ0。
优化算法如下所示:
注:这里用的是梯度下降,当然也可以用其他优化算法。
16.5 Vectorization:Low rank matrix factorization(矢量化:低秩矩阵分解)
这一节讲的就是将前面几节讲的东西用矩阵/向量去表示
预测评价的第
(
i
,
j
)
(i,j)
(i,j) 元素表示的是第
j
j
j 个用户对第
i
i
i 个产品的评价;
X
X
X是产品的特征向量;
Θ
\Theta
Θ是用户对产品特征的权重(参数),被称为低秩矩阵(这是这个算法被称为低秩矩阵分解的原因)。
如果已知用户喜欢产品 i i i,如何向用户推荐产品 j j j?可以找距离与产品 i i i距离相近的产品 j j j。
16.6 Implementational detail:Mean normalization(实施细节:均值规范化)
问题的出发背景是有用户没有给任何产品评分。如下图所示:
均值规范化算法如下:
其中,
Y
Y
Y是原先实际的评分矩阵,
μ
\mu
μ是每个产品的已有评分的均值向量,然后用原先的
Y
Y
Y减去均值向量得到新的
Y
Y
Y,然后用
θ
T
x
+
μ
\theta^Tx+\mu
θTx+μ去预测,最后得到那个没给任何产品评分的用户对产品的评分。说白了,其实就是取平均值。