Algoritmi di classificazione - Naïve Bayes

Introduzione all'algoritmo Naïve Bayes

Gli algoritmi di Bayes naïve sono una tecnica di classificazione basata sull'applicazione del teorema di Bayes con una forte ipotesi che tutti i predittori siano indipendenti l'uno dall'altro. In parole semplici, il presupposto è che la presenza di un elemento in una classe sia indipendente dalla presenza di qualsiasi altro elemento nella stessa classe. Ad esempio, un telefono può essere considerato intelligente se è dotato di touch screen, connessione Internet, buona fotocamera, ecc. Sebbene tutte queste funzioni dipendano l'una dall'altra, contribuiscono in modo indipendente alla probabilità che il telefono sia uno smartphone.

Nella classificazione bayesiana, l'interesse principale è trovare le probabilità a posteriori cioè la probabilità di un'etichetta date alcune caratteristiche osservate, (|). Con l'aiuto del teorema di Bayes, possiamo esprimerlo in forma quantitativa come segue:

$$ P (L | caratteristiche) = \ frac {P (L) P (caratteristiche | L)} {()} $$

Qui, (|) è la probabilità a posteriori di classe.

() è la probabilità a priori della classe.

(|) è la probabilità che è la probabilità del predittore data la classe.

() è la probabilità a priori del predittore.

Modello di costruzione utilizzando Naïve Bayes in Python

Libreria Python, Scikit learn è la libreria più utile che ci aiuta a costruire un modello Naïve Bayes in Python. Abbiamo i seguenti tre tipi di modello Naïve Bayes in Scikit impara la libreria Python:

Gaussian Naïve Bayes

È il più semplice classificatore Naïve Bayes che presuppone che i dati di ciascuna etichetta siano tratti da una semplice distribuzione gaussiana.

Naïve Bayes multinomiale

Un altro utile classificatore Naïve Bayes è Multinomial Naïve Bayes in cui si presume che le caratteristiche siano tratte da una semplice distribuzione multinomiale. Questo tipo di Naïve Bay è più appropriato per le caratteristiche che rappresentano i conteggi discreti.

Bernoulli Naïve Bayes

Un altro modello importante è Bernoulli Naïve Bayes in cui si presume che le caratteristiche siano binarie (0 e 1). La classificazione del testo con il modello "borsa di parole" può essere un'applicazione di Bernoulli Naïve Bayes.

Esempio

A seconda del nostro set di dati, possiamo scegliere uno qualsiasi dei modelli Naïve Bayes spiegati sopra. Qui stiamo implementando il modello Gaussian Naïve Bayes in Python -

Inizieremo con le importazioni richieste come segue:

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()

Ora, utilizzando la funzione make_blobs () di Scikit learn, possiamo generare blob di punti con distribuzione gaussiana come segue:

from sklearn.datasets import make_blobs
X, y = make_blobs(300, 2, centers=2, random_state=2, cluster_std=1.5)
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='summer');

Successivamente, per utilizzare il modello GaussianNB, dobbiamo importare e creare il suo oggetto come segue:

from sklearn.naive_bayes import GaussianNB
model_GBN = GaussianNB()
model_GNB.fit(X, y);

Ora dobbiamo fare previsioni. Può essere fatto dopo aver generato alcuni nuovi dati come segue:

rng = np.random.RandomState(0)
Xnew = [-6, -14] + [14, 18] * rng.rand(2000, 2)
ynew = model_GNB.predict(Xnew)

Successivamente, stiamo tracciando nuovi dati per trovare i suoi confini -

plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='summer')
lim = plt.axis()
plt.scatter(Xnew[:, 0], Xnew[:, 1], c=ynew, s=20, cmap='summer', alpha=0.1)
plt.axis(lim);

Ora, con l'aiuto della seguente riga di codici, possiamo trovare le probabilità a posteriori della prima e della seconda etichetta -

yprob = model_GNB.predict_proba(Xnew)
yprob[-10:].round(3)

Produzione

array([[0.998, 0.002],
   [1.   , 0.   ],
   [0.987, 0.013],
   [1.   , 0.   ],
   [1.   , 0.   ],
   [1.   , 0.   ],
   [1.   , 0.   ],
   [1.   , 0.   ],
   [0.   , 1.   ],
   [0.986, 0.014]]
)

Vantaggi svantaggi

Professionisti

I seguenti sono alcuni vantaggi dell'utilizzo dei classificatori Naïve Bayes:

  • La classificazione Naïve Bayes è facile da implementare e veloce.

  • Converrà più velocemente dei modelli discriminatori come la regressione logistica.

  • Richiede meno dati di addestramento.

  • È di natura altamente scalabile o scala linearmente con il numero di predittori e punti dati.

  • Può fare previsioni probabilistiche e può gestire dati continui e discreti.

  • L'algoritmo di classificazione Naïve Bayes può essere utilizzato sia per problemi di classificazione binaria che multi-classe.

Contro

I seguenti sono alcuni svantaggi dell'utilizzo dei classificatori Naïve Bayes:

  • Uno degli svantaggi più importanti della classificazione Naïve Bayes è la sua forte indipendenza dalle caratteristiche perché nella vita reale è quasi impossibile avere un insieme di caratteristiche completamente indipendenti l'una dall'altra.

  • Un altro problema con la classificazione Naïve Bayes è la sua 'frequenza zero', il che significa che se una variabile categoriale ha una categoria ma non viene osservata nel set di dati di addestramento, il modello Naïve Bayes le assegnerà una probabilità zero e non sarà in grado di creare una predizione.

Applicazioni della classificazione Naïve Bayes

Le seguenti sono alcune applicazioni comuni della classificazione Naïve Bayes:

Real-time prediction - Grazie alla sua facilità di implementazione e al calcolo veloce, può essere utilizzato per fare previsioni in tempo reale.

Multi-class prediction - L'algoritmo di classificazione Naïve Bayes può essere utilizzato per prevedere la probabilità a posteriori di più classi di variabili target.

Text classification- A causa della caratteristica della predizione multi-classe, gli algoritmi di classificazione Naïve Bayes sono adatti per la classificazione del testo. Questo è il motivo per cui viene utilizzato anche per risolvere problemi come il filtraggio dello spam e l'analisi del sentiment.

Recommendation system - Insieme ad algoritmi come il filtraggio collaborativo, Naïve Bayes crea un sistema di Raccomandazione che può essere utilizzato per filtrare le informazioni invisibili e per prevedere il tempo che un utente vorrebbe o meno la risorsa data.