我试图通过减少相同原始数据上的测试和训练重复之间的均方根误差来确定跨数据集实现的spar的最佳值。我的测试和训练重复样本如下:
Traindataset
t = -0.008 -0.006 -0.004 -0.002 0 0.002 0.004 0.006 0.008 0.01 0.012 0.014 0.016 0.018 0.02 0.022 0.024
dist = NA 0 0 0 0 0.000165038 0.000686934 0.001168098 0.001928885 0.003147262 0.004054971 0.005605361 0.007192645 0.009504648 0.011498809 0.013013655 0.01342625
Testdataset
t = -0.008 -0.006 -0.004 -0.002 0 0.002 0.004 0.006 0.008 0.01 0.012 0.014 0.016 0.018 0.02 0.022 0.024
dist = NA 0 0 0 0 0 0.000481184 0.001306409 0.002590156 0.003328259 0.004429246 0.005012768 0.005829698 0.006567801 0.008030102 0.009617453 0.011202827
我需要样条曲线为5阶,这样我才能准确预测第3阶导数,所以我使用smooth.Pspline(来自pspline包)而不是更常见的smooth.spline。我尝试使用概述here的解决方案的变体(使用来自traindataset的预测testdataset的均方根误差,而不是一个数据集内的交叉验证平方和)。我的代码如下所示:
RMSE <- function(m, o){
sqrt(mean((m - o)^2))
}
Psplinermse <- function(spar){
trainmod <- smooth.Pspline(traindataset$t, traindataset$dist, norder = 5,
spar = spar)
testpreddist <- predict(trainmod,testdataset$t)[,1]
RMSE(testpreddist, testdataset$dist)
}
spars <- seq(0, 1, by = 0.001)
rmsevals <- rep(0, length(spars))
for (i in 1:length(spars)){
rmsevals[i] <- Psplinermse(spars[i])
}
plot(spars, rmsevals, 'l', xlab = 'spar', ylab = 'RMSE' )
我遇到的问题是对于pspline,RMSE的值对于0 graph of spar vs RMSE以上的任何晶石都是相同的。当我挖掘出预测的代码行时,我意识到我得到了与0以上的任何晶石完全相同的dist预测值。任何关于为什么会这样做的想法都非常感激。