问题:
我有一个数据集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% 数据来获得预测值。我保存了此数据的副本,其中包含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()
问题是我手动拆分了输入集。我想自动化这个,并为不同的拆分(每次不同的数据)做同样的事情,并获得计算误差的平均值。
我尝试了什么:
我在 StackOverflow 上阅读了有关 R 中交叉验证的信息。我的理解是,它迭代地需要一些 % 的数据用于模型创建,而剩余的数据用于测试。如果我可以在 中使用交叉验证功能nls
,我就不必将输入数据拆分为两个文件。
我已经在 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 的新手。对不起,如果这是一个明显的问题。