Machine Learning(Andrew)Week9(下)

来源:互联网 发布:js中的eval 编辑:程序博客网 时间:2024/06/18 04:39

推荐系统

问题形式化

我们到淘宝网首页,就可以看到很多的物品推荐

微博上也有推荐一些人给你关注

 

现在考虑电影推荐(截图来自时光网)

我们收集了一些用户对一些电影的评价的数据

如豆瓣上有这样的评分

 假设现在有4个用户,对五部电影进行过评价

评价是零颗星☆☆☆☆☆到五颗星★★★★★六个等级


nu表示用户人数,这里nu=4nm表示电影数,这里nm=5r(ij)=1表示该用户j给电影i评分了。是用户j给电影i打的分数。表中打“?”表示没看过这部电影,需要预测这个用户对打多少分。

Alice会给The King'sSpeech打多少分呢?我们可以简单推敲下。前三部电影是励志电影,后两部是爱情电影。Alice给后两部零颗星,给前两部五颗星,说明她喜欢励志片。根据她给前两部电影的分数,求平均,得到她给励志电影的平均分是五颗星。所以可以推测她给The King'sSpeech也是五颗星★★★★★。

同样,Bob给The Pursuit of Happyness四点五颗星

Carol给The Pursuit of Happyness零颗星☆☆☆☆☆

Dave给The King'sSpeech☆☆☆☆☆,给Roman Holiday★★★★☆。

基于内容的推荐

上面我们推测Alice会给The King'sSpeech打★★★★★的时候说,前三部电影是励志电影,后两部是爱情电影,从Alice已打分的情况看,她偏爱励志电影。这里励志和爱情其实就是一部电影的特征。Alice偏爱励志电影,对她而言,励志这个特征的权重要高些。而我们所说的基于内容的推荐也是指提取要推荐的物品特征,根据用户的打分记录,给电影的特征不同喜好。如:

是电影的特征,是用户对特征的喜好(即权重)。

把电影转成特征向量的形式:

Movie—>{Inspirational,Romance}


有了特征之后,要预测用户对电影的评分,需要知道用户对电影特征的喜好程度θ。和之前的machine learning一样,特征向量x0=1。Movie—>{1,Inspirational,Romance}

比如假设Alice的偏好为,第三部电影的特征是

所以Alice对The King'sSpeech的打分为

注意θ的第一个分量设为0。

但是,θ我们其实不知道。所以,需要根据用户之前对电影的打分情况来获取该用户的喜好。这样就变成了求θ的问题了,这和以前说过的模型没有什么不同:

注意这里没有除以mj,因为mj是用户j打分过的电影数,这里去掉,不影响minJ的值。r(i,j)=1是说对第i部电影用户j有打分。

不过,因为推荐系统需要给每个用户推荐的都不同,所以要根据每个用户的喜好,也就是说,每个用户都有一个自己的学习模型,来求出各自的θ。nu是用户人数。

 用梯度下降来求:

协同过滤(Collaborative filtering)

Movie—>{Inspirational,Romance}时,我们填了一些值在表中,那些是电影的特征值,也是我们人工指定的,如果不指定的话:


所以,我们要求出每部电影的特征值。如果有用户的喜好的话,我们很容易根据上面的分析求出每部电影的特征值。如:


然后,根据同样的目标函数求出,电影的特征值:

但是。。。 。。。这样就是,我们求用户偏好时,假设了特征值;求特征值时,又假设了用户偏好。。。

这就陷入了死循环。。。先给用户偏好求特征,还是先给特征求偏好。。。

所以,提出了协同过滤算法,从名字上分析,就知道这个算法要一起求出偏好和特征。做法就是把目标函数变成:

求这个目标函数最优解的时候,只能交替处理x和θ。

算法思路:

(1)初始化x和θ

(2)用梯度下降求minJ

(3)求出x和θ,就可以预测用户对没看过的电影的评分。

矢量化:低秩矩阵分解

电影特征矩阵:

特征矩阵包含了有关电影的重要信息,这些信息是给用户做推荐的重要依据。

 比如有一部电影叫Front of the Class,会推荐给上述四个用户中的哪个?推荐系统会做的事情就是看这部电影和上面哪部最类似,用的是:

假设算出来后Front of the Class和Forrest Gump最类似。接着,再看哪些用户看了Forrest Gump,就推荐给他们。

实现细节—均值归一化

如果有一个新的用户Eve,我们之前没有她的电影评分记录的话,怎么给她推荐电影呢?


 
把评分数据整理成Y矩阵:

即:

对Y矩阵进行均值归一化处理

(1)先对每部电影的用户评分求平均:

(2)归一化,每个用户对每部电影的评分减去每部电影的均值

用归一化后的Y求模型

预测用户对电影的评分用:

Eve对电影的喜欢为:

这样,Eve对每部电影的评分就能求出来了。


0 0
原创粉丝点击