Implementasi Naif Bayes

10

Saya menerapkan algoritma Naive Bayes untuk kategorisasi teks dengan penghalusan Laplacian. Masalah yang saya miliki adalah bahwa probabilitas mendekati nol karena saya mengalikan banyak fraksi kecil. Oleh karena itu, probabilitas akhirnya menghasilkan nol. Ini karena ada beberapa kata dalam dokumen dan set pelatihan.

Karena itu, saya tidak dapat mengkategorikan teks. Apakah ada cara saya bisa mengatasi masalah ini? Apakah saya melakukan sesuatu yang salah dalam implementasi saya?

sam
sumber
... Anda dapat menghindari aritmatika floating-point.
msdn.microsoft.com/en-us/magazine/jj891056.aspx Anda menemukan jawaban yang mudah di sini.
Roshan Mehta

Jawaban:

14

Trik yang biasa untuk menghindari underflow ini adalah dengan menghitung dengan logaritma, menggunakan identitas Artinya, alih-alih menggunakan probabilitas, Anda menggunakan logaritma mereka. Alih-alih mengalikannya, Anda menambahkannya.

catatansaya=1nhalsaya=saya=1ncatatanhalsaya.

Pendekatan lain, yang tidak begitu umum, adalah menormalkan produk secara manual. Alih-alih hanya menyimpan satu angka floating point , Anda menyimpan nomor floating point (katakanlah) dan eksponen negatif sedemikian rupa sehingga . Setelah setiap operasi Anda menormalkan angka yang dihasilkan.halhal0[1,2)xhal=hal02x

Yuval Filmus
sumber
2
Juga bermanfaat untuk mencatat trik logsumexp dalam konteks ini: en.wikipedia.org/wiki/LogSumExp
Bitwise