电影推荐系统-[离线推荐部分](二)写代码(2)训练ALS(Alternatingleast squares)-交替最小二乘法模型

 //3.训练ALS(Alternatingleast squares)-交替最小二乘法模型
    /**
      * ALS模型需要4个参数
      * 1)trainData-训练数据(训练集):Rating对象的RDD,包含用户ID、物品ID,偏好值
      * 2)Rank-特征维度(特征值,它越大越好):50
      * 3)Iterations-迭代次数(也是越大越好):5次(根据自己的算力和用户需求来设置)
      * 4)Lambda-防过拟合参数(跨度):0.01
      */
     //1)构建训练数据集
     //下面这行中的Rating是Spark Mllib里面提供的-包含三种数据如下:
     // userId-用户ID、product-物品ID、rating-偏好值(他们三个统一在一起就成为Rating)
    val trainData=ratingRDD.map(x=>Rating(x._1,x._2,x._3))

//    val rank=50 //定义维度
//    val iterations=5 //定义迭代次数
//    val lambna=0.01 //设置跨度
     //如果有多个数据,建议用元组的方式将他们钉在一起
    val(rank,iteration,lambna)=(50,5,0.01) //这样更方便
    val model= ALS.train(trainData,rank,iteration,lambna)

     //2)计算用户推荐矩阵-仅包含第一列内容(所有的用户名)
    val userRDD=ratingRDD.map(_._1).distinct().cache()
      //将 含有所有用户名的表 和 电影表 做笛卡儿积
    val userMovies=userRDD.cartesian(movieRDD.distinct())
      //连带模型和做好笛卡儿积之后的表得出预测数据
    val preRatings=model.predict(userMovies)

 

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3