Una semplice spiegazione della classificazione Naive Bayes


547

Sto trovando difficile capire il processo di Naive Bayes e mi chiedevo se qualcuno potesse spiegarlo con un semplice processo passo-passo in inglese. Comprendo che il confronto tra i tempi si è verificato come una probabilità, ma non ho idea di come i dati di formazione siano correlati al set di dati effettivo.

Per favore, mi dia una spiegazione del ruolo svolto dall'allenamento. Sto dando un esempio molto semplice per i frutti qui, come ad esempio la banana

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

18
È abbastanza facile se capisci il teorema di Bayes. Se non hai letto il teorema di Bayes, prova questo link yudkowsky.net/rational/bayes .
Pizzica l'

1
per favore, spiega il tuo esempio. per la prima riga del tuo set di allenamento: round è classificato come rosso o entrambe le variabili round e red sono classificate come qualcos'altro? se è quest'ultimo, quali sono le classificazioni per ciascuna voce nel tuo set di formazione?
K Mehta,

22
NOTA: la risposta accettata di seguito non è un esempio tradizionale di Naïve Bayes. Si tratta principalmente dell'implementazione del vicino più vicino. Leggi di conseguenza.
Chmullig,

1
@Jaggerjack: la risposta di RamNarasimhan è ben spiegata della risposta accettata.
Unmesha SreeVeni,

2
Bene, se si vede un grafico con alcuni punti che non significa che sia KNN :) Il modo in cui si calcolano le probabilità dipende tutto da te. Naive Bayes lo calcola usando il precedente moltiplicato per la probabilità, quindi questo è ciò che Yavar ha mostrato nella sua risposta. Come arrivare a queste probabilità non è davvero importante qui. La risposta è assolutamente corretta e non ci sono problemi.
avinash shah,

Risposte:


672

La mia domanda, come ho capito, è divisa in due parti, la prima parte è che hai bisogno di una migliore comprensione del classificatore Naive Bayes e la seconda parte è la confusione che circonda il set di addestramento.

In generale, tutti gli algoritmi di Machine Learning devono essere addestrati per attività di apprendimento supervisionato come classificazione, previsione ecc. O per attività di apprendimento senza supervisione come il clustering.

Durante la fase di addestramento, agli algoritmi viene insegnato un particolare set di dati di input (set di training) in modo che in seguito possiamo testarli per input sconosciuti (che non hanno mai visto prima) per i quali possono classificare o prevedere ecc. (In caso di supervisione apprendimento) basato sul loro apprendimento. Questo è ciò su cui si basano la maggior parte delle tecniche di Machine Learning come Neural Networks, SVM, Bayesian ecc.

Quindi in un progetto generale di Machine Learning fondamentalmente devi dividere il tuo set di input in un set di sviluppo (set di addestramento + set di test di sviluppo) e un set di test (o set di valutazione). Ricorda che il tuo obiettivo di base sarebbe che il tuo sistema apprenda e classifichi nuovi input che non hanno mai visto prima nel set di sviluppo o nel set di test.

Il set di test in genere ha lo stesso formato del set di training. Tuttavia, è molto importante che il set di test sia distinto dal corpus di training: se riutilizzassimo semplicemente il set di training come set di test, un modello che semplicemente memorizzava il suo input, senza imparare come generalizzare a nuovi esempi, riceverebbe in modo fuorviante miglior punteggio.

In generale, ad esempio, il 70% dei nostri dati può essere utilizzato come set di casi di formazione. Ricorda anche di dividere il set originale nell'allenamento e nei set di test in modo casuale .

Ora arrivo alla tua altra domanda su Naive Bayes.

Per dimostrare il concetto di classificazione Naïve Bayes, si consideri l'esempio riportato di seguito:

inserisci qui la descrizione dell'immagine

Come indicato, gli oggetti possono essere classificati come GREENo RED. Il nostro compito è classificare i nuovi casi al loro arrivo, ovvero decidere a quale etichetta di classe appartengono, in base agli oggetti attualmente esistenti.

Dal momento che ci sono il doppio del numero di GREENoggetti RED, è ragionevole credere che un nuovo caso (che non è stato ancora osservato) abbia il doppio delle probabilità di avere l'appartenenza GREENpiuttosto che RED. Nell'analisi bayesiana, questa convinzione è nota come probabilità precedente. Le probabilità precedenti si basano sull'esperienza precedente, in questo caso la percentuale GREENe gli REDoggetti, e spesso utilizzati per prevedere i risultati prima che si verifichino effettivamente.

