功能介绍

ALS模型训练,得到user和item两个因子矩阵。

参考文献:

  1. explicit feedback: Large-scale Parallel Collaborative Filtering for the Netflix Prize, 2007
  2. implicit feedback: Collaborative Filtering for Implicit Feedback Datasets, 2008

参数说明

名称 中文名称 描述 类型 是否必须? 默认值
rank 因子数 因子数 Integer 10
lambda 正则化系数 正则化系数 Double 0.1
nonnegative 是否约束因子非负 是否约束因子非负 Boolean false
implicitPrefs 是否采用隐式偏好模型 是否采用隐式偏好模型 Boolean false
alpha 隐式偏好模型系数alpha 隐式偏好模型系数alpha Double 40.0
numBlocks 分块数目 分块数目 Integer 1
userCol User列列名 User列列名 String
itemCol Item列列名 Item列列名 String
rateCol 打分列列名 打分列列名 String
numIter 迭代次数 迭代次数,默认为10 Integer 10
userCol User列列名 User列列名 String
itemCol Item列列名 Item列列名 String
predictionCol 预测结果列名 预测结果列名 String

脚本示例

脚本代码

  1. data = np.array([
  2. [1, 1, 0.6],
  3. [2, 2, 0.8],
  4. [2, 3, 0.6],
  5. [4, 1, 0.6],
  6. [4, 2, 0.3],
  7. [4, 3, 0.4],
  8. ])
  9. df_data = pd.DataFrame({
  10. "user": data[:, 0],
  11. "item": data[:, 1],
  12. "rating": data[:, 2],
  13. })
  14. df_data["user"] = df_data["user"].astype('int')
  15. df_data["item"] = df_data["item"].astype('int')
  16. data = dataframeToOperator(df_data, schemaStr='user bigint, item bigint, rating double', op_type='batch')
  17. als = ALS().setUserCol("user").setItemCol("item").setRateCol("rating") \
  18. .setNumIter(10).setRank(10).setLambda(0.01).setPredictionCol("pred_rating")
  19. pred = als.fit(data).transform(data)
  20. pred.print()

脚本运行结果

  1. user item rating pred_rating
  2. 0 1 1 0.6 0.579622
  3. 1 2 2 0.8 0.766851
  4. 2 2 3 0.6 0.581079
  5. 3 4 1 0.6 0.574481
  6. 4 4 2 0.3 0.298500
  7. 5 4 3 0.4 0.382157