Proste wyjaśnienie klasyfikacji Naiwnego Bayesa

547

Trudno mi zrozumieć proces Naive Bayes i zastanawiałem się, czy ktoś mógłby to wyjaśnić prostym krokiem po angielsku. Rozumiem, że porównanie wymaga czasu, gdy wystąpiło prawdopodobieństwo, ale nie mam pojęcia, w jaki sposób dane szkolenia są powiązane z rzeczywistym zestawem danych.

Proszę wyjaśnić mi, jaką rolę odgrywa zestaw treningowy. Podaję tutaj bardzo prosty przykład owoców, na przykład bananów

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
źródło
18
To całkiem proste, jeśli rozumiesz Twierdzenie Bayesa. Jeśli nie czytałeś twierdzenia Bayesa, wypróbuj ten link yudkowsky.net/rational/bayes .
Szczypta
1
proszę wyjaśnij swój przykład. dla pierwszego wiersza w zestawie treningowym: czy runda jest klasyfikowana jako czerwona, czy też obie zmienne są okrągłe i czerwone, które są klasyfikowane jako coś innego? jeśli to drugie, jakie są klasyfikacje dla każdej pozycji w zestawie treningowym?
K Mehta
22
UWAGA: Poniższa zaakceptowana odpowiedź nie jest tradycyjnym przykładem dla Naïve Bayes. Jest to głównie wdrożenie ne Neighbor Neighbor. Przeczytaj odpowiednio.
chmullig
1
@Jaggerjack: Odpowiedź RamNarasimhana jest dobrze wyjaśniona niż odpowiedź zaakceptowana.
Unmesha SreeVeni,
2
Cóż, jeśli zobaczysz wykres z kropkami, to tak naprawdę nie oznacza, że ​​to KNN :) To, jak obliczysz prawdopodobieństwa, zależy od ciebie. Naiwny Bayes oblicza go, używając wcześniejszego pomnożenia przez prawdopodobieństwo, tak właśnie pokazał Yavar w swojej odpowiedzi. Sposób dotarcia do tych prawdopodobieństw nie jest tutaj naprawdę ważny. Odpowiedź jest absolutnie poprawna i nie widzę w tym żadnych problemów.
avinash shah

Odpowiedzi:

672

Twoje pytanie, jak rozumiem, jest podzielone na dwie części, z których pierwsza wymaga lepszego zrozumienia klasyfikatora Naive Bayes, a druga część to zamieszanie wokół zestawu treningowego.

Ogólnie rzecz biorąc, wszystkie algorytmy uczenia maszynowego muszą być przeszkolone do nadzorowanych zadań uczenia się, takich jak klasyfikacja, prognozowanie itp., Lub do zadań uczenia się bez nadzoru, takich jak tworzenie klastrów.

Na etapie szkolenia algorytmy są uczone z konkretnym zestawem danych wejściowych (zestawem szkoleniowym), abyśmy później mogli je przetestować pod kątem nieznanych danych wejściowych (których nigdy wcześniej nie widzieli), dla których mogą klasyfikować lub przewidywać itp. (W przypadku nadzorowanych uczenia się) na podstawie ich uczenia się. Na tym opiera się większość technik uczenia maszynowego, takich jak sieci neuronowe, SVM, Bayesian itp.

Tak więc w ogólnym projekcie Machine Learning zasadniczo musisz podzielić swój zestaw danych wejściowych na zestaw programistyczny (zestaw szkoleniowy + zestaw testowy) i zestaw testowy (lub zestaw ewaluacyjny). Pamiętaj, że twoim podstawowym celem byłoby, aby Twój system uczył się i klasyfikował nowe dane wejściowe, których nigdy wcześniej nie widziały ani w zestawie deweloperskim, ani w zestawie testowym.

Zestaw testowy ma zwykle ten sam format, co zestaw szkoleniowy. Jednak bardzo ważne jest, aby zestaw testowy odróżniał się od korpusu szkoleniowego: jeśli po prostu użyjemy zestawu szkoleniowego jako zestawu testowego, wówczas model, który po prostu zapamiętał swój wkład, bez uczenia się, jak uogólniać na nowe przykłady, otrzymałby wprowadzającą w błąd wysokie wyniki.

Zasadniczo na przykład 70% naszych danych można wykorzystać jako przypadki szkoleniowe. Pamiętaj także o losowym podzieleniu oryginalnego zestawu na zestawy szkoleniowe i testowe .

