Clasificador de Bayes "ingenuo"
Simple, asume que las características son linealmente independiente y que son identicamente distribuidos.
ingenuo porque asume con su características indpendientes!!
Las características son i.i.d (independientes e idénticamente distribuidas), generalmente con función de densidad de probabilidad Normal o Gaussiana. La idea de este clasificador es maximizar la probabilidad posterior, de tal forma que:
Donde es la probabilidad posterior, esto es, la probabilidad de encontrar una etiqueta de clase
dado un conjunto de patrones
y
es la etiqueta de clase determinada por el clasificador.
La probabilidad posterior está dada por:
la verosimilitud,
la evidencia y $$P(\omega_j)$4 la probabilidad prior o a priori
Se aplica a:
- Filtrado de correo (SPAM)
- Clasificación de secuencias RNA (ácido ribonucleico)
- Diagnostico
Pposterior = (Pcondicional* Pprior)/Evidencia
P(Wj | Xi)
Wj: Conjunto de etiquetas( W0, W1, Wm) Xi: Patrones o Características de la observación i=1..n P(Wj | Xi): Probabilidad de obtener la etiqueta de clase Wj dada un patrón Xi observado
Pcondicional - Verosimilitud Encontrar cierto patrones dada la clase a la que pertenece
Probabilidad de que es de Antioquia dado unos rasgos
P(Xi | Wj):
Probabilidad de observar el conjunto de características Xi dado que se encuentren en la clase Wj
Pprior - Probabilidad de las clases en general, de las etiquetas(W) - Con conocimiento previo
Probabilidad de que sea de Antioquia dada toda la población colombiana
Evidencia - Probabilidad de enontrar un patrón determinado dentro de toda la población sin importar la clase
Pasos
- Encontrar la probabilidad condicional - verosimilitud
- Prior
- Establecer la regla con la Probabilidad Posteriori
# importamos las librerías necesarias
import numpy as np
import matplotlib.pyplot as plt
from sklearn.naive_bayes import GaussianNB
from sklearn import cross_validation
from sklearn import datasets
def graficar_clasificador(clasificador, X, y):
# definimos valores máximos y mínimos de la malla que vamos a graficar
min_x, max_x = X[:,0].min() - 1.0 , X[:,0].max() + 1.0
min_y, max_y = X[:,1].min() - 1.0 , X[:,1].max() + 1.0
paso = 0.01
x_vals, y_vals = np.mgrid[min_x:max_x:paso, min_y:max_y:paso]
# corremos el clasificador sobre la malla
resultados = clasificador.predict(np.c_[x_vals.ravel(), y_vals.ravel()])
resultados = resultados.reshape(x_vals.shape)
plt.figure()
plt.pcolormesh(x_vals, y_vals, resultados, cmap=plt.cm.Pastel1)
plt.scatter(X[:,0], X[:,1],c=y, s=75, edgecolors='black', linewidth=1, cmap=plt.cm.Set2 )
plt.xlim(x_vals.min(), x_vals.max())
plt.ylim(y_vals.min(), y_vals.max())
plt.show()
iris = datasets.load_iris()
X = iris.data[:,[1,3]]
y = iris.target
X_train, X_test, y_train, y_test = cross_validation.train_test_split(X,y, test_size=0.2, random_state=3)
clasificador = GaussianNB()
clasificador.fit(X_train, y_train)
y_predict = clasificador.predict(X_test)
acc = 100.0*(y_predict == y_test).sum()/X_test.shape[0]
print('El acc de clasificacion es del ', acc, '%')
graficar_clasificador(clasificador, X_test, y_test)