我有一個數據集inputAll.data
。我想使用80%的數據作爲模型構建輸入,並在其餘20%的數據上驗證模型。
我已經手動將數據集分成兩個較小的數據集input80.data
和input20.data
分別包含80%和20%的數據。在我的數據集的數據
格式:
Name xvalues yvalues
Prog1 0.654219 59.70282
Prog2 0.149516 49.59548
Prog3 0.50577 50.53859
Prog4 0.77783 59.95499
Prog5 0.237923 49.61133
Prog6 0.756063 50.63021
Prog7 0.015625 53.77959
我現在用的是80%的數據來構建使用nls
非線性迴歸模型。
df = data.frame(input80.data)
yval = df$yvalues
xval = df$xvalues
model1 = nls(formula = yval ~ exp(xval + beta * xval), start = list(beta = 0))
sm1 = summary(model1)
fit1 = fitted.values(model1)
我正在拿剩下的20%數據來獲得預測值。我在另一個名爲input20Actual.data
的文件中保存了包含實際y
值的此數據的副本,但input20.data
僅包含x
值。
dfNew = data.frame(input20.data)
xpred = dfNew$xvalues
dfVerify = data.frame(input20Actual.data)
yverify = dfVerify$yvalues
xverify = dfVerify$xvalues
obtainedPred = predict(model1, data.frame(xvalues = c(xpred)))
我然後使用名爲RMSE
計算預測和實際值之間的誤差的自定義功能。
RMSE <- function(fitted, actual){
sqrt(mean((fitted - actual)^2))
}
誤差計算通過爲各預測值,並將其與我已經存儲在input20Actual.data
的實際值來完成。我將輸出存儲在一個文件中。
sink("ErrorsOut.txt")
cat("\n\nRMSE:\n")
for (i in 1:13) {
#There are 13 values to be predicted in input20.data
corr = obtainedPred[[i]]
act = yverify[[i]]
err = RMSE(act, corr)
cat(err)
cat(" ")
}
cat("\n")
sink()
問題是我已經手動分割輸入集。我想自動執行此操作,並針對不同的拆分(每次不同的數據)執行相同的操作,並獲得計算出的錯誤的平均值。
我試了一下:
我對自己在河交叉驗證閱讀StackOverflow上我的理解是,它需要重複數據的某些%,持續模型的創建和測試剩餘。如果我可以在nls
中使用交叉驗證功能,那麼我不必將輸入數據分成兩個文件。
我已經搜索了很多解決方案。關於交叉驗證的許多答案是lm
。但我特別要求交叉驗證nls
。我也看了一下caret
包,但我試圖安裝它,但大多數的我最終得到包安裝錯誤,類似下面的時間:
Warning: dependency ‘plyr’ is not available
package ‘plyr’ is not available (for R version 3.0.2)
,所以我希望有一個直接的方式在沒有安裝更多軟件包的情況下執行交叉驗證(在rkward中)。 R中是否有函數或API用於迭代創建模型並對其進行測試?
請注意,我是一個完整的新手R.對不起,如果這是一個明顯的問題。
你需要更新你的R.你在版本3.0.2,我們目前在3.3.0。一旦你這樣做了,你就可以安裝''caret''軟件包 –
@CyrusMohammadian但是我用'sudo apt-get install r-base'安裝了R。我只是重複它,它說'r基地已經是最新版本'。 3.3.0版本是什麼軟件包?我使用R與rkward,我已經按照我在這裏看到的步驟:http://www.r-bloggers.com/download-and-install-r-in-ubuntu/ – Kajal
此外,如果我絕對_have_更新這是否意味着無法對此版本本身執行交叉驗證,並且沒有可以直接使用的R中的函數/ API? – Kajal