Saya akan menjalankan seluruh proses Naif Bayes dari awal, karena tidak sepenuhnya jelas bagi saya di mana Anda digantung.
Kami ingin menemukan probabilitas bahwa contoh baru milik masing-masing kelas: ). Kami kemudian menghitung probabilitas itu untuk setiap kelas, dan memilih kelas yang paling mungkin. Masalahnya adalah kita biasanya tidak memiliki probabilitas tersebut. Namun, Teorema Bayes memungkinkan kita menulis ulang persamaan itu dalam bentuk yang lebih mudah ditelusur.P(class|feature1,feature2,...,featuren
Bayes 'Thereom hanyalah atau dalam hal masalah kita:
P(A|B)=P(B|A)⋅P(A)P(B)
P(class|features)=P(features|class)⋅P(class)P(features)
Kami dapat menyederhanakan ini dengan menghapus . Kita dapat melakukan ini karena kita akan memberi peringkat untuk setiap nilai ; akan sama setiap kali - tidak tergantung pada . Ini memberi kita
P(features)P(class|features)classP(features)classP(class|features)∝P(features|class)⋅P(class)
Probabilitas sebelumnya, , dapat dihitung seperti yang Anda jelaskan dalam pertanyaan Anda.P(class)
Itu meninggalkan . Kami ingin menghilangkan probabilitas bersama yang masif, dan mungkin sangat jarang . Jika setiap fitur independen, maka Bahkan jika mereka tidak benar-benar independen, kita dapat mengasumsikan mereka adalah (itulah " naif "bagian dari Bayes naif). Saya pribadi berpikir lebih mudah untuk memikirkan ini untuk variabel diskrit (yaitu, kategori), jadi mari kita gunakan versi contoh Anda yang sedikit berbeda. Di sini, saya telah membagi setiap dimensi fitur menjadi dua variabel kategori.P(features|class)P(feature1,feature2,...,featuren|class)P(feature1,feature2,...,featuren|class)=∏iP(featurei|class)
.
Contoh: Pelatihan sang pengklasifikasi
Untuk melatih pengklasifikasi, kami menghitung berbagai himpunan bagian dari poin dan menggunakannya untuk menghitung probabilitas sebelumnya dan kondisional.
Priornya sepele: Ada enam puluh total poin, empat puluh hijau, dan dua puluh merah. JadiP(class=green)=4060=2/3 and P(class=red)=2060=1/3
Selanjutnya, kita harus menghitung probabilitas bersyarat dari setiap nilai fitur yang diberikan kelas. Di sini, ada dua fitur: dan , yang masing-masing mengambil satu dari dua nilai (A atau B untuk satu, X atau Y untuk yang lain). Karena itu kita perlu mengetahui hal-hal berikut:feature1feature2
- P(feature1=A|class=red)
- P(feature1=B|class=red)
- P(feature1=A|class=green)
- P(feature1=B|class=green)
- P(feature2=X|class=red)
- P(feature2=Y|class=red)
- P(feature2=X|class=green)
- P(feature2=Y|class=green)
- (jika tidak jelas, ini semua pasangan fitur-nilai dan kelas yang mungkin)
Ini mudah untuk dihitung dengan menghitung dan membagi juga. Misalnya, untuk , kami hanya melihat titik merah dan menghitung berapa banyak dari mereka yang berada di wilayah 'A' untuk . Ada dua puluh titik merah, yang semuanya berada di wilayah 'A', jadi . Tidak ada titik merah di wilayah B, jadi . Selanjutnya, kami melakukan hal yang sama, tetapi hanya mempertimbangkan titik hijau. Ini memberi kita dan . Kami ulangi proses itu untuk , untuk melengkapi tabel probabilitas. Dengan asumsi saya sudah menghitung dengan benar, kami mengertiP(feature1=A|class=red)feature1P(feature1=A|class=red)=20/20=1P(feature1|class=red)=0/20=0P(feature1=A|class=green)=5/40=1/8P(feature1=B|class=green)=35/40=7/8feature2
- P(feature1=A|class=red)=1
- P(feature1=B|class=red)=0
- P(feature1=A|class=green)=1/8
- P(feature1=B|class=green)=7/8
- P(feature2=X|class=red)=3/10
- P(feature2=Y|class=red)=7/10
- P(feature2=X|class=green)=8/10
- P(feature2=Y|class=green)=2/10
Sepuluh probabilitas (dua prior ditambah delapan kondisional) adalah model kami
Mengklasifikasikan Contoh Baru
Mari kita klasifikasikan titik putih dari contoh Anda. Itu ada di wilayah "A" untuk dan wilayah "Y" untuk . Kami ingin menemukan probabilitas bahwa itu ada di setiap kelas. Mari kita mulai dengan warna merah. Dengan menggunakan rumus di atas, kita tahu bahwa:
Subbing dalam probabilitas dari tabel, kita dapatkanfeature1feature2P(class=red|example)∝P(class=red)⋅P(feature1=A|class=red)⋅P(feature2=Y|class=red)
P(class=red|example)∝13⋅1⋅710=730
Kami kemudian melakukan hal yang sama untuk hijau:
P(class=green|example)∝P(class=green)⋅P(feature1=A|class=green)⋅P(feature2=Y|class=green)
Subbing dalam nilai-nilai itu membuat kita 0 ( ). Akhirnya, kita melihat untuk melihat kelas mana yang memberi kita probabilitas tertinggi. Dalam hal ini, itu jelas kelas merah, jadi di situlah kita menetapkan intinya.2/3⋅0⋅2/10
Catatan
Dalam contoh asli Anda, fitur-fiturnya kontinu. Dalam hal ini, Anda perlu menemukan beberapa cara menetapkan P (fitur = nilai | kelas) untuk setiap kelas. Anda mungkin mempertimbangkan untuk menyesuaikan distribusi probabilitas yang diketahui (misalnya, seorang Gaussian). Selama pelatihan, Anda akan menemukan mean dan varians untuk setiap kelas di sepanjang setiap dimensi fitur. Untuk mengklasifikasikan suatu titik, Anda akan menemukan dengan memasukkan mean dan varians yang sesuai untuk setiap kelas. Distribusi lain mungkin lebih tepat, tergantung pada data Anda, tetapi seorang Gaussian akan menjadi titik awal yang baik.P(feature=value|class)
Saya tidak terlalu terbiasa dengan kumpulan data DARPA, tetapi pada dasarnya Anda akan melakukan hal yang sama. Anda mungkin akan berakhir menghitung sesuatu seperti P (serangan = TRUE | service = jari), P (serangan = false | layanan = jari), P (serangan = TRUE | layanan = ftp), dll. Dan kemudian menggabungkannya dalam sama seperti contohnya. Sebagai catatan, bagian dari trik di sini adalah menghadirkan fitur yang bagus. Sumber IP, misalnya, mungkin akan sangat jarang - Anda mungkin hanya memiliki satu atau dua contoh untuk IP yang diberikan. Anda mungkin melakukan jauh lebih baik jika Anda melakukan geolokasi IP dan menggunakan "Source_in_same_building_as_dest (true / false)" atau sesuatu sebagai fitur.
Saya harap itu membantu lebih banyak. Jika ada yang butuh klarifikasi, saya akan senang untuk mencoba lagi!