Spark ml 中 ALS 的意外关键字参数“coldStartStrategy”

Posted

技术标签:

【中文标题】Spark ml 中 ALS 的意外关键字参数“coldStartStrategy”【英文标题】:unexpected keyword argument 'coldStartStrategy' for ALS in Spark ml 【发布时间】:2017-06-11 00:21:43 【问题描述】:

我发现了一些帖子,用户想知道为什么他们在使用 ALS 时会在预测中收到 NaN 值。我遇到了同样的问题,似乎找到了答案和实施的解决方案,并在文档中进行了详细讨论:

注意:这里有一个指向coldStartStrategy() 文档的工作链接,但似乎由于我的问题,文档已被删除。

我认为这可以解决问题。除非更新到 Spark 2.1.1(不能在 2.1.0 上运行),否则我仍然会收到同样的错误:

TypeError: init() 得到了一个意外的关键字参数“coldStartStrategy”

这是我尝试使用该参数的地方:

full_train, full_test = ugr_df.randomSplit([0.7, 0.3], seed=0L)
als = ALS(rank = rank, maxIter = maxIter, regParam = lmbda, 
          userCol = "user_id", itemCol="game_id", seed = seed, 
          ratingCol="rating", coldStartStrategy="drop")
optimized_model = als.fit(full_train)

我是这样导入ALS的:

from pyspark.ml.recommendation import ALS

当我取出冷启动参数时,我的代码运行良好。从我在文档中看到的内容来看,我正在正确实施它。

参数不能正常工作是否有原因?

如果我不使用它,我可以安全地执行以下操作以获得相同的效果吗?即以下代码是否与 coldStartStrategy 参数同义?

predictions = optimized_model.transform(full_test)
predictions_drop = predictions.dropna()

然后继续使用predictions_drop df 进行回归分析。

【问题讨论】:

【参考方案1】:

coldStartStrategy 已在 Spark 2.2 中与 SPARK-14489 一起引入,但尚未发布:

Corresponding JIRA ticket。 GitHub PR。

如果您想使用它,您必须从源代码构建 Spark 或使用开发人员构建。

调用na.drop应该和使用drop策略效果一样,internally it is implemented as:

case ALSModel.Drop =>
  predictions.na.drop("all", Seq($(predictionCol)))

【讨论】:

以上是关于Spark ml 中 ALS 的意外关键字参数“coldStartStrategy”的主要内容,如果未能解决你的问题,请参考以下文章

基于Spark的Als算法+自迭代+Spark2.0新写法

深入理解Spark ML:基于ALS矩阵分解的协同过滤算法与源码分析

pyspark ml 推荐 - Als 推荐

通过 pyspark.ml.tuning.TrainValidationSplit 调整后如何获得最佳参数?

通过 pyspark.ml CrossValidator 调整隐式 pyspark.ml ALS 矩阵分解模型的参数

Spark:测量 ALS 的性能