Capire Naive Bayes


47

Da StatSoft, Inc. (2013), Manuale di statistica elettronica , "Naive Bayes Classifier" :

inserisci qui la descrizione dell'immagine

Per dimostrare il concetto di classificazione Naïve Bayes, si consideri l'esempio mostrato nell'illustrazione sopra. Come indicato, gli oggetti possono essere classificati come VERDI o ROSSI. Il mio compito è classificare i nuovi casi al loro arrivo, ovvero decidere a quale etichetta di classe appartengono, in base agli oggetti attualmente in uscita.

Dato che ci sono due volte il numero di oggetti VERDI rispetto al ROSSO, è ragionevole credere che un nuovo caso (che non è stato ancora osservato) abbia il doppio delle probabilità di avere l'appartenenza al VERDE piuttosto che al ROSSO. Nell'analisi bayesiana, questa convinzione è nota come probabilità precedente. Le probabilità precedenti si basano sull'esperienza precedente, in questo caso la percentuale di oggetti VERDI e ROSSI, e spesso utilizzati per prevedere i risultati prima che si verifichino effettivamente.

Quindi, possiamo scrivere:

inserisci qui la descrizione dell'immagine

Dato che ci sono un totale di 60 oggetti, 40 dei quali sono VERDI e 20 ROSSI, le nostre probabilità precedenti per l'appartenenza alla classe sono:

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine

Dopo aver formulato la nostra probabilità precedente, siamo ora pronti a classificare un nuovo oggetto (cerchio BIANCO). Poiché gli oggetti sono ben raggruppati, è ragionevole supporre che più oggetti VERDI (o ROSSI) in prossimità di X, maggiori sono le probabilità 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

Dall'illustrazione sopra, è chiaro che la probabilità di X dato il VERDE è più piccola della probabilità di X dato il ROSSO, poiché il cerchio comprende 1 oggetto VERDE e 3 ROSSO. Così:

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

Sebbene le probabilità precedenti indichino che X può appartenere al VERDE (dato che ci sono il doppio del VERDE rispetto al ROSSO) la probabilità indica diversamente; che l'appartenenza alla classe di X è ROSSO (dato che ci sono più oggetti ROSSI nelle vicinanze di X che VERDE). 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 ROSSO poiché la sua appartenenza alla classe raggiunge la maggiore probabilità posteriore.

È qui che entra in gioco la difficoltà della mia comprensione della matematica.

inserisci qui la descrizione dell'immagine

p (Cj | x1, x2, x ..., xd) è la probabilità posteriore di appartenenza alla classe, cioè la probabilità che X appartenga a Cj, ma perché scriverlo in questo modo?

Calcolo della probabilità?

inserisci qui la descrizione dell'immagine

Probabilità posteriore?

inserisci qui la descrizione dell'immagine

Non ho mai preso la matematica, ma la mia comprensione di bayes ingenui va bene, penso che proprio quando si tratta di questi metodi decomposti mi confonde. Qualcuno potrebbe aiutare a visualizzare questi metodi e come scrivere la matematica in modo comprensibile?


12
(+1) Ammiro il modo davvero attento e chiaro in cui hai posto la tua domanda.
rolando2,

2
@ rolando2: tutte le cifre e quasi tutto il testo di questa domanda provengono da statsoft.com/textbook/naive-bayes-classifier
Franck Dernoncourt il

Modifica questo post per attribuire chiaramente materiale da altrove, secondo Come fare riferimento a materiale scritto da altri .
Scortchi - Ripristina Monica

La corretta attribuzione di preventivi diretti è sempre stata un requisito sui siti di scambio di stack. Comunque, l'omissione è facilmente rettificata; E l'ho fatto. Non è necessario eliminare il tuo account - ti preghiamo di riconsiderare.
Scortchi - Ripristina Monica

Risposte:


50

Eseguirò l'intero processo Naive Bayes da zero, dal momento che non mi è del tutto chiaro dove vieni impiccato.

Vogliamo trovare la probabilità che un nuovo esempio appartenga a ciascuna classe: ). Quindi calcoliamo quella probabilità per ogni classe e scegliamo la classe più probabile. Il problema è che di solito non abbiamo queste probabilità. Tuttavia, il teorema di Bayes ci consente di riscrivere quell'equazione in una forma più trattabile.P(class|feature1,feature2,...,featuren

