Andrew Ng Machine Learning 专题【Recommender Systems】

来源:互联网 发布:窗帘销售软件 编辑:程序博客网 时间:2024/05/20 23:06

此文是斯坦福大学,机器学习界 superstar — Andrew Ng 所开设的 Coursera 课程:Machine Learning 的课程笔记。力求简洁,仅代表本人观点,不足之处希望大家探讨。
课程网址:https://www.coursera.org/learn/machine-learning/home/welcome

Week 9 前半部分 Anomaly Detection:http://blog.csdn.net/ironyoung/article/details/49334343

Week 9:

  1. 推荐系统

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

    2. 我们以外国豆瓣为例,见下图(问号代表尚未评分):
      3.
      另外我们需要设计几个变量:nu=#users数目;nu=#movies数目;r(i,j)代表用户j是否已经对电影i评分,取值为0或1;y(i,j)代表用户j是否对电影i的具体评分,取值范围0~5

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

    4. 如何寻找相似的电影呢?就是选取“距离”最短的另一部电影,即small ||x(i)x(j)||

    5. 很容易地,我们会想到线性回归的方法。这个方法的前提是已知每部电影属于每种特征的得分x(1),x(2),...,x(m)。若每个用户基于特征可以有一个θ(j),则用户j对电影i的评分为(θ(j))Tx(i)。根据线性回归,我们可以得到优化目标为:
      这里写图片描述
      这里需要注意的是,为了简化系统,我们去除了求和符号之前的12m,而是12。这样并不影响结果。
      对上图中的优化目标,利用梯度下降的办法求出 θ 的最优值(如果对这一部分不熟悉,建议查看《专题【Linear Regression】》:http://blog.csdn.net/ironyoung/article/details/47129523):
      这里写图片描述

  2. 换个角度思考?

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

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

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

    3. 上一部分的求解过程是xθ,这一部分的求解过程是θx。如果这两个过程交替进行,是不是就可以达到整体的最优值?答案是肯定的。这就是下一部分“协同过滤”的基本思想,但是具体实施过程有待改进。

  3. 协同过滤(Collaborative Filtering)

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

    2. 查看下图,红色方框中是两个优化目标的求解部分中相同的部分,即使求和顺序不同。而红框之外的部分分别加到新的优化目标中
      这里写图片描述
      这里,我们去除掉x0,θ0这些恒为1的变量(其实我忍很久了),让学习更加灵活。

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

  4. 均值归一化(Mean Normalization)

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

    2. 但是,如果直接利用我们之前的方法求解以下情形:
      这里写图片描述
      为了归一化,肯定最后 Eve 的 θ(5) 一定是全0向量。因此,我们需要对原先的方法采取一些预操作,来避免出现全 0 的预测向量,而是让它变成每部电影的平均得分。

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


编程作业答案:https://github.com/cnauroth/machine-learning-class

0 0
原创粉丝点击