http://ling0322.info/2013/05/07/recommander-system.htmlhtml
这个学期Web智能与社会计算的大做业就是完成一个推荐系统参加百度电影推荐算法大赛,成绩按照评测数据给分。老师介绍了N种方法包括基于内容的、以及协同过滤等等,不过他强烈建议使用矩阵奇异值分解的办法来作。也正由于是这个缘由,咱们一共8组其中6组的模型都是SVD。算法
这个比赛就是提供给你用户对电影的评分、电影的TAG、用户的社会关系(好友)、用户的观看纪录信息。其中用户对电影的评分满分是5分,大约8k用户、1w电影,而后根据以上的信息预测用户对某些电影的评分。而后评测结果就是跟用户实际评分的RMSE值。机器学习
SVD就是一种主成分分析以及降维的方法,大致思路就是一个对称矩阵A能够分解成对角形学习
A=PTΛP
atom
其中Λ
为对角阵,它对角线上的元素就是矩阵A的特征值。特征值对应的特征向量是互相正交的,这个也就是对称矩阵的性质。在这些特征值中大的特征值以及它对应的特征向量对于整个结果(就是乘出来的A)来讲比较重要,相比之下比较小的特征特征值对应的特征向量对于结果的影响就比较小,所以将这些小的特征值以及其对应的特征向量去掉,产生结果A′
来讲,A′
仍旧是很是接近于A。这些被去掉的东西能够认为是A中的噪音。所以A′
能够写做spa
A′=UTΛV
code
可是现实生活中不多有矩阵是对称的,好比上面的用户-电影矩阵。所以就诞生了奇异值分解的方法htm
A=UTΔV
blog
其中Δ
和Λ
同样是一个对角阵,可是对角线上的元素就不是特征值了而是矩阵A的奇异值(至于为何叫奇异值我也不知道,这个很奇异吗?)。A的奇异值就等于AAT
的特征值的根号。而后通过各类复杂的运算这个分解就完成了。奇异值分解的用途很广,主要是用做降维以及主成分分析。在天然语言中LSA主题模型就是基于奇异值分解,另外计算词与词之间的关系也要用到SVD。get
使用SVD作推荐系统也能够当作是主成分分析的过程(此外还有另一种解释就是将用户和电影投影到同一个向量空间中1),找到用户-电影矩阵中最大的r个奇异值,进行分解构成r行的矩阵U(表明用户)和r列的矩阵V(表明电影),这个就是各个用户对电影打分的主要的影响因素,依据这个就能够对于用户的打分进行预测。
可是这里状况很特殊,用户-电影矩阵十分稀疏,大约只有1%左右的项是有值的,对于这些项所有用0来填这个明显就是表示用户对这些电影打0分,这个是不合逻辑的,用平均值或者随机值填充效果也确定很差。所以目前使用它的一种近似形式,对于用户-电影矩阵Am×n
,找到矩阵Qr×m
、Tr×n
使得QTT
尽可能类似于A。这个能够转化成,对于每一个评分rui
找到 qu∈Q,ti∈T
使得
∑u,i(rui−qTipu)+λ(∥qi∥2+∥pu∥2)
最小,其中后半部分是防止过拟合而加入的因子。这个很明显可使用随机梯度降低算法进行求解(关于随机梯度降低算法能够参考斯坦福机器学习第二课)
eui=defrui−qTipu
qi←qi+γ(eui⋅pu−λ⋅qi)
pu←pu+γ(eui⋅qi−λ⋅pu)
其中γ
就是迭代的步长,咱们使用Go语言实现了以上的迭代过程,如下是一些实验的结果数据
γ
=0.001, λ
=0.01, iter=100, r=20, RMSE=0.6483γ
=0.001, λ
=0.01, iter=1000, r=20, RMSE=0.6618γ
=0.001, λ
=0.05, iter=1000, r=20, RMSE=0.6298γ
=0.001, λ
=0.1, iter=1000, r=20, RMSE=0.6534γ
=0.001, λ
=0.05, iter=1000, r=50, RMSE=0.6298其中iter表示迭代次数、λ
是防过拟合因子的系数、RMSE是在百度平台上跑的结果(越小越好)。其中比较1和2能够很明显的发现λ
在取0.01的时候仍是出现了过拟合现象,所以在λ
=0.05的状况下是全部实验数据中最好的。r是因子的个数,这里对结果影响不大。
γ
的取值也很是重要,由于在梯度降低中γ
太小会收敛很慢,γ
过大会错过最佳的点。其实最好的解决方法就是使得γ
的值随着变化率动态改变,原本在代码中实现了这个功能的,可是由于实现以后发现程序太慢了,因此就去掉了。
最后在课程结束Presentation的时候,老师告诉咱们其实好的推荐系统应该将TAG、用户社交关系等信息都加进去,这样的数据的结果才可以有大幅度的提高(由于咱们都是用SVD作,结果大同小异)。此外,同窗将均值以及用户的偏移加进去以后最好的结果是0.625左右(详细状况能够看推荐系统相关算法(1):SVD这篇文章)。
另外推荐一篇论文Matrix Factorization Techniques for Recommender Systems