加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 在ALS模型中计算RMSE

发布时间:2020-12-16 08:45:16 所属栏目:安全 来源:网络整理
导读:我想在ALS模型中计算RMSE,我找到这样的代码: val ratings = data.map(_.split(',') match { case Array(user,item,rate) = Rating(user.toLong,item.toInt,rate.toFloat) }) val ratingsDF= ratings.toDF val model = new ALS().setRank(3).setMaxIter(10).
我想在ALS模型中计算RMSE,我找到这样的代码:

val ratings = data.map(_.split(',') match {
      case Array(user,item,rate)
      =>
        Rating(user.toLong,item.toInt,rate.toFloat)
    })

    val ratingsDF= ratings.toDF

    val model = new ALS().setRank(3).setMaxIter(10).fit(ratingsDF)
    val predictions = model.transform(ratingsDF)
    val evaluator = new RegressionEvaluator().setMetricName("rmse").setLabelCol("rating").setPredictionCol("prediction")
    val rmse = evaluator.evaluate(predictions)
    System.out.println("Root-mean-square error = " + rose)

但是,我得到了“NaN”.
我想知道我使用的方法是错误的还是数据本身的问题.
如果代码有问题,计算RMSE的正确方法是什么?
我只找到像这样的方法:

var predictions = model.predict(usersProducts).map { case Rating(user,product,rate) =>        ((user,product),rate)    }
    val ratesAndPreds = ratings.map { case Rating(user,rate) =>      ((user,rate)    }.join(predictions) 
    val rmse= math.sqrt(ratesAndPreds.map { case ((user,(r1,r2)) =>      val err = (r1 - r2)      err * err    }.mean())println(s"RMSE = $rmse")

这不能在这里使用.怎么做?

解决方法

这似乎是一个缺陷.有关更多信息,请查看此Spark JIRA: https://issues.apache.org/jira/browse/SPARK-14489

When building a Spark ML pipeline containing an ALS estimator,the metrics “rmse”,“mse”,“r2” and “mae” all return NaN.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读