时间序列建模:方法“nnet”的“训练”功能没有给出满意的结果

时间:2014-03-04 08:16:29

标签: r neural-network time-series forecasting

我尝试使用train作为每月消费数据的方法在R中使用nnet函数。但是输出(预测值)都显示为等于某个平均值。

我有24个时间点的数据(每个时间点代表一个月的数据),我使用前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)

有关如何替代解决此问题的任何建议?有没有办法更有效地使用神经网络?或者还有其他更好的方法吗?

1 个答案:

答案 0 :(得分:1)

问题可能是数据不足。对于任何机器学习问题,24个数据点都很低。如果数据的曲线/形状/表面是例如简单的正弦波,则24就足够了 但是对于任何更复杂的功能,数据越多越好。你能用6个数据点准确地模拟例如sin ^ 2 x * cos ^ 0.3 x / sinh x吗?不,因为可用数据无法捕获足够的细节 如果您可以获取每日数据,请改用它。