Penjelasan sederhana tentang Klasifikasi Naif Bayes

547

Saya merasa sulit untuk memahami proses Naive Bayes, dan saya bertanya-tanya apakah seseorang dapat menjelaskannya dengan proses langkah demi langkah sederhana dalam bahasa Inggris. Saya mengerti dibutuhkan perbandingan berdasarkan waktu yang terjadi sebagai suatu probabilitas, tetapi saya tidak tahu bagaimana data pelatihan terkait dengan dataset yang sebenarnya.

Tolong beri saya penjelasan tentang peran yang dimainkan oleh set pelatihan. Saya memberikan contoh yang sangat sederhana untuk buah-buahan di sini, seperti pisang misalnya

training set---
round-red
round-orange
oblong-yellow
round-red

dataset----
round-red
round-orange
round-red
round-orange
oblong-yellow
round-red
round-orange
oblong-yellow
oblong-yellow
round-red
Jaggerjack
sumber
18
Sangat mudah jika Anda memahami Teorema Bayes. Jika Anda belum membaca teorema Bayes, coba tautan ini yudkowsky.net/rational/bayes .
Pinch
1
tolong jelaskan contoh Anda. untuk baris pertama dalam set pelatihan Anda: apakah putaran diklasifikasikan sebagai merah, atau keduanya, variabel bulat dan merah yang diklasifikasikan sebagai sesuatu yang lain? jika yang terakhir, apa klasifikasi untuk setiap entri dalam set pelatihan Anda?
K Mehta
22
CATATAN: Jawaban yang diterima di bawah ini bukan contoh tradisional untuk Naïve Bayes. Ini sebagian besar implementasi Nearest Neighbor. Baca sesuai.
chmullig
1
@Jaggerjack: Jawaban RamNarasimhan dijelaskan dengan baik daripada jawaban yang diterima.
Unmesha SreeVeni
2
Nah jika seseorang melihat grafik dengan beberapa titik itu tidak benar-benar berarti bahwa itu KNN :) Bagaimana Anda menghitung probabilitas semuanya terserah Anda. Naif Bayes menghitungnya menggunakan sebelumnya dikalikan dengan kemungkinan sehingga itulah yang ditunjukkan Yavar dalam jawabannya. Cara sampai pada probabilitas itu benar-benar tidak penting di sini. Jawabannya benar sekali dan saya tidak melihat ada masalah di dalamnya.
avinash shah

Jawaban:

672

Pertanyaan Anda seperti yang saya pahami dibagi menjadi dua bagian, bagian pertama adalah Anda membutuhkan pemahaman yang lebih baik tentang pengklasifikasi Naif Bayes & bagian dua menjadi kebingungan seputar set Pelatihan.

Secara umum semua Algoritma Pembelajaran Mesin perlu dilatih untuk tugas belajar yang diawasi seperti klasifikasi, prediksi dll. Atau untuk tugas belajar yang tidak diawasi seperti pengelompokan.

Selama langkah pelatihan, algoritma diajarkan dengan dataset input tertentu (set pelatihan) sehingga nanti kita dapat mengujinya untuk input yang tidak diketahui (yang belum pernah mereka lihat sebelumnya) yang dapat mereka klasifikasikan atau prediksi dll (dalam hal diawasi belajar) berdasarkan pembelajaran mereka. Inilah yang menjadi dasar dari sebagian besar teknik Machine Learning seperti Neural Networks, SVM, Bayesian dll.

Jadi dalam proyek Pembelajaran Mesin umum pada dasarnya Anda harus membagi set input Anda ke Set Pengembangan (Set Pelatihan + Set Tes-Dev) & Set Tes (atau set Evaluasi). Ingat tujuan dasar Anda adalah bahwa sistem Anda mempelajari dan mengklasifikasikan input baru yang belum pernah mereka lihat sebelumnya dalam set Dev atau set tes.

Set tes biasanya memiliki format yang sama dengan set pelatihan. Namun, sangat penting bahwa set tes berbeda dari corpus pelatihan: jika kita hanya menggunakan kembali set pelatihan sebagai set tes, maka model yang hanya menghafal inputnya, tanpa belajar bagaimana menggeneralisasi ke contoh baru, akan menerima menyesatkan nilai yang tinggi.

