基于矩阵分解的协同过滤推荐算法研究
A. 谁有基于用户的推荐系统或者协同过滤的算法和代码分析
个大数据的大神给个 基于用户的推荐系统或者协同过滤的算法和代码分析啊
我有部分代码但是不知道怎么在Eclipse上实现 求解答啊
1.public class AggregateAndRecommendRecer extends Recer<VarLongWritable,VectorWritable,VarLongWritable,RecommendedItemsWritable>{
...
public viod rece (VarLongWritable key,Iterable<VectorWritable>values,Context context)throws IOException,InterruptedException{
Vector recommendationVector=null;
for(VectorWritable vectorWritable:values){
recommendationVector=recommendationVector==null?
vectorWritable.get();
recommendationVector.plus(bectorWritable.get());
}
Queue<RecommendedItem> topItems=new PriorityQueue<RecommendedItem>(recommendationsPerUser+1,Collections.reverseOrder(.getInstance()));
Iterator<Vector.Element> recommendationVectorIterator=recommendationVector.iterateNonZero();
while(recommendationVectorIterator.hasNext()){
vector.Element element=recommendationVectorIterator.next();
int index=element.index();
B. 个性化推荐算法——协同过滤
有三种:协同过滤
用户历史行为
物品相似矩阵
C. 协同过滤,基于内容推荐有什么区别
举个简单的小例子,我们已知道
用户喜欢的电影是A,B,C
用户u2喜欢的电影是A, C, E, F
用户u3喜欢的电影是B,D
我们需要解决的问题是:决定对u1是不是应该推荐F这部电影
基于内容的做法:要分析F的特征和u1所喜欢的A、B、C的特征,需要知道的信息是A(战争片),B(战争片),C(剧情片),如果F(战争片),那么F很大程度上可以推荐给u1,这是基于内容的做法,你需要对item进行特征建立和建模。
协同过滤的办法:那么你完全可以忽略item的建模,因为这种办法的决策是依赖user和item之间的关系,也就是这里的用户和电影之间的关系。我们不再需要知道ABCF哪些是战争片,哪些是剧情片,我们只需要知道用户u1和u2按照item向量表示,他们的相似度比较高,那么我们可以把u2所喜欢的F这部影片推荐给u1。
根据数据源的不同推荐引擎可以分为三类
1、基于人口的统计学推荐(Demographic-based Recommendation)
2、基于内容的推荐(Content-based Recommendation)
3、基于协同过滤的推荐(Collaborative Filtering-based Recommendation)
基于内容的推荐:
根据物品或内容的元数据,发现物品或内容的相关性,然后基于用户以前的喜好记录推荐给用户相似的物品
基于内容推荐的一个典型的例子,电影推荐系统,首先我们需要对电影的元数据有一个建模,这里只简单的描述了一下电影的类型;然后通过电影的元数据发现电影间的相似度,因为类型都是“爱情,浪漫”电影 A 和 C 被认为是相似的电影(当然,只根据类型是不够的,要得到更好的推荐,我们还可以考虑电影的导演,演员等等);最后实现推荐,对于用户 A,他喜欢看电影 A,那么系统就可以给他推荐类似的电影 C。
D. 矩阵分解在协同过滤推荐算法中的应用
矩阵分解在协同过滤推荐算法中的应用
推荐系统是当下越来越热的一个研究问题,无论在学术界还是在工业界都有很多优秀的人才参与其中。近几年举办的推荐系统比赛更是一次又一次地把推荐系统的研究推向了高潮,比如几年前的Neflix百万大奖赛,KDD CUP 2011的音乐推荐比赛,去年的网络电影推荐竞赛,还有最近的阿里巴巴大数据竞赛。这些比赛对推荐系统的发展都起到了很大的推动作用,使我们有机会接触到真实的工业界数据。我们利用这些数据可以更好地学习掌握推荐系统,这些数据网上很多,大家可以到网上下载。
推荐系统在工业领域中取得了巨大的成功,尤其是在电子商务中。很多电子商务网站利用推荐系统来提高销售收入,推荐系统为Amazon网站每年带来30%的销售收入。推荐系统在不同网站上应用的方式不同,这个不是本文的重点,如果感兴趣可以阅读《推荐系统实践》(人民邮电出版社,项亮)第一章内容。下面进入主题。
为了方便介绍,假设推荐系统中有用户集合有6个用户,即U={u1,u2,u3,u4,u5,u6},项目(物品)集合有7个项目,即V={v1,v2,v3,v4,v5,v6,v7},用户对项目的评分结合为R,用户对项目的评分范围是[0, 5]。R具体表示如下:
推荐系统的目标就是预测出符号“?”对应位置的分值。推荐系统基于这样一个假设:用户对项目的打分越高,表明用户越喜欢。因此,预测出用户对未评分项目的评分后,根据分值大小排序,把分值高的项目推荐给用户。怎么预测这些评分呢,方法大体上可以分为基于内容的推荐、协同过滤推荐和混合推荐三类,协同过滤算法进一步划分又可分为基于基于内存的推荐(memory-based)和基于模型的推荐(model-based),本文介绍的矩阵分解算法属于基于模型的推荐。
矩阵分解算法的数学理论基础是矩阵的行列变换。在《线性代数》中,我们知道矩阵A进行行变换相当于A左乘一个矩阵,矩阵A进行列变换等价于矩阵A右乘一个矩阵,因此矩阵A可以表示为A=PEQ=PQ(E是标准阵)。
矩阵分解目标就是把用户-项目评分矩阵R分解成用户因子矩阵和项目因子矩阵乘的形式,即R=UV,这里R是n×m, n =6, m =7,U是n×k,V是k×m。直观地表示如下:
高维的用户-项目评分矩阵分解成为两个低维的用户因子矩阵和项目因子矩阵,因此矩阵分解和PCA不同,不是为了降维。用户i对项目j的评分r_ij =innerproct(u_i, v_j),更一般的情况是r_ij =f(U_i, V_j),这里为了介绍方便就是用u_i和v_j内积的形式。下面介绍评估低维矩阵乘积拟合评分矩阵的方法。
首先假设,用户对项目的真实评分和预测评分之间的差服从高斯分布,基于这一假设,可推导出目标函数如下:
最后得到矩阵分解的目标函数如下:
从最终得到得目标函数可以直观地理解,预测的分值就是尽量逼近真实的已知评分值。有了目标函数之后,下面就开始谈优化方法了,通常的优化方法分为两种:交叉最小二乘法(alternative least squares)和随机梯度下降法(stochastic gradient descent)。
首先介绍交叉最小二乘法,之所以交叉最小二乘法能够应用到这个目标函数主要是因为L对U和V都是凸函数。首先分别对用户因子向量和项目因子向量求偏导,令偏导等于0求驻点,具体解法如下:
上面就是用户因子向量和项目因子向量的更新公式,迭代更新公式即可找到可接受的局部最优解。迭代终止的条件下面会讲到。
接下来讲解随机梯度下降法,这个方法应用的最多。大致思想是让变量沿着目标函数负梯度的方向移动,直到移动到极小值点。直观的表示如下:
其实负梯度的负方向,当函数是凸函数时是函数值减小的方向走;当函数是凹函数时是往函数值增大的方向移动。而矩阵分解的目标函数L是凸函数,因此,通过梯度下降法我们能够得到目标函数L的极小值(理想情况是最小值)。
言归正传,通过上面的讲解,我们可以获取梯度下降算法的因子矩阵更新公式,具体如下:
(3)和(4)中的γ指的是步长,也即是学习速率,它是一个超参数,需要调参确定。对于梯度见(1)和(2)。
下面说下迭代终止的条件。迭代终止的条件有很多种,就目前我了解的主要有
1) 设置一个阈值,当L函数值小于阈值时就停止迭代,不常用
2) 设置一个阈值,当前后两次函数值变化绝对值小于阈值时,停止迭代
3) 设置固定迭代次数
另外还有一个问题,当用户-项目评分矩阵R非常稀疏时,就会出现过拟合(overfitting)的问题,过拟合问题的解决方法就是正则化(regularization)。正则化其实就是在目标函数中加上用户因子向量和项目因子向量的二范数,当然也可以加上一范数。至于加上一范数还是二范数要看具体情况,一范数会使很多因子为0,从而减小模型大小,而二范数则不会它只能使因子接近于0,而不能使其为0,关于这个的介绍可参考论文Regression Shrinkage and Selection via the Lasso。引入正则化项后目标函数变为:
(5)中λ_1和λ_2是指正则项的权重,这两个值可以取一样,具体取值也需要根据数据集调参得到。优化方法和前面一样,只是梯度公式需要更新一下。
矩阵分解算法目前在推荐系统中应用非常广泛,对于使用RMSE作为评价指标的系统尤为明显,因为矩阵分解的目标就是使RMSE取值最小。但矩阵分解有其弱点,就是解释性差,不能很好为推荐结果做出解释。
后面会继续介绍矩阵分解算法的扩展性问题,就是如何加入隐反馈信息,加入时间信息等。
E. 基于item的协同过滤算法是什么意思
电子商务推荐系统的一种主要算法。协同过滤推荐(Collaborative Filtering recommendation)是在信息过滤和专信息系统中正迅速属成为一项很受欢迎的技术。与传统的基于内容过滤直接分析内容进行推荐不同,
F. 怎么样在真实推荐系统中应用矩阵分解算法
里面有自带的LU分解函数,你可在帮助文档搜索 LU 给你一个我自己写的LU分解函数 function [myl,myu,x]=MYLU(A,b) %依据《现代电力系统分析》编制的LU分解程序。 %matlab自带的lu函数与书上所讲略有不同,不方便参照课本步骤进行后续计算。 %A为待分解的矩阵,myl为分解后下三角矩阵,myu为分解后的上三角矩阵,未考虑单独的对角阵D %clc %A=[5,0,0,5,1;2,1,1,0,0;0,1,2,0,10;1,0,5,1,0;1,1,0,3,10] %两组测试用矩阵方程 %b=[1,3,3,4,1]'; %M=[1,2,1,1;2,1,0,0;1,0,1,0;1,0,0,1] %b=[-1,1,2,0]' %A=[2,3,1;3,7,-1;5,-4,2] %b=[12,13,5]' n=length(A); myl=speye(n); %可以先不分配内存,由系统自动分配内存 myu=speye(n); %==============LU分解================ for i=1:n for j=1:n if (i<j) x=0; for k=1:i-1 x=x+myl(i,k)*myu(k,j); end myu(i,j)=(A(i,j)-x)/myl(i,i); end if(i>=j) x=0; for k=1:j-1 x=x+myl(i,k)*myu(k,j); end myl(i,j)=A(i,j)-x; end end end %B=myl*myu %测试LU分解矩阵,B=A表明结果正确 %===============解方程Ax=b================ y=(zeros(1,n))'; x=(zeros(1,n))'; y(1)=b(1)/myl(1,1);%解Ly=b for i=2:n p=0; for k=1:i-1 p=p+myl(i,k)*y(k); end y(i)=(b(i)-p)/myl(i,i); end %C=(myl*y) %测试Ly=b,如果相等表明结果正确 x(n)=y(n); for i=1:n-1 p=0; for k=n-i+1:n p=p+myu(n-i,k)*x(k); end x(n-i)=y(n-i)-p; end %D=myl*myu*x 里面注释部分可以删除
G. 推荐系统 矩阵分解的rmse怎么算
Excel 用Stdev计算均方根误差RMSE和用公式(见附图)计算的结果是一样专的。 公式计算需注意根号属中的分母是n-1而不是n. {1,2,3,4,5}的RMSE用Excel的Stdev计算结果与公式计算结果都是1.581139
H. 在推荐系统中矩阵分解是协同过滤的一种吗
解:∵y=√(x-1)与y=x/2的交点为(2,1)、且y=√(x-1)的定义域为x≥1,
∴原式专=∫(0,2)dx∫(0,x/2)ydy-∫(1,2)dx∫[0,√(x-1)]ydy=(1/2)∫(0,2)x^属2dx-(1/2)∫(1,2)(x-1)dx=(1/6)x^3丨(x=0,2)-(1/2)[(1/2)x^2-x]丨(x=1,2)=13/12。
供参考。
I. 求高手提供matlab基于用户的协同过滤推荐算法的源代码,将不胜感激!!!
自己写吧,我毕论也是做推荐算法的。现在正在写基于用户的协同过滤。已基本完工。
是否可以解决您的问题?
J. 协同过滤推荐算法产生推荐结果要多久
这种形式一般可以按推荐引擎的算法分,主要有基于协同过滤、基于内容推荐等算专法。 “买过属此商品的人,百分之多少还买过其他啥啥商品”:协同过滤item-based filtering “和你兴趣相似的人,还买过其他啥啥商品”:协同过滤 user-based filtering “相关商品推荐”:基于内容推荐content-based “猜你喜欢” 一般混合使用推荐算法。