11.5.5 协同过滤与推荐

协同过滤是一种根据用户对各种产品的交互与评分来推荐新产品的推荐系统技术。

协同过滤吸引人的地方就在于它只需要输入一系列用户 / 产品的交互记录:
无论是“显式”的交互(例如在购物网站上进行评分)还是“隐式”的(例如用户访问了一个产品的页面但是没有对产品评分)交互皆可。

仅仅根据这些交互,协同过滤算法就能够知道哪些产品之间比较相似(因为相同的用户与它们发生了交互)以及哪些用户之间比较相似,然后就可以作出新的推荐。

交替最小二乘

MLlib 中包含交替最小二乘(简称 ALS)的一个实现,这是一个协同过滤的常用算法,可以很好地扩展到集群上。
它位于 mllib.recommendation.ALS 类中。

ALS 会为每个用户和产品设一个特征向量,这样用户向量与产品向量的点积就接近于他们的得分。
它接收下面所列这些参数。

要使用 ALS 算法,你需要有一个由 mllib.recommendation.Rating 对象组成的 RDD,其中每个包含一个用户 ID、一个产品 ID 和一个评分(要么是显式的评分,要么是隐式反馈)。

ALS 返回一个 MatrixFactorizationModel 对象来表示结果,可以调用 predict() 来对一个由(userID, productID) 对组成的 RDD 进行预测评分。
也可以使用 model.recommendProducts userId, numProducts) 来为一个给定用户找到最值得推荐的前 numProduct 个产品。

ALS 有两个变种:

代码示例