Untuk pertama kalinya (alasan ketidaktepatan / kesalahan) saya melihat proses Gaussian , dan lebih khusus lagi, menonton video ini oleh Nando de Freitas . Catatan tersedia online di sini .
Pada titik tertentu ia menggambar sampel acak dari normal multivariat yang dihasilkan dengan membuat matriks kovarians berdasarkan pada kernel Gaussian (eksponensial jarak kuadrat dalam sumbu ). Sampel acak ini membentuk plot halus sebelumnya yang menjadi kurang tersebar saat data tersedia. Pada akhirnya, tujuannya adalah untuk memprediksi dengan memodifikasi matriks kovarians, dan mendapatkan distribusi Gaussian bersyarat pada titik yang diinginkan.
Seluruh kode tersedia pada ringkasan yang sangat baik oleh Katherine Bailey di sini , yang pada gilirannya akan memberikan repositori kode oleh Nando de Freitas di sini . Saya telah mempostingnya kode Python di sini untuk kenyamanan.
Ini dimulai dengan (bukan atas) fungsi sebelumnya, dan memperkenalkan "parameter tuning".
Saya telah menerjemahkan kode ke Python dan [R] , termasuk plot:
Berikut adalah potongan kode pertama dalam [R] dan plot yang dihasilkan dari tiga kurva acak yang dihasilkan melalui kernel Gaussian berdasarkan kedekatan pada nilai dalam set tes:
The potongan kedua kode R adalah hairier, dan dimulai dengan mensimulasikan empat poin data pelatihan, yang pada akhirnya akan membantu mempersempit penyebaran di antara kemungkinan kurva (sebelum) sekitar wilayah di mana titik data pelatihan tersebut berbohong. Simulasi nilai untuk titik data ini adalah sebagai fungsi . Kita bisa melihat "pengetatan kurva di sekitar titik":
The potongan ketiga kode R penawaran dengan memplot kurva rata nilai estimasi (setara dengan kurva regresi), sesuai dengan nilai-nilai (lihat perhitungan di bawah ini), dan interval kepercayaan mereka:
PERTANYAAN: Saya ingin meminta penjelasan tentang operasi yang terjadi ketika pergi dari GP sebelumnya ke posterior.
Secara khusus, saya ingin memahami bagian ini dari kode R (dalam potongan kedua) untuk mendapatkan sarana dan sd:
# 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
Ada dua kernel (satu kereta ( ) v. Kereta ( ),, sebut saja , dengan Cholesky ( ), , mewarnai oranye semua Cholesky dari sini, dan yang kedua dari kereta ( ) v test ( ),, sebut saja ), dan untuk menghasilkan estimasi cara untuk poin dalam set pengujian, operasinya adalah:K_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
Bagaimana cara kerjanya?
Juga tidak jelas, apakah perhitungan untuk garis warna (Posterior GP) di plot " Tiga sampel dari posterior GP " di atas, di mana Cholesky dari set pengujian dan pelatihan tampaknya bersatu untuk menghasilkan nilai normal multivariat, akhirnya ditambahkan ke :
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
sumber
Jawaban:
Ketika diberikan satu set tes, , nilai-nilai yang diharapkan akan dihitung dengan mempertimbangkan distribusi kondisional dari nilai fungsi untuk titik-titik data baru ini, mengingat titik-titik data dalam set pelatihan, . Gagasan yang diungkapkan dalam video adalah bahwa kita akan memiliki distribusi bersama dan (dalam ceramah yang dilambangkan dengan tanda bintang, ) dari bentuk:e a a e ∗
The bersyarat dari distribusi Gaussian multivariat memiliki mean . Sekarang, mengingat bahwa baris pertama dari matriks blok kovariansi di atas adalah untuk , tetapi hanya untuk , wasiat yang dialihkan diperlukan untuk membuat matriks kongruen di:E(x1|x2)=μ1+Σ12Σ−122(x2−μ2) [50×50] Σaa [50×5] Σae
Masukkan dekomposisi Cholesky (yang lagi-lagi saya akan kode oranye seperti di OP):
Jika , maka , dan kita berakhir dengan sistem linear yang dapat kita selesaikan, memperoleh . Inilah slide kunci dalam presentasi asli:m=Laa−1ytr Laam=ytr m
Karena , Persamaan. (*) adalah setara dengan persamaan (1) dalam OP:BTAT=(AB)T
mengingat bahwa
Alasan yang serupa akan diterapkan pada varians, dimulai dengan rumus untuk varian bersyarat dalam Gaussian multivarian:
yang dalam kasus kami adalah:
dan tiba di Persamaan (2):
Kita dapat melihat bahwa Persamaan (3) dalam OP adalah cara untuk menghasilkan kurva acak posterior yang bergantung pada data (set pelatihan), dan memanfaatkan formulir Cholesky untuk menghasilkan tiga undian acak multivariat yang normal :
sumber