- L'algoritme Naïve Bayes és un algorisme d'aprenentatge supervisat, que es basa en Teorema de Bayes i s'utilitza per resoldre problemes de classificació.
- S'utilitza principalment en classificació de textos que inclou un conjunt de dades d'entrenament d'alta dimensió.
- Naïve Bayes Classifier és un dels algorismes de classificació senzills i eficaços que ajuda a crear models ràpids d'aprenentatge automàtic que poden fer prediccions ràpides.
- Alguns exemples populars de Naïve Bayes Algorithm són filtració de correu brossa, anàlisi sentimental i classificació d'articles .
Per què es diu Naïve Bayes?
L'algorisme de Naïve Bayes està format per dues paraules Naïve i Bayes, que es poden descriure com:
Teorema de Bayes:
- El teorema de Bayes també es coneix com Regla de Bayes o llei de Bayes , que s'utilitza per determinar la probabilitat d'una hipòtesi amb coneixements previs. Depèn de la probabilitat condicional.
- La fórmula del teorema de Bayes es dóna com:
On,
P(A|B) és la probabilitat posterior : Probabilitat de la hipòtesi A sobre l'esdeveniment observat B.
P(B|A) és la probabilitat de versemblança : Probabilitat de l'evidència donat que la probabilitat d'una hipòtesi és certa.
P(A) és la probabilitat prèvia : Probabilitat de la hipòtesi abans d'observar l'evidència.
P(B) és la probabilitat marginal : Probabilitat d'evidència.
Funcionament del classificador de Naïve Bayes:
El funcionament del classificador de Naïve Bayes es pot entendre amb l'ajuda de l'exemple següent:
sistema operatiu de xarxa
Suposem que tenim un conjunt de dades de les condicions climàtiques i la variable objectiu corresponent ' Jugar '. Per tant, utilitzant aquest conjunt de dades hem de decidir si hem de jugar o no un dia determinat segons les condicions meteorològiques. Per tant, per resoldre aquest problema, hem de seguir els passos següents:
- Converteix el conjunt de dades donat en taules de freqüències.
- Genereu una taula de probabilitats trobant les probabilitats de les característiques donades.
- Ara, utilitzeu el teorema de Bayes per calcular la probabilitat posterior.
Problema : Si el temps és assolellat, el jugador hauria de jugar o no?
Solució : Per resoldre-ho, primer considereu el conjunt de dades següent:
Perspectiva | Jugar | |
---|---|---|
0 | Plujós | Sí |
1 | Assolellat | Sí |
2 | Ennuvolat | Sí |
3 | Ennuvolat | Sí |
4 | Assolellat | No |
5 | Plujós | Sí |
6 | Assolellat | Sí |
7 | Ennuvolat | Sí |
8 | Plujós | No |
9 | Assolellat | No |
10 | Assolellat | Sí |
11 | Plujós | No |
12 | Ennuvolat | Sí |
13 | Ennuvolat | Sí |
Taula de freqüències per a les condicions meteorològiques:
El temps | Sí | No |
Ennuvolat | 5 | 0 |
Plujós | 2 | 2 |
Assolellat | 3 | 2 |
Total | 10 | 5 |
Condició meteorològica de la taula de probabilitats:
El temps | No | Sí | |
Ennuvolat | 0 | 5 | 5/14= 0.35 |
Plujós | 2 | 2 | 4/14=0.29 |
Assolellat | 2 | 3 | 5/14=0.35 |
Tots | 4/14=0.29 | 10/14=0.71 |
Aplicant el teorema de Bayes:
P(Sí|Asolellat)= P(Asolellat|Sí)*P(Sí)/P (Asolellat)
P(Asolellat|Sí)= 3/10= 0,3
P(Asolellat)= 0,35
P(Sí)=0,71
log4j
Així P(Sí|Asolellat) = 0,3*0,71/0,35= 0.60
P(No|Asolellat)= P(Asolellat|No)*P(No)/P(Asolellat)
P(Asolellat|NO)= 2/4=0,5
P(No)= 0.29
P(Asolellat)= 0,35
Així P(No|Asolellat)= 0,5*0,29/0,35 = 0.41
Així, com podem veure del càlcul anterior que P(Sí|Asolellat)>P(No|Asolellat)
Per tant, en un dia assolellat, el jugador pot jugar el joc.
Avantatges del classificador Naïve Bayes:
- Naïve Bayes és un dels algorismes de ML ràpids i fàcils per predir una classe de conjunts de dades.
- Es pot utilitzar per a classificacions binàries i multiclasse.
- Funciona bé en prediccions multiclasse en comparació amb els altres algorismes.
- És l'opció més popular per a problemes de classificació de textos .
Desavantatges del classificador de Bayes naïf:
- Naive Bayes assumeix que totes les característiques són independents o no estan relacionades, de manera que no pot aprendre la relació entre característiques.
Aplicacions del classificador Naïve Bayes:
- S'utilitza per Puntuació de crèdit .
- S'utilitza en Classificació de dades mèdiques .
- Es pot utilitzar en prediccions en temps real perquè Naïve Bayes Classifier és un aprenent amb ganes.
- S'utilitza en la classificació de text com ara Filtre de correu brossa i Anàlisi de sentiments .
Tipus de model de Bayes naïf:
Hi ha tres tipus de model de Bayes ingenu, que es donen a continuació:
El classificador utilitza la freqüència de les paraules per als predictors.
Implementació de Python de l'algorisme Naïve Bayes:
Ara implementarem un algorisme de Bayes naïf usant Python. Així, per a això, utilitzarem el ' dades_usuari ' conjunt de dades , que hem utilitzat en el nostre altre model de classificació. Per tant, podem comparar fàcilment el model Naive Bayes amb els altres models.
Passos a implementar:
- Pas de preprocessament de dades
- Encaixar Naive Bayes al conjunt d'entrenament
- Predicció del resultat de la prova
- Prova la precisió del resultat (creació de la matriu de confusió)
- Visualització del resultat del conjunt de proves.
1) Pas de preprocessament de dades:
En aquest pas, preprocessarem/prepararem les dades perquè puguem utilitzar-les de manera eficient al nostre codi. És similar al que vam fer en el preprocessament de dades. El codi per a això es mostra a continuació:
Importing the libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd # Importing the dataset dataset = pd.read_csv('user_data.csv') x = dataset.iloc[:, [2, 3]].values y = dataset.iloc[:, 4].values # Splitting the dataset into the Training set and Test set from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.25, random_state = 0) # Feature Scaling from sklearn.preprocessing import StandardScaler sc = StandardScaler() x_train = sc.fit_transform(x_train) x_test = sc.transform(x_test)
Al codi anterior, hem carregat el conjunt de dades al nostre programa utilitzant ' conjunt de dades = pd.read_csv('user_data.csv') . El conjunt de dades carregat es divideix en formació i conjunt de proves, i després hem escalat la variable de funció.
La sortida del conjunt de dades es dóna com:
2) Encaixar Naive Bayes al conjunt d'entrenament:
Després del pas de preprocessament, ara ajustarem el model Naive Bayes al conjunt d'entrenament. A continuació es mostra el codi per a això:
punter de desreferència c
# Fitting Naive Bayes to the Training set from sklearn.naive_bayes import GaussianNB classifier = GaussianNB() classifier.fit(x_train, y_train)
En el codi anterior, hem utilitzat el Classificador GaussianNB per ajustar-lo al conjunt de dades d'entrenament. També podem utilitzar altres classificadors segons el nostre requisit.
Sortida:
Out[6]: GaussianNB(priors=None, var_smoothing=1e-09)
3) Predicció del resultat del conjunt de proves:
Ara predirem el resultat del conjunt de proves. Per a això, crearem una nova variable predictora i_pred , i utilitzarà la funció predict per fer les prediccions.
# Predicting the Test set results y_pred = classifier.predict(x_test)
Sortida:
La sortida anterior mostra el resultat del vector de predicció i_pred i el vector real y_test. Podem veure que algunes prediccions són diferents dels valors reals, que són les prediccions incorrectes.
4) Creació de la matriu de confusió:
Ara comprovarem la precisió del classificador Naive Bayes mitjançant la matriu de confusió. A continuació es mostra el codi per a això:
# Making the Confusion Matrix from sklearn.metrics import confusion_matrix cm = confusion_matrix(y_test, y_pred)
Sortida:
Com podem veure a la sortida anterior de la matriu de confusió, hi ha 7+3=10 prediccions incorrectes i 65+25=90 prediccions correctes.
5) Visualització del resultat del conjunt d'entrenament:
A continuació, visualitzarem el resultat del conjunt d'entrenament amb Nave Bayes Classifier. A continuació es mostra el codi per a això:
# Visualising the Training set results from matplotlib.colors import ListedColormap x_set, y_set = x_train, y_train X1, X2 = nm.meshgrid(nm.arange(start = x_set[:, 0].min() - 1, stop = x_set[:, 0].max() + 1, step = 0.01), nm.arange(start = x_set[:, 1].min() - 1, stop = x_set[:, 1].max() + 1, step = 0.01)) mtp.contourf(X1, X2, classifier.predict(nm.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('purple', 'green'))) mtp.xlim(X1.min(), X1.max()) mtp.ylim(X2.min(), X2.max()) for i, j in enumerate(nm.unique(y_set)): mtp.scatter(x_set[y_set == j, 0], x_set[y_set == j, 1], c = ListedColormap(('purple', 'green'))(i), label = j) mtp.title('Naive Bayes (Training set)') mtp.xlabel('Age') mtp.ylabel('Estimated Salary') mtp.legend() mtp.show()
Sortida:
A la sortida anterior podem veure que el classificador Nave Bayes ha segregat els punts de dades amb el límit fi. És la corba gaussiana tal com hem utilitzat Gaussian NB classificador al nostre codi.
6) Visualització del resultat del conjunt de proves:
# Visualising the Test set results from matplotlib.colors import ListedColormap x_set, y_set = x_test, y_test X1, X2 = nm.meshgrid(nm.arange(start = x_set[:, 0].min() - 1, stop = x_set[:, 0].max() + 1, step = 0.01), nm.arange(start = x_set[:, 1].min() - 1, stop = x_set[:, 1].max() + 1, step = 0.01)) mtp.contourf(X1, X2, classifier.predict(nm.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('purple', 'green'))) mtp.xlim(X1.min(), X1.max()) mtp.ylim(X2.min(), X2.max()) for i, j in enumerate(nm.unique(y_set)): mtp.scatter(x_set[y_set == j, 0], x_set[y_set == j, 1], c = ListedColormap(('purple', 'green'))(i), label = j) mtp.title('Naive Bayes (test set)') mtp.xlabel('Age') mtp.ylabel('Estimated Salary') mtp.legend() mtp.show()
Sortida:
palíndrom en java
La sortida anterior és la sortida final de les dades del conjunt de prova. Com podem veure, el classificador ha creat una corba gaussiana per dividir les variables 'comprades' i 'no comprades'. Hi ha algunes prediccions incorrectes que hem calculat a la matriu de confusió. Però tot i així és un bon classificador.