首页 > 代码库 > MLlib-协同过滤

MLlib-协同过滤

  • 协同过滤
    • 显示vs隐式反馈
    • 参数调整
  • 实例
  • 教程

 

协同过滤

协同过滤是推荐系统的常用方法。可以填充user-item相关矩阵中的缺失值。MLlib支持基于模型的协同过滤,即使用能够预测缺失值的一个隐藏因素集合来表示用户和产品。MLlib使用交替做小二乘法(alternating least squares, ALS)学习隐藏因子。MLlib算法中的参数如下:

  • numBlocks   并行计算的block数(-1为自动配置)
  • rank   模型中隐藏因子数
  • iterations   算法迭代次数
  • lambda  ALS中的正则化参数
  • implicitPrefs  使用显示反馈ALS变量或隐式反馈
  • alpha   ALS隐式反馈变化率用于控制 the baseline confidence in preference observations

 

显示vs隐式fankui

基于矩阵分解的协同过滤的标准方法一般将用户商品矩阵中的元素作为用户对商品的显性偏好。

真实的案例中通常只有隐式反馈(例如,查看,点击,购买,喜欢,分享等)。MLlib中处理此类数据的方法来自于Collaborative Filtering for Implicit Feedback Datasets。 本质上,这个方法将数据作为二元偏好值和偏好强度的一个结合,而不是对评分矩阵直接进行建模。因此,评价就不是与用户对商品的显性评分而是和所观察到的用户偏好强度关联了起来。然后,这个模型将尝试找到隐语义因子来预估一个用户对一个商品的偏好。

 

参数调整

 V1.1以来, 在结局每个最小二乘问题中通过调整lambda参数来控制更新用户因子时的用户产生比例或在更新物品因子时接收物品的比例。 这种方法叫做“ALS-WR”,来自论文“Large-Scale Parallel Collaborative Filtering for the Netflix Prize”。他使lambda对数据规模的依赖更小。所以,这里使用从抽样数据中学到的最优参数去填充应用到整个数据集并期盼会有类似表现。

实例

 例子中,使用打分数据,每一行包括:用户,产品和打分。使用默认的ALS.train()方法,假定打分是显示的。使用打分预测的错误率军方法来评价推荐模型。(注:这里只调研了scala)

 

 

 

如果打分矩阵是从其他源信息得到的,可以使用 trainImplicit 方法得到更好的结果。

 

 

请参照Self-Contained Applications运行上面的例子。确保build文件中包含spark-mllib依赖。

 

教程

 The training exercises from the Spark Summit 2014 include a hands-on tutorial for personalized movie recommendation with MLlib.

MLlib-协同过滤