Quindi, possiamo scrivere:

Probabilità prioritaria diGREEN :number of GREEN objects / total number of objects

Probabilità prioritaria diRED :number of RED objects / total number of objects

Poiché esiste un totale di 60oggetti, 40di cui sono GREENe 20 RED, le nostre probabilità precedenti per l'appartenenza alla classe sono:

Probabilità prioritaria perGREEN :40 / 60

Probabilità prioritaria perRED :20 / 60

Dopo aver formulato la nostra probabilità precedente, siamo ora pronti a classificare un nuovo oggetto ( WHITEcerchio nel diagramma seguente). Dato che gli oggetti sono ben raggruppati, è ragionevole supporre che più GREEN(o RED) oggetti nelle vicinanze di X, tanto più probabile che i nuovi casi appartengano a quel particolare colore. Per misurare questa probabilità, disegniamo un cerchio attorno a X che comprende un numero (da scegliere a priori) di punti indipendentemente dalle etichette della loro classe. Quindi calcoliamo il numero di punti nel cerchio appartenenti a ciascuna etichetta di classe. Da questo calcoliamo la probabilità:

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

Dall'illustrazione sopra, è chiaro che la probabilità del Xdato GREENè più piccola della probabilità del Xdato RED, poiché il cerchio comprende 1 GREENoggetti e 3 REDquelli. Così:

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

Sebbene le probabilità precedenti indichino che Xpotrebbero appartenere GREEN(dato che ce ne sono il doppio GREENrispetto a RED) la probabilità indica diversamente; che l'appartenenza alla classe di Xè RED(dato che ci sono più REDoggetti nelle vicinanze di Xdi GREEN). Nell'analisi bayesiana, la classificazione finale viene prodotta combinando entrambe le fonti di informazione, cioè la priorità e la probabilità, per formare una probabilità posteriore usando la cosiddetta regola di Bayes (dal nome del Rev. Thomas Bayes 1702-1761).

inserisci qui la descrizione dell'immagine

Infine, classifichiamo X come REDpoiché la sua appartenenza alla classe raggiunge la maggiore probabilità posteriore.


39
questo algoritmo sopra non è più simile ai vicini k-più vicini?
Renaud,

251
Questa risposta è confusa: mescola KNN (k vicini più vicini) e insenature ingenue.
Michal Illich,

7
La risposta stava procedendo bene fino a quando è emersa la probabilità. Quindi @Yavar ha usato i vicini K-più vicini per calcolare la probabilità. Quanto è corretto? Se lo è, quali sono alcuni altri metodi per calcolare la probabilità?
wrahool,

1
Hai usato un cerchio come esempio di probabilità. Ho letto di bayes gaussiani naive dove la probabilità è gaussiana. Come può essere spiegato?
Umair Durrani,

1
In realtà, la risposta con knn è corretta. Se non conosci la distribuzione e quindi la probabilità densitay di tale distribuzione, devi trovarla in qualche modo. Questo può essere fatto tramite kNN o kernel. Penso che manchino alcune cose. Puoi dare un'occhiata a questa presentazione però.
CS

1053

Mi rendo conto che questa è una vecchia domanda, con una risposta affermata. Il motivo per cui sto postando è che la risposta accettata ha molti elementi di k-NN ( k -nearest neighbours), un algoritmo diverso.

Sia k-NN che NaiveBayes sono algoritmi di classificazione. Concettualmente, k-NN usa l'idea di "vicinanza" per classificare nuove entità. In k-NN la "vicinanza" è modellata con idee come la distanza euclidea o la distanza del coseno. Al contrario, in NaiveBayes, il concetto di "probabilità" viene utilizzato per classificare nuove entità.

Poiché la domanda riguarda Naive Bayes, ecco come descriverei le idee e i passaggi per qualcuno. Proverò a farlo con il minor numero di equazioni e in parole povere il più possibile.

Primo, Probabilità condizionale e regola di Bayes

Prima che qualcuno possa capire e apprezzare le sfumature di Naive Bayes, devono prima conoscere un paio di concetti correlati, vale a dire l'idea della probabilità condizionale e la regola di Bayes. (Se hai familiarità con questi concetti, passa alla sezione intitolata Come arrivare a Naive Bayes )

Probabilità condizionale in parole povere: qual è la probabilità che accada qualcosa, dato che è già successo qualcos'altro .

