私はまだRとAIにかなり慣れていません/ [〜#〜] ml [〜#〜] テクニック。予測にニューラルネットを使用したいのですが、私は新しいので、これがどのように行われるべきかを確認したいと思います。
テストケースとして、以前の2つの値に基づいてsin()
の値を予測しています。トレーニングのために、y = sin(x)
、x1 = sin(x-1)
、x2 = sin(x-2)
を使用してデータフレームを作成し、式y ~ x1 + x2
を使用します。
うまくいくようですが、これが正しい方法なのか、もっと慣用的な方法があるのかと思っています。
これはコードです:
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)
ありがとう
これは予測呼び出しに適していますか?
t2 <- data.frame(sin(x), Lag(sin(x)))
names(t2) <- c("x1", "x2")
vv <- predict(p, t2)
plot(vv)
Nnetがその予測(正弦波に近似しているはずです)を見ることによって実際に機能していることを確認したいと思います。
caret
パッケージは、nnet
などのさまざまなモデルへの優れた統合インターフェースを提供するため、私は本当に気に入っています。さらに、クロス検証またはbootstrapリサンプリング)を使用して、ハイパーパラメータ(size
やdecay
など)を自動的に調整します。欠点は、このすべてが再サンプリングされることです。サンプリングには時間がかかります。
#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)
また、適切なスケールで予測するため、結果を直接比較できます。ニューラルネットワークに興味がある場合は、neuralnet
およびRSNNS
パッケージも確認する必要があります。 caret
は現在nnet
およびneuralnet
モデルを調整できますが、RSNNS
のインターフェイスはまだありません。
/ edit:caret
にRSNNS
のインターフェイスが追加されました。パッケージメンテナに電子メールを送り、モデルをcaret
に追加するように依頼すると、通常はそれを行います。
/ edit:caret
は brnn パッケージからのフィードフォワードニューラルネットワークのベイズ正則化もサポートするようになりました。さらに、キャレットにより、独自の カスタムモデル を指定して、任意のニューラルネットワークパッケージとインターフェイスすることがはるかに簡単になりました!