Andrew Ng Machine Learning (10) Recommender Systems

此文是斯坦福大学 Andrew Ng 所开设的 Coursera 课程:Machine Learning 的课程笔记。
课程网址:
https://www.coursera.org/learn/machine-learning/home/welcome


1. 推荐系统

推荐系统是机器学习的重要应用之一,但是学术界关注较少。但是它的确出现在生活中的方方面面。例如我们上豆瓣、网易云音乐(没错,叫我文青)等,总会有根据你的个人喜好来推荐你可能喜欢的电影、音乐的功能,就是典型的推荐系统。

我们以外国豆瓣为例,见下图(问号代表尚未评分):

另外我们需要设计几个变量:

nu=#users数目;

nu=#movies数目;

r(i,j)代表用户j是否已经对电影i评分,取值为0或1;

y(i,j)代表用户j是否对电影i的具体评分,取值范围0~5

一般电影评分是基于内容(content-based),取值范围为0~1。例如某部电影的浪漫成分为0.3,动作成分为0.8,这部电影就主要是动作片,掺杂一些浪漫成分。“浪漫”特征可以设定为x1,“动作”特征可以设定为x2,共有n个特征。

如何寻找相似的电影呢?就是选取“距离”最短的另一部电影,即

很容易地,我们会想到线性回归的方法。这个方法的前提是已知每部电影属于每种特征的得分即x(1),x(2),…,x(m)。

若每个用户基于特征可以有一个θ(j),则用户j对电影i的评分为

根据线性回归,我们可以得到优化目标为:

这里需要注意的是,为了简化系统,我们去除了求和符号之前的1/2m,而是1/2。这样并不影响结果。

对上图中的优化目标,利用梯度下降的办法求出 θ 的最优值(如果对这一部分不熟悉,建议查看《Linear Regression》

2. 换个角度思考?

上一部分,我们是假设已知每部电影在每种特征上的得分。如果我们已知有两种特征:romance和action,但是不知道每种电影在哪种特征上得分多少。在这里,我们的求解对象变为了x(i).

但是此时我们已知得知用户对于每种特征的喜欢程度,即已知θ(j)。同时已知y(i,j),求解x(i)。因此我们的优化目标为:

同理,也可以使用梯度下降法进行最优值求解。

上一部分的求解过程是x⇒θ,这一部分的求解过程是θ⇒x

如果这两个过程交替进行,是不是就可以达到整体的最优值?答案是肯定的。

这就是下一部分“协同过滤”的基本思想,但是具体实施过程有待改进。

3. 协同过滤(Collaborative Filtering)

对于求解过程x⇒θ,与求解过程θ⇒x 交替进行,以求达到整体的最优值。协同过滤基本思想是这样的,但是能不能将一切置于同一个公式下?

查看下图,红色方框中是两个优化目标的求解部分中相同的部分,即使求和顺序不同。而红框之外的部分分别加到新的优化目标中

这里,我们去除掉x0,θ0这些恒为1的变量(其实我忍很久了),让学习更加灵活。

因此,协同过滤的具体算法流程(第一步类似于神经网络,对系统中的参数首先都进行随机化;后两步完全类似于线性回归)。因为我们不再需要k=0的情况,所以不需要单独区分:

4. 均值归一化(Mean Normalization)

如果有另一个新用户 Eve,她对于任何电影都尚未评分,我们如何给她推荐呢?很简单,推荐那些大部分都觉得高分的电影呗。

但是,如果直接利用我们之前的方法求解以下情形:

为了归一化,肯定最后 Eve 的 θ(5) 一定是全0向量。因此,我们需要对原先的方法采取一些预操作,来避免出现全 0 的预测向量,而是让它变成每部电影的平均得分。

方法也十分简单,就是对每部电影求出一个平均值(只统计那些对该部电影打过分数的样本),然后将每个人对每部电影的得分减去这部电影的平均值,然后进行协同过滤计算。但是,最后的预测得分公式也需要小小的改变:(其中μi表示电影i的平均得分)。