Teraz przechodzę do twojego drugiego pytania dotyczącego Naive Bayes.

Aby zademonstrować koncepcję klasyfikacji Naïve Bayes, rozważ poniższy przykład:

wprowadź opis zdjęcia tutaj

Jak wskazano, cele mogą być klasyfikowane jako GREENalbo RED. Naszym zadaniem jest klasyfikowanie nowych przypadków po ich przybyciu, tj. Decydowanie, do której etykiety klasy należą, na podstawie obecnie istniejących obiektów.

Ponieważ istnieją dwa razy więcej GREENobiektów jak REDuzasadnione jest, aby sądzić, że nowy przypadek (który nie został jeszcze zaobserwować) jest dwukrotnie częściej mają członkostwa GREENzamiast RED. W analizie bayesowskiej przekonanie to znane jest jako wcześniejsze prawdopodobieństwo. Wcześniejsze prawdopodobieństwa opierają się na wcześniejszych doświadczeniach, w tym przypadku procentach GREENi REDobiektach, i często są wykorzystywane do przewidywania wyników, zanim faktycznie się pojawią.

Dlatego możemy napisać:

Wcześniejsze prawdopodobieństwoGREEN :number of GREEN objects / total number of objects

Wcześniejsze prawdopodobieństwoRED :number of RED objects / total number of objects

Ponieważ istnieje w sumie 60obiektów, 40których są GREENi 20 RED, nasze wcześniejsze prawdopodobieństwa członkostwa w klasie są następujące:

Wcześniejsze prawdopodobieństwo dlaGREEN :40 / 60

Wcześniejsze prawdopodobieństwo dlaRED :20 / 60

Po sformułowaniu naszego wcześniejszego prawdopodobieństwa jesteśmy teraz gotowi do sklasyfikowania nowego obiektu ( WHITEokrąg na schemacie poniżej). Ponieważ obiekty są dobrze zgrupowane, uzasadnione jest założenie, że im więcej GREEN(lub RED) obiektów w pobliżu X, tym większe prawdopodobieństwo, że nowe przypadki należą do tego konkretnego koloru. Aby zmierzyć to prawdopodobieństwo, rysujemy okrąg wokół X, który obejmuje pewną liczbę (do wyboru a priori) punktów, niezależnie od ich etykiet klas. Następnie obliczamy liczbę punktów w okręgu należącym do każdej etykiety klasy. Na podstawie tego obliczamy prawdopodobieństwo:

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

Od powyższej ilustracji, to jest oczywiste, że Prawdopodobieństwo Xpodana GREENjest mniejszy niż Prawdopodobieństwo Xpodane RED, ponieważ krąg obejmuje 1 GREENprzedmiot i 3 REDte. A zatem:

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

Chociaż wcześniejsze prawdopodobieństwa wskazują, że Xmogą należeć GREEN(biorąc pod uwagę, że jest ich dwa razy więcej w GREENporównaniu do RED), prawdopodobieństwo wskazuje inaczej; przynależność do klasy Xto RED(biorąc pod uwagę, że w pobliżu jest więcej REDobiektów Xniż GREEN). W analizie bayesowskiej ostateczna klasyfikacja jest tworzona przez połączenie obu źródeł informacji, tj. Wcześniejszego i prawdopodobieństwa, w celu utworzenia późniejszego prawdopodobieństwa przy użyciu tak zwanej reguły Bayesa (nazwanej na cześć ks. Thomasa Bayesa 1702-1761).

wprowadź opis zdjęcia tutaj

Wreszcie, klasyfikujemy X, REDponieważ jego członkostwo w klasie osiąga największe prawdopodobieństwo a posteriori.

Jawar
źródło
39
czy powyższy algorytm nie przypomina bardziej najbliższych sąsiadów?
Renaud
251
Ta odpowiedź jest myląca - łączy KNN (k najbliższych sąsiadów) i naiwnych bayesów.
Michal Illich,
7
Odpowiedź szła ładnie, dopóki nie pojawiło się prawdopodobieństwo. Więc @Yavar użył najbliższych sąsiadów K do obliczenia prawdopodobieństwa. Jak to jest poprawne? Jeśli tak, jakie są inne metody obliczania prawdopodobieństwa?
wrahool
1
Użyłeś koła jako przykładu prawdopodobieństwa. Czytałem o bayesach Nauss Gaussa, gdzie prawdopodobieństwo jest gaussowskie. Jak to można wytłumaczyć?
umair durrani
1
Właściwie odpowiedź z knn jest poprawna. Jeśli nie znasz rozkładu, a tym samym gęstości prawdopodobieństwa takiego rozkładu, musisz jakoś go znaleźć. Można to zrobić za pomocą kNN lub jądra. Myślę, że brakuje kilku rzeczy. Możesz jednak sprawdzić tę prezentację .
CS
1053

