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