Secara umum, misalnya, 70% dari data kami dapat digunakan sebagai kasus pelatihan. Juga ingat untuk mempartisi set asli ke dalam set pelatihan dan tes secara acak .

Sekarang saya sampai pada pertanyaan Anda yang lain tentang Naif Bayes.

Untuk menunjukkan konsep Klasifikasi Naïve Bayes, pertimbangkan contoh yang diberikan di bawah ini:

masukkan deskripsi gambar di sini

Seperti yang ditunjukkan, objek dapat diklasifikasikan sebagai GREENatauRED . Tugas kita adalah untuk mengklasifikasikan kasus-kasus baru saat mereka tiba, yaitu memutuskan label kelas mana yang mereka miliki, berdasarkan objek yang ada saat ini.

Karena GREENobjeknya dua kali lebih banyak RED, masuk akal untuk percaya bahwa kasus baru (yang belum diamati) memiliki kemungkinan dua kali lipat untuk memiliki keanggotaan GREENdaripada RED. Dalam analisis Bayesian, kepercayaan ini dikenal sebagai probabilitas sebelumnya. Probabilitas sebelumnya didasarkan pada pengalaman sebelumnya, dalam hal ini persentase GREENdanRED objek, dan sering digunakan untuk memprediksi hasil sebelum mereka benar-benar terjadi.

Dengan demikian, kita dapat menulis:

Kemungkinan SebelumnyaGREEN :number of GREEN objects / total number of objects

Kemungkinan SebelumnyaRED :number of RED objects / total number of objects

Karena ada total 60objek, 40di antaranya adalah GREENdan 20 RED, probabilitas kami sebelumnya untuk keanggotaan kelas adalah:

Kemungkinan Sebelumnya untukGREEN :40 / 60

Kemungkinan Sebelumnya untukRED :20 / 60

Setelah merumuskan probabilitas sebelumnya, kami sekarang siap untuk mengklasifikasikan objek baru ( WHITElingkaran dalam diagram di bawah). Karena objek dikelompokkan dengan baik, masuk akal untuk mengasumsikan bahwa semakin banyak GREEN(atau RED) objek di sekitar X, semakin besar kemungkinan bahwa case baru tersebut memiliki warna tertentu. Untuk mengukur kemungkinan ini, kita menggambar sebuah lingkaran di sekitar X yang mencakup sejumlah (untuk dipilih secara apriori) dari poin terlepas dari label kelas mereka. Kemudian kami menghitung jumlah titik dalam lingkaran milik masing-masing label kelas. Dari ini kami menghitung kemungkinan:

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Dari ilustrasi di atas, jelas bahwa kemungkinan Xdiberikan GREENlebih kecil daripada kemungkinan Xdiberikan RED, karena lingkaran mencakup 1 GREENobjek dan 3 REDyang. Jadi:

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Meskipun probabilitas sebelumnya menunjukkan bahwa Xmungkin milik GREEN(mengingat bahwa ada dua kali lebih banyak GREENdibandingkan dengan RED) kemungkinan menunjukkan sebaliknya; bahwa keanggotaan kelas Xadalah RED(mengingat bahwa ada lebih banyak REDobjek di sekitar Xdaripada GREEN). Dalam analisis Bayesian, klasifikasi akhir dihasilkan dengan menggabungkan kedua sumber informasi, yaitu, sebelum dan kemungkinan, untuk membentuk probabilitas posterior menggunakan apa yang disebut aturan Bayes (dinamai menurut Pendeta Thomas Bayes 1702-1761).

masukkan deskripsi gambar di sini

Akhirnya, kami mengklasifikasikan X REDkarena keanggotaan kelasnya mencapai probabilitas posterior terbesar.

