吴恩达机器学习笔记之推荐系统
问题规划:
推荐系统是机器学习中的一个重要的应用,在之前的算法学习中,我们知道,特征对于机器学习算法来说很重要,选取不同的特征对模型造成的影响也是非常不同的,因此我们想能否开发出一个能够自动学习选取特征的算法,推荐系统就属于这一类算法。
下面我们从一个例子开始学习怎么设计一个推荐系统。
基于内容的推荐算法:
基于内容的推荐算法,因为我们已经对内容有了特征表示,比如电影的浪漫程度,打斗程度。我们用这些特征对内容的内容进行了表述。
现在我们基于这些特征,采用线性回归算法,对每一个用户都训练一个线性回归模型,从而对那些用户没有打分的电影进行分数的预测。模型的表示如下所示,在这里要注意,我们将平方误差项与正则项中的1/m去掉了,这里和线性回归还是有一些不同的。
上面是一个用户的代价函数,为了学习所有用户的,我们需要表示出所有用户的代价函数之和。
和线性回归中一样,我们不会对进行正则化。
可以看出来,我们的基于内容的推荐算法,是事先建立在已经知道内容的特征表示的基础上的,但在实际情况中,我们很难或者说没办法知道内容的特征表示,这时候我们应该怎么办呢?
协同过滤(collaborative filtering):
当我们不知内容的特征表示时,即不知道时,我们可以稍微改一下假设,假设我们知道用户的偏爱系数,即
,从而来预测我们的
,具体的流程如下:
我们的目标函数变成如下所示:
实际中我们的做法是,首先随机初始化参数,然后求得一组x,根据这组x在来求我们的
,之后再求x,如此循环。
协同过滤算法:
我们将我们上面提到的算法结合在一起,构成新的协同滤波算法,对和x共同进行优化,值得注意的是,当我们将两者结合在一起之后,我们便不再需要
和
项了,因为如果需要的话,算法会自动学习得到的。
算法的使用步骤如下:
为什么要随机初始化,因为要打破对称性。
低秩矩阵分解(Low rank matrix factorization):
将算法用向量化的方法进行实现。