Diciamo che c'è un risultato O. E un po 'di prova E. Dal modo in cui sono definite queste probabilità: La probabilità di avere sia il risultato O che la prova E è: (Probabilità di O che si verificano) moltiplicata per (Prob of E dato che O è successo)

Un esempio per comprendere la probabilità condizionale:

Diciamo che abbiamo una collezione di senatori statunitensi. I senatori potrebbero essere democratici o repubblicani. Sono anche maschi o femmine.

Se selezioniamo un senatore in modo completamente casuale, qual è la probabilità che questa persona sia una donna democratica? La probabilità condizionale può aiutarci a rispondere a questo.

Probabilità di (democratica e senatrice) = Prob (senatrice è democratica) moltiplicata per la probabilità condizionale di essere femmina dato che sono democratiche.

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

Potremmo calcolare esattamente la stessa cosa, al contrario:

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

Comprensione della regola di Bayes

Concettualmente, questo è un modo per passare da P (Evidenza | Risultato noto) a P (Risultato | Evidenza nota). Spesso sappiamo con che frequenza vengono osservate alcune prove particolari, dato un risultato noto . Dobbiamo usare questo fatto noto per calcolare il contrario, per calcolare la possibilità che si verifichi quel risultato , date le prove.

P (risultato dato che conosciamo alcune prove) = P (prova dato che conosciamo il risultato) volte Prob (risultato), ridimensionato dalla P (prova)

L'esempio classico per comprendere la regola di 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)

Ora, tutto questo era solo un preambolo, per arrivare a Naive Bayes.

Arrivare a Naive Bayes

Finora abbiamo parlato solo di una prova. In realtà, dobbiamo prevedere un risultato dato più prove. In tal caso, la matematica diventa molto complicata. Per ovviare a questa complicazione, un approccio consiste nel "disaccoppiare" più elementi di prova e nel considerare ciascuna parte di prove come indipendente. Questo approccio è il motivo per cui questo si chiama ingenuo Bayes.

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

Molte persone scelgono di ricordare questo come:

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

Nota alcune cose su questa equazione:

  • Se il Prob (prove | risultato) è 1, allora stiamo solo moltiplicando per 1.
  • Se il Prob (alcune prove particolari | esito) è 0, allora l'intero prob. diventa 0. Se vedi prove contraddittorie, possiamo escludere questo risultato.
  • Dato che dividiamo tutto per P (Evidenza), possiamo persino scappare senza calcolarlo.
  • L'intuizione alla base della moltiplicazione per il precedente è tale da dare un'alta probabilità a risultati più comuni e basse probabilità a risultati improbabili. Questi sono anche chiamati base ratese sono un modo per ridimensionare le nostre probabilità previste.

Come applicare NaiveBayes per prevedere un risultato?

Basta eseguire la formula sopra per ogni possibile risultato. Dal momento che stiamo cercando di classificare , ogni risultato è chiamato a classe ha un class label.nostro compito è quello di esaminare le prove, considerare la probabilità che sia questa classe o quella classe e assegnare un'etichetta a ciascuna entità. Ancora una volta, adottiamo un approccio molto semplice: la classe che ha la più alta probabilità viene dichiarata "vincitrice" e quella etichetta di classe viene assegnata a quella combinazione di prove.

Esempio di frutta

Proviamo un esempio per aumentare la nostra comprensione: l'OP ha chiesto un esempio di identificazione "frutto".

Diciamo che abbiamo dati su 1000 pezzi di frutta. Capita che si tratti di banana , arancia o altra frutta . Conosciamo 3 caratteristiche di ciascun frutto:

  1. Se è lungo
  2. Che sia dolce e
  3. Se il suo colore è giallo.

Questo è il nostro "set di allenamento". Useremo questo per prevedere il tipo di qualsiasi nuovo frutto che incontriamo.

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
             ___________________________________________________________________

Possiamo pre-calcolare molte cose sulla nostra collezione di frutta.

Le cosiddette probabilità "precedenti". (Se non conoscessimo nessuno degli attributi del frutto, questa sarebbe la nostra ipotesi.) Questi sono i nostribase rates.

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

Probabilità di "Evidenza"

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

Probabilità di "Probabilità"

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

Dato un frutto, come classificarlo?

Diciamo che ci vengono date le proprietà di un frutto sconosciuto e ci viene chiesto di classificarlo. Ci viene detto che il frutto è lungo, dolce e giallo. È una banana? È un'arancia? O è un altro frutto?