Yavar
sumber
39
bukankah algoritma ini di atas lebih seperti k-tetangga terdekat?
Renaud
251
Jawaban ini membingungkan - mencampur KNN (k tetangga terdekat) dan bayes naif.
Michal Illich
7
Jawabannya berjalan dengan baik sampai kemungkinan muncul. Jadi @Yavar telah menggunakan tetangga terdekat K untuk menghitung kemungkinan. Seberapa benar itu? Jika ya, apa beberapa metode lain untuk menghitung kemungkinan?
wrahool
1
Anda menggunakan lingkaran sebagai contoh kemungkinan. Saya membaca tentang Gaussian Naif bayes di mana kemungkinannya adalah gaussian. Bagaimana itu bisa dijelaskan?
umair durrani
1
Sebenarnya, jawaban dengan knn benar. Jika Anda tidak tahu distribusi dan dengan demikian kemungkinan kepadatan distribusi tersebut, Anda harus menemukannya. Ini bisa dilakukan melalui kNN atau kernel. Saya pikir ada beberapa hal yang hilang. Anda dapat melihat presentasi ini .
CS
1053

Saya menyadari bahwa ini adalah pertanyaan lama, dengan jawaban yang pasti. Alasan saya memposting adalah bahwa jawaban yang diterima memiliki banyak elemen k-NN ( k tetangga Nearest), algoritma yang berbeda.

Baik k-NN dan NaiveBayes adalah algoritma klasifikasi. Secara konseptual, k-NN menggunakan ide "kedekatan" untuk mengklasifikasikan entitas baru. Dalam k-NN 'kedekatan' dimodelkan dengan ide-ide seperti Euclidean Distance atau Cosine Distance. Sebaliknya, di NaiveBayes, konsep 'probabilitas' digunakan untuk mengklasifikasikan entitas baru.

Karena pertanyaannya adalah tentang Naif Bayes, inilah cara saya menggambarkan ide dan langkah kepada seseorang. Saya akan mencoba melakukannya dengan sesedikit mungkin persamaan dan dalam bahasa Inggris.

Pertama, Kemungkinan Bersyarat & Aturan Bayes

Sebelum seseorang dapat memahami dan menghargai nuansa Naif Bayes ', mereka perlu mengetahui beberapa konsep terkait terlebih dahulu, yaitu, gagasan Kemungkinan Bersyarat, dan Aturan Bayes. (Jika Anda terbiasa dengan konsep-konsep ini, lewati ke bagian berjudul Getting to Naive Bayes ' )

Probabilitas Bersyarat dalam Bahasa Inggris: Apa probabilitas bahwa sesuatu akan terjadi, mengingat sesuatu yang lain telah terjadi.

Katakanlah ada beberapa Hasil O. Dan beberapa Bukti E. Dari cara probabilitas ini didefinisikan: Kemungkinan memiliki keduanya yang Hasil O dan Bukti E adalah: (Probabilitas O terjadi) dikalikan dengan (Prob dari E mengingat bahwa O terjadi)

Satu Contoh untuk memahami Probabilitas Bersyarat:

Katakanlah kita memiliki koleksi Senator AS. Senator bisa jadi Demokrat atau Republik. Mereka juga laki-laki atau perempuan.

Jika kita memilih satu senator sepenuhnya secara acak, berapa probabilitas bahwa orang ini adalah seorang Demokrat perempuan? Probabilitas Bersyarat dapat membantu kami menjawabnya.

Probabilitas (Demokrat dan Senator Wanita) = Prob (Senator adalah Demokrat) dikalikan dengan Probabilitas Bersyarat Menjadi Wanita mengingat mereka adalah seorang Demokrat.

  P(Democrat & Female) = P(Democrat) * P(Female | Democrat) 

Kita dapat menghitung hal yang sama persis, dengan cara sebaliknya:

  P(Democrat & Female) = P(Female) * P(Democrat | Female) 

Memahami Aturan Bayes

Secara konseptual, ini adalah cara untuk beralih dari P (Bukti | Hasil yang Diketahui) ke P (Hasil | Bukti yang Diketahui). Seringkali, kita tahu seberapa sering beberapa bukti tertentu diamati, memberikan hasil yang diketahui . Kita harus menggunakan fakta yang diketahui ini untuk menghitung kebalikannya, untuk menghitung kemungkinan hasil itu terjadi , mengingat buktinya.

P (Hasil diberikan bahwa kita tahu beberapa Bukti) = P (Bukti diberikan bahwa kita tahu Hasil) kali Prob (Hasil), diskalakan oleh P (Bukti)

Contoh klasik untuk memahami Aturan Bayes:

