2010-05-22 11 views
7

Come compito scolastico, sono tenuto a implementare l'algoritmo di Naïve Bayes che intendo fare in Java.Implementazione dell'algoritmo di Naïve Bayes in Java - Servono alcune indicazioni

Nel tentativo di capire come è stato fatto, ho letto il libro "Data mining - Strumenti e tecniche di apprendimento pratico della macchina" che ha una sezione su questo argomento, ma sono ancora incerto su alcuni punti principali che stanno bloccando i miei progressi.

Dal momento che sto cercando una guida e non una soluzione qui, dirò a voi ragazzi quello che penso nella mia testa, quello che penso sia l'approccio corretto e in cambio chiedere una correzione/guida che sarà molto apprezzata. per favore nota che sono un principiante assoluto sull'algoritmo di Naïve Bayes, Data mining e nella programmazione generale quindi potresti vedere stupidi commenti/calcoli qui sotto:

Il set di dati di addestramento che ho ricevuto ha 4 attributi/caratteristiche che sono numerici e normalizzato (nell'intervallo [0 1]) utilizzando Weka (valori mancanti) e una classe nominale (sì/no)

1) i dati provenienti da un file csv è numerico QUINDI

    * Dato gli attributi sono numerico utilizzo la formula PDF (funzione di densità di probabilità).
      + Per calcolare il PDF in java ho separare gli attributi in base al fatto che siano in classe sì o no di classe e tenerli in una matrice diversa (array class yes and array class no)
      + Quindi calcolare la media ( sum of the values in row/number of values in that row) e la divinazione standard per ciascuno di i 4 attributi (colonne) di ciascuna classe
      + Ora per trovare PDF di un dato valore (n) faccio (n-mean)^2/(2*SD^2),
      + Quindi per trovare P(yes | E) e P(no | E) i multiply the PDF value of all 4 given attributes and compare which is larger, che indica la classe a cui appartiene

In temrs di Java, sto usando ArrayList of ArrayList e Double per memorizzare i valori degli attributi.

infine non sono sicuro di come ottenere nuovi dati? Dovrei chiedere il file di input (come csv) o il prompt dei comandi e chiedere 4 valori?

Mi fermo qui per ora (ho più domande) ma sono preoccupato che questo non otterrà alcuna risposta dato quanto tempo ha ottenuto. Apprezzerò molto coloro che danno il loro tempo leggendo i miei problemi e commentando.

+0

la panoramica di come implementerò l'algoritmo sembra corretta? – ke3pup

risposta

5

Quello che stai facendo è quasi corretto.

  + Then to find P(yes | E) and P(no | E) i multiply the PDF value of all 4 given attributes and compare which is larger, which indicates the class it belongs to 

Qui, dimenticato di moltiplicare la P precedente (sì) o P (senza). Ricordate le formule di decisione:

P(Yes | E) ~= P(Attr_1 | Yes) * P(Attr_2 | Yes) * P(Attr_3 | Yes) * P(Attr_4 | Yes) * P(Yes) 

Per Naive Bayes (ed eventuali altri algoritmi di apprendimento/classificazione supervisionata), è necessario disporre di dati di training e dei dati di test. Si utilizzano i dati di allenamento per addestrare il modello e fare previsioni sui dati di test. Potresti semplicemente utilizzare i dati di allenamento come dati di test. Oppure puoi dividere il file CSV in due parti, una per l'allenamento e una per il test. Si potrebbe anche fare una convalida incrociata sul file csv.

+0

Utilizzare senz'altro la convalida incrociata se possibile. Non testare mai i tuoi dati di allenamento se puoi evitarlo. –

+0

@Shaggy, il test sull'allenamento è un'opzione e un must per un nuovo set di dati o un nuovo classificatore implementato. Ti dice quanto bene l'ottimizzazione è fatta. Se un classificatore non funziona bene sui dati di allenamento, questa classe non può essere utilizzata per il set di dati. Le prestazioni sui dati di addestramento possono anche essere utilizzate a scopo diagnostico quando si scrive un classificatore. –