Il Bayom 'Thereom è semplicemente o in termini di nostro problema:

P(A|B)=P(B|A)P(A)P(B)
P(class|features)=P(features|class)P(class)P(features)

Possiamo semplificarlo rimuovendo . Possiamo farlo perché classificheremo per ogni valore di ; sarà lo stesso ogni volta - non dipende dalla . Questo ci lascia con P(features)P(class|features)classP(features)class

P(class|features)P(features|class)P(class)

Le probabilità precedenti, , possono essere calcolate come descritto nella domanda.P(class)

Questo lascia . Vogliamo eliminare l'enorme, e probabilmente molto scarsa, probabilità congiunta . Se ogni funzione è indipendente, allora Anche se non sono effettivamente indipendenti, possiamo supporre che lo siano (questo è il " ingenua "parte dell'ingenua Bayes). Personalmente penso che sia più facile pensarci su per variabili discrete (cioè categoriche), quindi usiamo una versione leggermente diversa del tuo esempio. Qui, ho diviso ciascuna dimensione della funzione in due variabili categoriali.P(features|class)P(feature1,feature2,...,featuren|class)

P(feature1,feature2,...,featuren|class)=iP(featurei|class)

Dati di esempio discreti.

Esempio: addestramento del classifer

Per addestrare il classifer, contiamo vari sottoinsiemi di punti e li usiamo per calcolare le probabilità precedenti e condizionali.

I priori sono banali: ci sono sessanta punti in totale, quaranta in verde e venti in rosso. Quindi

P(class=green)=4060=2/3 and P(class=red)=2060=1/3

