Cum să dezvolți un clasificator Bayes naiv de la zero în Python

Tweet Share Share

Ultima actualizare pe 10 ianuarie 2020

clasificarea este o problemă de modelare predictivă care implică atribuirea unei etichete unui eșantion dat de date de intrare.

problema modelării predictive de clasificare poate fi încadrată ca calculând probabilitatea condiționată a unei etichete de clasă dată unui eșantion de date., Teorema Bayes oferă o principială mod pentru a calcula această probabilitate condiționată, deși, în practică, necesită un număr enorm de probe (foarte mari dimensiuni set de date) și este de calcul scumpe.

în schimb, calculul teoremei Bayes poate fi simplificat prin realizarea unor ipoteze, cum ar fi fiecare variabilă de intrare este independentă de toate celelalte variabile de intrare. Deși o presupunere dramatică și nerealistă, acest lucru are ca efect efectuarea calculelor probabilității condiționale și are ca rezultat un model eficient de clasificare denumit Bayes naiv.,în acest tutorial, veți descoperi algoritmul naiv Bayes pentru modelarea predictivă a clasificării.după finalizarea acestui tutorial, veți ști:

  • cum să încadrați modelarea predictivă a clasificării ca model de probabilitate condiționată.
  • cum se utilizează teorema Bayes pentru a rezolva modelul de probabilitate condiționată de clasificare.
  • cum se implementează Teorema simplificată Bayes pentru clasificare, numită algoritmul naiv Bayes.,

începeți proiectul cu noua mea carte Probability for Machine Learning, inclusiv tutoriale pas cu pas și fișierele de cod sursă Python pentru toate exemplele.

Să începem.

  • Actualizat octombrie / 2019: problema inconsecvenței minore fixe în notația matematică.
  • actualizare Jan / 2020: actualizat pentru modificări în scikit-learn V0. 22 API.

Cum de a Dezvolta un Naiv Bayes Clasificator de la Zero în Python
Photo by Ryan Dickey, unele drepturi rezervate.,

Tutorial imagine de Ansamblu

Acest tutorial este împărțit în cinci părți; acestea sunt:

  1. Probabilitate Condiționată Model de Clasificare
  2. Simplificată sau Naiv Bayes
  3. Cum de a Calcula Înainte și Probabilități Condiționate
  4. Exemplu Lucrat de Naiv Bayes
  5. 5 Sfaturi atunci Când se Utilizează Naiv Bayes

Probabilitate Condiționată Model de Clasificare

În masina de învățare, suntem de multe ori interesați în modelarea predictivă problemă în cazul în care vrem să prezică o clasă etichetă pentru o anumită observație., De exemplu, clasificarea speciilor de plante pe baza măsurătorilor florii.problemele de acest tip sunt denumite probleme de modelare predictivă a clasificării, spre deosebire de problemele de regresie care implică prezicerea unei valori numerice. Observarea sau intrarea în model este denumită X, iar eticheta de clasă sau ieșirea modelului este denumită y.

împreună, X și y reprezintă observațiile colectate din domeniu, adică un tabel sau o matrice (coloane și rânduri sau caracteristici și mostre) de date de instruire utilizate pentru a se potrivi unui model., Modelul trebuie să învețe cum să mapeze exemple specifice etichetelor de clasă sau y = f (X) care au minimizat eroarea de clasificare greșită.o abordare pentru rezolvarea acestei probleme este dezvoltarea unui model probabilistic. Din perspectivă probabilistică, suntem interesați să estimăm probabilitatea condiționată a etichetei de clasă, având în vedere observația.

de exemplu, o problemă de clasificare poate avea etichetele clasei k Y1, Y2, …, YK și variabilele de intrare n, X1, X2, …, Xn., Putem calcula probabilitatea condiționată pentru o clasă etichetă cu o anumită instanță sau un set de valori de intrare pentru fiecare coloană x1, x2, …, xn, după cum urmează:

  • P(yi | x1, x2, …, xn)