Probability of Disease D given Test-positive = 

               Prob(Test is positive|Disease) * P(Disease)
     _______________________________________________________________
     (scaled by) Prob(Testing Positive, with or without the disease)

Sekarang, semua ini hanya basa-basi, untuk sampai ke Naif Bayes.

Mendapatkan ke Naif Bayes '

Sejauh ini, kami hanya berbicara tentang satu bukti. Pada kenyataannya, kita harus memprediksi hasil yang diberikan banyak bukti. Dalam hal ini, matematika menjadi sangat rumit. Untuk mengatasi kerumitan itu, satu pendekatan adalah 'membuka-bongkar' beberapa bukti, dan memperlakukan setiap bukti sebagai independen. Pendekatan ini adalah mengapa ini disebut Bayes naif .

P(Outcome|Multiple Evidence) = 
P(Evidence1|Outcome) * P(Evidence2|outcome) * ... * P(EvidenceN|outcome) * P(Outcome)
scaled by P(Multiple Evidence)

Banyak orang memilih untuk mengingat ini sebagai:

                      P(Likelihood of Evidence) * Prior prob of outcome
P(outcome|evidence) = _________________________________________________
                                         P(Evidence)

Perhatikan beberapa hal tentang persamaan ini:

  • Jika Prob (bukti | hasil) adalah 1, maka kita hanya mengalikan dengan 1.
  • Jika Prob (beberapa bukti | hasil tertentu) adalah 0, maka keseluruhan prob. menjadi 0. Jika Anda melihat bukti yang bertentangan, kita dapat mengesampingkan hasil itu.
  • Karena kita membagi semuanya dengan P (Bukti), kita bahkan bisa pergi tanpa menghitungnya.
  • Intuisi di balik mengalikan dengan yang sebelumnya adalah sehingga kami memberikan probabilitas tinggi untuk hasil yang lebih umum, dan probabilitas rendah untuk hasil yang tidak mungkin. Ini juga disebut base ratesdan mereka adalah cara untuk mengukur probabilitas yang diprediksi kami.

Bagaimana Cara Mendaftar NaiveBayes untuk Memprediksi Hasil?

Cukup jalankan formula di atas untuk setiap hasil yang mungkin. Karena kami mencoba untuk mengklasifikasikan , setiap hasil disebut a classdan memiliki class label.tugas Kami adalah untuk melihat bukti, untuk mempertimbangkan seberapa besar kemungkinannya menjadi kelas ini atau kelas itu, dan menetapkan label untuk setiap entitas. Sekali lagi, kami mengambil pendekatan yang sangat sederhana: Kelas yang memiliki probabilitas tertinggi dinyatakan sebagai "pemenang" dan label kelas ditugaskan untuk kombinasi bukti tersebut.

Contoh Buah

Mari kita coba contoh untuk meningkatkan pemahaman kita: OP meminta contoh identifikasi 'buah'.

Katakanlah kita memiliki data 1000 buah. Mereka kebetulan Pisang , Jeruk atau Buah Lainnya . Kami tahu 3 karakteristik tentang masing-masing buah:

  1. Apakah itu Panjang
  2. Apakah itu Manis dan
  3. Jika warnanya Kuning.

Ini adalah 'set pelatihan' kami. Kami akan menggunakan ini untuk memprediksi jenis buah baru yang kami temui.

Type           Long | Not Long || Sweet | Not Sweet || Yellow |Not Yellow|Total
             ___________________________________________________________________
Banana      |  400  |    100   || 350   |    150    ||  450   |  50      |  500
Orange      |    0  |    300   || 150   |    150    ||  300   |   0      |  300
Other Fruit |  100  |    100   || 150   |     50    ||   50   | 150      |  200
            ____________________________________________________________________
Total       |  500  |    500   || 650   |    350    ||  800   | 200      | 1000
             ___________________________________________________________________

Kami dapat melakukan pre-compute banyak hal tentang koleksi buah kami.

Probabilitas yang disebut "Sebelum". (Jika kita tidak tahu atribut buah apa pun, ini akan menjadi dugaan kita.) Ini adalah milik kitabase rates.

 P(Banana)      = 0.5 (500/1000)
 P(Orange)      = 0.3
 P(Other Fruit) = 0.2