Zdaję sobie sprawę, że to stare pytanie z ustaloną odpowiedzią. Powodem, dla którego piszę, jest to, że zaakceptowana odpowiedź zawiera wiele elementów k-NN ( k- najbliższych sąsiadów), inny algorytm.

Zarówno k-NN, jak i NaiveBayes są algorytmami klasyfikacji. Koncepcyjnie, k-NN używa pojęcia „bliskości” do klasyfikowania nowych bytów. W k-NN „bliskość” jest modelowana za pomocą takich pomysłów, jak odległość euklidesowa lub odległość kosinusowa. Natomiast w NaiveBayes pojęcie „prawdopodobieństwa” służy do klasyfikowania nowych bytów.

Ponieważ pytanie dotyczy Naive Bayes, oto jak opisałbym pomysły i kroki do kogoś. Spróbuję to zrobić przy użyciu jak najmniejszej liczby równań i możliwie jak najprostszego angielskiego.

Po pierwsze, prawdopodobieństwo warunkowe i reguła Bayesa

Zanim ktoś zrozumie i doceni niuanse Naive Bayesa, musi najpierw poznać kilka powiązanych pojęć, a mianowicie ideę warunkowego prawdopodobieństwa i Regułę Bayesa. (Jeśli znasz te koncepcje, przejdź do sekcji zatytułowanej Getting to Naive Bayes ' )

Prawdopodobieństwo warunkowe w prostym języku angielskim: jakie jest prawdopodobieństwo, że coś się wydarzy, biorąc pod uwagę, że coś innego już się wydarzyło.

Powiedzmy, że istnieje jakiś Wynik O. I niektóre Dowody E. Ze sposobu, w jaki te prawdopodobieństwa są zdefiniowane: Prawdopodobieństwo, że zarówno Wynik O, jak i Dowód E są następujące: (Prawdopodobieństwo wystąpienia O) pomnożone przez (Prawdopodobieństwo E, biorąc pod uwagę, że O się stało)

Jeden przykład, aby zrozumieć prawdopodobieństwo warunkowe:

Powiedzmy, że mamy kolekcję amerykańskich senatorów. Senatorami mogą być Demokraci lub Republikanie. Są także płci męskiej lub żeńskiej.

Jeśli wybieramy jednego senatora całkowicie losowo, jakie jest prawdopodobieństwo, że ta osoba jest demokratką? Prawdopodobieństwo warunkowe może pomóc nam odpowiedzieć na to pytanie.

Prawdopodobieństwo (Demokratki i Senatora Kobiet) = Prob (Senator jest Demokratą) pomnożone przez Warunkowe Prawdopodobieństwo Być Kobietą, biorąc pod uwagę, że są Demokratami.

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

Możemy obliczyć dokładnie to samo, odwrotnie:

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

Zrozumienie reguły Bayesa

Koncepcyjnie jest to sposób na przejście od P (Dowód | Znany wynik) do P (Wynik | Znany dowód). Często wiemy, jak często obserwuje się określone dowody, biorąc pod uwagę znany wynik . Biorąc pod uwagę dowody, musimy wykorzystać ten znany fakt do obliczenia odwrotności, do obliczenia prawdopodobieństwa wystąpienia tego wyniku .

P (Wynik podany, że znamy pewne dowody) = P (Podany dowód, że znamy Wynik) razy Prob (Wynik), skalowany przez P (Dowód)

Klasyczny przykład na zrozumienie reguły Bayesa:

Probability of Disease D given Test-positive = 

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

Teraz wszystko to było tylko wstępem do Naive Bayes.

Dojazd do Naive Bayes

Do tej pory rozmawialiśmy tylko o jednym dowodzie. W rzeczywistości musimy przewidzieć wynik na podstawie wielu dowodów. W takim przypadku matematyka staje się bardzo skomplikowana. Aby obejść tę komplikację, jednym z podejść jest „odłączenie” wielu dowodów i traktowanie każdego z nich jako niezależnego. Takie podejście nazywa się naiwnym Bayesem.

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

Wiele osób decyduje się zapamiętać to jako:

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

Zwróć uwagę na kilka rzeczy na temat tego równania:

  • Jeśli Prob (dowód | wynik) wynosi 1, to mnożymy tylko przez 1.
  • Jeśli Prob (niektóre konkretne dowody | wynik) wynosi 0, to cały prob. staje się 0. Jeśli zobaczysz sprzeczne dowody, możemy wykluczyć ten wynik.
  • Ponieważ dzielimy wszystko przez P (dowód), możemy nawet uciec bez obliczania tego.
  • Intuicyjność stojąca za pomnożeniem przez wcześniejsze jest taka, że ​​dajemy wysokie prawdopodobieństwo częstszych wyników, a niskie prawdopodobieństwo mało prawdopodobnych. Są również nazywane base ratesi są sposobem na skalowanie naszych przewidywanych prawdopodobieństw.

Jak zastosować NaiveBayes do przewidywania wyniku?

Po prostu uruchom powyższą formułę dla każdego możliwego wyniku. Ponieważ próbujemy sklasyfikować , każdy wynik nazywa się „ classa”. class label.Naszym zadaniem jest przyjrzenie się dowodom, rozważenie prawdopodobieństwa, że ​​będzie to ta klasa lub klasa, i przypisanie etykiety każdej jednostce. Ponownie przyjmujemy bardzo proste podejście: klasa o najwyższym prawdopodobieństwie zostaje ogłoszona „zwycięzcą” i ta etykieta klasy zostaje przypisana do tej kombinacji dowodów.

Przykład owoców

Wypróbujmy to na przykładzie, aby zwiększyć nasze zrozumienie: OP poprosił o przykład identyfikacji „owocowej”.

Powiedzmy, że mamy dane dotyczące 1000 kawałków owoców. Zdarza się, że to banan , pomarańcza lub inny owoc . Znamy 3 cechy każdego owocu:

  1. Czy to jest długie
  2. Czy to jest słodkie i
  3. Jeśli ma kolor żółty.

To jest nasz „zestaw treningowy”. Wykorzystamy to, aby przewidzieć rodzaj każdego nowego napotkanego owocu.

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
             ___________________________________________________________________

Możemy wstępnie obliczyć wiele rzeczy na temat naszej kolekcji owoców.

Tak zwane „wcześniejsze” prawdopodobieństwa. (Gdybyśmy nie znali żadnego z atrybutów owoców, byłoby to nasze przypuszczenie.) To są naszebase rates.

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

Prawdopodobieństwo „dowodów”

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

Prawdopodobieństwo „prawdopodobieństwa”

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

Biorąc pod uwagę owoc, jak go sklasyfikować?

Powiedzmy, że otrzymaliśmy właściwości nieznanego owocu i poprosiliśmy go o sklasyfikowanie. Mówi się nam, że owoc jest długi, słodki i żółty. Czy to banan? Czy to pomarańcza? A może to jakiś inny owoc?

Możemy po prostu uruchomić liczby dla każdego z 3 wyników, jeden po drugim. Następnie wybieramy najwyższe prawdopodobieństwo i „klasyfikujemy” nasz nieznany owoc jako należący do klasy, która miała najwyższe prawdopodobieństwo na podstawie naszych wcześniejszych dowodów (nasz zestaw treningowy 1000 owoców):

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)

