您好,欢迎来到独旅网。
搜索
您的当前位置:首页协同过滤(CF)算法(基于spark)

协同过滤(CF)算法(基于spark)

来源:独旅网
协同过滤(CF)算法(基于spark)

协同过滤(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

本站由北京市万商天勤律师事务所王兴未律师提供法律服务