Konteks: Saya seorang programmer dengan beberapa (setengah terlupakan) pengalaman dalam statistik dari kursus uni. Baru-baru ini saya menemukan http://akinator.com dan menghabiskan beberapa waktu mencoba membuatnya gagal. Dan siapa yang tidak? :)
Saya telah memutuskan untuk mencari tahu cara kerjanya. Setelah googling dan membaca posting blog terkait dan menambahkan beberapa (terbatas) pengetahuan saya ke dalam campuran yang dihasilkan saya datang dengan model berikut (saya yakin bahwa saya akan menggunakan notasi yang salah, tolong jangan bunuh saya untuk itu):
Ada Subjek (S) dan Pertanyaan (Q). Tujuan prediktor adalah memilih subjek S yang memiliki probabilitas aposterior terbesar untuk menjadi subjek yang dipikirkan pengguna, diberikan pertanyaan dan jawaban yang dikumpulkan sejauh ini.
Biarkan game G menjadi serangkaian pertanyaan yang diajukan dan jawaban diberikan: .
Kemudian prediktor mencari .
Sebelum untuk subyek ( ) bisa saja berapa kali subjek telah ditebak dibagi dengan jumlah total game.
Dengan membuat asumsi bahwa semua jawaban independen, kita dapat menghitung kemungkinan subjek S mengingat permainan G seperti:
Kita dapat menghitung jika kita melacak pertanyaan dan jawaban mana yang diberikan ketika yang digunakan memiliki subjek yang diberikan:
Sekarang, mendefinisikan distribusi probabilitas lebih dari subjek dan ketika kita perlu memilih pertanyaan berikutnya kita harus memilih salah satu yang diharapkan perubahan dalam entropi distribusi ini maksimal:
Saya sudah mencoba mengimplementasikan ini dan berhasil. Tetapi, jelas, ketika jumlah subjek meningkat, kinerja menurun karena kebutuhan untuk menghitung ulang setelah setiap gerakan dan menghitung distribusi diperbarui untuk pemilihan pertanyaan.P ( S | G ∨ { q j , a } )
Saya curiga saya hanya memilih model yang salah, terkendala oleh keterbatasan pengetahuan saya. Atau, mungkin, ada kesalahan dalam matematika. Tolong beri tahu saya: apa yang harus saya ketahui, atau bagaimana mengubah prediktor sehingga dapat mengatasi jutaan subjek dan ribuan pertanyaan?