Używanie nnet do przewidywania, czy robię to dobrze?

Wciąż jestem całkiem nowy w technikach R i AI / ML. Chciałbym użyć sieci neuronowej do przewidywania, a ponieważ jestem nowy, chciałbym zobaczyć, czy tak powinno się to zrobić.

Jako przypadek testowy, przewiduję wartości sin(), na podstawie dwóch poprzednich wartości. Do treningu tworzę ramkę danych zy = sin(x), x1 = sin(x-1), x2 = sin(x-2), Następnie użyj wzoru y ~ x1 + x2.

Wydaje się, że działa, ale zastanawiam się, czy to jest właściwy sposób, czy jest bardziej idiomatyczny sposób.

Oto kod:

require(quantmod) #for Lag()
requre(nnet)
x <- seq(0, 20, 0.1)
y <- sin(x)
te <- data.frame(y, Lag(y), Lag(y,2))
names(te) <- c("y", "x1", "x2")
p <- nnet(y ~ x1 + x2, data=te, linout=TRUE, size=10)
ps <- predict(p, x1=y)
plot(y, type="l")
lines(ps, col=2)

Dzięki

[edytuj]

Czy to jest lepsze dla połączenia przewidywania?

t2 <- data.frame(sin(x), Lag(sin(x)))
names(t2) <- c("x1", "x2")
vv <- predict(p, t2)
plot(vv)
[7]}myślę, że chciałbym zobaczyć, że nnet rzeczywiście działa patrząc na swoje prognozy (które powinny przybliżać falę grzechu.)
Author: Rob, 2011-10-12

1 answers

Bardzo podoba mi się pakiet caret, ponieważ zapewnia ładny, zunifikowany interfejs do różnych modeli, takich jak nnet. Ponadto automatycznie dostraja hiperparametry (takie jak size i decay) za pomocą walidacji krzyżowej lub ponownego próbkowania bootstrap. Minusem jest to, że całe to ponowne próbkowanie zajmuje trochę czasu.

#Load Packages
require(quantmod) #for Lag()
require(nnet)
require(caret)

#Make toy dataset
y <- sin(seq(0, 20, 0.1))
te <- data.frame(y, x1=Lag(y), x2=Lag(y,2))
names(te) <- c("y", "x1", "x2")

#Fit model
model <- train(y ~ x1 + x2, te, method='nnet', linout=TRUE, trace = FALSE,
                #Grid of tuning parameters to try:
                tuneGrid=expand.grid(.size=c(1,5,10),.decay=c(0,0.001,0.1))) 
ps <- predict(model, te)

#Examine results
model
plot(y)
lines(ps, col=2)

Przewiduje również odpowiednią skalę, dzięki czemu można bezpośrednio porównać wyniki. Jeśli interesują Cię sieci neuronowe, powinieneś również spojrzeć na neuralnet i RSNNS paczki. caret może obecnie dostroić modele nnet i neuralnet, ale nie ma jeszcze interfejsu dla RSNNS.

/ edit: caret ma teraz interfejs dla RSNNS. Okazuje się, że jeśli wyślesz wiadomość e-mail do opiekuna pakietu i poprosisz o dodanie modelu do caret, zazwyczaj to zrobi!

/edit: caret Teraz obsługuje również Bayesowską regularyzację dla sieci neuronowych feed-forward z pakietu brnn. Co więcej, caret teraz znacznie ułatwia określenie własnego custom modele , aby połączyć się z dowolnym pakietem sieci neuronowych, który lubisz!

 43
Author: Zach,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-11 15:37:45