ALS学习算法

部署运行你感兴趣的模型镜像

一、矩阵分解模型。

用户对物品的打分行为可以表示成一个评分矩阵A(m*n),表示m个用户对n各物品的打分情况。如下图所示:


其中,A(i,j)表示用户user i对物品item j的打分。但是,用户不会对所以物品打分,图中?表示用户没有打分的情况,所以这个矩阵A很多元素都是空的,我们称其为“缺失值(missing value)”。在推荐系统中,我们希望得到用户对所有物品的打分情况,如果用户没有对一个物品打分,那么就需要预测用户是否会对该物品打分,以及会打多少分。这就是所谓的“矩阵补全(填空)”。

ALS 的核心就是下面这个假设:打分矩阵A是近似低秩的。换句话说,一个 的打分矩阵 A 可以用两个小矩阵的乘积来近似:。这样我们就把整个系统的自由度从一下降到了我们接下来就聊聊为什么 ALS 的低秩假设是合理的。世上万千事物,人们的喜好各不相同。但描述一个人的喜好经常是在一个抽象的低维空间上进行的,并不需要把其喜欢的事物一一列出。举个例子,我喜欢看略带黑色幽默的警匪电影,那么大家根据这个描述就知道我大概会喜欢昆汀的《低俗小说》、《落水狗》和韦家辉的《一个字头的诞生》。这些电影都符合我对自己喜好的描述,也就是说他们在这个抽象的低维空间的投影和我的喜好相似。再抽象一些,把人们的喜好和电影的特征都投到这个低维空间,一个人的喜好映射到了一个低维向量,一个电影的特征变成了纬度相同的向量,那么这个人和这个电影的相似度就可以表述成这两个向量之间的内积。 我们把打分理解成相似度,那么“打分矩阵A(m*n)”就可以由“用户喜好特征矩阵U(m*k)”“产品特征矩阵V(n*k)”的乘积来近似了。矩阵U、矩阵V如下图所示:


 

二、交替最小二乘法(ALS)。

矩阵分解模型的损失函数为:

 

有了损失函数之后,下面就开始谈优化方法了,通常的优化方法分为两种:交叉最小二乘法(alternative least squares)和随机梯度下降法(stochastic gradient descent)。本文使用交叉最小二乘法(ALS)来最优化损失函数。算法的思想就是:我们先随机生成然后固定它求解,再固定求解,这样交替进行下去,直到取得最优解min(C)。因为每步迭代都会降低误差,并且误差是有下界的,所以 ALS 一定会收敛。但由于问题是非凸的,ALS 并不保证会收敛到全局最优解。但在实际应用中,ALS 对初始点不是很敏感,是不是全局最优解造成的影响并不大。

算法的执行步骤:

1、先随机生成一个。一般可以取0值或者全局均值。

2、固定(即:认为是已知的常量),来求解

此时,损失函数为:

由于C中只有Vj一个未知变量,因此C的最优化问题转化为最小二乘问题,用最小二乘法求解Vj的最优解:

固定j(j=1,2,......,n),则:C的导数


,得到:


即:


,则:

按照上式依次计算v1,v2,......,vn,从而得到

3、固定(即:认为是已知的量),来求解

此时,损失函数为:

同理,用步骤2中类似的方法,可以计算ui的值:

,得到:


即:


,则:


 

依照上式依次计算u1,u2,......,um,从而得到

4、循环执行步骤2、3,直到损失函数C的值收敛(或者设置一个迭代次数N,迭代执行步骤2、3 N次后停止)。这样,就得到了C最优解对应的矩阵U、V。

 

您可能感兴趣的与本文相关的镜像

AutoGPT

AutoGPT

AI应用

AutoGPT于2023年3月30日由游戏公司Significant Gravitas Ltd.的创始人Toran Bruce Richards发布,AutoGPT是一个AI agent(智能体),也是开源的应用程序,结合了GPT-4和GPT-3.5技术,给定自然语言的目标,它将尝试通过将其分解成子任务,并在自动循环中使用互联网和其他工具来实现这一目标

ALS是交替最小二乘(alternating least squares)的简称,在机器学习中,它特指使用交替最小二乘求解的一个协同推荐算法。该算法通过观察到的所有用户给商品的打分,来推断每个用户的喜好并向用户推荐适合的商品 [^3]。 ALS算法属于User - Item CF,也叫做混合CF,是使用最小二乘法求解的协同过滤算法。它同时考虑了用户和物品两个方面,融合了基于用户的协同过滤推荐算法和基于物品的协同过滤推荐算法,既可以基于用户进行推荐,也可以基于物品进行推荐 [^2]。 ALS算法自2008年以来,是使用较多的协同过滤算法,并且已经集成到Spark的Mllib库中,使用起来非常方便。它能够解决稀疏矩阵分解的问题 [^2][^4]。 在应用方面,很多推荐系统会使用ALS算法。例如,有的推荐系统基于ALS算法中的train方法,将合适的商品推荐给需要的人群,以此提高用户体验和销售额,和京东淘宝的推荐类似 [^1]。 ```python # 以下是一个简单的使用Spark中ALS算法的示例代码 from pyspark.ml.recommendation import ALS from pyspark.sql import SparkSession # 创建SparkSession spark = SparkSession.builder.appName("ALSExample").getOrCreate() # 假设我们有一个包含用户ID、物品ID和评分的DataFrame data = [(0, 0, 5.0), (0, 1, 3.0), (1, 0, 4.0), (1, 1, 2.0)] columns = ["user", "item", "rating"] df = spark.createDataFrame(data, columns) # 初始化ALS模型 als = ALS(rank=10, maxIter=5, regParam=0.01, userCol="user", itemCol="item", ratingCol="rating") # 训练模型 model = als.fit(df) # 进行推荐 userRecs = model.recommendForAllUsers(2) userRecs.show() # 停止SparkSession spark.stop() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值