2016-04-26 63 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