適切な命名の問題のようです。data.frame
誤解を避けるために s を使用することをお勧めします。
library(nnet)
X <- 20 # Number of neurons in hidden layer
M <- 1e4 # Maximum number of iterations
N <- 50 # Length of data vectors
set.seed(1)
## Train set
df.train <- data.frame(a=rnorm(N,5,1), b=rnorm(N,10,2))
df.train$y <- with(df.train, 5*a-2*b+rnorm(N))
## Test set for interpolation
a1 <- sapply(2:N, function(i) with(df.train, (a[i]+a[i-1])/2))
b1 <- sapply(2:N, function(i) with(df.train, (b[i]+b[i-1])/2))
df.test <- data.frame(a=a1, b=b1)
上記のコードは 2 つdata.frame
のを作成します。
df.train
列a
、b
およびy
.
df.test
列a
とb
.
変数の列の名前は両方で一致する必要があることに注意してくださいdata.frame
。
トレーニング:
res <- nnet(y~a+b, data=df.train, size=X, maxit=M, linout=TRUE)
p1 <- predict(res, df.train)
これp1
がトレーニングデータの予測です。
補間:
p2 <- predict(res, df.test)
視覚的には、補間は非常に自然に見えます。
library(ggplot2)
ggplot() +
geom_line(aes(x,y), data=data.frame(x=1:N, y=df.train$y)) + # original y
geom_point(aes(x,y), data=data.frame(x=1.5:N, y=p2), colour="red") # interpolations
