我试图在 R 中使用 nnet
作为每月消耗数据的方法来实现train
函数的使用。但是输出(预测值)都显示等于某个平均值。
(每个时间点代表一个月的数据),我使用前 20 个时间点进行训练,其余 4 个用于测试模型。这是我的代码:
a<-read.csv("...",header=TRUE)
tem<-a[,5]
hum<-a[,4]
con<- a[,3]
require(quantmod)
require(nnet)
require(caret)
y<-con
plot(con,type="l")
dat <- data.frame( y, x1=tem, x2=hum)
names(dat) <- c('y','x1','x2')
#Fit model
model <- train(y ~ x1+x2,
dat[1:20,],
method='nnet',
linout=TRUE,
trace = FALSE)
ps <- predict(model2, dat[21:24,])
plot(1:24,y,type="l",col = 2)
lines(1:24,c(y[1:20],ps), col=3,type="o")
legend(5, 70, c("y", "pred"), cex=1.5, fill=2:3)
关于如何替代解决此问题的任何建议?有没有办法更有效地使用神经网络?或者还有其他更好的方法吗?
问题可能是数据不足。 对于任何机器学习问题,24个数据点都相当低。如果数据的曲线/形状/表面是例如一个简单的正弦波,那么 24 就足够了。
但对于任何更复杂的函数,数据越多越好。你能准确地建模,例如 sin^2 x * cos^0.3 x/sinh x 只有 6 个数据点吗?否,因为可用数据没有捕获足够的细节。
如果可以获取每日数据,请改用它。