Пример прогнозирования временных рядов с использованием нейронных сетей в R
У кого-нибудь есть короткий краткий учебный пример, как использовать нейронные сети (nnet в R) для целей прогнозирования? Вот пример, в R, временного ряда
T = seq(0,20,length=200)
Y = 1 + 3*cos(4*T+2) +.2*T^2 + rnorm(200)
plot(T,Y,type="l")
Большое спасибо
Дэвид
2 ответа
Я думаю, что вы можете использовать caret
пакет и особенно train
функция
This function sets up a grid of tuning parameters for a number of classification and regression routines.
require(quantmod)
require(nnet)
require(caret)
T = seq(0,20,length=200)
y = 1 + 3*cos(4*T+2) +.2*T^2 + rnorm(200)
dat <- data.frame( y, x1=Lag(y,1), x2=Lag(y,2))
names(dat) <- c('y','x1','x2')
dat <- dat[c(3:200),] #delete first 2 observations
#Fit model
model <- train(y ~ x1+x2 ,
dat,
method='nnet',
linout=TRUE,
trace = FALSE)
ps <- predict(model, dat)
#Examine results
plot(T,Y,type="l",col = 2)
lines(T[-c(1:2)],ps, col=3)
legend(5, 70, c("y", "pred"), cex=1.5, fill=2:3)
Решение, предложенное @agstudy, полезно, но подборка в выборке не является надежным руководством для точности прогнозирования вне выборки. Золотой стандарт в измерении точности прогнозирования - использование отсрочивающей выборки. Удалите последние 5, 10 или 20 наблюдений (в зависимости от длины временного ряда) из обучающей выборки, приведите ваши модели в соответствие с остальными данными, используйте подогнанные модели для прогнозирования выборки несогласных и просто сравните погрешности в несогласных. с использованием средних абсолютных отклонений (MAD) или взвешенных средних абсолютных процентных ошибок (wMAPE). Поэтому для этого вы можете изменить приведенный выше код следующим образом:
require(quantmod)
require(nnet)
require(caret)
t = seq(0,20,length=200)
y = 1 + 3*cos(4*t+2) +.2*t^2 + rnorm(200)
dat <- data.frame( y, x1=Lag(y,1), x2=Lag(y,2))
names(dat) <- c('y','x1','x2')
train_set <- dat[c(3:185),]
test_set <- dat[c(186:200),]
#Fit model
model <- train(y ~ x1+x2 ,
train_set,
method='nnet',
linout=TRUE,
trace = FALSE)
ps <- predict(model, test_set)
#Examine results
plot(T,Y,type="l",col = 2)
lines(T[c(186:200)],ps, col=3)
legend(5, 70, c("y", "pred"), cex=1.5, fill=2:3)
Последние две строки выводят wMAPE прогнозов из модели
sum(abs(ps-test_set["y"]))/sum(test_set)