問題:
私はデータセットを持っていinputAll.data
ます。データの 80% をモデル構築の入力として使用し、残りの 20% のデータでモデルを検証したいと考えています。
データセットを 2 つの小さなデータセットに手動で分割し、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% のデータを使用して予測値を取得しています。y
という名前の別のファイルに実際の値を含むこのデータのコピーを保存しましたinput20Actual.data
が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()
問題は、入力セットを手動で分割したことです。これを自動化し、異なる分割 (毎回異なるデータ) に対して同じことを行い、計算されたエラーの平均を取得したいと思います。
私が試したこと:
R のクロス検証について StackOverflow を読みました。私の理解では、モデルの作成にデータの一部を繰り返し使用し、残りをテストに使用するということです。で相互検証関数を使用できる場合nls
、入力データを 2 つのファイルに分割する必要はありません。
SOで解決策をたくさん検索しました。交差検証に関する多くの回答はlm
. しかし、特にクロス検証が必要ですnls
。パッケージについても読みましたcaret
が、インストールしようとしましたが、ほとんどの場合、次のようなパッケージのインストール エラーが発生します。
Warning: dependency ‘plyr’ is not available
package ‘plyr’ is not available (for R version 3.0.2)
したがって、パッケージを追加インストールせずに (rkward で) 相互検証を実行する直接的な方法があることを期待していました。モデルを繰り返し作成してテストするために使用できる R の関数または API はありますか?
私はRの完全な初心者であることに注意してください。これが明らかな質問である場合は申し訳ありません。