预测电影评分
推荐系统的引入主要有俩个原因:
1、推荐系统是机器学习中一个很重要的应用,一些大的商业公司会利用推荐系统来提高商业效益,这是很重要的。
2、能够自动学习新特征。当我们采用一种算法来自动学习到新特征时,比手动设计特征效率要搞得多,推荐系统能提供这样的效果。
以一个对电影评分的例子说明:
nu 表示评分人数,这里是四人。nm 表示电影数量,这里是五部电影。r(i,j) 表示用户j 对电影i 的评分。如果评过分,则r(i,j)=1 ,否则为0.y(i,j) 表示用户j 对电影i 评分分值,当然,只有在r(i,j)=1 时,y(i,j) 才有值。
推荐系统要做的就是根据给定的
基于内容的推荐
构造特征向量
为了预测用户
这样,我们预测用户
参数向量θ 的计算
m(j) 表示用户j 评定过的电影数量。
根据上图公式,最小化
1、
i:r(i,j)=1 表示评过分的人数。
2、正则项这里同样是从1开始的。
梯度下降
如何最小化theta呢?这里还是采用梯度下降。
综上,我们已知不同电影的特征,根据这些特征来进行预测,这常称作“基于内容的推荐”算法。但是,对于一些电影我们很难去得到这些特征,下面将阐述这种问题的做法。
协同过滤
特征向量
上面我们说过,有些时候特征难以选择,如果算法能自动选择特征那就相当好了,其中之一就有协同过滤。
在这里,我们只知道有
以用户1为例,我们只知道他的
即根据参数向量
具体的,我们有如下,而且可以计算所有电影的特征向量:
矛盾???
前面我们讲过根据特征向量
综上就是简单的协同过滤算法,当你针对一大批用户数据执行这个算法时,这些用户实际上在高效地进行了协同合作来得到每个人对电影的评分值。只要用户对某几部电影进行评分,每个用户就都在帮助算法更好的学习出特征。这样以来,通过自己对几部电影评分之后,我就能帮助系统更好的学习到特征。这些特征可以被系统运用,为其他人做出更准确的电影预测。
协同过滤的优化
协同过滤的优化
如上面所说,我们需要不断地在
1、1、2俩个式子中红框部分其实是一样的,综合起来得到第三个式子的红框中。
(i,j):r(i,j)=1 其实就是对满足r(i,j)=1 的所有(i,j) 求和。
2、这里不包括x0=1 ,即x 有原定的所有n 个特征,不会加入新特征。相应地θ 也就不包括θ0 。
协同过滤过程
协同过滤解决问题的一般步骤如下:
1、因为排除
x0 项,所以这里结果也就没有k=0 项。
2、初始化的过程是必须要的,作用类似于神经中的对称破坏。
低秩矩阵分解
协同过滤的向量化实现
对上面的协同过滤进行向量化实现
这个预测矩阵可以看做是电影的特征矩阵
协同过滤算法在代数上也叫低秩矩阵分解。
找相关电影
如何做到针对用户喜欢的某一部电影,然后推荐给他另一部类似的电影呢?
对于每一部电影,都可以找到它的特征向量。
假设我们想找到和电影
同样地,如果想找到5部最相似的电影,你只要求出欧氏距离最小的5部电影即可。
均值归一化
均值归一化的引入
以一个例子引入
我们新增加一个用户,目的用协同过滤算法算法推荐用户电影。
因为用户没有给任何电影评分,因此代价函数前半部分没有满足
均值归一化
还是以上面的为例子,对
把归一化后的矩阵称作
因为归一化过程中减去了均值,所以预测结果要加上均值矩阵
μ 。
用以上方法就能预测出用户5对每个电影的评分。