Algoritmos de clasificación - Naïve Bayes
Introducción al algoritmo Naïve Bayes
Los algoritmos Naïve Bayes son una técnica de clasificación basada en la aplicación del teorema de Bayes con una fuerte suposición de que todos los predictores son independientes entre sí. En palabras simples, la suposición es que la presencia de una característica en una clase es independiente de la presencia de cualquier otra característica en la misma clase. Por ejemplo, un teléfono puede considerarse inteligente si tiene pantalla táctil, conexión a Internet, buena cámara, etc. Aunque todas estas funciones dependen unas de otras, contribuyen independientemente a la probabilidad de que el teléfono sea un teléfono inteligente.
En la clasificación bayesiana, el interés principal es encontrar las probabilidades posteriores, es decir, la probabilidad de una etiqueta dadas algunas características observadas, (|). Con la ayuda del teorema de Bayes, podemos expresar esto en forma cuantitativa de la siguiente manera:
$$ P (L | características) = \ frac {P (L) P (características | L)} {()} $$Aquí, (|) es la probabilidad posterior de clase.
() es la probabilidad previa de clase.
(|) es la probabilidad que es la probabilidad de la clase dada del predictor.
() es la probabilidad previa del predictor.
Modelo de construcción usando Naïve Bayes en Python
La biblioteca de Python, Scikit learn es la biblioteca más útil que nos ayuda a construir un modelo Naïve Bayes en Python. Tenemos los siguientes tres tipos de modelo Naïve Bayes en la biblioteca Scikit learn Python:
Bayes ingenuo gaussiano
Es el clasificador Naïve Bayes más simple que supone que los datos de cada etiqueta se extraen de una distribución gaussiana simple.
Bayes ingenuo multinomial
Otro clasificador de Naïve Bayes útil es Multinomial Naïve Bayes en el que se supone que las características se extraen de una distribución multinomial simple. Este tipo de Naïve Bayes es más apropiado para las características que representan recuentos discretos.
Bernoulli Naïve Bayes
Otro modelo importante es Bernoulli Naïve Bayes en el que se supone que las características son binarias (0 y 1). La clasificación de texto con el modelo de 'bolsa de palabras' puede ser una aplicación de Bernoulli Naïve Bayes.
Ejemplo
Dependiendo de nuestro conjunto de datos, podemos elegir cualquiera de los modelos de Naïve Bayes explicados anteriormente. Aquí, estamos implementando el modelo Gaussiano Naïve Bayes en Python -
Comenzaremos con las importaciones requeridas de la siguiente manera:
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
Ahora, al usar la función make_blobs () de Scikit learn, podemos generar manchas de puntos con distribución gaussiana de la siguiente manera:
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');
A continuación, para usar el modelo GaussianNB, necesitamos importar y hacer su objeto de la siguiente manera:
from sklearn.naive_bayes import GaussianNB
model_GBN = GaussianNB()
model_GNB.fit(X, y);
Ahora, tenemos que hacer predicciones. Se puede hacer después de generar algunos datos nuevos de la siguiente manera:
rng = np.random.RandomState(0)
Xnew = [-6, -14] + [14, 18] * rng.rand(2000, 2)
ynew = model_GNB.predict(Xnew)
A continuación, estamos trazando nuevos datos para encontrar sus límites:
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);
Ahora, con la ayuda de la siguiente línea de códigos, podemos encontrar las probabilidades posteriores de la primera y la segunda etiqueta:
yprob = model_GNB.predict_proba(Xnew)
yprob[-10:].round(3)
Salida
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]]
)
Pros contras
Pros
Las siguientes son algunas ventajas del uso de clasificadores Naïve Bayes:
La clasificación Naïve Bayes es fácil de implementar y rápida.
Convergirá más rápido que los modelos discriminativos como la regresión logística.
Requiere menos datos de entrenamiento.
Es de naturaleza altamente escalable, o escalan linealmente con el número de predictores y puntos de datos.
Puede hacer predicciones probabilísticas y puede manejar datos tanto continuos como discretos.
El algoritmo de clasificación Naïve Bayes se puede utilizar tanto para problemas de clasificación binarios como de clases múltiples.
Contras
Las siguientes son algunas de las desventajas de usar clasificadores Naïve Bayes:
Una de las desventajas más importantes de la clasificación de Naïve Bayes es su fuerte independencia de características porque en la vida real es casi imposible tener un conjunto de características que sean completamente independientes entre sí.
Otro problema con la clasificación de Naïve Bayes es su 'frecuencia cero', lo que significa que si una variable categórica tiene una categoría pero no se observa en el conjunto de datos de entrenamiento, entonces el modelo de Naïve Bayes le asignará una probabilidad cero y no podrá hacer una predicción.
Aplicaciones de la clasificación de Naïve Bayes
Las siguientes son algunas aplicaciones comunes de la clasificación de Naïve Bayes:
Real-time prediction - Debido a su facilidad de implementación y rápido cálculo, se puede utilizar para realizar predicciones en tiempo real.
Multi-class prediction - El algoritmo de clasificación Naïve Bayes se puede utilizar para predecir la probabilidad posterior de múltiples clases de variable objetivo.
Text classification- Debido a la característica de predicción de clases múltiples, los algoritmos de clasificación de Naïve Bayes son muy adecuados para la clasificación de texto. Es por eso que también se utiliza para resolver problemas como el filtrado de spam y el análisis de opiniones.
Recommendation system - Junto con los algoritmos como el filtrado colaborativo, Naïve Bayes crea un sistema de recomendación que se puede utilizar para filtrar información no vista y predecir el tiempo que a un usuario le gustaría el recurso dado o no.