Formas de mejorar la precisión de un clasificador Bayes Ingenuo?


Estoy usando un clasificador Bayes Ingenuo para categorizar varios miles de documentos en 30 categorías diferentes. He implementado un clasificador Bayes Ingenuo, y con alguna selección de características (principalmente filtrando palabras inútiles), he obtenido una precisión de prueba del 30%, con una precisión de entrenamiento del 45%. Esto es significativamente mejor que al azar, pero quiero que sea mejor.

He intentado implementar AdaBoost con NB, pero no parece dar resultados apreciablemente mejores (la literatura parece dividido en esto, algunos artículos dicen que AdaBoost con NB no da mejores resultados, otros lo hacen). ¿Conoce alguna otra extensión de NB que posiblemente pueda dar una mejor precisión?

Author: Bugs, 2010-08-13

5 answers

En mi experiencia, los clasificadores Bayes ingenuos debidamente entrenados suelen ser sorprendentemente precisos (y muy rápidos de entrenar notic notablemente más rápidos que cualquier clasificador-constructor que haya utilizado).

Así que cuando quieras mejorar la predicción del clasificador, puedes buscar en varios lugares:

  • tune your classifier (ajuste de los parámetros sintonizables del clasificador);

  • Aplicar algún tipo de técnica de combinación clasificador (por ejemplo, ensamble, impulsar, embolsado); o puede

  • Mire los datos alimentados al clasificador add o bien agregue más datos, mejore su análisis básico o refine las funciones que seleccione datos.

W/r/t clasificadores bayesianos ingenuos, ajuste de parámetros es limitado; recomiendo centrarse en sus datos ie es decir, la calidad de su pre-procesamiento y la selección de características.

I. Análisis de datos (preprocesamiento)

Asumo que sus datos en bruto son algo así como un cadena de texto sin procesar para cada punto de datos, que mediante una serie de pasos de procesamiento transforma cada cadena en un vector estructurado (matriz 1D) para cada punto de datos de modo que cada desplazamiento corresponde a una entidad (generalmente una palabra) y el valor en ese desplazamiento corresponde a la frecuencia.

  • stemming : ¿ya sea manualmente o usando una biblioteca de stemming? los populares de código abierto son Porter, Lancaster y Snowball. Así que para instancia, si usted tiene los términos programador, programa, progamming, programado en un punto de datos dado, un stemmer los reducirá a un single stem (probably program ) por lo que su vector de término para esos datos punto tendrá un valor de 4 para el programa de características, que es probablemente lo que quieras.

  • búsqueda de sinónimos : la misma idea que stemming fold doblar palabras relacionadas en una sola palabra; por lo que un buscador de sinónimos puede identificar desarrollador, programador, codificador, e ingeniero de software y rodar en un solo término

  • palabras neutrales : palabras con frecuencias similares entre clases hacen características pobres


II. Selección de características

Considere un caso de uso prototípico para NBCs: filtrado de spam; puede ver rápidamente cómo falla y también puede ver cómo mejorarlo. Por ejemplo, los filtros de spam por encima del promedio tienen características matizadas como: frecuencia de palabras en mayúsculas, frecuencia de palabras en el título y la ocurrencia de signo de exclamación en el título. Además, las mejores características a menudo no son palabras individuales sino, por ejemplo, pares de palabras, o grupos de palabras más grandes.

III. Optimizaciones de Clasificadores específicos

En lugar de 30 clases use un esquema 'uno contra muchos' in en otras palabras, comienza con un clasificador de dos clases (Clase A y 'todo lo demás'), luego los resultados en la clase 'todo lo demás' se devuelven al algoritmo para su clasificación en Clase B y 'todo lo demás', sucesivamente.

El Método Fisher (probablemente la forma más común de optimizar un clasificador Bayes ingenuo.) A mí, pienso en Fisher como normalizando (más correctamente, estandarizando ) las probabilidades de entrada Un NBC usa las probabilidades de característica para construir una probabilidad de 'documento completo'. El Método Fisher calcula la probabilidad de una categoría para cada característica del documento y luego combina estas probabilidades de característica y compara esa probabilidad combinada con la probabilidad de un conjunto aleatorio de características.

 95
Author: doug,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-09 09:14:13

Sugeriría usar un SGDClassifiercomo en este y ajustarlo en términos de fuerza de regularización.

También intente ajustar la fórmula en TFIDF que está utilizando ajustando los parámetros de TFIFVectorizer.

  • Por lo general veo que para los problemas de clasificación de texto SVM o Regressioin logística cuando entrenado uno contra todos supera a NB. Como se puede ver en este bonito artículo de Stanford people para documentos más largos SVM supera a NB. El código para el papel que utiliza una combinación de SVM y NB (NBSVM) es aquí.

  • En segundo lugar, afine su fórmula TFIDF (por ejemplo, tf sublineal, smooth_idf).

  • Normalice sus muestras con normalización l2 o l1 (predeterminado en Tfidfvectorization) porque compensa las diferentes longitudes de documento.

  • Perceptron multicapa, por lo general obtiene mejores resultados que NB o SVM debido a la no linealidad introducida que es inherente a muchos problemas de clasificación de texto. He implementado uno altamente paralelo usando Theano / Lasagne que es fácil de usar y descargable aquí.

  • Intente ajustar su regularización l1/l2/elasticnet. Hace una gran diferencia en SGDClassifier / SVM / Regresión logística.

  • Intente usar n-grams que es configurable en tfidfvectorizer.

  • Si sus documentos tienen estructura (por ejemplo, tener títulos) considere usar diferentes características para diferentes partes. Por ejemplo, agregue title_word1 a su documento si word1 sucede en el título del documento.

  • Considere usar la longitud del documento como una característica (por ejemplo, número de palabras o caracteres).

  • Considere usar meta información sobre el documento (por ejemplo, hora de creación, nombre del autor, url del documento, etc.).).

  • Recientemente Facebook publicó su código de clasificación FastText que funciona muy bien en muchas tareas, asegúrese de probarlo.

 4
Author: Ash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-24 02:51:39

Usando Corrección Laplaciana junto con AdaBoost.

En AdaBoost, primero se asigna un peso a cada tupla de datos en el conjunto de datos de entrenamiento. Los pesos iniciales se establecen utilizando el método init_weights, que inicializa cada peso para ser 1/d, donde d es el tamaño del conjunto de datos de entrenamiento.

Luego, se llama a un método generate_classifiers, que se ejecuta k veces, creando k instancias del clasificador Bayes Naïve. Estos clasificadores se ponderan, y los datos de prueba se ejecutan en cada uno clasificador. La suma de los "votos" ponderados de los clasificadores constituye la clasificación final.

 0
Author: user4959,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-07 00:32:38

Mantener el tamaño n pequeño también hace que NB dé un resultado de alta precisión. y en el núcleo, a medida que el tamaño de n aumenta su precisión se degrada,

 -1
Author: zaheer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-24 17:49:31

Seleccione entidades que tengan menos correlación entre ellas. Y trate de usar diferentes combinaciones de características a la vez.

 -3
Author: Ammad Waheed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-11 07:26:22