¿Implementando Bayes ingenuos complementarios en python?

9

Problema

Intenté usar Naive bayes en un conjunto de datos etiquetados de datos delictivos, pero obtuve resultados realmente pobres (7% de precisión). Naive Bayes corre mucho más rápido que otros alogoritmos que he estado usando, así que quería intentar descubrir por qué el puntaje era tan bajo.

Investigación

Después de leer, descubrí que los bayes Naive deberían usarse con conjuntos de datos equilibrados porque tiene un sesgo para las clases con mayor frecuencia. Como mis datos están desequilibrados, quería intentar usar los Bayes Naive Complementarios, ya que están hechos específicamente para tratar los sesgos de datos. En el documento que describe el proceso, la aplicación es para la clasificación de texto, pero no veo por qué la técnica no funcionaría en otras situaciones. Puede encontrar el documento al que me refiero aquí . En resumen, la idea es usar pesos basados ​​en los casos en que una clase no aparece.

Después de investigar un poco pude encontrar una implementación en Java, pero desafortunadamente no conozco ningún Java y simplemente no entiendo el algoritmo lo suficientemente bien como para implementarlo.

Pregunta

¿Dónde puedo encontrar una implementación en Python? Si eso no existe, ¿cómo debo implementarlo yo mismo?

saltamontes
fuente

Respuestas:

5

Los ingenuos Bayes deberían poder manejar conjuntos de datos desequilibrados. Recordemos que la fórmula de Bayes es

PAGS(yX)=PAGS(Xy)PAGS(y)PAGS(X)PAGS(Xy)PAGS(y)

PAGS(Xy)PAGS(y)PAGS(y)

En tu caso, ¿tal vez estás sobreajustado y necesitas un poco de suavizado? Puede comenzar con un suavizado de +1 y ver si mejora. En python, cuando uso numpy, implementaría el suavizado de esta manera:

table = # counts for each feature 
PT = (table + 1) / (table + 1).sum(axis=1, keepdims=1)

Tenga en cuenta que esto le proporciona Bayes ingenuos multinomiales, que se aplica solo a datos categóricos.

También puedo sugerir el siguiente enlace: http://www.itshared.org/2015/03/naive-bayes-on-apache-flink.html . Se trata de implementar Naive Bayes en Apache Flink. Si bien es Java, tal vez le brinde alguna teoría que necesita para comprender mejor el algoritmo.

Alexey Grigorev
fuente
Puede ser correcto, parece que Bayes ingenuo solo tiene el problema de desequilibrio con la clasificación de texto. ¿Puedes explicar qué es el alisado?
saltamontes
PAGS(Xy)X
0

Mi implementación de Complement Naive Bayes en scikit-learn se puede encontrar aquí .

airalcorn2
fuente