2016-06-11 137 views
0

我正在尋找幫助,因爲我一直在這段代碼上停留了一段時間。我想評估我的迴歸模型RMLSE(均方根誤差對數),使用此代碼:RMSLE R中的評估

rmlse <- function(model) { 
    y <- testset$Counts 
    y.pred <- predict(model, testset) 
    return(sqrt(1/nrow(y)*sum((log(y.pred +1)-log(testset$Counts +1))^2))) 
} 

,其中重要的是我的因變量。但是,這隻會產生NaN。數據集中沒有NA。我似乎無法弄清楚錯誤發生在哪裏,如果有人能夠幫助它,我們將非常感謝!

+1

很難說沒有一個可重複的例子。你能分享你的數據集的代碼片段和從這些數據得到的NaN結果的代碼嗎? – ulfelder

+0

計算函數外的所有值並檢查每個錯誤。 –

+1

這可能是因爲您的數據中可能有一些小於-1的值。在這種情況下,'log(yourvalue + 1)'產生'NaN'。 –

回答

1

我覺得你的問題是在哪裏nrow(y)因爲y <- testset$Countsy一個載體,nrow(y)應該返回NULL。看到這個例子:

set.seed(10) 
mydat<-data.frame(a=1:10, b = rnorm(10), c = rpois(10, 1)) 

y<-mydat$a 
nrow(y) 
NULL 

如果更改nrow()length()你應該確定。

model<-lm(a~b+c, data = mydat[1:5,]) 
rmlse <- function(model) { 
    y <- mydat$a 
    y.pred <- predict(model, mydat[6:10,]) 
    return(sqrt(1/length(y)*sum((log(y.pred +1)-log(mydat$a +1))^2))) 
} 

rmlse(model) 
[1] 0.6234257 

但請務必注意yy.pred最終被相同的長度,否則會拋出一個錯誤,因爲我發現了以前。我編輯它運行正確,但我想我會讓你知道。如果它們長度不一樣,你會得到:

Warning message: 
    In log(y.pred + 1) - log(mydat$a + 1) : 
    longer object length is not a multiple of shorter object length 
+0

它現在可以工作!非常感謝您的幫助! – Veraaa