机器学习笔记 Week9 推荐系统

学习笔记(Machine Learning) Week9

全部笔记PDF版:http://vdisk.weibo.com/s/J4rRX/1373287206

Week9 由两部分内容构成:

  1. 异常检测
  2. 推荐系统

2推荐系统(Recommender Systems)

2.1问题形式化

我们从一个例子开始定义推荐系统的问题。

假使我们是一个电影供应商,我们有5部电影和4个用户,我们要求用户为电影打分。

QQ截图20130706205911

前三部电影是爱情片,后两部则是动作片,我们可以看出Alice和Bob似乎更倾向与爱情片,而Carol和Dave似乎更倾向与动作片。并且没有一个用户给所有的电影都打过分。我们希望构建一个算法来预测他们每个人可能会给他们没看过的电影打多少分,并以此作为推荐的依据。

下面引入一些标记:

  • nu代表用户的数量
  • nm代表电影的数量
  • r(i,j)如果用户i给电影j评过分则r(i,j)=1
  • y(i,j)代表用户i给电影j的评分
  • mj代表用户j评过分的电影的总数

2.2基于内容的推荐系统(Content-based Recommendations)

在一个基于内容的推荐系统算法中,我们假设对于我们希望推荐的东西有一些数据,这些数据是有关这些东西的特征。

在我们的例子中,我们可以假设每部电影都有两个特征,如x1代表电影的浪漫程度,x2代表电影的动作程度。

QQ截图20130706211011

则每部电影都有一个特征向量,如x(1)是第一部电影的特征向量为[0.9 0]。

下面我们要基于这些特征来构建一个推荐系统算法。

假设我们采用线性回归模型,我们可以针对每一个用户都训练一个线性回归模型,如θ(1)是第一个用户的模型的参数。

于是,我们有:

  • θ(j)用户j的参数向量
  • x(i)电影i的特征向量

对于用户j和电影i,我们预测评分为:(θ(j))T(x(i))

代价函数

针对用户j,该线性回归模型的代价为预测误差的平方和,加上归一化项:

11111

其中i:r(i,j)表示我们只计算那些用户j评过分的电影。在一般的线性回归模型中,误差项和归一项应该都是乘以1/2m,在这里我们将m去掉。并且我们不对偏倚项θ0进行归一化处理。

上面的代价函数只是针对一个用户的,为了学习所有用户,我们将所有用户的代价函数求和:

222222

如果我们要用梯度下降法来求解最优解,我们计算代价函数的偏导数后得到梯度下降的更新公式为:

QQ截图20130706214139

2.3协同过滤算法(Collaborative Filtering Algorithm)

在之前的基于内容的推荐系统中,对于每一部电影,我们都掌握了可用的特征,使用这些特征训练出了每一个用户的参数。相反地,如果我们拥有用户的参数,我们可以学习得出电影的特征。

33333

但是如果我们既没有用户的参数,也没有电影的特征,这两种方法都不可行了。协同过滤算法可以同时学习这两者。

我们的优化目标便改为同时针对x和θ进行。

4444

对代价函数求偏导数的结果如下:

55555

注:在协同过滤从算法中,我们通常不使用偏倚项,如果需要的话,算法会自动学得。

协同过滤算法使用步骤如下:

  1. 初始x(1),x(2),...,x(nm),θ(1)(2),...,θ(nu)为一些随机小值。
  2. 使用梯度下降算法最小化代价函数
  3. 在训练完算法后,我们预测(θ(j))T(x(i))为用户j给电影i的评分。

通过这个学习过程获得的特征矩阵包含了有关电影的重要数据,这些数据不总是人能读懂的,但是我们可以用这些数据作为给用户推荐电影的依据。

例如,如果一位用户正在观看电影x(i),我们可以寻找另一部电影x(j),依据两部电影的特征向量之间的距离||x(i)-x(j)||的大小。

2.4均值归一化

让我们来看下面的用户评分数据:

33321

如果我们新增一个用户Eve,并且Eve没有为任何电影评分,那么我们以什么为依据为Eve推荐电影呢?

我们首先需要对结果Y矩阵进行均值归一化处理,将每一个用户对某一部电影的评分减去所有用户对该电影评分的平均值:

543

然后我们利用这个新的Y矩阵来训练算法。

如果我们要用新训练出的算法来预测评分,则需要将平均值重新加回去,预测(θ(j))T(x(i))+μi

对于Eve,我们的新模型会认为她给每部电影的评分都是该电影的平均分。

课程地址:https://class.coursera.org/ml-003/class/index

Leave a Reply

Your email address will not be published. Required fields are marked *