首页 > 解决方案 > 如何在pyspark中使用ALS记录每个纪元RMSE

问题描述

基于 pyspark 的教程。我正在尝试使用以 RMSE 作为评估指标的 pyspark 创建推荐系统。我想记录每个训练时期的 RMSE。但是,当我创建 ALS 对象时输入了纪元数,似乎我只能在训练完成后打印 RMSE 值。请问如何使用 pyspark 中的 ALS 打印每个时代的 RMSE?

https://spark.apache.org/docs/latest/ml-collaborative-filtering.html

标签: pythonpysparkcollaborative-filtering

解决方案


如果没有可重复的示例或数据结构,很难具体说明。因此,我可以从那里向您推荐一些有关 RMSE的信息, 但可能需要更多详细信息:

import pyspark.sql.functions as psf

def compute_RMSE(expected_col, actual_col, group_col):

  rmse = old_df.withColumn("squarederror",
                           psf.pow(psf.col(actual_col) - psf.col(expected_col),
                                   psf.lit(2)
                           ))
  .groupby(group_col)
  .agg(psf.avg(psf.col("squarederror")).alias("mse"))
  .withColumn("rmse", psf.sqrt(psf.col("mse")))

  return(rmse)

你可以这样调用函数(这里的一些细节可能有助于更具体)

compute_RMSE("expectedcol", "realizedcol","epoch")

推荐阅读