机器学习(二十二)- Recommender Systems

来源:互联网 发布:软件使用手册编写目的 编辑:程序博客网 时间:2024/05/25 23:26

接下来,我们要介绍的是关于推荐系统的机器学习算法,什么是推荐系统,其实在现在已经很普遍了,即通过用户的历史数据来对用户进行产品推荐的系统,比如推荐电影,推荐商品等。推荐系统又分为两个步骤,预测推荐,首先进行预测,预测用户对于产品的喜好情况,然后将Top5或者Top10推荐他。接下来我们就以推荐电影为例。

Predicting Movie Ratings

Problem Formulation

首先我们考虑预测这个步骤,基于我们自己的真实经历,我们在豆瓣,优酷等视频网站上,看完电影呢,我们会给我们看过的电影进行一个打分(当然也可能不会,比如我就没有这个习惯),5分表示非常喜欢,觉得很棒,分数递减表示喜欢程度下降,最低分0分,表示完全不喜欢。这就构成了我们下图中的 y 矩阵。然后同时存在一个 r 矩阵来表示我们是否对这部电影进行过打分。
这里写图片描述
那么预测的任务,就是根据上图中已有的数据来预测出问号部分的评分情况。实际中,这个 y 矩阵将是非常稀疏的。

Content-based Recommendations

接下来介绍第一种推荐算法,基于内容的推荐算法。
这里写图片描述
我们的任务是解决上图中的问号,下图是对于上图的参数的解释,那么可以发现的是,我们多了一个 x 矩阵,这是我们关于电影本身的特征矩阵(即每部电影,它的爱情片指数和它的动作片指数),θ 矩阵是我们用户关于每种特征的喜爱程度(即如果我喜欢看动作片,那么我对应动作片指数的那个系数就高),最后 (θ(j))T(x(i)) 就表示为用户 j 对于电影 i 的喜爱程度,也就是打分情况。
这里写图片描述
那么现在其实很明了了,我们要拟合的就是这个 θ 矩阵,即我们要通过用户以往的打分情况来得到用户对于不同特征(电影类型等)的喜好程度,然后再运用这个 θ 矩阵对新电影进行打分预测。代价函数如下图,我们发现其实就是最小二乘,和线性回归的代价函数基本相同,只不过舍掉了 1m 因为常数项并不影响我们求解 θ
这里写图片描述
同样地,利用梯度下降进行参数更新,不再赘述。
这里写图片描述
那么最后讲讲为什么这种方法叫做 content-based 呢,其实就是因为我们已知了这样一个关于我们要推荐对象的本身的特征矩阵(对于电影就是它的爱情片指数,动作片指数等),但现实生活中,这样的矩阵是很难拿到的,首先是因为很难界定(比如对于同样一部电影有的人任务它的动作指数低,有的人认为高),其次工作量太大(得有专门一批人去看电影,然后依次对这些特征量进行打分,电影那么多),最后特征量的选取很难(要选取多少特征,哪些特征,才能保证能够进行区分呢)。由于以上种种原因,content-based 算法实用性不是很大。接下来就着重讲解一个效果不错的算法——协同过滤算法。

Collaborative Filtering

协同过滤算法有一个非常重要的特点就是它能够自主地进行特征学习,它能自己学习决定运用什么特征,这就大大解决了我们刚刚提出的问题。
content-based是我们预先知道了 x 矩阵,那如果我们预先知道的是用户的喜好呢 θ 矩阵,同理,我们可以求出通过 θ 求出 x。那么这就仿佛一个鸡生蛋,蛋生鸡的问题。
于是,我们考虑随机生成一个 θ 矩阵,通过这个 θ 矩阵求出一个 x ,再通过这个 x 求出一个新的 θ, 如此循环直至收敛。这就是最基本的协同过滤算法,我们只需要知道 y (用户打分),然后就可以同时求出最优的 θx
这里写图片描述
看到这个,我再一次有了醍醐灌顶的感觉,但同时我又有一个疑惑,为什么这样的算法可行呢,为什么随机初始化然后就能迭代到最优解呢。我自己琢磨了一会儿,也得出了结论,这是建立在一定的数据量上的,因为推荐系统本质上一系列线性方程的组合,当我们的方程数,超过我们的未知数个数的时候,我们总能找到一个解的。

Algorithm

接下来就给出目标函数以及算法过程,需要提出的是,没有 θ0x0 , 不需要像线性回归一样引入一个全1变量,因为我们所有的特征都是自主学习的,如果系统希望一个特征始终为1,那么最终学习的结果会自动带有一个全1变量,不需要我们事先自己引入。
这里写图片描述
这里写图片描述

Low Rank Matrix Factorization

Vectorization: Low Rank Matrix Factorization

下图为协同过滤算法的矩阵表现形式,协同过滤算法同时也被叫做 Low Rank Matrix Factorization(低秩矩阵分解),因为 Y 矩阵的低秩性。
这里写图片描述
当我们完成了低秩矩阵分解得到了 xθ 矩阵,我们可以用 x 来寻找相似的电影,通过 θ 来寻找喜好相同的人。
这里写图片描述

Implementational Detail: Mean Normalization

最后呢,我们考虑一种特殊情况,如果一个新用户进来,他没给任何电影打过分数,那么通过协同过滤算法,我们将得到他的喜好向量将是一个全0的向量,那么显然这样是不合理的,于是我们引入mean normalization来解决这个问题。
这里写图片描述
下图就是mean normalization的过程,对 Y 矩阵的每一行(每一部电影)的打分求均值,然后相减得到一个新的 Y 矩阵,然后运用协同过滤求出 θx,最后对于需要预测的对象,我们再加上均值即可,即一个全新的用户进来,他对所有电影的预测都等于均值,这就相对来说比较合理了。
这里写图片描述

阅读全文
0 0
原创粉丝点击