Memasukan data:
-> fitur kaos (warna, logo, dll)
-> margin keuntungan
Saya telah melatih hutan acak pada dan Y di atas dan telah mencapai akurasi yang masuk akal pada data uji. Jadi saya punya
.
Sekarang, saya ingin mencari yaitu distribusi probabilitas dari fitur X mengingat saya mengharapkan margin keuntungan sebanyak ini.
Bagaimana saya melakukannya dengan hutan acak (atau model diskriminatif lainnya)?
Salah satu saran bagi saya adalah memulai dengan model generatif daripada model diskriminatif. Tapi, pemahaman saya adalah model generatif umumnya membutuhkan banyak data untuk dilatih kecuali jika membuat beberapa asumsi yang sangat ketat seperti independensi bersyarat dalam kasus Naif Bayes?
Saran lainnya bisa saja beralih dan Y dan melatih model diskriminatif. Sekarang X akan menjadi margin keuntungan dan Y akan menjadi fitur at shirt. P ( Y | X ) akan langsung memberi saya distribusi probabilitas fitur t-shirt, mengingat target margin keuntungan. Tetapi pendekatan ini tampaknya tidak benar bagi saya, karena saya selalu menganggap X sebagai variabel biasa dan Y sebagai efek.
Juga, dari apa yang saya dengar, pertanyaan serupa telah diajukan untuk penemuan obat dan algoritma telah dirancang yang muncul dengan kandidat obat baru yang memiliki tingkat keberhasilan yang tinggi. Adakah yang bisa mengarahkan saya ke literatur penelitian di domain ini?
Memperbarui:
Saya telah menemukan ini dan ini yang berbicara tentang GAN yang digunakan untuk penemuan obat. Jaringan permusuhan generatif sepertinya cocok untuk pernyataan masalah saya, jadi saya telah membaca tentang mereka. Tapi satu hal yang saya pahami adalah GAN menghasilkan sampel dengan cara yang tidak diawasi. Mereka mencoba menghasilkan sampel yang seperti pertama-tama menangkap distribusi X yang mendasari dan kemudian mengambil sampel dari distribusi tersebut. Tapi saya tertarik pada X | Y. X dan Y didefinisikan di atas. Haruskah saya menjelajahi sesuatu selain GAN? Adakah petunjuk?
Pertanyaan lanjutan:
Bayangkan saya memiliki GAN terlatih yang telah belajar cara membuat kaos (sampel sampel Xs). Bagaimana saya bisa mendapatkan 5 kemeja teratas untuk diberikan Y?
Jawaban:
Respons ini telah dimodifikasi secara signifikan dari bentuk aslinya. Kelemahan dari tanggapan awal saya akan dibahas di bawah, tetapi jika Anda ingin melihat kira-kira seperti apa tanggapan ini sebelum saya membuat perubahan besar, lihat buku catatan berikut: https://nbviewer.jupyter.org/github /dmarx/data_generation_demo/blob/54be78fb5b68218971d2568f1680b4f783c0a79a/demo.ipynb
Estimasi Kemungkinan Maksimum
... dan mengapa itu tidak berhasil di sini
Dalam respons awal saya, teknik yang saya sarankan adalah menggunakan MCMC untuk melakukan estimasi kemungkinan maksimum. Secara umum, MLE adalah pendekatan yang baik untuk menemukan solusi "optimal" untuk probabilitas bersyarat, tetapi kami memiliki masalah di sini: karena kami menggunakan model diskriminatif (hutan acak dalam kasus ini) probabilitas kami dihitung relatif terhadap batas keputusan . Sebenarnya tidak masuk akal untuk berbicara tentang solusi "optimal" untuk model seperti ini karena begitu kita mendapatkan cukup jauh dari batas kelas, model hanya akan memprediksi yang untuk semuanya. Jika kita memiliki cukup kelas beberapa dari mereka mungkin benar-benar "dikelilingi" dalam hal ini ini tidak akan menjadi masalah, tetapi kelas pada batas data kita akan "dimaksimalkan" oleh nilai-nilai yang tidak selalu layak.
Untuk menunjukkan, saya akan memanfaatkan beberapa kode kenyamanan yang dapat Anda temukan di sini , yang menyediakan
GenerativeSampler
kelas yang membungkus kode dari respons awal saya, beberapa kode tambahan untuk solusi yang lebih baik ini, dan beberapa fitur tambahan yang saya mainkan (beberapa yang berfungsi , beberapa yang tidak) yang saya mungkin tidak akan masuk ke sini.Dalam visualisasi ini, x adalah data nyata, dan kelas yang kami minati berwarna hijau. Titik-titik yang terhubung garis adalah sampel yang kami gambar, dan warnanya sesuai dengan urutan sampelnya, dengan posisi urutan "menipis" yang diberikan oleh label bilah warna di sebelah kanan.
Seperti yang Anda lihat, sampler menyimpang dari data cukup cepat dan kemudian pada dasarnya bergaul cukup jauh dari nilai-nilai ruang fitur yang sesuai dengan pengamatan nyata. Jelas ini masalah.
Salah satu cara kita dapat menipu adalah dengan mengubah fungsi proposal kami untuk hanya memungkinkan fitur mengambil nilai yang sebenarnya kami amati dalam data. Mari kita coba dan lihat bagaimana hal itu mengubah perilaku hasil kita.
Masukkan Aturan Bayes
Setelah Anda membujuk saya untuk tidak terlalu bersemangat dengan matematika di sini, saya bermain-main dengan jumlah yang lumayan (karenanya saya membangunnya
GenerativeSampler
), dan saya menemui masalah yang saya sebutkan di atas. Saya merasa benar-benar bodoh ketika saya membuat realisasi ini, tetapi jelas apa yang Anda minta panggilan untuk penerapan aturan Bayes dan saya minta maaf karena menolak sebelumnya.Jika Anda tidak terbiasa dengan aturan bayes, sepertinya ini:
Dalam banyak aplikasi penyebutnya adalah konstanta yang bertindak sebagai istilah penskalaan untuk memastikan bahwa pembilangnya berintegrasi ke 1, sehingga aturannya sering dinyatakan kembali sebagai berikut:
Atau dalam bahasa Inggris yang sederhana: "posterior sebanding dengan waktu sebelumnya, kemungkinan".
Terlihat familier? Bagaimana kalau sekarang:
Ya, inilah tepatnya yang kami lakukan sebelumnya dengan menyusun perkiraan untuk MLE yang didasarkan pada distribusi data yang diamati. Saya tidak pernah memikirkan Bayes memerintah dengan cara ini, tetapi masuk akal jadi terima kasih telah memberi saya kesempatan untuk menemukan perspektif baru ini.
Jadi, setelah membuat wawasan ini bahwa kita perlu memasukkan prior untuk data, mari kita lakukan itu dengan memasang KDE standar dan lihat bagaimana hal itu mengubah hasil kita.
Dan begitulah: hitam besar 'X' adalah perkiraan MAP kami (kontur itu adalah KDE dari posterior).
sumber
Salah satu cara untuk maju adalah:
Buat jaringan saraf feedforward yang, mengingat Y (mungkin Anda ingin menormalkannya) memprediksi X. Jadi output dari model (lapisan terakhir) akan menjadi satu set neuron softmax untuk setiap fitur. Jadi jika fitur 1 (misalnya warna) memiliki 4 opsi, Anda akan menerapkan softmax di atas empat neuron, dan melakukan hal yang sama pada setiap fitur.
Maka fungsi kerugian Anda bisa menjadi jumlah (atau kombinasi linear jika Anda suka) dari entropi silang untuk setiap fitur.
sumber