推荐系统-机器学习(machine learning)笔记(Andrew Ng)
推荐系统
通过推荐系统我们可以领略一点关于特征学习的思想。
问题组成
从一个例子入手,这是一个预测电影评分的例子,通过预测结果我们可以推荐给用户可能喜欢的电影。
基于内容的推荐算法
代表用户的数量,代表电影的数量。
假设对于每个电影,都有一个特征集,来衡量一个电影为爱情片的程度,来衡量一个电影为动作片的程度。
对于每个用户,学习参数。使用来预测用户j评价电影i的星级。
举个例子,对第3部电影第1个用户:
我们之后再说这个是如何得到的。
这里得到的值为4.95,所以我们可以预测第三排第一列 Alice对Cute pupples of love的预测评分为4.95。我们可以将这部电影推荐给Alice。
这里的特征的第一维是截距,恒为1。
问题形式化
这里相当于是一个线性回归——最小平方回归的形式,最小化预测值和真实值之间的差的平方。
删除,因为对于每个用户看过的电影数量是个常亮,删除它并不会对造成改变。
在正则化中k从1开始,因为我们不需要对偏置量进行正则化。
优化目标
优化算法和梯度下降
对于梯度下降,有两种情况,k=0和k≠0。
公式里没有加m分之一的原因是我们在优化目标中去除了这个。
通过梯度下降,我们可以知道如何最小化来学习所有的参数。
基于内容指的是已知电影的特征量,如作为爱情片的程度多少、作为动作片的程度多少等等。
但是现实中有些销售的东西很难得出这样具体的特征量的值。所以我们需要另外的算法,在假设没有得到这些特征量推荐给用户感兴趣的内容。
协同过滤
这种算法有一种很有意思的特点,叫做特征学习,即这种算法能够自己学习所要使用的特征。
假设我们不知道一部电影作为爱情片程度和作为动作片程度多少,即不知道电影的特征值。
我们稍稍改变了一下假设,我们采访了每一位用户,每个用户告诉了我们她们喜欢爱情电影的程度和喜欢动作电影的程度。
如果我们从用户那里得到了的值,那么我们可以推测出每部电影的和的值。
优化算法
我们随机初始化,然后计算的值,然后再计算的值,不断迭代这个过程,得到最终的值。
协同过滤算法
存在一种算法,不用不断的计算和。而是将其同时计算出来。
我们所要做得是将两个优化目标结合成一个。
这个优化目标有一个有趣的特性。如果假设x是常数,计算theta时,那么就是在计算上面的第一个优化目标。反过来也一样。
当我们以这种方式学习特征量时,我们不用再遵循这条惯例。现在只有n维的x向量。同样,theta也变成n维向量。
协同过滤算法
首先,我们把x和theta向量都初始化为很小的随机值。
接下来,我们使用梯度下降(或者其他的优化算法)来进行最小化J。
因为没有截距了,所以我们不用考虑k=0的情况。
最后,我们根据用户参数theta和电影特征量x,去预测评分。
矢量化:低阶矩阵分解
通过向量化的方式计算所有用户对所有电影的预测评分。
电影之间的相似度
电影有一个特征向量,电影有一个特征向量。
实施细节:均值规范化
通过上述例子来说明均值规范化的作用:
我们新增一个用户Eve,这个用户对所有电影都没有评分。
我们仍然假设特征的数量为n=2;我们要学习得到第五个用户的参数向量。
我们从优化目标入手,因为第五个用户没有对任何电影评分,所以前面的差平方为0。最终我们最小化正则化项,得到的值为[0;0]。
这种情况下,我们会得到用户五对所有的评分都为0。
这样,我们无法推荐用户五可能感兴趣的电影给他,因为这些电影的预测评分都是0。
均值归一可以让我们解决这个问题。
第一步,我们要计算每个电影的平均得分,并让每个电影的评分减去对应的平均得分,即让所有电影的平均得分为0。
第二步,我们假设减去平均得分的矩阵Y为用户的输入矩阵,实施协同过滤算法,然后在预测结果中把平均得分加回来。
最后我们可以发现用户五的预测评分即是电影的评分得分。