Kemungkinan "Bukti"

p(Long)   = 0.5
P(Sweet)  = 0.65
P(Yellow) = 0.8

Probabilitas "Kemungkinan"

P(Long|Banana) = 0.8
P(Long|Orange) = 0  [Oranges are never long in all the fruit we have seen.]
 ....

P(Yellow|Other Fruit)     =  50/200 = 0.25
P(Not Yellow|Other Fruit) = 0.75

Diberikan Buah, bagaimana mengklasifikasikannya?

Katakanlah kita diberi properti dari buah yang tidak dikenal, dan diminta untuk mengklasifikasikannya. Kita diberitahu bahwa buahnya Panjang, Manis dan Kuning. Apakah itu Pisang? Apakah itu Orange? Atau itu Buah Lainnya?

Kita cukup menjalankan angka untuk masing-masing 3 hasil, satu per satu. Kemudian kita memilih probabilitas tertinggi dan 'mengklasifikasikan' buah tidak dikenal kita sebagai milik kelas yang memiliki probabilitas tertinggi berdasarkan bukti sebelumnya (set pelatihan 1.000 buah):

P(Banana|Long, Sweet and Yellow) 
      P(Long|Banana) * P(Sweet|Banana) * P(Yellow|Banana) * P(banana)
    = _______________________________________________________________
                      P(Long) * P(Sweet) * P(Yellow)

    = 0.8 * 0.7 * 0.9 * 0.5 / P(evidence)

    = 0.252 / P(evidence)


P(Orange|Long, Sweet and Yellow) = 0


P(Other Fruit|Long, Sweet and Yellow)
      P(Long|Other fruit) * P(Sweet|Other fruit) * P(Yellow|Other fruit) * P(Other Fruit)
    = ____________________________________________________________________________________
                                          P(evidence)

    = (100/200 * 150/200 * 50/200 * 200/1000) / P(evidence)

    = 0.01875 / P(evidence)

Dengan margin yang luar biasa (0.252 >> 0.01875 ), kami mengklasifikasikan buah Manis / Panjang / Kuning ini sebagai Pisang.

Mengapa Bayes Classifier sangat populer?

Lihatlah apa yang akhirnya terjadi. Hanya menghitung dan mengalikan. Kami dapat melakukan pra-komputasi semua istilah ini, sehingga klasifikasi menjadi mudah, cepat dan efisien.

Let z = 1 / P(evidence). Sekarang kita dengan cepat menghitung tiga jumlah berikut.

P(Banana|evidence) = z * Prob(Banana) * Prob(Evidence1|Banana) * Prob(Evidence2|Banana) ...
P(Orange|Evidence) = z * Prob(Orange) * Prob(Evidence1|Orange) * Prob(Evidence2|Orange) ...
P(Other|Evidence)  = z * Prob(Other)  * Prob(Evidence1|Other)  * Prob(Evidence2|Other)  ...

Tetapkan label kelas mana yang merupakan angka tertinggi, dan Anda selesai.

Meskipun namanya, Naif Bayes ternyata sangat baik dalam aplikasi tertentu. Klasifikasi teks adalah salah satu area di mana itu benar-benar bersinar.

Harapan yang membantu dalam memahami konsep di balik algoritma Naive Bayes.

