基于ALS推荐系统

本文介绍了基于Spark的推荐系统实现,重点讲解了协同过滤、相似度计算、ALS算法及其核心代码,包括偏好矩阵处理和模型的保存与加载。推荐系统模型通过ALS算法进行交替最小二乘法迭代,优化偏好矩阵的稀疏性问题,实现用户和物品的精准推荐。
摘要由CSDN通过智能技术生成

推荐系统Spark实现

推荐系统模型是基于协同过滤思想实现

  1. 基于用户的协同过滤(User)
  2. 基于物品的协同过滤(Item)

相关概念

相似度

概念:无论是基于用户还是基于物品的推荐,其本质思想是计算用户和用户之间的相似度,或者计算物品和物品之间相似度,所以我们可以用常见的一些距离来进行衡量,比如欧氏距离,马氏距离,曼哈顿距离等,也可以使用夹角余弦相似度来衡量。目前,主流做法是通过夹角余弦相似度来实现。

  • 基于欧式距离‘
    在这里插入图片描述
  • 基于向量夹角余弦
    在这里插入图片描述
    cosθ = 1完全正相关
    0 < cosθ < 1 一定程度的正相关
    cos90 = 0 没有相关性
    -1 < cosθ < 0 一定程度的负相关
    cosθ = -1 完全负相关

偏好矩阵

在这里插入图片描述
但是生产环境中偏好矩阵往往是稀疏的

在这里插入图片描述
所以需要对空缺值进行处理,不能简单设置为0或者某个特定值,因为会导致最后计算的相似度不够准确,使得最终的推荐系统模型失去价值。所以需要某种算法将空缺值预测出来。
在这里插入图片描述
在这里插入图片描述

ALS算法(交替最小二乘法)

原理:多次迭代,求解一系列最小二乘法回归问题。每一次迭代时,固定(随机生成因子值)某一个因子矩阵,更新另外一个因子矩阵,然后计算误差平方和,如此迭代,直到模型收敛。
ALS只计算已知打分的重构误差

在这里插入图片描述
在这里插入图片描述

核心代码

这是ALS算法类的源码
case class Rating(user: Int, product: Int, rating: Double)
其中Rating是固定的ALS输入格式,它要求是一个元组类型的数据,其中的数值分别为[Int,Int,Double],因此在数据集建立时,用户名和物品名分别用数值代替,而最后的评分没有变化。
在这个类里,ALS.tran方法是最为重要的方法。这个方法有几个重要参数:

  • 1)numBlocks:并行计算的block数(-1为自动配置);
  • 2)rank:对应ALS模型中的因子个数,也就是在低阶近似矩阵中的隐含特征个数。因子个数一般越多越好。但它也会直接影响模型训练和保存时所需的内存开销,尤其是在用户和物品很多的时候。因此实践中该参数常作为训练效果与系统开销之间的调节参数。通常,其合理取值为10到200。
  • 3)iterations:对应运行时的迭代次数。ALS能确保每次迭代都能降低评级矩阵的重建误差,但一般经少数次迭代后ALS模型便已能收敛为一个比较合理的好模型。这样,大部分情况下都没必要迭代太多次(10次左右一般就挺好)
  • 4)lambda:ALS中的正则化参数,控制模型的过拟合情况。其值越高࿰
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值