Latar belakang dan masalah
Saya menggunakan Proses Gaussian (GP) untuk regresi dan optimasi Bayesian berikutnya (BO). Untuk regresi saya menggunakan paket gpml untuk MATLAB dengan beberapa modifikasi custom-made, tetapi masalahnya umum.
Adalah fakta yang diketahui bahwa ketika dua input pelatihan terlalu dekat dalam ruang input, matriks kovarians dapat menjadi tidak-pasti pasti (ada beberapa pertanyaan tentang hal itu di situs ini). Akibatnya, dekomposisi Cholesky dari matriks kovarians, yang diperlukan untuk berbagai perhitungan GP, dapat gagal karena kesalahan numerik. Ini terjadi pada saya dalam beberapa kasus ketika melakukan BO dengan fungsi objektif yang saya gunakan, dan saya ingin memperbaikinya.
Solusi yang diajukan
AFAIK, solusi standar untuk mengurangi pengondisian udara adalah dengan menambahkan punggungan atau nugget ke diagonal matriks kovarians. Untuk regresi GP, jumlah ini untuk menambahkan (atau meningkatkan, jika sudah ada) kebisingan pengamatan.
Sejauh ini baik. Saya memodifikasi kode untuk inferensi yang tepat dari gpml sehingga setiap kali dekomposisi Cholesky gagal, saya mencoba untuk memperbaiki matriks kovarians ke matriks SPD (simetrik positif pasti terdekat) dalam norma Frobenius, yang terinspirasi oleh kode MATLAB oleh John d'Errico. Alasannya adalah untuk meminimalkan intervensi pada matriks asli.
Solusi ini berfungsi, tetapi saya perhatikan bahwa kinerja BO berkurang secara substansial untuk beberapa fungsi - mungkin setiap kali algoritma perlu memperbesar di beberapa area (misalnya, karena semakin dekat ke minimum, atau karena panjangnya skala dari masalah menjadi tidak seragam kecil). Perilaku ini masuk akal karena saya secara efektif meningkatkan kebisingan setiap kali dua titik input terlalu dekat, tetapi tentu saja itu tidak ideal. Atau, saya bisa saja menghilangkan titik-titik bermasalah, tetapi sekali lagi, kadang-kadang saya membutuhkan titik input untuk menjadi dekat.
Pertanyaan
Saya tidak berpikir bahwa masalah numerik dengan faktorisasi Cholesky dari matriks kovarian GP adalah masalah baru, tetapi yang mengejutkan saya sejauh ini saya tidak dapat menemukan banyak solusi, selain meningkatkan kebisingan atau menghilangkan titik yang terlalu dekat satu sama lain. Di sisi lain, memang benar bahwa beberapa fungsi saya berperilaku sangat buruk, jadi mungkin situasi saya tidak terlalu khas.
Adakah saran / referensi yang bisa berguna di sini?
Jawaban:
Pilihan lain adalah untuk rata-rata poin yang menyebabkan - misalnya jika Anda memiliki 1000 poin dan 50 masalah menyebabkan, Anda bisa mengambil pendekatan peringkat rendah yang optimal menggunakan 950 nilai eigen / vektor pertama. Namun, ini tidak jauh menghapus datapoints berdekatan yang Anda katakan Anda lebih suka tidak melakukannya. Harap diingat bahwa saat Anda menambahkan jitter, Anda mengurangi derajat kebebasan - yaitu setiap titik memengaruhi prediksi Anda lebih sedikit, jadi ini bisa lebih buruk daripada menggunakan lebih sedikit poin.
Edit:
Berdasarkan komentar saya pikir saya akan menguraikan apa yang saya maksud dengan memasukkan pengamatan turunan. Jika kita menggunakan kernel gaussian (sebagai contoh),
turunannya adalah,
Sisa GP adalah sama seperti biasanya.
sumber
Salah satu solusi yang telah kami lakukan di kantor adalah dengan hanya mengubah poin yang merepotkan. Ini bisa berupa penghapusan langsung atau sesuatu yang lebih canggih. Pada dasarnya, pengamatannya adalah bahwa titik-titik dekat sangat redundan: pada kenyataannya, sangat redundan sehingga mereka mengurangi pangkat matriks kovarians. Dengan cara yang sama, satu titik menyumbang sedikit informasi untuk masalah yang dihadapi, jadi menghapus satu atau yang lain (atau melakukan sesuatu yang lain, seperti rata-rata mereka atau "memantul" satu titik dari yang lain ke jarak minimal yang dapat diterima) akan tidak terlalu banyak mengubah solusi Anda.
Saya tidak yakin bagaimana cara menilai pada titik mana kedua poin menjadi "terlalu dekat." Mungkin ini bisa menjadi opsi penyetelan yang tersisa untuk pengguna.
(Ups! Setelah saya memposting ini, saya menemukan pertanyaan Anda di sini yang memajukan jawaban ini ke solusi yang jauh lebih rumit. Saya harap dengan menghubungkannya dari jawaban saya, saya akan membantu dengan SEO ...)
sumber