Successivamente, dobbiamo calcolare le probabilità condizionali di ogni valore-funzione dato una classe. Qui ci sono due funzioni: e , ognuna delle quali accetta uno dei due valori (A o B per uno, X o Y per l'altro). Pertanto abbiamo bisogno di sapere quanto segue: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)
  • (nel caso in cui non sia ovvio, si tratta di tutte le possibili coppie di valore-funzione e classe)

Questi sono facili da calcolare contando e dividendo anche. Ad esempio, per , osserviamo solo i punti rossi e contiamo quanti di essi si trovano nella regione 'A' per . Esistono venti punti rossi, tutti nella zona 'A', quindi . Nessuno dei punti rossi si trova nella regione B, quindi . Successivamente, facciamo lo stesso, ma consideriamo solo i punti verdi. Questo ci dà e . Ripetiamo questo processo per , per completare la tabella delle probabilità. Supponendo che abbia contato correttamente, otteniamoP(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

Queste dieci probabilità (i due priori più gli otto condizionali) sono il nostro modello

Classificare un nuovo esempio

Classifichiamo il punto bianco dal tuo esempio. Si trova nella regione "A" per e nella regione "Y" per . Vogliamo trovare la probabilità che sia in ogni classe. Cominciamo con il rosso. Usando la formula sopra, sappiamo che: Subbing nelle probabilità dalla tabella, otteniamofeature1feature2

P(class=red|example)P(class=red)P(feature1=A|class=red)P(feature2=Y|class=red)

P(class=red|example)131710=730
Facciamo lo stesso per il verde:
P(class=green|example)P(class=green)P(feature1=A|class=green)P(feature2=Y|class=green)

Sommergendo questi valori ci ottiene 0 ( ). Infine, guardiamo per vedere quale classe ci ha dato la più alta probabilità. In questo caso, è chiaramente la classe rossa, quindi è lì che assegniamo il punto.2/302/10

Appunti

Nel tuo esempio originale, le funzionalità sono continue. In tal caso, è necessario trovare un modo per assegnare P (feature = value | class) per ogni classe. Potresti quindi considerare di adattarti a una distribuzione di probabilità nota (ad esempio, un gaussiano). Durante l'allenamento, troverai la media e la varianza per ogni classe lungo ciascuna dimensione caratteristica. Per classificare un punto, dovresti trovare inserendo la media e la varianza appropriate per ogni classe. Altre distribuzioni potrebbero essere più appropriate, a seconda dei dettagli dei dati, ma un gaussiano sarebbe un discreto punto di partenza.P(feature=value|class)

Non ho familiarità con il set di dati DARPA, ma essenzialmente faresti la stessa cosa. Probabilmente finirai per calcolare qualcosa come P (attacco = VERO | servizio = dito), P (attacco = falso | servizio = dito), P (attacco = VERO | servizio = ftp), ecc. E poi combinali nel allo stesso modo dell'esempio. Come nota a margine, parte del trucco qui è trovare buone funzionalità. L'IP di origine, ad esempio, probabilmente sarà irrimediabilmente scarso - probabilmente avrai solo uno o due esempi per un dato IP. Potresti fare molto meglio se hai geolocalizzazione l'IP e usi invece "Source_in_same_building_as_dest (true / false)" o qualcosa come funzionalità.

Spero che aiuti di più. Se qualcosa necessita di chiarimenti, sarei felice di riprovare!


3
Sicuro. Se per te va bene, ho intenzione di modificare la mia risposta in modo che ci sia più spazio (e posso fare cose LaTex).
Matt Krause,

1
Ho ampliato le parti di addestramento e test e le ho trasformate nella loro sezione. I primi due paragrafi sono gli stessi ...
Matt Krause,

2
Matt, questo è molto più chiaro di qualsiasi definizione di libro di testo di Naive Bayes che ho incontrato. Questa è probabilmente la migliore risposta a qualsiasi domanda che ho visto finora su questo sito.
Zhubarb,

@Berkan, grazie; è molto gentile da parte tua (anche se ci sono anche molte altre ottime risposte!) Se hai qualche suggerimento, sarei felice di provare ad affrontarli!
Matt Krause,

+ 1 e stackoverflow.com/questions/10059594/… dove c'è una spiegazione simile
Drey,

6

Semplificando la notazione con indica i dati, vogliamo trovare quale tra i vari è il più grande. Ora, la formula di Bayes fornisce dove il denominatore sul right è lo stesso per tutti . Se vogliamo trovare quale di , è il più grande, possiamo, ovviamente, calcolare ogni e confrontare i valori. Ma si noti che i confronti non sono realmente influenzati dal valore di che è lo stesso in tutti i casi. Potremmo ugualmente calcolare tutti iDP(CjD)

P(CjD)=P(DCj)P(Cj)P(D), j=1,2,
jP(C1D)P(C2D),P(CjD)P(D)P(DCj)P(Cj) e confrontare (cioè, senza preoccuparsi di dividere ogni per prima dei confronti), e lo stesso verrà scelto come avente la maggiore probabilità posteriore. Detto in altro modo, la probabilità posteriore è proporzionale alla probabilità volte la probabilità precedente Infine, quando i dati sono una raccolta di osservazioni (condizionatamente) indipendenti dato , abbiamo che P(DCj)P(Cj)P(D)CjP(CjD)P(DCj) P(Cj)
P(CjD)P(DCj)P(Cj).
D(x1,x2,,xd)Cj)
P(DCj)=P(x1,x2,,xdCj)=P(x1Cj)P(x2Cj)P(xdCj)=1=1dP(xiCj)

1

Il presupposto principale dietro il modello ingenuo bayes è che ogni caratteristica (x_i) è condizionata in modo condizionale da tutte le altre caratteristiche date la classe. Questo presupposto è ciò che ci consente di scrivere la probabilità come un prodotto semplice (come hai dimostrato).

Questo è anche ciò che aiuta il modello ingenuo di bayes a generalizzare bene nella pratica. Considera la fase di addestramento: se non assumessimo questo presupposto, l'apprendimento implicherebbe la stima di una distribuzione dimensionale elevata e complessa: p (x1, x2, ..., xn, c) in cui tutte le caratteristiche sono distribuite congiuntamente. Invece, possiamo allenarci stimando p (x1, c), p (x2, c), ..., p (xn, c), poiché conoscendo il valore c rende irrilevanti i valori di tutte le altre caratteristiche (forniscono nessuna informazione aggiuntiva su x_i).

Non conosco un buon modo per visualizzarlo (oltre alla notazione del modello grafico standard), ma per renderlo più concreto puoi scrivere del codice per apprendere un modello Bayes Naive ( puoi prendere alcuni dati di esempio qui ). Allenati e prova. Ora rilascia il presupposto di indipendenza condizionale e modifica il codice. Allena, testa e confronta con il modello precedente.

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.