推荐系统

来自ng ml-003 的16_XVI._Recommender_Systems 还有17 和18 ng的ml-003就可以看完了。算法

推荐系统,常见于广告推送,好比亚马逊或者京东,等你购买东西以后他就会知道你喜欢什么。函数

1、推荐系统学习


假设一个电影评价系统,等级有5个星星,其中如今有4个评价者,在5部电影进行评价,r(I,j)表示某我的是否对某个电影进行评价。而y(I,j)就是评价的等级。flex

经过对某我的没有看过的电影中向这我的推荐电影。this


这里是基于内容的推荐系统,假设的例子仍是前面的额电影例子,对于每一个电影来讲,有两个特征:romance(爱情片)和acition(动做片)(这里虽然是特征,但能够当作是对电影不一样程度的标签,回归),经过左边的几个不一样的电影来对这两个特征进行不一样程度的赋值,好比第四部电影,那么这和特征来讲更像是动做片,而不是爱情片。code

这里经过引入x_0=1来将原本2维的特征扩展到三维,而后经过简单的theta T*x的模型来作预测,,这里假设用户1 对第三个电影的想看程度是4.95.orm


这里就是上面的一个标准化处理方式,在上图最后写出了这个模型的目标函数,若是能够还加上正则化项,在这里面要注意目标函数第一项中的求和下面的那个,是个求真函数,只有当r(I,j)=1的时候才取j的值,否则就是跳过,这个在ufldl和ng在08年的教学视频中都有说起,这里正则化项是从1开始的,由于x_0 =1是常数项,(一般这一项都是省略的),由于对于目标函数来讲,缩放 所获得的最后结果是不变的,因此目标函数中先后两项的1/m能够划掉,1/2不能,是由于留着后面求导用的视频


上图中上半部分是对单个的用户来讲的,下面是扩展到全部的用户的目标函数。这其中发现是对应于一个用户有一个模型,也就是说不一样的用户虽然使用的是线性回归,可是参数集确是本身的。ci


上图就是如何使用梯度降低法来更新参数了,这其实和线性回归差很少,并且注意k等于0说的是第一个参数 由于咱们直接赋值为1的, 在nn中这个叫作偏置部分,上图中 对于偏置是不进行正则化项的,和上上图同样,可是却须要相似于nn的权值更新。值得注意get

2、协同过滤


由于没人会给出一个很好的电影的特征,这个电影多少爱情成分,多少动做成分,并且代价太大,经过换个方法,对于不一样的参数,即不一样的用户来讲,让他们给出本身的喜爱,这个不难,好比用户1 所对应的参数就是偏心爱情片5  不喜欢动做片0,后面三个用户以此类推。


、这里是经过用户给定的参数来逆推电影的特征,好比第一个电影,由于前两个用户给了5分,并且这两个用户超喜欢爱情片,因此这个电影的爱情特征就是1,相反的动做特征就是0.



上图就是经过知道参数的状况下来获得特征的目标函数,和以前的目标函数是同样的。


这就是协同算法(和em算无法好像),经过先瞎猜theta 来估计特征 x,而后经过特征x来从新训练theta,以此进行直到差很少收敛。


上面的就是先经过给定特征来按照目标函数进行估计参数theta。而后第二个就是经过给定的theta来按照目标函数估计特征x。前面估计不一样的参数的时候第一项是同样的,可是正则化项是不一样的,可是最下面的第三个是经过同时对两个进行目标函数创建,将两个正则化项放到一块儿。并且前面第一项的下标要注意下。前两个是交替的学习theta 和特征x,第三个是同时进行学习,这里为何你们遵循这个不学习x_0=1的特征,由于以前说了不学习theta0 因此第三项也是从x_1开始的,而每次都忽略theta 0是由于:Finally one last detail is that when we're learning the features this way. Previously we have been using this convention that we have a feature x0 equals one that corresponds to an interceptor. When we are using this sort of formalism where we're are actually learning the features, we are actually going to do away with this convention. And so the features we are going to learn x, will be in Rn. Whereas previously we had features x and Rn + 1 including the intercept term. By getting rid of x0 we now just have x in Rn.
And so similarly, because the parameters theta is in the same dimension, we now also have theta in RN because if there's no x0, then there's no need parameter theta 0 as well. And the reason we do away with this convention is because we're now learning all the features, right? So there is no need to  hard code the feature that is always equal to one. Because if the algorithm really wants a feature that is always equal to 1, it can choose to learn one for itself. So if the algorithm chooses, it can set the feature X1 equals 1.So there's no need to hard code the feature of 001, the algorithm now has the flexibility to just learn it by itself. So, putting everything together, here is our collaborative filtering algorithm.


上图就是具体的过程,经过训练好theta 和特征x ,就能够进行预测并知道用户j 对电影 I 的评价了。

3、低秩矩阵因式分解

经过用户购买的一个产品的信息,来推荐全部类似的产品给用户


经过上一节中得到的数据进行组成个矩阵。


上面就是将用户对电影的评价矩阵给分解成用户theta矩阵和电影特征矩阵x的乘积形式。


经过计算不一样电影之间的2-范数,找到和所须要找的目标电影差距最小的电影来做为类似电影推荐。

4、均值标准化


对于使用协同算法进行计算的时候,对于上图中新增长的成员5,他没有参与任何的电影评价,无法进行训练,目标函数第一项来讲,由于r(i,5)=0,因此第一项彻底跳过,对于参数theta来讲,都是0,因此开始的预测值都是0.可是这没啥帮助,由于不少人钟爱第一部电影,那或多或少推荐第五我的他是否是也喜欢第一部电影来的好。


其实ng说的均值标准化,就是如上图的将以前评分过的分数进行求均值,而后赋值给没评分的,这个方法先不说更新数据量大,和在线学习差很少,并且感受精度好差,以为也就是理解原理吧,在实际的系统上就是让人知道如今大众对这个的评价,感受很差。

相关文章
相关标签/搜索