Przy użyciu przeważającego marginesu ( 0.252 >> 0.01875), klasyfikujemy ten słodki / długi / żółty owoc jako prawdopodobny banan.

Dlaczego klasyfikator Bayes jest tak popularny?

Zobacz, co w końcu sprowadza się. Tylko trochę liczenia i mnożenia. Możemy wstępnie obliczyć wszystkie te warunki, dzięki czemu klasyfikacja staje się łatwa, szybka i wydajna.

Let z = 1 / P(evidence). Teraz szybko obliczamy następujące trzy wielkości.

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)  ...

Przypisz etykietę klasy, która jest najwyższą liczbą, i gotowe.

Pomimo nazwy, Naive Bayes okazuje się być doskonały w niektórych zastosowaniach. Klasyfikacja tekstu to jeden z obszarów, w którym naprawdę świeci.

Mam nadzieję, że pomaga w zrozumieniu koncepcji algorytmu Naive Bayes.

Ram Narasimhan
źródło
14
Dzięki za bardzo jasne wytłumaczenie! Z łatwością jeden z lepszych unoszących się w Internecie. Pytanie: ponieważ każde P (wynik / dowód) jest mnożone przez 1 / z = p (dowód) (co w przypadku owoców oznacza, że ​​każde jest zasadniczo prawdopodobieństwem opartym wyłącznie na poprzednich dowodach), czy poprawne byłoby stwierdzenie, że z nie robi w ogóle nie ma znaczenia dla Naïve Bayes? Co oznaczałoby, że jeśli, powiedzmy, trafiłby się na długi / słodki / żółty owoc, który nie był bananem, zostałby nieprawidłowo sklasyfikowany.
kowariancja
7
@ E.Chow Tak, masz rację, że obliczenia z nie mają znaczenia dla Naive Bayes. (Jest to sposób na skalowanie prawdopodobieństw między 0 a 1.) Zauważ, że z jest iloczynem prawdopodobieństwa wszystkich dostępnych dowodów. (Różni się od priors, która jest stawką podstawową klas.) Masz rację: jeśli znalazłeś długi / słodki / żółty owoc, który nie jest bananem, NB sklasyfikuje go niepoprawnie jako banana, na podstawie tego zestaw treningowy. Algorytm jest „najlepszym przypuszczeniem probabilistycznym opartym na dowodach”, dlatego czasami będzie błędnie klasyfikowany.
Ram Narasimhan,
1
@Jasper W tabeli znajduje się łącznie 200 „Innych owoców”, a 50 z nich jest żółtych. Biorąc pod uwagę, że owoc to „Inne owoce”, wszechświat ma 200. 50 z nich jest żółtych. Stąd 50/200. Należy pamiętać, że 800 to łączna liczba żółtych owoców. Więc jeśli chcielibyśmy P (inny owoc / żółty) zrobilibyśmy to, co sugerujesz: 50/800.
Ram Narasimhan
3
Absolutnie świetne wyjaśnienie. Nie potrafię zrozumieć tego algorytmu z prac naukowych i książek. Ponieważ ezoteryczne wyjaśnienie jest ogólnie przyjętym stylem pisania. To wszystko i takie łatwe. Dzięki.
Dr Suat Atan
3
Dlaczego prawdopodobieństwa nie sumują się do 1? Dowód wynosi 0,26 w przykładzie (500/100 * 650/1000 * 800/1000), a zatem końcowe P (banan | ...) = 0,252 / 0,26 = 0,969, a P (inny | ...) = 0,01875 / 0,26 = 0,072. Razem sumują się do 1,04!
Mauricio,
18

