初めて(不正確/間違い)ガウシアンプロセスを確認しました。具体的には、ナンドデフレイタスによるこのビデオを見ました。メモはここからオンラインで入手できます。
ある時点で、ガウスカーネル(軸の距離の2乗の指数)に基づいて共分散行列を作成することにより生成された多変量法線から、ランダムなサンプルを抽出します。これらのランダムなサンプルは、データが利用可能になると分散が少なくなる以前の滑らかなプロットを形成します。最終的に、目的は、共分散行列を変更して予測し、対象の点での条件付きガウス分布を取得することです。倍
コード全体は、Katherine Baileyによる優れた要約でここから入手できます。これは、Nando de Freitasによるコードリポジトリのクレジットです。便宜上、ここにPythonコードを掲載しました。
(上記のではなく)事前関数から始まり、「調整パラメーター」を導入します。10
プロットを含めて、コードをPythonおよび[R]に翻訳しました。
以下は、[R]の最初のコードチャンクと、テストセットの値の近接性に基づいてガウスカーネルを介して生成された3つのランダム曲線の結果のプロットです。
Rコードの2番目のチャンクはより毛羽立ち、トレーニングデータの4つのポイントをシミュレートすることから始まります。これは、これらのトレーニングデータポイントが存在する領域の周りの可能な(前の)曲線間の広がりを絞り込むのに役立ちます。これらのデータポイントの値のシミュレーションは、関数として行われます。「点の周りの曲線の引き締め」を見ることができます:罪()
Rコードの3番目のチャンクは、値(以下の計算を参照)に対応する平均推定値の曲線(回帰曲線に相当)とそれらの信頼区間のプロットを扱います。μ
質問: 前の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 μ 50K_train
Ch_train
K_trte
# 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
これはどのように作動しますか?
また、上記の「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