Pregunta

Estoy utilizando un clasificador Naive Bayes para categorizar varios miles de documentos en 30 categorías diferentes. He implementado un clasificador de Bayes ingenuo, y con un poco de selección de características (en su mayoría filtrar palabras inútiles), he recibido alrededor de un 30% exactitud de la prueba, con una precisión de entrenamiento de 45%. Esto es significativamente mejor que el azar, pero yo quiero que sea mejor.

He intentado implementar AdaBoost con NB, pero no parece dar mejores resultados apreciablemente (la literatura parece dividida en esto, algunos papeles dicen AdaBoost con NB no da mejores resultados, otros lo hacen). ¿Sabe usted de cualquier otra extensión a NB que posiblemente pueden dar una mayor precisión?

¿Fue útil?

Solución

En mi experiencia, la formación adecuada de Bayes ingenuo clasificadores suelen ser asombrosamente preciso (y muy rápido para entrenar - mucho más rápido que cualquier clasificador-constructor que he everused).

Así que cuando se quiere mejorar la predicción clasificador, se puede ver en varios lugares:

  • afinar su clasificador (ajuste de parametros ajustables del clasificador);

  • aplicar algún tipo de técnica de combinación clasificador (por ejemplo, ensembling, impulsar, ensacado); o puede

  • vistazo a los datos alimenta al clasificador - ya sea agregar más datos, mejorar su análisis básico, o especificar las características que seleccione del los datos.

w / r / t clasificadores bayesianos ingenuas, ajuste de parámetros es limitada; Lo recomiendo para centrarse en sus datos - es decir, la calidad de su pre-procesamiento y la selección de características.

I. Analizar los datos (pre-procesamiento)

i asumir sus datos en bruto es algo así como una cadena de texto en bruto para cada punto de datos, que por una serie de etapas de procesamiento a transformar cada cadena en un vector estructurado (matriz 1D) para cada punto de datos de tal manera que corresponde compensarse a una característica (por lo general una palabra) y el valor en que compensan corresponde a la frecuencia.

  • derivada : ya sea manualmente o mediante el uso de una biblioteca derivada? los de código abierto son populares Porter, Lancaster, y la bola de nieve. Así que para ejemplo, si usted tiene los términos programador, programa, programación, programada en un punto de datos dado, una despalilladora reducirá a una solo tallo (probablemente programa ) para que su vector de plazo para que los datos punto tendrá un valor de 4 para el programa de función, que es Probablemente lo que quiere.

  • sinónimo hallazgo : misma idea que deriva - doblar las palabras relacionadas en una sola palabra; por lo que un buscador de sinónimos puede identificar desarrollador, programador, codificador, y el ingeniero de software y rodar en un solo término

  • palabras neutras : palabras con frecuencias similares a través de las clases pobres características hacen


II. Selección de funciones

considerar un caso de uso prototípico de la NBC: el filtrado de correo no deseado; puede ver rápidamente cómo se produce un error y con la misma rapidez se puede ver cómo mejorarlo. Por ejemplo, los filtros por encima del promedio de spam tienen características matizadas como: frecuencia de las palabras en todos los casquillos, la 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 son palabras menudo no individuales, sino por ejemplo, pares de palabras, o grupos de palabras más grandes .

III. Las optimizaciones específicas clasificador

En lugar de 30 clases de uso de un 'uno contra muchos' esquema - en otras palabras, se comienza con un clasificador de dos clases (clase A y 'todo lo demás') a continuación, los resultados en el 'todo lo demás' clase son devueltos al algoritmo para la clasificación en la clase B y 'todo lo demás', etc.

El Método Fisher (probablemente la forma más común de optimizar un clasificador de Bayes ingenuo). Para mí, i pienso de Fisher como normalizadora (más correctamente, normalización ) las probabilidades de entrada Una NBC se utilizan las probabilidades de características para construir una probabilidad 'de todo el documento'. El Método Fisher calcula la probabilidad de una categoría para cada característica del documento luego combina estas probabilidades de características y compara esa probabilidad combinada con la probabilidad de un conjunto aleatorio de características.

Otros consejos

Se recomienda usar un SGDClassifier y sintonizarlo en términos de fuerza de regularización.

Además, trate de sintonizar la fórmula en TFIDF que está utilizando mediante la regulación de los parámetros de TFIFVectorizer .

  • Por lo general ver que por problemas de clasificación de texto SVM o Logística Regressioin cuando se formó uno-contra-todos Supera NB. Como se puede ver en este bonito artículo de la gente de Stanford para documentos de más 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, ajustar su fórmula TFIDF (por ejemplo sublineal tf, smooth_idf).

  • Normalizar sus muestras con L2 o L1 normalización (por defecto en Tfidfvectorization) porque compensa diferentes longitudes de documentos.

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

  • Trate de afinar su L1 / L2 / elasticnet regularización . Se hace una gran diferencia en SGDClassifier / SVM / regresión logística.

  • Trate de uso n-gramas que es configurable en tfidfvectorizer.

  • Si los documentos tienen la estructura (por ejemplo, tener títulos ) considerar el uso de diferentes características para diferentes partes. Por ejemplo title_word1 complemento al documento si palabra1 sucede en el título del documento.

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

  • Considere el uso de información de metadatos sobre el documento (por ejemplo, el tiempo de la creación, el nombre del autor, dirección URL del documento, etc.).

  • Recientemente Facebook FastText código de clasificación que realiza muy bien a través de muchas tareas, asegúrese de probarlo.

Uso de la corrección Laplaciano junto con AdaBoost.

En AdaBoost, primero se asigna un peso a cada tupla de datos en el conjunto de datos de entrenamiento. Los pesos intial se establecen con 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.

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

mantener el pequeño tamaño n también hacen NB para dar de alta resultado precisión. y en el núcleo, como el tamaño n aumentar su precisión degrade,

Seleccione las funciones que tienen menos correlación entre ellos. Y tratar de usar diferentes combinaciones de características a la vez.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top