0

モデル y=f(x,z,a) があります。そのモデルを最適化したい (最終的には制約を受ける)。R の数値オプティマイザーは、勾配関数があるとはるかに高速になります。しかし、モデルをノンパラメトリックに適合させたので、勾配を分析的に簡単に取得できません。適合モデルから勾配関数を取得する方法はありますか?

ここにいくつかのダミーコードがあります:

変数を定義します。

x = runif(1000)*10-5
z = runif(1000)*10-5
a = runif(1000)*10-5
y = x^2+a^2+z^2 + (x*z)^2 (x*a)^2 +rnorm(1000)

モデルを適合させる:

library(mgcv)
m = gam(y~s(a)+te(a,z)+te(x,z))
summary(m)
par(mfrow=c(1,3))
plot(m,scheme=2)

最小化して最小の y を取得します。

f = function(par){
    predict(m,newdata = data.frame(x=par[1],z=par[2],a=par[3]))
    }

o = optim(par=c(0,0,0),fn=f)

定義できるように、グラデーション オブジェクトが必要です。

g = function(par){
    predict(MY.HYPOTHETICAL.GRADIENT.OBJECT,newdata = data.frame(x=par[1],z=par[2],a=par[3]))
    }

そして実行します

o = optim(par=c(0,0,0),fn=f,gr=g,method="BFGS")

...大量のデータと複雑なモデルと目的関数を考えると、これははるかに高速になります。

私がやりたいことは可能ですか?

4

0 に答える 0