probabilitatea condiționată poate fi apoi calculată pentru fiecare clasă etichetă în problemă și eticheta cu cea mai mare probabilitate poate fi returnat ca cel mai probabil de clasificare.probabilitatea condiționată poate fi calculată folosind probabilitatea comună, deși ar fi greu de rezolvat. Teorema lui Bayes oferă o modalitate principială pentru calcularea probabilității condiționale.,forma simplă a calculului pentru teorema lui Bayes este următoarea:

  • P(A|B) = P(B / A) * P(A)/P(B)
  • unde probabilitatea că suntem interesați să calculăm P(A / B) se numește probabilitatea posterioară, iar probabilitatea marginală a evenimentului P(A) se numește prior.,

    putem cadru de clasificare ca o clasificare condiționată problema cu Teorema Bayes, după cum urmează:

    • P(yi | x1, x2, …, xn) = P(x1, x2, …, xn | yi) * P(yi) / P(x1, x2, …, xn)

    înainte de P(yi) este ușor de estimat de la un set de date, dar probabilitatea condiționată de observare bazate pe clasa P(x1, x2, …, xn | yi) nu este posibilă decât dacă numărul de exemple este extraordinar de mare, de exemplu, suficient de mare pentru a în mod eficient estima probabilitatea de distribuție pentru toate combinațiile posibile de valori.,ca atare, aplicarea directă a teoremei Bayes devine, de asemenea, greu de rezolvat, mai ales că numărul de variabile sau caracteristici (n) crește.

    doriți să aflați probabilitatea pentru învățarea automată

    luați cursul meu gratuit de e-mail de 7 zile acum (cu cod de probă).Faceți clic pentru a vă înscrie și pentru a obține, de asemenea, o versiune gratuită de Ebook PDF a cursului.,

    Descarcă GRATUIT Mini-Curs

    Simplificată sau Naiv Bayes

    soluția pentru a folosind Teorema Bayes pentru o probabilitate condiționată model de clasificare este de a simplifica calculul.Teorema Bayes presupune că fiecare variabilă de intrare depinde de toate celelalte variabile. Aceasta este o cauză a complexității în calcul. Putem elimina această presupunere și putem considera fiecare variabilă de intrare ca fiind independentă una de cealaltă.,acest lucru schimbă modelul de la un model de probabilitate condiționată dependentă la un model independent de probabilitate condiționată și simplifică dramatic calculul.în primul rând, numitorul este eliminat din calculul P(x1, x2,…, xn), deoarece este o constantă utilizată la calcularea probabilității condiționate a fiecărei clase pentru o anumită instanță și are ca efect normalizarea rezultatului.,

    • P(yi | x1, x2, …, xn) = P(x1, x2, …, xn | yi) * P(yi)

    Apoi, probabilitatea condiționată de toate variabilele dat clasa label este schimbat în diferite probabilități condiționale din fiecare valoare variabilă dat clasa etichetă. Aceste variabile condiționale independente sunt apoi înmulțite împreună. De exemplu:

    • P(yi | x1, x2, …, xn) = P(x1|yi) * P(x2|yi) * … P(xn|yi) * P(yi)

    Acest calcul poate fi efectuat pentru fiecare clasa de etichete, iar eticheta cu cea mai mare probabilitate poate fi selectat ca de clasificare pentru dat exemplu., Această regulă de decizie este denumită regula maximă a posteriori sau MAP.această simplificare a teoremei Bayes este comună și utilizată pe scară largă pentru clasificarea problemelor de modelare predictivă și este în general denumită Bayes naiv.

    cuvântul „naiv” este francez și de obicei are o diaeresis (umlaut) pe „i”, care este de obicei omis pentru simplitate, și „Bayes” este valorificat așa cum este numit de Reverendul Thomas Bayes.,

    cum se calculează probabilitățile anterioare și condiționale

    acum că știm ce este Bayes naiv, putem arunca o privire mai atentă asupra modului de calculare a elementelor ecuației.

    calculul p anterior (yi) este simplu. Acesta poate fi estimat prin împărțirea frecvenței observațiilor din setul de date de antrenament care au eticheta clasei la numărul total de exemple (rânduri) din setul de date de antrenament., De exemplu:

    • P(yi) = exemple cu Yi / total Exemple

    probabilitatea condiționată pentru o valoare caracteristică dată de eticheta clasei poate fi, de asemenea, estimată din date. Mai exact, acele exemple de date care aparțin unei clase date și o distribuție de date pe variabilă. Acest lucru înseamnă că, dacă există clase K și n variabile, că K * N distribuții de probabilitate diferite trebuie să fie create și menținute.

    o abordare diferită este necesară în funcție de tipul de date al fiecărei caracteristici., Mai exact, datele sunt utilizate pentru a estima parametrii uneia dintre cele trei distribuții de probabilitate standard.

    în cazul variabilelor categorice, cum ar fi numărătoare sau etichete, se poate utiliza o distribuție multinomială. Dacă variabilele sunt binare, cum ar fi DA/NU sau Adevărat/Fals, se poate folosi o distribuție binomială. Dacă o variabilă este numerică, cum ar fi o măsurare, adesea se folosește o distribuție Gaussiană.

    • binar: distribuție binomială.
    • categoric: distribuție multinomială.
    • Numeric: distribuție Gaussiană.,aceste trei distribuții sunt atât de comune încât implementarea naivă Bayes este adesea numită după distribuție. De exemplu:
      • Binom naive Bayes: Bayes Naive care utilizează o distribuție binomială.
      • Baiuri naive Multinomiale: Baiuri Naive care utilizează o distribuție multinomială.
      • Gaussian Naive Bayes: Bayes Naive care utilizează o distribuție Gaussiană.

      un set de date cu tipuri de date mixte pentru variabilele de intrare poate necesita selectarea diferitelor tipuri de distribuții de date pentru fiecare variabilă.,

      folosirea uneia dintre cele trei distribuții comune nu este obligatorie; de exemplu, dacă se știe că o variabilă cu valoare reală are o distribuție specifică diferită, cum ar fi exponențială, atunci acea distribuție specifică poate fi utilizată în schimb. Dacă o variabilă cu valoare reală nu are o distribuție bine definită, cum ar fi bimodal sau multimodal, atunci un estimator de densitate a kernelului poate fi utilizat pentru a estima distribuția probabilității.algoritmul Naive Bayes s-a dovedit eficient și, prin urmare, este popular pentru sarcinile de clasificare a textului., Cuvintele dintr-un document pot fi codificate ca vectori de intrare binari (cuvânt prezent), număr (apariție cuvânt) sau frecvență (TF/idf) și distribuții de probabilitate binare, multinomiale sau gaussiene utilizate.

      exemplu lucrat de Naive Bayes

      În această secțiune, vom face calculul naive Bayes concret cu un mic exemplu pe un set de date de învățare automată.

      putem genera o mică problemă de clasificare binară (clasa 2), Folosind funcția make_blobs() din API-ul scikit-learn.,

      exemplul de mai jos generează 100 de exemple cu două variabile numerice de intrare, fiecare atribuit una din cele două clase.

      rularea exemplului generează setul de date și rezumă dimensiunea, confirmând că setul de date a fost generat conform așteptărilor.

      argumentul „random_state” este setat la 1, asigurându-se că același eșantion aleatoriu de observații este generat de fiecare dată când codul este rulat.

      elementele de intrare și de ieșire din primele cinci exemple sunt, de asemenea, tipărite, arătând că într-adevăr, cele două variabile de intrare sunt numerice, iar etichetele de clasă sunt fie 0, fie 1 pentru fiecare exemplu.,

      vom modela variabilele numerice de intrare folosind o distribuție de probabilitate Gaussiană.acest lucru poate fi realizat folosind API-ul Norm SciPy. În primul rând, distribuția poate fi construită prin specificarea parametrilor distribuției, de exemplu deviația medie și standard, apoi funcția de densitate de probabilitate poate fi eșantionată pentru valori specifice folosind norma.pdf () funcție.putem estima parametrii distribuției din setul de date folosind funcțiile mean() și std () NumPy.,

      funcția fit_distribution () de mai jos Ia un eșantion de date pentru o variabilă și se potrivește unei distribuții de date.reamintim că suntem interesați de probabilitatea condiționată a fiecărei variabile de intrare. Aceasta înseamnă că avem nevoie de o distribuție pentru fiecare dintre variabilele de intrare și de un set de distribuții pentru fiecare dintre etichetele clasei sau de patru distribuții în total.

      În primul rând, trebuie să împărțim datele în grupuri de eșantioane pentru fiecare dintre etichetele clasei.,

      1
      2
      3
      4
      5

      # sorta datele în clase
      Xy0 = X
      Xy1 = X
      print(Xy0.,forma, Xy1.forma)

      putem folosi apoi aceste grupuri pentru a calcula probabilitățile anterioare pentru un eșantion de date aparținând fiecărui grup.acest lucru va fi de 50% exact având în vedere că am creat același număr de exemple în fiecare dintre cele două clase; cu toate acestea, vom calcula aceste priors pentru completitudine.,

      1
      2
      3
      4
      5

      …,
      # calcula antecedente
      priory0 = len(Xy0) / len(X)
      priory1 = len(Xy1) / len(X)
      print(priory0, priory1)

      în cele din Urmă, putem apela fit_distribution (funcția) pe care am definit-de a pregăti o distribuție de probabilitate pentru fiecare variabilă, pentru fiecare clasă eticheta.

      legând toate acestea împreună, modelul probabilistic complet al setului de date este prezentat mai jos.,

      rularea exemplului mai întâi împarte setul de date în două grupuri pentru cele două etichete de clasă și confirmă dimensiunea fiecărui grup este egal și priors sunt 50%.distribuțiile de probabilitate sunt apoi pregătite pentru fiecare variabilă pentru fiecare etichetă de clasă și parametrii medii și deviația standard ai fiecărei distribuții sunt raportați, confirmând că distribuțiile diferă.apoi, putem folosi modelul probabilistic pregătit pentru a face o predicție.,probabilitatea condiționată independentă pentru fiecare etichetă de clasă poate fi calculată folosind prior pentru clasă (50%) și probabilitatea condiționată a valorii pentru fiecare variabilă.

      probabilitatea () funcția de mai jos efectuează acest calcul pentru un exemplu de intrare (matrice de două valori) având în vedere distribuția de probabilitate prealabilă și condiționată pentru fiecare variabilă. Valoarea returnată este mai degrabă un scor decât o probabilitate, deoarece cantitatea nu este normalizată, o simplificare adesea efectuată atunci când se implementează bayes naive.,putem folosi această funcție pentru a calcula probabilitatea pentru un exemplu aparținând fiecărei clase.

      În primul rând, putem selecta un exemplu de clasificat; în acest caz, primul exemplu din setul de date.,

      1
      2
      3

      …,
      # clasifice un exemplu
      Xsample, ysample = X, y

      Apoi, putem calcula scorul de exemplu, apartenența la clasa întâi, apoi în clasa a doua, apoi raportează rezultatele.clasa cu cel mai mare scor va fi clasificarea rezultată.

      legând acest lucru împreună, exemplul complet de montare a modelului naiv Bayes și utilizarea acestuia pentru a face o predicție este listat mai jos.,

      rularea exemplului pregătește mai întâi probabilitățile anterioare și condiționale ca înainte, apoi le folosește pentru a face o predicție pentru un exemplu.

      scorul exemplului aparținând lui y=0 este de aproximativ 0,3 (reamintim că aceasta este o probabilitate nenormalizată), în timp ce scorul exemplului aparținând lui y=1 este 0,0. Prin urmare, am clasifica exemplul ca aparținând lui y=0.în acest caz, rezultatul adevărat sau real este cunoscut, y=0, care se potrivește cu predicția prin modelul nostru naiv Bayes.,

      1
      2
      3

      P(y=0 | ) = 0.348
      P(y=1 | ) = 0.,000
      Adevărul: y=0

      În practică, este o idee bună să utilizați optimizat implementări ale algoritm Naiv Bayes. La scikit-afla biblioteca oferă trei implementări, câte unul pentru fiecare dintre cele trei principalele distribuții de probabilitate; de exemplu, BernoulliNB, MultinomialNB, și GaussianNB pentru binom, multinomial și distribuite Gaussian variabile de intrare respectiv.pentru a utiliza un model scikit-learn Naive Bayes, mai întâi modelul este definit, apoi se potrivește pe setul de date de antrenament., Odată ce se potrivesc, probabilitățile pot fi prezise prin funcția predict_proba (), iar etichetele de clasă pot fi prezise direct prin funcția predict ().

      exemplul complet de montare a unui model Gaussian naiv Bayes (GaussianNB) la același set de date de testare este prezentat mai jos.

      rularea exemplului se potrivește modelului din setul de date al antrenamentului, apoi face predicții pentru același prim exemplu pe care l-am folosit în exemplul anterior.

      în acest caz, probabilitatea ca exemplul să aparțină lui y=0 este 1.0 sau o certitudine. Probabilitatea lui y=1 este o valoare foarte mică apropiată de 0,0.,

      în cele din urmă, eticheta clasei este prezisă direct, potrivind din nou adevărul de bază pentru exemplu.,iv>

      1
      2
      3

      Prezis Probabilități: ]
      Prezis Clasa:
      Adevărul: y=0

      5 Sfaturi atunci Când se Utilizează Naiv Bayes

      Acest capitol enumeră unele sfaturi practice atunci când se lucrează cu Naive Bayes modele.,

      utilizați un KDE pentru distribuții complexe

      dacă distribuția de probabilitate pentru o variabilă este complexă sau necunoscută, poate fi o idee bună să utilizați un estimator de densitate a kernelului sau KDE pentru a aproxima distribuția direct din eșantioanele de date.un bun exemplu ar fi KDE Gaussian.

      scăderea performanței cu creșterea dependenței variabile

      prin definiție, Bayes Naive presupune că variabilele de intrare sunt independente una de cealaltă.acest lucru funcționează bine de cele mai multe ori, chiar și atunci când unele sau majoritatea variabilelor sunt de fapt dependente., Cu toate acestea, performanța algoritmului se degradează cu cât variabilele de intrare sunt mai dependente.calculul probabilității condiționale independente pentru un exemplu pentru o etichetă de clasă implică înmulțirea mai multor probabilități împreună, una pentru clasă și una pentru fiecare variabilă de intrare. Ca atare, înmulțirea multor numere mici împreună poate deveni numeric instabilă, mai ales pe măsură ce numărul variabilelor de intrare crește.,pentru a depăși această problemă, este comună modificarea calculului de la produsul probabilităților la suma probabilităților jurnalului. De exemplu:

      • P(yi | x1, x2, …, xn) = log(P(x1|y1)) + log(P(x2|y1)) + … log(P(xn|y1)) + log(P(yi))

      Calculează logaritmul natural al probabilităților are efectul de a crea mai mari (negativ) numere și adăugarea de numere împreună va însemna că mai mari probabilități va fi mai aproape de zero. Valorile rezultate pot fi comparate și maximizate pentru a da cea mai probabilă etichetă de clasă.,acest lucru este adesea numit log-trick atunci când se înmulțește probabilități.

      actualizați distribuțiile de probabilitate

      pe măsură ce devin disponibile date noi, poate fi relativ simplu să utilizați aceste date noi cu datele vechi pentru a actualiza estimările parametrilor pentru distribuția de probabilitate a fiecărei variabile.acest lucru permite modelului să utilizeze cu ușurință date noi sau distribuțiile de date în schimbare în timp.

      utilizați ca model generativ

      distribuțiile de probabilitate vor rezuma probabilitatea condiționată a fiecărei valori variabile de intrare pentru fiecare etichetă de clasă.,aceste distribuții de probabilitate pot fi utile, în general, dincolo de utilizarea într-un model de clasificare.de exemplu, distribuțiile de probabilitate pregătite pot fi eșantionate aleatoriu pentru a crea noi instanțe de date plauzibile. Ipoteza de Independență condiționată asumată poate însemna că exemplele sunt mai mult sau mai puțin plauzibile în funcție de cât de multă interdependență reală există între variabilele de intrare din setul de date.

      Lectură suplimentară

      această secțiune oferă mai multe resurse pe această temă, dacă sunteți în căutarea de a merge mai adânc.,

      tutoriale

      • naive Bayes Tutorial pentru Machine Learning
      • Naive Bayes pentru Machine Learning
      • mai bine Naive Bayes: 12 Sfaturi pentru a obține cele mai multe din algoritmul Naive Bayes

      Cărți

      • Machine Learning, 1997.
      • Machine Learning: o perspectivă probabilistică, 2012.
      • recunoașterea modelelor și învățarea automată, 2006.
      • Data Mining: instrumente și tehnici practice de învățare automată, ediția a 4-a, 2016.

      API

      Articole

      • teorema lui Bayes, Wikipedia.
      • naive Bayes clasificator, Wikipedia.,
      • estimare maximă a posteriori, Wikipedia.

      rezumat

      În acest tutorial, ați descoperit algoritmul naiv Bayes pentru modelarea predictivă a clasificării.mai exact, ați învățat:

      • cum să încadrați modelarea predictivă a clasificării ca model de probabilitate condiționată.
      • cum se utilizează teorema Bayes pentru a rezolva modelul de probabilitate condiționată de clasificare.
      • cum se implementează Teorema Bayes simplificată pentru clasificare numită algoritmul Bayes naiv.

      aveți întrebări?,
      puneți întrebările în comentariile de mai jos și voi face tot posibilul pentru a răspunde.

      ia un mâner pe probabilitate pentru Machine Learning!

      Dezvoltați-vă înțelegerea probabilității

      …cu doar câteva linii de cod python

      Descoperiți cum în noul meu Ebook:
      probabilitate pentru Machine Learning

      Acesta oferă tutoriale de auto-studiu și proiecte end-to-end pe:
      Teorema Bayes, optimizare Bayesian, distribuții, probabilitate maximă, Cross-entropie, calibrarea modele
      și mult mai mult…,

      în cele din urmă valorificați incertitudinea în proiectele dvs.

      săriți academicienii. Doar Rezultate.Vezi ce este în interiorul

      Tweet Share Share

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *