斯坦福机器学习公开课笔记(十三)--推荐系统

时间:2022-07-10 14:15:53


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

授课老师:Andrew Ng

1、problem formulation(问题产生)

在平时购物的时候我们都会看到网站把向我们推荐的商品放在醒目位置,其实这就是推荐系统。现在考虑一个电影推荐系统的例子,我们拥有一些用户对于一些电影的评分,如下:

斯坦福机器学习公开课笔记(十三)--推荐系统

从上面可以看到,用户对电影的评分分为从05这六个等级,有些用户没有看过某部电影,故对该电影的评价未知。分析之下能发现电影列表中的电影可以分为两个类别,上面三部都是爱情片,下面两部为动作片。现在的问题是,如何根据用户对电影的评分给用户推荐电影?

2、content-based recommendations(基于内容的推荐)

现在我们拥有用户对电影的评分,同时我们也需要知道电影的特征,基于内容的推荐的前提就是获取待推荐物品的特征信息。针对上面的例子,可以认为这些电影中只含有两类特征,一种是romance,一种是action,特征评分越高,证明该电影越倾向于这一特征,提取特征后得到的列表如下:

斯坦福机器学习公开课笔记(十三)--推荐系统

其中x1代表每部电影的romance等级,x2代表action等级,x(1)代表《love at last》这部电影的特征信息,其余类似,这样我们就把电影转换成了向量形式。和机器学习中的其他方法类似,我们对向量增加一维常量1,最后把每部电影转换为一个3*1的向量。现在,光有电影的特征是不够的,如果要预测用户对电影的评分,显然还需要知道用户的喜好,这里用theta表示:

斯坦福机器学习公开课笔记(十三)--推荐系统

可以看到,theta也是一个3*1的向量,第一维依然是常量,后两维是对两类电影的喜好,theta(1)代表第一个用户自己的喜好。有了这些信息后,就可以用theta*x来预测某个用户对于某部电影的评分情况了。不过通常情况下theta值不可能一下子看出来,是需要通过学习得到的,问题转换为求出theta,写成更规范的形式如下:

斯坦福机器学习公开课笔记(十三)--推荐系统

和回归类似,写出代价函数,然后用梯度下降求解:

斯坦福机器学习公开课笔记(十三)--推荐系统

斯坦福机器学习公开课笔记(十三)--推荐系统

通过这样,我们就能求出theta

3、collaborative filtering(协同过滤)

上面求出了theta,不过细细分析后会发现关于x也是我们人为指定的,如果不指定电影的特征信息应该如下:

斯坦福机器学习公开课笔记(十三)--推荐系统

为了求出x,我们需要指定出theta,接下来还是那一套老路:

斯坦福机器学习公开课笔记(十三)--推荐系统

这下我们犯难了,thetax都没给,那怎么求?这是一个鸡生蛋蛋生鸡的问题!这就是协同过滤要解决的难题。

斯坦福机器学习公开课笔记(十三)--推荐系统

4、collaborative filtering algorithm(协同过滤算法)

先对之前提出的问题进行一下总结:

斯坦福机器学习公开课笔记(十三)--推荐系统

可以发现,合并之后参数变成了xtheta两类,针对这个代价函数梯度下降时只能交替处理xtheta

斯坦福机器学习公开课笔记(十三)--推荐系统

这样就能够在不知道xtheta的情况下进行求解了。

5、vectorization:low rank matrix factorization(矢量化-小秩矩阵分解)

其实在获取上面用户对电影的评分之后,可以用矩阵的形式进行表述:

斯坦福机器学习公开课笔记(十三)--推荐系统

其实Y矩阵中的元素都是通过thetax计算得来,展开如下:

斯坦福机器学习公开课笔记(十三)--推荐系统

上面的矩阵可以分解为Xtheta两个向量,这就是小秩矩阵分解。如果要寻找哪两种电影最相近,可以通过计算X向量中两个值的差值来判断,差值越小,则越相近:

斯坦福机器学习公开课笔记(十三)--推荐系统

6、implementational detail:Mean normalization(标准化)

现在我们在原来的数据上增加一列:

斯坦福机器学习公开课笔记(十三)--推荐系统

在这里Eve还没有对任何电影评过分,我们只能假设他对所有电影的评分都为0。此时,我们对其评分进行预测,得到的结果都为0。针对这种情况,我们先对Y进行标准化处理:

斯坦福机器学习公开课笔记(十三)--推荐系统

在求出均值后,对Y进行变换,用标准化后的Y来进行计算,得到的结果要加上均值,这样就能确保Eve的评分不会一直为0,这样还是比较有道理的。

------------------------------------------------------弱弱的分割线----------------------------------------------------

这一讲主要介绍了推荐系统是怎么回事,关键是要学习两个向量,物品特征向量和用户偏好向量。协同过滤的思想就是在不知道这两个向量时用梯度下降的方法对其进行求解。在把数据矩阵化之后,可以用矩阵分解的方法求解,关于具体做法很遗憾这里没有讲,最常见的恐怕是SVD方法,关于SVD的具体内容可以看这里:

http://en.wikipedia.org/wiki/Singular_value_decomposition

另外给出一个具体的例子-电影推荐系统:

http://blog.csdn.net/jj12345jj198999/article/details/8821419