毕业论文
您现在的位置:  >> 笛资源 >> 正文 >> 正文

大数据培训推荐算法隐语义模型的协同过滤推

来源:笛 时间:2023/2/11

项目采用ALS作为协同过滤算法,根据MongoDB中的用户评分表计算离线的用户商品推荐列表以及商品相似度矩阵。

通过ALS计算商品相似度矩阵,该矩阵用于查询当前商品的相似商品并为实时推荐系统服务。

离线计算的ALS算法,算法最终会为用户、商品分别生成最终的特征矩阵,分别是表示用户特征矩阵的U(mxk)矩阵,每个用户由k个特征描述;表示物品特征矩阵的V(nxk)矩阵,每个物品也由k个特征描述。

V(nxk)表示物品特征矩阵,每一行是一个k维向量,虽然我们并不知道每一个维度的特征意义是什么,但是k个维度的数学向量表示了该行对应商品的特征。

所以,每个商品用V(nxk)每一行的向量表示其特征,于是任意两个商品p:特征向量为,商品q:特征向量为之间的相似度sim(p,q)可以使用和的余弦值来表示:

数据集中任意两个商品间相似度都可以由公式计算得到,商品与商品之间的相似度在一段时间内基本是固定值。最后生成的数据保存到MongoDB的ProductRecs表中。

核心代码如下:

//计算商品相似度矩阵//获取商品的特征矩阵,数据格式RDD[(scala.Int,scala.Array[scala.Double])]valproductFeatures=model.productFeatures.map{case(productId,features)=(productId,newDoubleMatrix(features))}//计算笛卡尔积并过滤合并valproductRecs=productFeatures.cartesian(productFeatures).filter{case(a,b)=a._1!=b._1}.map{case(a,b)=valsimScore=this.consinSim(a._2,b._2)//求余弦相似度(a._1,(b._1,simScore))}.filter(_._2._20.6).groupByKey().map{case(productId,items)=ProductRecs(productId,items.toList.map(x=Re

转载请注明:http://www.0431gb208.com/sjslczl/3580.html