Ram Narasimhan
sumber
14
Terima kasih untuk penjelasannya yang sangat jelas! Mudah salah satu yang lebih baik mengambang di web. Pertanyaan: karena setiap P (hasil / bukti) dikalikan dengan 1 / z = p (bukti) (yang dalam kasus buah, berarti masing-masing pada dasarnya adalah probabilitas hanya berdasarkan bukti sebelumnya), apakah benar untuk mengatakan bahwa z tidak sama sekali tidak masalah untuk Naïve Bayes? Yang dengan demikian berarti bahwa jika, katakanlah, seseorang menabrak buah yang panjang / manis / kuning yang bukan pisang, itu akan diklasifikasikan secara salah.
kovarians
7
@ E.Chow Ya, Anda benar dalam komputasi z itu tidak masalah untuk Naif Bayes. (Ini adalah cara untuk mengukur probabilitas antara 0 dan 1.) Perhatikan bahwa z adalah produk dari probabilitas semua bukti yang ada. (Ini berbeda dari prior yang merupakan tingkat dasar kelas.) Anda benar: Jika Anda memang menemukan buah Panjang / Manis / Kuning yang bukan pisang, NB akan mengklasifikasikannya secara tidak benar sebagai pisang, berdasarkan ini perlengkapan latihan. Algoritma ini merupakan 'perkiraan probabilistik terbaik berdasarkan bukti' dan karenanya akan salah mengklasifikasikan pada kesempatan.
Ram Narasimhan
1
@Jasper Di dalam tabel terdapat total 200 "Buah lain" dan 50 di antaranya berwarna Kuning. Jadi karena buahnya adalah "Buah Lain" maka alam semesta adalah 200. 50 di antaranya berwarna Kuning. Maka 50/200. Perhatikan bahwa 800 adalah jumlah total buah Kuning. Jadi jika kita menginginkan P (buah lain / Kuning) kami akan melakukan apa yang Anda sarankan: 50/800.
Ram Narasimhan
3
Penjelasan benar-benar hebat. Saya tidak dapat memahami algoritme ini dari makalah dan buku akademis. Sebab, penjelasan esoterik yang diterima umumnya gaya penulisan mungkin. Itu saja, dan sangat mudah. Terima kasih.
Suat Atan PhD
3
Mengapa probabilitas tidak bertambah hingga 1? Buktinya adalah 0,26 pada contoh (500/100 * 650/1000 * 800/1000), dan P akhir (pisang | ...) = 0,252 / 0,26 = 0,969, dan P (lainnya | ...) = 0,01875 / 0,26 = 0,072. Bersama-sama mereka menambahkan hingga 1,04!
Mauricio
18

Ram Narasimhan menjelaskan konsep dengan sangat baik di sini di bawah ini adalah penjelasan alternatif melalui contoh kode Naif Bayes dalam aksi.
Ini menggunakan contoh masalah dari buku ini di halaman 351.
Ini adalah kumpulan data yang akan kita gunakan dalam dataset di atas jika kita memberikan hipotesis = lalu berapa probabilitas bahwa dia akan membeli atau tidak akan membeli komputer. Kode di bawah ini persis menjawab pertanyaan itu. Cukup buat file bernama bernama dan rekatkan konten berikut.
masukkan deskripsi gambar di sini
{"Age":'<=30', "Income":"medium", "Student":'yes' , "Creadit_Rating":'fair'}

new_dataset.csv

Age,Income,Student,Creadit_Rating,Buys_Computer
<=30,high,no,fair,no
<=30,high,no,excellent,no
31-40,high,no,fair,yes
>40,medium,no,fair,yes
>40,low,yes,fair,yes
>40,low,yes,excellent,no
31-40,low,yes,excellent,yes
<=30,medium,no,fair,no
<=30,low,yes,fair,yes
>40,medium,yes,fair,yes
<=30,medium,yes,excellent,yes
31-40,medium,no,excellent,yes
31-40,high,yes,fair,yes
>40,medium,no,excellent,no

Berikut adalah kode yang menjelaskan komentar semua yang kami lakukan di sini! [python]

import pandas as pd 
import pprint 

