4

R で nnet 関数を使用して、2 つの変数 y(a,b) の関数を近似しようとしています。変数 "a" と "b" の両方が固定点で既知です。

a={a(1),a(2),...,a(i),...a(n)} and
b={b(1),b(2),...,b(i),...b(n)}.

「y」関数の値は、各ペア a(i)、b(i) について既知です。つまり、

y(a,b)={y(a(1),b(1)),y(a(2),b(2),...y(a(i),b(i),...y(a(n),b(n)}.

私が作る

res=nnet(y~a+b,size=X,maxit=M,linout=TRUE), 

ここで、X と M は定義されています。

ポイント間の結果の値を取得するにはどうすればよいですか。たとえば、a(i) と a(i+1) の間の a- 値と、b(j) と b(j+ 1) ?

4

1 に答える 1

0

適切な命名の問題のようです。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のを作成します。

  1. df.trainabおよびy.
  2. df.testab.

変数の列の名前は両方で一致する必要があることに注意してください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

ここに画像の説明を入力

于 2013-01-30T20:20:01.183 に答える