Ram Narasimhan bardzo ładnie wyjaśnił tę koncepcję poniżej, stanowi alternatywne wyjaśnienie w przykładzie kodu Naive Bayes w akcji.
Używa przykładowego problemu z tej książki na stronie 351.
To zestaw danych, którego będziemy używać w powyższym zestawie danych, jeśli podamy hipoteza = to jakie jest prawdopodobieństwo, że kupi lub nie kupi komputera. Poniższy kod dokładnie odpowiada na to pytanie. Po prostu utwórz plik o nazwie o nazwie i wklej następującą treść.
wprowadź opis zdjęcia tutaj
{"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

Oto kod, w którym komentarze wyjaśniają wszystko, co tutaj robimy! [pyton]

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()

wynik:

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

Mam nadzieję, że pomoże to w lepszym zrozumieniu problemu

pokój

Sayed Zainul Abideen
źródło
18

Naive Bayes: Naive Bayes podlega nadzorowi uczenia maszynowego, które służyło do klasyfikacji zestawów danych. Służy do przewidywania rzeczy na podstawie wcześniejszej wiedzy i założeń dotyczących niezależności.

Nazywają to naiwnością, ponieważ są to założenia (zakłada, że ​​wszystkie funkcje zestawu danych są równie ważne i niezależne) są naprawdę optymistyczne i rzadko prawdziwe w większości rzeczywistych aplikacji.

Jest to algorytm klasyfikacji, który decyduje o nieznanym zbiorze danych. Opiera się na twierdzeniu Bayesa, które opisuje prawdopodobieństwo zdarzenia na podstawie jego wcześniejszej wiedzy.

Poniższy schemat pokazuje, jak działa naiwny Bayes

wprowadź opis zdjęcia tutaj

Wzór do przewidzenia NB:

wprowadź opis zdjęcia tutaj

Jak korzystać z naiwnego algorytmu Bayesa?

Weźmy przykład tego, jak działa NB

Krok 1: Najpierw dowiadujemy się o prawdopodobieństwie tabeli, która pokazuje prawdopodobieństwo tak lub nie na poniższym schemacie. Krok 2: Znajdź prawdopodobieństwo tylne każdej klasy.

wprowadź opis zdjęcia tutaj

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.

Więcej informacji można znaleźć na blogu.

Patrz: GitHub Repository Naive-Bayes-Przykłady

jitsm555
źródło
14

Próbuję wyjaśnić zasadę Bayesa przykładem.

Jaka jest szansa, że ​​przypadkowa osoba wybrana ze społeczeństwa jest palaczem?

Możesz odpowiedzieć 10%.

Teraz, co zrobić, jeśli dana osoba jest mężczyzna i 15 lat?

Nie może to być 60%, podczas gdy wiemy, że odsetek palaczy był bardzo niski. Nie może to być również mniej niż 10%. 15 lub 20% to lepsze domysły.

W rzeczywistości staramy się zaktualizować początkowe domysły o nowe dowody ( P(smoker) vs. P(smoker | evidence)). Reguła Bayesa jest sposobem na połączenie tych dwóch prawdopodobieństw.

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

Każdy dowód może zwiększyć lub zmniejszyć tę szansę. Na przykład fakt, że jest mężczyzną, może zwiększyć szansę, pod warunkiem, że ten odsetek (bycie mężczyzną) wśród osób niepalących jest niższy. Innymi słowy, bycie mężczyzną musi być dobrym wskaźnikiem bycia palaczem, a nie niepalącym.

Możemy pokazać ten wkład również w inny sposób. Dla każdej cechy można porównać pospolitość (prawdopodobieństwo) tej cechy w danych warunkach z samą jej pospolitością. ( P(f | x) vs. P(f)).

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

Na przykład, jeśli wiemy, że 90% palaczy to mężczyźni, nie wystarczy stwierdzić, czy bycie mężczyzną jest wskaźnikiem bycia palaczem, czy nie. Na przykład jeśli prawdopodobieństwo bycia mężczyzną w społeczeństwie wynosi również 90%, to wiedza o tym, że ktoś jest mężczyzną, nam nie pomaga ((90% / 90%) = 1. Ale jeśli mężczyźni przyczyniają się do 40% społeczeństwa, ale 90% palaczy, to wiedza o tym, że ktoś jest mężczyzną, zwiększa szansę na bycie palaczem (90% / 40%) = 2.25, więc zwiększa początkowe przypuszczenie (10%) o 2,25, co daje 22,5%.

Jeśli jednak prawdopodobieństwo bycia mężczyzną wynosi 95% w społeczeństwie, to niezależnie od tego, że odsetek mężczyzn wśród palaczy jest wysoki (90%)! dowód, że ktoś jest mężczyzną, zmniejsza szansę, że zostanie palaczem! (90% / 95%) = 0.95).

Więc mamy:

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))