Possiamo semplicemente eseguire i numeri per ciascuno dei 3 risultati, uno per uno. Quindi scegliamo la più alta probabilità e "classifichiamo" il nostro frutto sconosciuto come appartenente alla classe che aveva la più alta probabilità sulla base delle nostre prove precedenti (il nostro set di 1000 frutti):

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)

Per margine schiacciante ( 0.252 >> 0.01875), classifichiamo questo frutto dolce / lungo / giallo come probabile banana.

Perché il classificatore Bayes è così popolare?

Guarda a cosa si riduce. Solo un po 'di conteggio e moltiplicazione. Possiamo pre-calcolare tutti questi termini, e quindi la classificazione diventa facile, veloce ed efficiente.

Let z = 1 / P(evidence). Ora calcoliamo rapidamente le seguenti tre quantità.

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

Assegna l'etichetta di classe di qualunque sia il numero più alto e il gioco è fatto.

Nonostante il nome, Naive Bayes risulta essere eccellente in alcune applicazioni. La classificazione del testo è un'area in cui brilla davvero.

Spero che aiuti a comprendere i concetti alla base dell'algoritmo Naive Bayes.


14
Grazie per la spiegazione molto chiara! Facilmente uno dei migliori che galleggiano sul Web. Domanda: poiché ogni P (esito / evidenza) viene moltiplicato per 1 / z = p (evidenza) (che nel caso della frutta, significa che ognuno è essenzialmente la probabilità basata esclusivamente su prove precedenti), sarebbe corretto dire che z non non importa per Naïve Bayes? Il che significherebbe quindi che se, diciamo, si incontrasse un frutto lungo / dolce / giallo che non era una banana, sarebbe classificato in modo errato.
covarianza

7
@ E. Chow Sì, hai ragione nel dire che z non ha importanza per Naive Bayes. (È un modo per ridimensionare le probabilità tra 0 e 1.) Nota che z è il prodotto delle probabilità di tutte le prove a portata di mano. (È diverso dai priori che è il tasso base delle classi.) Hai ragione: se hai trovato un frutto lungo / dolce / giallo che non è una banana, NB lo classificherà erroneamente come una banana, in base a questo set di allenamento. L'algoritmo è un 'ipotesi migliore probabilistico basato su prove' e così sarà mis-classificare in occasione.
Ram Narasimhan,

1
@Jasper Nella tabella ci sono un totale di 200 "Altri frutti" e 50 di loro sono gialli. Quindi dato che il frutto è "Altro frutto" l'universo è 200. 50 di loro sono gialli. Da qui il 50/200. Si noti che 800 è il numero totale di frutti gialli. Quindi se volessimo P (altra frutta / Giallo) faremmo ciò che suggerisci: 50/800.
Ram Narasimhan,

3
Spiegazione assolutamente eccezionale. Non riesco a capire questo algoritmo da documenti e libri accademici. Perché, la spiegazione esoterica è generalmente accettata dallo stile di scrittura forse. Questo è tutto e così facile. Grazie.
Suat Atan PhD,

3
Perché le probabilità non si sommano a 1? La prova è 0,26 nell'esempio (500/100 * 650/1000 * 800/1000), e quindi la P finale (banana | ...) = 0,252 / 0,26 = 0,969 e la P (altro | ...) = 0,01875 / 0,26 = 0,072. Insieme si sommano fino a 1,04!
Mauricio,

18

