协同过滤(CF)是⼀种推荐算法,spark中采⽤的是矩阵分解求ALS(alternating least squares交替最⼩⼆乘)的实现。spark推荐算法在org.apache.spark.mllib.recommendation包下,共有三个类:
Rating:
封装⽤户id,物品id,评分的数据结构,没有其他接⼝。
new Rating(user: Int, product: Int, rating: Double)
ALS:
根据输⼊的RDD[Rating]数据和配置的参数训练模型。具体参数如下:
1) ratings : 评分矩阵对应的RDD。需要我们输⼊。如果是隐式反馈,则是评分矩阵对应的隐式反馈矩阵。
2) rank : 矩阵分解时对应的低维的维数。这个值越⼤则算法运⾏的时间和占⽤的内存越多。通常需要进⾏调参,⼀般可以取10-200之间的数。3) iterations :在矩阵分解⽤交替最⼩⼆乘法求解时,进⾏迭代的最⼤次数。⼀般来说,不需要太⼤,⽐如5-20次即可。默认值是10。
4) lambda: 这个值即为FunkSVD分解时对应的正则化系数。主要⽤于控制模型的拟合程度,增强模型泛化能⼒。取值越⼤,则正则化惩罚越强。⼤型推荐系统⼀般需要调参得到合适的值。5) alpha : 这个参数仅仅在使⽤隐式反馈trainImplicit时有⽤。指定了隐式反馈信⼼阈值,这个值越⼤则越认为⽤户和他没有评分的物品之间没有关联。⼀般需要调参得到合适值。
MatrixFactorizationModel:
最终模型,包含预测和推荐的⼀些常⽤⽅法。
//计算usersProducts中每个(user, product)的评分predict(usersProducts: RDD[(Int, Int)]): RDD[Rating]//计算user⽤户对product的评分
predict(user: Int, product: Int): Double
//为user推荐num个产品
recommendProducts(user: Int, num: Int): Array[Rating]//把product推荐给num个⽤户
recommendUsers(product: Int, num: Int): Array[Rating]
//为每个⽤户进⾏推荐,每⽤户推荐num个产品
recommendProductsForUsers(num: Int): RDD[(Int, Array[Rating])]//推荐每个产品,将每个产品推荐给num个⽤户
recommendUsersForProducts(num: Int): RDD[(Int, Array[Rating])]
val rank: Int //此模型特征维度
val productFeatures: RDD[(Int, Array[Double])] //RDD[(产品, 产品特征数组)]val userFeatures: RDD[(Int, Array[Double])] //RDD[(⽤户, ⽤户特征数组)]
关于矩阵分解的相关数学基础知识,参考:
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- dcrkj.com 版权所有 赣ICP备2024042791号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务