它看起来像正确的命名问题。我建议使用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)
上面的代码创建了两个data.frame
s:
df.train
与列a
,b
和y
.
df.test
与列a
和b
。
请注意,变量的列名称应在两个data.frame
s.
训练:
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
