现在本人急需一套可以实现的Spark ALS协同过滤推荐算法
1条回答 默认 最新
- 西柚与蓝莓 2021-10-05 22:31关注
import org.apache.log4j.{ Level, Logger }
import org.apache.spark.{ SparkConf, SparkContext }
import org.apache.spark.mllib.recommendation.ALS
import org.apache.spark.mllib.recommendation.Rating/**
- Created by Administrator on 2017/7/19.
- /
object ALSTest01 {
def main(args:Array[String]) ={
// 设置运行环境
val conf = new SparkConf().setAppName("ALS 01")
.setMaster("spark://master:7077").setJars(Seq("E:\Intellij\Projects\MachineLearning\MachineLearning.jar"))
val sc = new SparkContext(conf)
Logger.getRootLogger.setLevel(Level.WARN)// 读取样本数据并解析 val dataRDD = sc.textFile("hdfs://master:9000/ml/data/test.data") val ratingRDD = dataRDD.map(_.split(',') match { case Array(user, item, rate) => Rating(user.toInt, item.toInt, rate.toDouble) }) // 拆分成训练集和测试集 val dataParts = ratingRDD.randomSplit(Array(0.8, 0.2)) val trainingRDD = dataParts(0) val testRDD = dataParts(1) // 建立ALS交替最小二乘算法模型并训练 val rank = 10 val numIterations = 10 val alsModel = ALS.train(trainingRDD, rank, numIterations, 0.01) // 预测 val user_product = trainingRDD.map { case Rating(user, product, rate) => (user, product) } val predictions = alsModel.predict(user_product).map { case Rating(user, product, rate) => ((user, product), rate) } val ratesAndPredictions = trainingRDD.map { case Rating(user, product, rate) => ((user, product), rate) }.join(predictions) val MSE = ratesAndPredictions.map { case ((user, product), (r1, r2)) => val err = (r1 - r2) err * err }.mean() println("Mean Squared Error = " + MSE) println("User" + "\t" + "Products" + "\t" + "Rate" + "\t" + "Prediction") ratesAndPredictions.collect.foreach( rating => { println(rating._1._1 + "\t" + rating._1._2 + "\t" + rating._2._1 + "\t" + rating._2._2) } )
}
}
解决 无用评论 打赏 举报
悬赏问题
- ¥15 stata安慰剂检验作图但是真实值不出现在图上
- ¥15 c程序不知道为什么得不到结果
- ¥40 复杂的限制性的商函数处理
- ¥15 程序不包含适用于入口点的静态Main方法
- ¥15 素材场景中光线烘焙后灯光失效
- ¥15 请教一下各位,为什么我这个没有实现模拟点击
- ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
- ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
- ¥20 有关区间dp的问题求解
- ¥15 多电路系统共用电源的串扰问题