ALS推荐算法

2019-04-18  本文已影响0人  春田花花z

简要描述:

举例如下:

这是一个损失函数,我的目的就是让这个函数的值最小化,使得我构造的矩阵能够最接近原始矩阵。

ALS算法参数(基于java):

MatrixFactorizationModel model = ALS.train(ratings, rank, iterations,lambda);
  1. ratings:训练集,数据格式:(用户id 物品id 评分 )


    image.png
  2. rank:矩阵分解时对应的低维的维数,即特征向量维数或者说特征数。如果这个值太小拟合的就会不够,误差就很大;如果这个值很大,就会导致模型大泛化能力较差。这个值会影响矩阵分解的性能,越大则算法运行的时间和占用的内存可能会越多。通常需要进行调参,一般可以取10-200之间的数。
  3. iterations:在矩阵分解用交替最小二乘法求解时,进行迭代的最大次数。这个值取决于评分矩阵的维度,以及评分矩阵的系数程度。一般来说,不需要太大,比如5-20次即可。
  4. lambda:正则因子。lambda也是和rank一样的,如果设置很大就可以防止过拟合问题,如果设置很小,其实可以理解为直接设置为0,那么就不会有防止过拟合的功能了;怎么设置呢?可以从0.0001 ,0.0003,0.001,0.003,0.01,0.03,0.1,0.3,1,3,10这样每次大概3倍的设置,先大概看下哪个值效果比较好,然后在那个比较好的值(比如说0.01)前后再设置一个范围,比如(0.003,0.3)之间,间隔设置小点,即0.003,0.005,0.007,0.009,0.011等等等。
  1. 预测用户对物品的评分
predict(int user, int product)
  1. 预测用户集对物品集的评分
predict(JavaPairRDD<Integer, Integer> usersProducts)
  1. 推荐用户k个物品
recommendProducts(final int user, int num)
  1. 对物品推荐k个用户
recommendUsers(final int product, int num)
  1. 对所有用户推荐物品,物品数量取前k个
recommendProductsForUsers(int num)
  1. 对所有物品推荐用户,用户数量取前k个
recommendUsersForProducts(int num)
上一篇 下一篇

猜你喜欢

热点阅读