推荐系统【Coursera 斯坦福 机器学习】
本文基于Coursera 斯坦福吴恩达机器学习课程
谢绝任何不标记出处的转载
如有问题请联系作者
1. 问题阐述
推荐系统是机器学习中一个非常非常广泛的应用。它的本质是一个补缺问题。
举个栗子,如下图所示,最左边给出了七首歌,第一行为四个用户,我们需要通过用户已经打分出的歌曲,来推断其未打分的歌曲,以此来做推荐。
这里有几个变量声明:
举个栗子,r(1,3)即为《王妃2.0》被谢广坤打分的情况,可以看到谢广坤打了1分,所以r(1,3)=1, y(1,3) = 1。
2. 推荐系统方法之content based recommender systems
content based, 顾名思义就是基于内容进行的推荐。
依旧拿上面的歌曲打分举例。如下图所示,我们纳入了四个变量x1, x2, x3, x4,每个变量的值为0-1。通过将每首歌曲用这四个变量衡量,我们得到了七组X向量(我随便赋值的,不太合理)。
例如《王妃》为x(2) = [1 0.99 0 0 0]^T(x0 =1). 对于每一个用户,我们将其变为长度为5的向量θ。例如王二狗,就有θ(2)=[θ(0,2) θ(1,2)θ(2,2)θ(3,2)θ(4,2)θ(5,2)]=[1 0 5 0 1](随便写的,大概意思就是非常喜欢影视音乐,很不喜欢流行音乐和二次元,有点喜欢女声)。
如果我们想要预测王二狗对于《王妃2.0》的看法,则使用θ(2)^T*X(2)=1,则预测王二狗会给《王妃》打1分(《王妃》属于流行音乐吧,所以基本还是靠谱的)。可以看到,最后预测时用的是一个简单的线性模型。
对于cost function, 和线性的一样,我们有:
其中,j是第j个用户,i为第i首歌曲,m为歌曲总数,nu为用户总数,n为θ(j)数量。注意θ0和x0的存在,且正则化不需要约束θ0.
这个算法重要的地方就是要能够合理给各个feature赋值,但是现实中这一点往往比较难实现。比如说歌曲的feature,这是一个很主观的东西,众口难调。所以我们可能需要使用其他方法。
3. 推荐系统方法之Collaborative filter 协同过滤
协同过滤是通过给定的θ和已知的X的打分来确定feature的数值。如下面的例子,我们已知四个用户对拔剑神曲《βίος》的评分,并且通过收集他们分别对x1, x2, x3, x4的喜好程度来产生四个θ。然后倒推出拔剑神曲的x1, x2, x3, x4值(下面的数字是我胡写的,懒得凑。。)。
那么把这个过程写正规一点就是如下。首先先通过用户给出的对电影类别(features)的评分和具体电影的评分来确定某一部电影的features数值。第一行是单个feature的cost function,第二行是所有feature的cost funtion。
然后确定了feature之后使用content based 方法(第二行)来预测未知的电影。
注意,这里我们要同时优化X和θ。所以真正的步骤是给X一个较小的随机初始值,然后使用cost function(如下图所示)和gradient descent来同时最小化X和θ。
做好了feature的判断以后,我们也可以直接通过判断两首歌feature之间的“距离”来将其归类,然后做推荐。
4. Mean Normalization
对于全新的用户(θ全为0),我们用mean normalization解决。
这里代码有点绕,需要再看一下。
不需要初始化X0和θ0.