2016-04-26 54 views
0

我需要用于计算使用Seq[Seq[(Double,Double)]]作为输入均方根误差创建一个简单函数均方误差:创建用于计算根的简单函数使用数据Seq [SEQ [(双,双]]

这是我尝试:

val getRMSE: (Seq[Seq[(Double, Double)]]) => Double = { 
    (predictions) => 
     val mse = predictions 
     .map { 
      case (rating, prediction) => 
      val err = rating-prediction 
      err*err 
     }.mean() 
     math.sqrt(mse) 
    } 

的问题是如何与err*errrating-prediction解决编译错误它说:“无法解析符号*”

+0

你的问题是什么? –

+0

@原型保罗:谢谢你的注意。我不小心删除了这个问题本身:)看到我的更新。 – Klue

+0

嗯。 Tha不是我得到的错误。 '预测'是一个[Seq [Seq [(Double,Double)]。因此,地图的每个元素都是一个“Seq [(Double,Double)]”,并且不符合“(Double,Double)”的情况。所以代码的逻辑有点困惑... –

回答

0

类型的predictions的是实际工作中。 y Seq[Seq[(Double, Double)]]。所以当你打电话给map时,你必须提供一个参数类型为Seq[(Double, Double)]的函数,但是你传递的函数是(Double, Double)

case (rating, prediction) 

是错误的,将其更改为

case seqOfPairs: Seq[(Double, Double)] //actually ((Double, Double) is erased in compile time) 

我希望这将让你以正确的方式。

+0

好的,谢谢。这是我根据你的答案写的,但是我仍然无法弄清楚如何添加“mean”。现在它被红色标记为:'val mse = output .map { case seqOfPairs:Seq [(Double,Double)] => val err = seqOfPairs.map(p => math.abs(p._1 - p._2))。sum err * err } .mean math.sqrt(mse)' – Klue

+0

另外,您的'mean'定义在哪里? – ka4eli

+0

如何正确添加“mean”?我现在将它添加到'seqOfPairs.map {}末尾。意思是' – Klue