ALS推荐算法理解及Spark编程实现

前言

ALS(alternating least squares)是交替最小二乘的简称,在机器学习上下文中特指基于交替最小二乘求解的协同过滤推荐算法。Spark1.3版本的MLlib库中增加了对ALS算法的支持,因此,在实际项目中可通过Spark的MLlib库调用ALS算法实现协同过滤推荐。

ALS的基本原理

ALS属于SVD++算法中的一种,其理论基础源于SVD(奇异值分解),即任何一个矩阵均可分解成两个酉矩阵与一个对角矩阵的乘积。ALS的基本假设如下:任何一个评分矩阵均可近似分解成两个低维的用户特征矩阵及物品特征矩阵的乘积(矩阵的低秩重构)。矩阵分解过程可理解成将用户和物品均抽象的映射到相同的低维潜在特征空间中。
ALS在协同推荐中主要用于评分预测,那ALS是如何实现评分预测呢?
1)给定初始的“用户-物品”评分矩阵(A表示),将A近似的表示成用户特征矩阵(B表示)和物品特征矩阵(C表示)的乘积,即A=B*C。
2)A矩阵中的值为用户对物品的评分值,即代表用户与物品的相关性,矩阵B中的某一行特征向量与矩阵C中某一列的特征向量乘积,代表相同特征空间中用户和物品的相关性。因此,可以通过矩阵的低秩重构完成对矩阵A中未评分物品的评分预测(一般情况下评分矩阵比较稀疏,即评分矩阵中有大量物品用户未给评分)。
3)算法的核心是如何确定矩阵B和C的值,熟悉机器学习的同学一看就知道,通过迭代训练获取。矩阵B和C的初始值是随机的,优化目标为尽可能的减少矩阵的重构误差,矩阵的重构误差采用均方根误差公式表示(只计算矩阵A中score值存在的项),优化过程采用交替最小二乘求解最优解。

ALS协同推荐算法的理解

ALS算法基于所有用户对物品的已知评分信息,自动总结归纳出用户与物品间存在的潜在关系,同时构建出一个潜在的低维特征空间,将所有的用户和物品均映射到这个潜在特征空间中,从而推断出用户对那些未评分的物品的评分值。

ALS与SVD的区别

1)SVD分解后的矩阵必须是两个酉矩阵与一个对角矩阵,ALS的矩阵分解无此限制。
2)SVD要求分解的矩阵必须是稠密矩阵,ALS可以为稀疏矩阵。

ALS算法的编程实现(python)

from pyspark import SparkContext
from pyspark.mllib.recommendation import ALS
videoScores = (user,item,score) #注意:user和items数据类型必须为int,score必须为float
=======模型训练==========
model = ALS.train(videoScores, rank=10, iterations=10)
=======模型参数验证=======
videotest = videoScores.map(lambda x: (x[0],x[1]))
predictions = model.predictAll(videotest).map(lambda x: ((x[0],x[1]),x[2]))
rateAndPreds = videoScores.map(lambda x:((x[0],x[1]),x[2])).join(predictions)
mes = rateAndPreds.map(lambda x:(x[1][0] - x[1][1])**2).mean()
print(“Mean Squared Error = ” + str(mes))
=======推荐结果==========
result = model.recommendProductsForUsers(300)

你可能感兴趣的:(推荐系统,spark,算法,推荐算法,ALS,SVD)