吴恩达老师机器学习课程学习--课时十六
课时十六 推荐系统
1、问题形式化
利用一个例子来定义推荐系统的问题。
比我我们是一个电影供应商,我们有五部电影和4个用户,要求用户为电影打分,
前三部电影是爱情片,后两部则是动作片,我们可以看出Alice和Bob似乎更倾向与爱情片, 而 Carol 和 Dave 似乎更倾向与动作片。并且没有一个用户给所有的电影都打过分。我们希望构建一个算法来预测他们每个人可能会给他们没看过的电影打多少分,并以此作为推荐的依据。
这就是一个推荐系统要干的事情。
2、基于内容的推荐系统
基于内容的推荐系统算法是指假设我们对希望推荐的东西有一些数据,这些数据是有关推荐东西的特征。在上面的例子中,我们假设每部电影有两个特征,代表电影的浪漫程度,代表电影的动作程度。
则每部电影都有一个特征向量,如是第一部电影的特征向量为[0.9 0]。
然后利用这些特征向量构建推荐算法,我们采用线性回归模型,对每一个用户都训练一个线性回归模型,定义:
上面的代价函数只是针对一个用户的,为了学习所有用户,我们把所有用户的代价函数求和:
采用梯度下降算法来求最优解,化简之后的更新函数为:
通过训练,得到最优参数,这样就构建好了一个线性回归模型,通过该模型,可以预测用户给没有看过的电影的评分,前提是我们有该电影的特征数据。
3、协同过滤
在上面的例子中,我们已经拥有了每部电影的可用特征,并且利用特征训练出了每一个用户的参数。相反,若是我们不知道每部电影的特征值,而是知道每位用户的喜好即参数值,我们也可以通过参数学习到电影的特征值,代价函数为:
该函数就是利用用户已知的参数向量乘以电影的特征向量,求出用户可能给电影打的分数,然后计算可能分数和实际分数之间的平方差和,后面那项是正则项。通过梯度下降可以得到最优特征值。
但是,如果我们既没有特征值,也没有用户参数,那该如何计算呢,这就是协同过滤要做的事了,协同过滤算法可以同时学习这两者,因此,优化目标也改成了同时对x和 Θ进行。
在原来的基础上增加了参数的正则项。对代价函数求偏导的结果如下:
使用协同过滤算法的步骤如下:
1.初始为一些随机小值
2.使用梯度下降算法最小化代价函数
3.在训练完算法之后,我们预测为用户j给电影i的评分
通过这个学习过程获得的特征矩阵包含了有关电影的重要数据,这些数据不总是人能读懂的,但是我们可以用这些数据作为给用户推荐电影的依据。
例如,如果一位用户正在观看电影 ,我们可以推荐另一部电影,依据两部电影的特征向量之间的距离的大小。
协同过滤算法是建立在每个用户都对数部电影进行了评分,而且每部电影都被数位用户评价过得基础上。
协同过滤的优化目标:
注意,和线性规划不一样,协同过滤中的特征向量x是n维的,因为是同时最小化,所以,用户参数Θ也是n维的。
4、向量化:低秩矩阵分解
低秩矩阵分解就是利用向量化的思想去计算,这部分主要就是线性代数的知识。
通过向量化的思想,我们可以很方便的来计算两部电影之间的相似性。例如说:电影 i有一个特征向量,你是否能找到一部不同的电影j ,保证两部电影的特征向量之间的距离和很小,那就能很有力地表明电影i和电影 j在某种程度上有相似,至少在某种意义上,某些人喜欢电影i,或许更有可能也对电影j感兴趣。
5、均值归一化
假如我们新增一个用户,并且他没有给任何电影评分,那么我们怎么为他推荐电影呢?
首先我们看一下用户评分数据:
我们首先需要对结果Y矩阵进行均值归一化处理,将每一个用户对某一部电影的评分减去所有用户对该电影评分的平均值:
然后我们利用新矩阵来训练算法,对于新用户,我们的新模型会认为他给每部电影评分都是电影的平均分。