class Classifier():
    data = None
    class_attr = None
    priori = {}
    cp = {}
    hypothesis = None


    def __init__(self,filename=None, class_attr=None ):
        self.data = pd.read_csv(filename, sep=',', header =(0))
        self.class_attr = class_attr

    '''
        probability(class) =    How many  times it appears in cloumn
                             __________________________________________
                                  count of all class attribute
    '''
    def calculate_priori(self):
        class_values = list(set(self.data[self.class_attr]))
        class_data =  list(self.data[self.class_attr])
        for i in class_values:
            self.priori[i]  = class_data.count(i)/float(len(class_data))
        print "Priori Values: ", self.priori

    '''
        Here we calculate the individual probabilites 
        P(outcome|evidence) =   P(Likelihood of Evidence) x Prior prob of outcome
                               ___________________________________________
                                                    P(Evidence)
    '''
    def get_cp(self, attr, attr_type, class_value):
        data_attr = list(self.data[attr])
        class_data = list(self.data[self.class_attr])
        total =1
        for i in range(0, len(data_attr)):
            if class_data[i] == class_value and data_attr[i] == attr_type:
                total+=1
        return total/float(class_data.count(class_value))

    '''
        Here we calculate Likelihood of Evidence and multiple all individual probabilities with priori
        (Outcome|Multiple Evidence) = P(Evidence1|Outcome) x P(Evidence2|outcome) x ... x P(EvidenceN|outcome) x P(Outcome)
        scaled by P(Multiple Evidence)
    '''
    def calculate_conditional_probabilities(self, hypothesis):
        for i in self.priori:
            self.cp[i] = {}
            for j in hypothesis:
                self.cp[i].update({ hypothesis[j]: self.get_cp(j, hypothesis[j], i)})
        print "\nCalculated Conditional Probabilities: \n"
        pprint.pprint(self.cp)

    def classify(self):
        print "Result: "
        for i in self.cp:
            print i, " ==> ", reduce(lambda x, y: x*y, self.cp[i].values())*self.priori[i]

if __name__ == "__main__":
    c = Classifier(filename="new_dataset.csv", class_attr="Buys_Computer" )
    c.calculate_priori()
    c.hypothesis = {"Age":'<=30', "Income":"medium", "Student":'yes' , "Creadit_Rating":'fair'}

    c.calculate_conditional_probabilities(c.hypothesis)
    c.classify()

keluaran:

Priori Values:  {'yes': 0.6428571428571429, 'no': 0.35714285714285715}

Calculated Conditional Probabilities: 

{
 'no': {
        '<=30': 0.8,
        'fair': 0.6, 
        'medium': 0.6, 
        'yes': 0.4
        },
'yes': {
        '<=30': 0.3333333333333333,
        'fair': 0.7777777777777778,
        'medium': 0.5555555555555556,
        'yes': 0.7777777777777778
      }
}

Result: 
yes  ==>  0.0720164609053
no  ==>  0.0411428571429

Semoga ini membantu dalam memahami masalah dengan lebih baik

perdamaian

Sayed Zainul Abideen
sumber
18

Naif Bayes: Naif Bayes berada di bawah pengawasan pembelajaran mesin yang digunakan untuk membuat klasifikasi set data. Ini digunakan untuk memprediksi sesuatu berdasarkan pengetahuan sebelumnya dan asumsi independensi.

Mereka menyebutnya naif karena anggapannya (asumsi bahwa semua fitur dalam dataset sama pentingnya dan independen) benar-benar optimis dan jarang benar di sebagian besar aplikasi dunia nyata.

Ini adalah algoritma klasifikasi yang membuat keputusan untuk kumpulan data yang tidak diketahui. Ini didasarkan pada Bayes Theorem yang menggambarkan probabilitas suatu peristiwa berdasarkan pengetahuan sebelumnya.

Diagram di bawah ini menunjukkan cara kerja Bayes naif

masukkan deskripsi gambar di sini

Formula untuk memprediksi NB:

masukkan deskripsi gambar di sini

Bagaimana cara menggunakan Algoritma Naive Bayes?

Mari kita ambil contoh bagaimana NB wajan

Langkah 1: Pertama kita temukan kemungkinan tabel yang menunjukkan kemungkinan ya atau tidak dalam diagram di bawah ini. Langkah 2: Temukan probabilitas posterior setiap kelas.

masukkan deskripsi gambar di sini

Problem: Find out the possibility of whether the player plays in Rainy condition?

P(Yes|Rainy) = P(Rainy|Yes) * P(Yes) / P(Rainy)

P(Rainy|Yes) = 2/9 = 0.222
P(Yes) = 9/14 = 0.64
P(Rainy) = 5/14 = 0.36

Now, P(Yes|Rainy) = 0.222*0.64/0.36 = 0.39 which is lower probability which means chances of the match played is low.

Untuk referensi lebih lanjut lihat blog ini .

Lihat GitHub Repository Naif-Bayes-Contoh

jitsm555
sumber
14

Saya mencoba menjelaskan aturan Bayes dengan sebuah contoh.

Apa peluang bahwa orang yang dipilih secara acak dari masyarakat adalah perokok?

Anda dapat membalas 10%.

