Graphx源码解析之SVD++算法

本文详细探讨了Spark GraphX中的SVD++算法,主要依据《netflix/kdd08koren.pdf》论文,算法核心公式涉及用户、物品的评分预测。通过构建有向图,并对图进行迭代更新,不断优化预测评分。在迭代过程中,利用随机梯度下降方法调整参数,以减小误差。最后,通过评测指标如误差变化趋势,调整算法参数以提高预测准确性。
摘要由CSDN通过智能技术生成

Spark Graphx中SVD++算法主要是参考论文:
http://public.research.att.com/~volinsky/netflix/kdd08koren.pdf,
核心计算公式为:rui = u + bu + bi + qi*(pu + |N(u)|^^-0.5^^*sum(y))
输入
输入:user,item,score

1,1,5.0
1,2,1.0
1,3,5.0
1,4,1.0
2,1,5.0
2,2,1.0
2,3,5.0
2,4,1.0
3,1,1.0
3,2,5.0
3,3,1.0
3,4,5.0
4,1,1.0
4,2,5.0
4,3,1.0
4,4,5.0

根据需要,图主要分为有向图与无向图两种。由于起点与终点代表着不同的含义,选择有向图作为研究的主体。为了便于区分起点与终点,在数据录入之前起点ID乘2,终点ID乘2加1

Edge(uid.toString.toLong * 2, live_uid.toString.toLong * 2 + 1,score.toString.toDouble)

参数

class Conf(
              var rank: Int,//向量维数
              var maxIters: Int,//迭代次数
              var minVal: Double,//最小值
              var maxVal: Double,//最大值
              var gamma1: Double,//衰减系数
              var gamma2: Double,//衰减系数
              var gamma6: Double,//衰减系数
              var gamma7: Double)//衰减系数
    extends Serializable

算法输入 输出

run(edges: RDD[Edge[Double]], conf: Conf)
  : (Graph[(Array[Double], Array[Double], Double, Double), Double], Double)

计算平均评分

//rs  评分之和
//rc  记录总数
val (rs, rc) = edges.map(e => (e.attr, 1L)).reduce((a, b) => (a._1 + b._1, a._2 + b._2))
//平均评分
val u = rs / rc

组成图

Graph.fromEdges(edges, defaultF(conf.rank)).cache()

defaultF根据rank值随机生成feature向量,看下defaultF方法

def defaultF(rank: Int): (Array[Double], Array[Double], Double, Double) = {
      // TODO: use a fixed random seed
      val v1 = Array.fill(rank)(Random.nextDouble())
      val v2 = Array.fill(rank)(Random.nextDouble())
      (v1, v2, 0.0, 0.0)
    }

计算SUM和根号值

 //顶点  顶点出现的次数   评分总和
    val t0: VertexRDD[(VertexId, Double)] = g.aggregateMessages[(VertexId, Double)](ctx => {
      ctx.sendToSrc((1L, ctx
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值