Donnerstag, April 9, 2020

Mit nnet für die Vorhersage mache ich es richtig?

Ich bin noch ziemlich neu in R und AI /ML Techniken. Ich möchte eine neuronales Netz für die Vorhersage, und da ich neu bin möchte ich nur um zu sehen, ob dies ist, wie es getan werden sollte.

Als Testfall, ich bin Vorhersage der Werte von sin(), basierend auf 2 vorherigen Werte. Für das training erstelle ich eine Daten-frame mity = sin(x), x1 = sin(x-1), x2 = sin(x-2), dann verwenden Sie die Formel y ~ x1 + x2.

Scheint es zu funktionieren, aber ich Frage mich nur, ob dies der richtige Weg, es zu tun, oder wenn es mehr idiomatische Weise.

Dies ist der code:

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)

Dank

[Bearbeiten]

Ist dies besser für die Vorhersagen nennen?

t2 <- data.frame(sin(x), Lag(sin(x)))
names(t2) <- c("x1", "x2")
vv <- predict(p, t2)
plot(vv)

Ich glaube, ich würde gerne sehen, dass die nnet tatsächlich funktioniert, suchen Sie in seine Vorhersagen (die sollte ungefähr eine Sünde Welle.)

Kommentare dem Thema
Die predict() – Aufruf sieht verdächtig aus. Sie sind nicht nur die Vorhersage “ y “ mit „y“? Auf der anderen Seite könnte es scheitern, tatsächlich liefert newdata, da es nicht ein dataframe. So würden Sie nur „Vorhersage“ mit der verzögerten Werte in ‚te‘. Könnte man auf erweitern zu vermeiden benötigen „pkg:quantmod“ Kommentarautor: 42-
ich habe ein besseres Beispiel für die Vorhersage, denken Sie, wäre eigentlich die Verwendung der nnet-Modell? es scheint eine Sünde, wenn geplottet Kommentarautor: dizzy
Sie können überprüfen, durch auftragen der Vorlage auf der gleichen Skala wie die prognostizierte: plot(x, vv); lines(x, y), und Sie sehen, es ist ein lag (was es scheint, Sie erwarten.) Kommentarautor: 42-
Ein Beispiel in hier über R + DNN für besser zu verstehen. Kommentarautor: Patric

InformationsquelleAutor der Frage dizzy | 2011-10-12

1 Kommentar

  1. 43

    Ich mag die caret – Paket, da gibt es eine schöne, einheitliche Schnittstelle zu einer Vielzahl von Modellen, wie nnet. Darüber hinaus wird es automatisch tunes hyperparameters (wie size und decay) mit cross-validation-oder bootstrap-re-sampling. Der Nachteil ist, dass alle diese re-sampling dauert einige Zeit.

    #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)

    Es sieht auch auf den richtigen Maßstab, so können Sie direkt vergleichen Sie die Ergebnisse. Wenn Sie interessiert sind, in neuronalen Netzen, sollten Sie auch einen Blick auf die neuralnet und RSNNS Pakete. caret können derzeit Melodie nnet und neuralnet Modelle, aber noch nicht über eine Schnittstelle für RSNNS.

    /edit: caret hat jetzt eine Schnittstelle für RSNNS. Es stellt sich heraus, wenn Sie per E-Mail die Paket-maintainer und darum bitten, dass ein Modell Hinzugefügt werden, um caret er wird in der Regel tun Sie es!

    /edit: caret unterstützt nun auch die Bayesianische Regularisierung für feed-forward neuronale Netze aus der brnn Paket. Darüber hinaus caret-jetzt macht es auch viel einfacher können Sie Ihre eigenen custom-Modelle, um eine Schnittstelle mit jeder neuronalen-Netzwerk-Paket, das Sie mögen!

    InformationsquelleAutor der Antwort Zach

Kostenlose Online-Tests