spark中ALS介绍

本文深入探讨了Spark Mllib中的协同过滤算法,重点讲解了ALS(交替最小二乘法)算法的优化过程,包括其原理、参数调优以及隐式反馈的应用。通过示例展示了如何在Spark中实现ALS,并通过迭代找到最佳模型。此外,还提到了针对隐式反馈的ALS-WR算法,以适应不同类型的数据反馈。
摘要由CSDN通过智能技术生成

spark里面的调用

//Rmse均方根误差 root mean square error
  //为预测值与实际值的差的平方和与次数的比值的平方根,可以用来评判模型的好坏
  //计算均方根误差,模型 测试集需要格式为RDD[Rating]
  //当然rmse越小越好
  def RmseComputer(model: MatrixFactorizationModel, dataOfTest: RDD[Rating]): Double = {
    //data 测试集为原来的rating随机分割的25% 格式为UserID::MovieID::Rating::Timestamp
    //但模型预测只需要知道user 和 product即可 所以需要map操作转换一下,截取也可用下面的直接用case class
    //截取,但那种太笨了!!!
    //预测返回结果包括user product rating
    val predictResult = model.predict(dataOfTest.map(x => (x.user, x.product)))
    //此步比较复杂,主要是用来将预测值和测试值组成一个map然后比较预测的评分值和实际值
    //最后的格式为 ((user,product),(prediction,actuallValue)).value
    val predJoinTest = predictResult.map(x => ((x.user, x.product), x.rating)).join(dataOfTest.map(x => ((x.user, x.product), x.rating))).values
    //直接调用库函数需要传入一个(prediction,actuallValue)
    val evalutor = new RegressionMetrics(predJoinTest)
    evalutor.meanAbsoluteError
  }

 

//多重迭代法求最佳参数模型
    //迭代次数
    val numIters = List(10, 20)

    //隐含因子
    val numRanks = List(8, 12)

    //惩罚值
    val numLambdas = List(0.1, 10.0)

    // Initial variable random value
    //need set var because iteration so can  variable
    var bestModel: Option[MatrixFactorizationModel] = None
    var bestRanks = -1
    var bestIters = 0
    var bestLambdas = -1.0
    var bestRmse = Double.MaxValue

    //共2*2*2种组合,每种组合迭代次数又不一样,所以在此会消耗大量时间
    for (rank <- numRanks; iter <- numIters; lambdas <- numLambdas) {
      //als参数为 训练集合 隐含因子 迭代次数 惩罚因子
      val model = ALS.train(trainingSetOfRatingsData, rank, iter, lambdas)
      val validationRmse = RmseComputer(model, testSetOfRatingData)
      //类似与梯度下降,逐步迭代
      if (validationRmse < bestRmse) {
        //model 为option类型
        bestModel = Some(model)
        bestRmse = validationRmse
        bestIters = iter
        bestLambdas = lambdas
        bestRanks = rank
      }
    }
 <

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值