Saya telah mengunduh kode GPML Matlab terbaru. Kode GPML Matlab dan saya telah membaca dokumentasi dan menjalankan demo regresi tanpa masalah. Namun, saya mengalami kesulitan memahami bagaimana menerapkannya pada masalah regresi yang saya hadapi.
Masalah regresi didefinisikan sebagai berikut:
Membiarkan menjadi vektor input dan menjadi target yang sesuai. Sekumpulan dari input disusun menjadi sebuah matriks dan target yang sesuai disimpan dalam matriks , dengan menjadi nilai target rata - rata di .
Saya ingin melatih model GPR menggunakan fungsi eksponensial kuadrat:
,
dimana sama dengan jika dan jika tidak. Hyperparameter adalah dengan diasumsikan tingkat kebisingan dalam data pelatihan dan adalah skala panjang.
Untuk melatih model, saya perlu meminimalkan kemungkinan marginal log negatif sehubungan dengan hyperparameter:
di mana c adalah konstanta dan matriks adalah fungsi dari hyperparameters (lihat persamaan k (xi, xj) = ...).
Berdasarkan demo yang diberikan di situs web GPML, upaya saya untuk menerapkan ini menggunakan kode Matlab GPML ada di bawah ini.
covfunc = @covSEiso;
likfunc = @likGauss;
sn = 0.1;
hyp.lik = log(sn);
hyp2.cov = [0;0];
hyp2.lik = log(0.1);
hyp2 = minimize(hyp2, @gp, -100, @infExact, [], covfunc, likfunc, X1, Y1(:, n));
exp(hyp2.lik)
nlml2 = gp(hyp2, @infExact, [], covfunc, likfunc, X1, Y1(:, n));
[m s2] = gp(hyp2, @infExact, [], covfunc, likfunc, X1, Y1(:, n), X2);
Y2r(:, n) = m;
X1 berisi input pelatihan
X2 berisi input tes
Y1 berisi target pelatihan
Y2r adalah perkiraan dari penerapan model
n adalah indeks yang digunakan untuk mundur setiap elemen dalam vektor output
Mengingat masalahnya, apakah ini cara yang benar untuk melatih dan menerapkan model GPR? Jika tidak, apa yang harus saya ubah?
covfunc = { 'covSum', { 'covSEiso' } }
saya tidak mengerti bagaimana ini menangani data yang berisik sekarang, sepertinya toolbox telah berubah cukup banyak sejak saya terakhir menggunakannya, akan melihat lebih dekat nanti .Saya pikir masalahnya mungkin salah satu model mis-spesifikasi. Jika target Anda adalah sudut dibungkus + -180 derajat, maka "proses noise" untuk data Anda mungkin cukup non-Guassian bahwa bukti Baysian bukan cara yang baik untuk mengoptimalkan parameter hiper. Misalnya, perhatikan apa yang terjadi ketika "noise" menyebabkan sinyal membungkus. Dalam hal ini mungkin bijaksana untuk melakukan pemilihan model dengan meminimalkan kesalahan validasi silang (ada implementasi domain publik dari metode simpleks Nelder-Mead di sinijika Anda tidak memiliki kotak alat pengoptimalan). Perkiraan cross-validasi kinerja tidak begitu sensitif terhadap model mis-spesifikasi karena merupakan perkiraan langsung dari kinerja pengujian, sedangkan kemungkinan marginal dari model adalah bukti dalam suport dari model mengingat asumsi model benar. Lihat diskusi yang dimulai pada halaman 123 dari buku Rasmussen dan Williams.
Pendekatan lain adalah mengkode ulang output sehingga model noise Gaussian lebih tepat. Satu hal yang bisa Anda lakukan adalah beberapa bentuk pengurangan dimensi tanpa pengawasan, karena ada hubungan non-linear antara target Anda (karena hanya ada cara terbatas di mana tubuh dapat bergerak), sehingga akan ada manifold dimensi-lebih rendah yang Anda miliki. target hidup terus, dan akan lebih baik untuk mundur koordinat lebih dari sudut itu sendiri (mungkin ada lebih sedikit target seperti itu juga).
Juga semacam analisis Procrustes mungkin merupakan ide yang baik untuk menormalkan perbedaan antara mata pelajaran sebelum melatih model.
Anda mungkin menemukan beberapa pekerjaan yang dilakukan oleh Neil Lawrence pada pose menarik manusia. Saya ingat melihat demo ini di sebuah konferensi beberapa tahun yang lalu dan sangat terkesan.
sumber