ガウス過程の事後のシミュレーション


8

初めて(不正確/間違い)ガウシアンプロセスを確認しました。具体的には、ナンドデフレイタスによるこのビデオを見ました。メモはここからオンライン入手できます

ある時点で、ガウスカーネル(軸の距離の2乗の指数)に基づいて共分散行列を作成することにより生成された多変量法線から、ランダムなサンプルを抽出します。これらのランダムなサンプルは、データが利用可能になると分散が少なくなる以前の滑らかなプロットを形成します。最終的に、目的は、共分散行列を変更して予測し、対象の点での条件付きガウス分布を取得することです。10x

ここに画像の説明を入力してください

コード全体は、Katherine Baileyによる優れた要約でここから入手できます。これは、Nando de Freitasによるコードリポジトリのクレジットです。便宜上、ここPythonコードを掲載しました。

(上記のではなく)事前関数から始まり、「調整パラメーター」を導入します。10310

プロットを含めて、コードをPythonおよび[R]に翻訳しました。

以下は、[R]の最初のコードチャンクと、テストセットの値の近接性に基づいてガウスカーネルを介して生成された3つのランダム曲線の結果のプロットです。x

![ここに画像の説明を入力してください

Rコード2番目のチャンクはより毛羽立ち、トレーニングデータの4つのポイントをシミュレートすることから始まります。これは、これらのトレーニングデータポイントが存在する領域の周りの可能な(前の)曲線間の広がりを絞り込むのに役立ちます。これらのデータポイントの値のシミュレーションは、関数として行われます。「点の周りの曲線の引き締め」を見ることができます:ysin()

ここに画像の説明を入力してください

Rコード3番目のチャンクは、値(以下の計算を参照)に対応する平均推定値の曲線(回帰曲線に相当)とそれらの信頼区間のプロットを扱います。μ50 μ

ここに画像の説明を入力してください

質問: 前のGPから後のGPに至るまでの操作について教えてください。

具体的には、平均とsdを取得するために、Rコードのこの部分(2番目のチャンク内)を理解したいと思います。

# Apply the kernel function to our training points (5 points):

K_train = kernel(Xtrain, Xtrain, param)                          #[5 x 5] matrix

Ch_train = chol(K_train + 0.00005 * diag(length(Xtrain)))        #[5 x 5] matrix

# Compute the mean at our test points:

K_trte = kernel(Xtrain, Xtest, param)                            #[5 x 50] matrix
core = solve(Ch_train) %*% K_trte                                #[5 x 50] matrix
temp = solve(Ch_train) %*% ytrain                                #[5 x 1] matrix
mu = t(core) %*% temp                                            #[50 x 1] matrix

2つのカーネル(電車の1(あります)、V。電車()、 、のは、それを呼びましょうそのコレスキー(とは、)、、これ以降すべてのコレスキーのオレンジ色、およびトレインの2番目のもの()v test()、それをと呼び、推定平均を生成しますのためのの動作設定、テストの点は以下のとおりです。A Σ A A L A A A E Σ A E μ 50aaK_trainΣaaCh_trainLaaaeK_trteΣaeμ^50

(Eq.1)μ^=[Laa1[5×5]Σae[5×50]]TLaa1[5×5]ytr[5×1]dimensions=[50×1]
# Compute the standard deviation:

tempor = colSums(core^2)                                          #[50 x 1] matrix

# Notice that all.equal(diag(t(core) %*% core), colSums(core^2)) TRUE

s2 = diag(K_test) - tempor                                        #[50 x 1] matrix
stdv = sqrt(s2)                                                   #[50 x 1] matrix

(Eq.2)var^=diag(Σee)diag[[Laa1[5×5]Σae[5×50]]T[Laa1[5×5]Σae[5×50]]]=d[1111]d[[Laa1[5×5]Σae[5×50]]T[Laa1[5×5]Σae[5×50]]]dimensions=[50×1]

これはどのように作動しますか?

また、上記の「GP事後からの3つのサンプル」プロットの色線(事後GP)の計算も不明確です。テストセットとトレーニングセットのコレスキーが集まって多変量正規値を生成し、最終的に:μ^

Ch_post_gener = chol(K_test + 1e-6 * diag(n) - (t(core) %*% core))
m_prime = matrix(rnorm(n * 3), ncol = 3)
sam = Ch_post_gener %*% m_prime
f_post = as.vector(mu) + sam 

(Eq.3)fpost=μ^+[Lee[50×50][[Laa1[5×5]Σae[5×50]]T[Laa1[5×5]Σae[5×50]]]][N(0,1)[50×3]]dimensions=[50×3]

最後のプロットでは、信頼区間が既知の点で「ピンチ」してはいけませんか?
GeoMatt22

@ GeoMatt22彼らはそうだと思いませんか?
Antoni Parellada 2016

回答:


2

テストセット与えられた場合、期待値は、トレーニングセットのデータポイント与えられたときに、これらの新しいデータポイントの関数の値の条件付き分布を考慮して計算されます。ビデオで公開されているアイデアは、次の形式のと共同分布(講義ではアスタリスク示される)を持つことです。eaae

[ae]N([μaμe],[ΣaaΣaeΣaeTΣee])

多変量ガウス分布条件付きの平均は。今、上記共分散のブロック行列の最初の行であることを考慮するとのためのが、唯一ののための、転置意志行列を調和させるために必要です:E(x1|x2)=μ1+Σ12Σ221(x2μ2)[50×50]Σaa[50×5]Σae

E(e|a)=μe+ΣaeTΣaa1(yμa)
モデルはで計画されているため、式は:μa=μe=0

E(e|a)=ΣaeTΣaa1ytr

コレスキー分解を入力します(これもOPのようにオレンジでコーディングします)。

E(e|a)=ΣaeTΣaa1ytr<α>=ΣaeT(LaaLaaT)1ytr=ΣaeTLaaTLaa1ytr(*)=ΣaeTLaaTLaa1ytr<m>

もし、その後であり、解決できる線形システムになり、得られます。これが元のプレゼンテーションの重要なスライドです。m=Laa1ytrLaam=ytrm


ここに画像の説明を入力してください


以降、式 (*)は、OPの式(1)と同等です。BTAT=(AB)T

μ^=[Laa1[5×5]Σae[5×50]]TLaa1[5×5]ytr[5×1]=(ΣaeTLaaT)(Laa1ytr)dimensions=[50×1]

とすれば

[Laa1[5×5]Σae[5×50]]T=Σae[50×5]TLaa1T[5×5]

多変量ガウスの条件付き分散の式から始めて、同様の推論を分散に適用します。

var(x1|x2)=Σ11Σ12Σ221Σ21

私たちの場合は次のようになります:

varμ^e=ΣeeΣaeTΣaa1Σae=ΣeeΣaeT[LaaLaaT]1Σae=ΣeeΣaeT[Laa1]TLaa1Σae=Σee[Laa1Σae]TLaa1Σae

式(2)に到達します。

varμ^e=d[Kee[Laa1[5×5]Σae[5×50]]T[Laa1[5×5]Σae[5×50]]]dimensions=[50×1]

。我々は、式(3)OPでは、発電の方法であることがわかります後部ランダムカーブ条件データに(トレーニングセット)、および利用3多変量正規乱数を描画を生成するために、コレスキーフォームを

fpost=μ^+[varμ^e][rnorm(0,1)]=μ^+[Lee[50×50][[Laa1[5×5]Σae[5×50]]T[Laa1[5×5]Σae[5×50]]]][rand.norm's[50×3]]dimensions=[50×3]

1
これは本か紙か?共分散行列が非常に悪条件である(ただし、ほぼ依存する(近くの)データポイントを削除またはマージすることなく)倍精度で条件付き平均と分散を計算する堅牢な方法はありますか?ソフトウェアでの多精度は機能しますが、ハードウェアの倍精度に対して2.5〜3桁の速度低下があるため、「低速」の倍精度アルゴリズムでも優れています。コレスキーはそれをカットするとは思わない。共分散行列が非常に悪条件である場合、QRでさえもそうは思わない。標準的なバックソルブを使用すると、精度が必要になるようです。
マークL.ストーン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.