我想找到通过神经网络计算的预测预测区间(包nnet
)。具体来说,我使用nnetpredInt
R
个library(nnet)
library(nnetpredint)
xtrain <- tdata[,!colnames(tdata) %in% "power"]
ytrain <- tdata$power
train_model <- nnet(x = xtrain, y= ytrain,linout=FALSE, na.action = na.exclude, trace=FALSE,size=4)
yFit = train_model$fitted.values
pred_intervals <- nnetPredInt(train_model, xTrain = xtrain, yTrain = ytrain, newData = dframe)
包计算此类间隔。所以,代码是
Warning messages:
1: In sqrt(varEst) : NaNs produced
2: In qt(alpha/2, df = (nObs - nPara)) : NaNs produced
这会产生以下警告:
NaN
为什么这会导致dput()
?
tdata = structure(list(power = c(1578.209605, 186.636575166667, 1062.07912666667,
1031.481235, 1584.38902166667, 276.973836666667, 401.620463333333,
1622.50827666667, 273.825153333333, 1511.37474333333, 291.460865,
215.138178333333, 247.509348333333, 1140.21383833333, 1680.63441666667,
1742.44168333333, 592.162706166667, 1610.7307, 615.857495, 1664.13551,
464.973065, 1956.2482, 1767.94469333333, 1869.02678333333, 1806.731,
1746.3731, 549.216605, 1425.42390166667, 1900.32575, 1766.18103333333
), temperature = c(28, 28, 27, 31, 32, 32, 30.5, 33, 33, 30,
32, 24, 30, 26, 28, 32, 34, 25, 32, 33, 35, 36, 36, 37, 35, 33,
35, 33, 35, 32), prevday1 = c(252.675878333333, 1578.209605,
186.636575166667, 1062.07912666667, 1031.481235, 1584.38902166667,
276.973836666667, 401.620463333333, 1622.50827666667, 273.825153333333,
1511.37474333333, 291.460865, 215.138178333333, 247.509348333333,
1140.21383833333, 1680.63441666667, 1742.44168333333, 592.162706166667,
1610.7307, 615.857495, 1664.13551, 464.973065, 1956.2482, 1767.94469333333,
1869.02678333333, 1806.731, 1746.3731, 549.216605, 1425.42390166667,
1900.32575), prevday2 = c(250.615931666667, 252.675878333333,
1578.209605, 186.636575166667, 1062.07912666667, 1031.481235,
1584.38902166667, 276.973836666667, 401.620463333333, 1622.50827666667,
273.825153333333, 1511.37474333333, 291.460865, 215.138178333333,
247.509348333333, 1140.21383833333, 1680.63441666667, 1742.44168333333,
592.162706166667, 1610.7307, 615.857495, 1664.13551, 464.973065,
1956.2482, 1767.94469333333, 1869.02678333333, 1806.731, 1746.3731,
549.216605, 1425.42390166667), prev_instant1 = c(455.932271666667,
367.837349666667, 1230.40137333333, 1080.74080166667, 1898.06056666667,
326.103031666667, 302.770571666667, 1859.65283333333, 281.700161666667,
1684.32288333333, 291.448878333333, 214.838578333333, 254.042623333333,
1380.14074333333, 824.437228333333, 1660.46284666667, 268.004111666667,
1715.02763333333, 1853.08503333333, 1821.31845, 1173.91945333333,
1859.87353333333, 1887.67635, 1760.29563333333, 1876.05421666667,
1743.10665, 366.382048333333, 1185.16379, 1713.98534666667, 1746.36006666667
), prev_instant2 = c(242.638122833333, 220.635857, 1784.77271666667,
1195.45020333333, 590.114391666667, 310.141536666667, 1397.3184605,
1747.44398333333, 260.10318, 1521.77355833333, 283.317726666667,
206.678135, 231.428693833333, 235.600631666667, 232.455201666667,
281.422625, 256.470893333333, 1613.82088333333, 1564.34841666667,
1795.03498333333, 1551.64725666667, 1517.69289833333, 1596.66556166667,
2767.82433333333, 2949.38005, 328.691775, 389.83789, 1805.71815333333,
1153.97645666667, 1752.75968333333), prev_2_hour = c(313.393630708333,
263.748829166667, 931.193606666667, 699.399163791667, 754.018962083334,
272.22309625, 595.954508875, 1597.21487208333, 512.64361, 1236.42579666667,
281.200373333334, 196.983981666666, 230.327737625, 525.483920416666,
391.120302791667, 610.101280416667, 247.710625543785, 978.741044166665,
979.658926666667, 1189.25306041667, 814.840889166667, 989.059700416665,
1352.2367025, 1770.20417833333, 1847.11590666667, 843.191556416666,
363.50806625, 904.924465041666, 841.746712500002, 1747.73452958333
)), .Names = c("power", "temperature", "prevday1", "prevday2",
"prev_instant1", "prev_instant2", "prev_2_hour"), row.names = 3:32, class = "data.frame", na.action = structure(1:2, .Names = c("1",
"2"), class = "omit"))
培训和测试数据是:
dframe <- structure(list(temperature = 27, prevday1 = 1607.69296666667,
prevday2 = 1766.18103333333, prev_instant1 = 1717.19306666667,
prev_instant2 = 1577.168915, prev_2_hour = 1370.14983583333), .Names = c("temperature",
"prevday1", "prevday2", "prev_instant1", "prev_instant2", "prev_2_hour"
), class = "data.frame", row.names = c(NA, -1L))
测试数据是:
jndi-name
答案 0 :(得分:1)
问题是你的神经网络有很多参数,超过了训练数据的数量。
如果查看包nnetpredint的源代码,在函数calcSigmaEst(nnetGradient.R)中,您将看到nDegreeFree = nObs - nPara,在您的情况下,此值为负。
如果您设置size = 3来创建模型,则不会在预测区间内获得NaN(无论您是否扩展数据)。