Ram Narasimhan ha spiegato molto bene che il concetto qui sotto è una spiegazione alternativa attraverso l'esempio di codice di Naive Bayes in azione
Usa un problema di esempio di questo libro a pagina 351
Questo è il set di dati che useremo nel set di dati sopra se diamo l'ipotesi = allora qual è la probabilità che comprerà o non comprerà un computer. Il codice seguente risponde esattamente a questa domanda. Basta creare un file chiamato denominato e incollare il seguente contenuto.
inserisci qui la descrizione dell'immagine
{"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

Ecco il codice che i commenti spiegano tutto ciò che stiamo facendo qui! [pitone]

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

produzione:

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

Spero che aiuti a capire meglio il problema

pace


18

Naive Bayes: Naive Bayes si occupa della supervisione dell'apprendimento automatico utilizzato per effettuare classificazioni dei set di dati. È usato per predire le cose in base alla sua conoscenza precedente e alle ipotesi di indipendenza.

Lo chiamano ingenuo perché sono ipotesi (presuppone che tutte le funzionalità nel set di dati siano ugualmente importanti e indipendenti) sono davvero ottimiste e raramente vere nella maggior parte delle applicazioni del mondo reale.

È l'algoritmo di classificazione che prende la decisione per il set di dati sconosciuto. Si basa sul teorema di Bayes che descrive la probabilità di un evento in base alla sua conoscenza precedente.

Il diagramma seguente mostra come funziona l'ingenuo Bayes

inserisci qui la descrizione dell'immagine

Formula per prevedere NB:

inserisci qui la descrizione dell'immagine

Come usare l'algoritmo Naive Bayes?

Facciamo un esempio di come NB woks

Passaggio 1: Innanzitutto scopriamo la probabilità della tabella che mostra la probabilità di sì o no nel diagramma seguente. Passaggio 2: trova la probabilità posteriore di ogni classe.

inserisci qui la descrizione dell'immagine

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.

Per ulteriori riferimenti consultare questi blog.

Consultare GitHub Repository Naive-Bayes-Esempi


14

Provo a spiegare la regola di Bayes con un esempio.

Qual è la possibilità che una persona a caso selezionata dalla società sia un fumatore?

Puoi rispondere al 10%.

Ora, cosa succede se la persona è un uomo e 15 anni?

Non può essere del 60%, mentre sappiamo che la percentuale di fumatori era molto bassa. Non può essere inferiore al 10%. 15 o 20% sono ipotesi migliori.

In effetti, proviamo ad aggiornare la supposizione iniziale con nuovi elementi di prova ( P(smoker) vs. P(smoker | evidence)). La regola di Bayes è un modo per collegare queste due probabilità.

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

Ogni prova può aumentare o diminuire questa possibilità. Ad esempio, questo fatto che sia un uomo può aumentare le possibilità, a condizione che questa percentuale (essendo un uomo) tra i non fumatori sia inferiore. In altre parole, essere un uomo deve essere un buon indicatore di essere un fumatore piuttosto che un non fumatore.

Possiamo mostrare questo contributo anche in un altro modo. Per ogni caratteristica, puoi confrontare la comunanza (probabilità) di quella caratteristica nelle condizioni date con la sua sola comunanza. ( P(f | x) vs. P(f)).

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

Ad esempio, se sappiamo che il 90% dei fumatori sono uomini, non è ancora sufficiente dire se essere un uomo sia un indicatore di essere fumatore o meno. Ad esempio, se anche la probabilità di essere un uomo nella società è del 90%, sapere che qualcuno è un uomo non ci aiuta ((90% / 90%) = 1. Ma se gli uomini contribuiscono al 40% della società, ma al 90% dei fumatori, allora sapere che qualcuno è un uomo aumenta la possibilità di essere un fumatore (90% / 40%) = 2.25, quindi aumenta l'ipotesi iniziale (10%) del 2,25 con il 22,5%.

Tuttavia, se la probabilità di essere un uomo era del 95% nella società, allora indipendentemente dal fatto che la percentuale di uomini tra i fumatori è alta (90%)! l'evidenza che qualcuno è un uomo diminuisce la possibilità che sia un fumatore! (90% / 95%) = 0.95).

Quindi abbiamo:

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

Si noti che in questa formula abbiamo ipotizzato che essere un uomo e avere meno di 20 anni siano caratteristiche indipendenti, quindi li abbiamo moltiplicati, significa che sapere che qualcuno ha meno di 20 anni non ha alcun effetto sull'ipotesi che sia un uomo o una donna. Ma potrebbe non essere vero, ad esempio forse la maggior parte dell'adolescenza in una società sono uomini ...

Per utilizzare questa formula in un classificatore

Il classificatore viene fornito con alcune caratteristiche (essere un uomo e avere meno di 20 anni) e deve decidere se è un fumatore o meno (si tratta di due classi). Utilizza la formula sopra per calcolare la probabilità di ogni classe sotto l'evidenza (caratteristiche) e assegna la classe con la più alta probabilità all'input. Per fornire le probabilità richieste (90%, 10%, 80% ...) utilizza il set di addestramento. Ad esempio, conta le persone nel set di formazione che sono i fumatori e scoprono che contribuiscono al 10% del campione. Quindi per i fumatori controlla quanti di loro sono uomini o donne .... quanti sono sopra i 20 o sotto i 20 .... In altre parole, cerca di costruire la distribuzione di probabilità delle caratteristiche per ogni classe in base alla formazione dati.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.