Zauważ, że w tej formule założyliśmy, że bycie mężczyzną i bycie poniżej 20 roku życia są niezależnymi cechami, więc pomnożymy je, co oznacza, że ​​wiedza, że ​​ktoś ma poniżej 20 lat, nie ma wpływu na odgadnięcie, że jest mężczyzną lub kobietą. Ale może nie być to prawdą, na przykład być może większość okresu dojrzewania w społeczeństwie to mężczyźni ...

Aby użyć tej formuły w klasyfikatorze

Klasyfikator ma pewne cechy (jest mężczyzną i ma mniej niż 20 lat) i musi zdecydować, czy jest palaczem, czy nie (są to dwie klasy). Wykorzystuje powyższy wzór do obliczenia prawdopodobieństwa każdej klasy na podstawie dowodów (cech) i przypisuje klasę o najwyższym prawdopodobieństwie do danych wejściowych. Aby podać wymagane prawdopodobieństwa (90%, 10%, 80% ...) używa zestawu treningowego. Na przykład zlicza osoby w zestawie szkoleniowym, które są palaczami i stwierdzają, że stanowią 10% próby. Następnie dla palaczy sprawdza, ilu z nich to mężczyźni lub kobiety .... ilu jest powyżej 20 lub poniżej 20 lat ... Innymi słowy, próbuje zbudować rozkład prawdopodobieństwa cech dla każdej klasy na podstawie szkolenia dane.

Ahmad
źródło