Menerapkan Complementary Naif Bayes di python?

9

Masalah

Saya telah mencoba menggunakan bayang naif pada set data berlabel data kejahatan tetapi mendapat hasil yang sangat buruk (akurasi 7%). Naif Bayes berjalan jauh lebih cepat daripada alogoritma lain yang telah saya gunakan, jadi saya ingin mencoba mencari tahu mengapa nilainya sangat rendah.

Penelitian

Setelah membaca saya menemukan bahwa Naif bayes harus digunakan dengan dataset yang seimbang karena memiliki bias untuk kelas dengan frekuensi yang lebih tinggi. Karena data saya tidak seimbang, saya ingin mencoba menggunakan Complementary Naive Bayes karena ini khusus dibuat untuk berurusan dengan kemiringan data. Dalam makalah yang menjelaskan prosesnya, aplikasi ini untuk klasifikasi teks tetapi saya tidak melihat mengapa teknik ini tidak berfungsi dalam situasi lain. Anda dapat menemukan makalah yang saya maksud di sini . Singkatnya idenya adalah menggunakan bobot berdasarkan kejadian di mana kelas tidak muncul.

Setelah melakukan beberapa penelitian saya dapat menemukan implementasi di Jawa tetapi sayangnya saya tidak tahu Jawa dan saya hanya tidak mengerti algoritma dengan cukup baik untuk mengimplementasikan sendiri.

Pertanyaan

di mana saya dapat menemukan implementasi dalam python? Jika itu tidak ada, bagaimana saya harus menerapkannya sendiri?

belalang
sumber

Jawaban:

5

Naif Bayes harus mampu menangani dataset yang tidak seimbang. Ingat bahwa rumus Bayes adalah

P(yx)=P(xy)P(y)P(x)P(xy)P(y)

Jadi memperhitungkan .P(xy)P(y)P(y)

Dalam kasus Anda, mungkin Anda berpakaian berlebihan dan perlu perataan? Anda bisa mulai dengan +1 smoothing dan melihat apakah ada perbaikan. Dalam python, saat menggunakan numpy, saya akan menerapkan smoothing dengan cara ini:

table = # counts for each feature 
PT = (table + 1) / (table + 1).sum(axis=1, keepdims=1)

Perhatikan bahwa ini memberi Anda Multinomial Naive Bayes - yang hanya berlaku untuk data kategorikal.

Saya juga dapat menyarankan tautan berikut: http://www.itshared.org/2015/03/naive-bayes-on-apache-flink.html . Ini tentang menerapkan Naif Bayes di Apache Flink. Meskipun Java, mungkin itu akan memberi Anda beberapa teori yang Anda butuhkan untuk memahami algoritma dengan lebih baik.

Alexey Grigorev
sumber
Anda mungkin benar sepertinya Bayes naif hanya memiliki masalah ketidakseimbangan dengan klasifikasi teks. Bisakah Anda jelaskan apa itu smoothing?
Belalang
Sudahkah Anda melihat tautannya? Dijelaskan di sana. Singkatnya, ketika memperkirakan kadang-kadang tidak pernah terlihat selama pelatihan dan perataan memastikan bahwa itu tidak merusak kinerja classifier dengan menambahkan beberapa hitungan tambahan (jika terjadi laplace atau +1 smoothing) ke semua fitur . P(xy)x
Alexey Grigorev
0

Implementasi saya dari Complement Naif Bayes di scikit-learn dapat ditemukan di sini .

airalcorn2
sumber