Sekarang, bagaimana jika orang itu adalah seorang pria dan berusia 15 tahun?

Tidak mungkin 60%, sementara kita tahu bahwa persentase perokok sangat rendah. Tidak bisa juga kurang dari 10%. 15 atau 20% adalah tebakan yang lebih baik.

Faktanya, kami mencoba memperbarui tebakan awal dengan bukti baru ( P(smoker) vs. P(smoker | evidence)). Aturan Bayes adalah cara untuk menghubungkan dua probabilitas ini.

P(smoker | evidence) = P(smoker)* p(evidence | smoker)/P(evidence)

Setiap bukti dapat menambah atau mengurangi peluang ini. Sebagai contoh, fakta bahwa ia adalah laki-laki dapat meningkatkan peluang, asalkan persentase (menjadi laki-laki) di antara yang bukan perokok lebih rendah. Dengan kata lain, menjadi seorang pria harus menjadi indikator yang baik untuk menjadi perokok daripada bukan perokok.

Kami dapat menunjukkan kontribusi ini dengan cara lain juga. Untuk setiap fitur, Anda dapat membandingkan kesamaan (probabilitas) fitur tersebut di bawah kondisi yang diberikan dengan kesamaannya saja. ( P(f | x) vs. P(f)).

P(smoker | evidence) / P(smoker) = P(evidence | smoker)/P(evidence)

Sebagai contoh, jika kita tahu bahwa 90% perokok adalah laki-laki, itu masih belum cukup untuk mengatakan apakah menjadi laki-laki merupakan indikator menjadi perokok atau tidak. Misalnya jika probabilitas menjadi laki-laki di masyarakat juga 90%, maka mengetahui bahwa seseorang adalah laki-laki tidak membantu kita ((90% / 90%) = 1. Tetapi jika pria berkontribusi pada 40% masyarakat, tetapi 90% perokok, maka mengetahui bahwa seseorang adalah pria meningkatkan kemungkinan menjadi perokok.(90% / 40%) = 2.25 , jadi itu meningkatkan tebakan awal (10%) sebesar 2,25 menghasilkan 22,5%.

Namun, jika probabilitas menjadi laki-laki adalah 95% di masyarakat, maka terlepas dari kenyataan bahwa persentase pria di antara perokok tinggi (90%)! bukti bahwa seseorang adalah seorang pria mengurangi kemungkinan dia menjadi perokok!(90% / 95%) = 0.95).

Jadi kita punya:

P(smoker | f1, f2, f3,... ) = P(smoker) * contribution of f1* contribution of f2 *... =
P(smoker)* 
(P(being a man | smoker)/P(being a man))*
(P(under 20 | smoker)/ P(under 20))

Perhatikan bahwa dalam rumus ini kita mengasumsikan bahwa menjadi laki-laki dan di bawah 20 adalah fitur independen sehingga kami mengalikannya, itu berarti mengetahui bahwa seseorang di bawah 20 tidak memiliki pengaruh pada menebak bahwa ia adalah laki-laki atau perempuan. Tapi itu mungkin tidak benar, misalnya mungkin sebagian besar remaja dalam masyarakat adalah laki-laki ...

Untuk menggunakan rumus ini di classifier

Pengklasifikasi diberikan dengan beberapa fitur (menjadi seorang pria dan berusia di bawah 20) dan harus memutuskan apakah dia seorang perokok atau tidak (ini adalah dua kelas). Ia menggunakan rumus di atas untuk menghitung probabilitas setiap kelas di bawah bukti (fitur), dan itu menetapkan kelas dengan probabilitas tertinggi untuk input. Untuk memberikan probabilitas yang diperlukan (90%, 10%, 80% ...) ia menggunakan set pelatihan. Sebagai contoh, ini menghitung orang-orang dalam rangkaian pelatihan yang merupakan perokok dan mendapati mereka berkontribusi 10% dari sampel. Kemudian untuk perokok memeriksa berapa banyak dari mereka adalah laki-laki atau perempuan .... berapa banyak di atas 20 atau di bawah 20 .... Dengan kata lain, ia mencoba untuk membangun distribusi probabilitas fitur untuk setiap kelas berdasarkan pelatihan data.

Ahmad
sumber