Este artículo fue probado por nuestros especialistas para asegurar la veracidad de nuestra esta división.
Solución:
En mi experiencia, los clasificadores Naive Bayes debidamente entrenados suelen ser asombrosamente precisos (y muy rápidos de entrenar, notablemente más rápidos que cualquier constructor de clasificadores que haya usado).
entonces, cuando desee mejorar la predicción del clasificador, puede buscar en varios lugares:
-
sintoniza tu clasificador (ajustando los parámetros sintonizables del clasificador);
-
aplicar algún tipo de técnica de combinación de clasificadores (p. ej., ensamblaje, refuerzo, embolsado); o tu puedes
-
mirar los datos se alimenta al clasificador: agregue más datos, mejore su análisis básico o refine las características que seleccione de los datos.
w/r/t clasificadores bayesianos ingenuos, el ajuste de parámetros es limitado; Recomiendo centrarse en sus datos, es decir, la calidad de su procesamiento previo y la selección de funciones.
I. Análisis de datos (preprocesamiento)
Supongo que sus datos sin procesar son algo así como un string de texto sin procesar para cada punto de datos, que mediante una serie de pasos de procesamiento transforma cada string en un vector estructurado (1D array) para cada punto de datos, de modo que cada compensación corresponda a una característica (generalmente una palabra) y el valor de esa compensación corresponde a la frecuencia.
-
derivación: ya sea manualmente o mediante el uso de una biblioteca derivada? los populares de código abierto son Porter, Lancaster y Snowball. Entonces, por ejemplo, si tiene los términos programador, programa, programación, programado en un punto de datos dado, un lematizador los reducirá a un solo tallo (probablemente programa) por lo que su vector de términos para ese punto de datos tendrá un valor de 4 para el programa de funciones, que es probablemente lo que desea.
-
búsqueda de sinónimos: la misma idea que derivación: 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 reunirlos en un solo término
-
palabras neutras: palabras con frecuencias similares en todas las clases hacen características pobres
II. Selección de características
Considere un caso de uso prototípico para NBC: filtrado de spam; puede ver rápidamente cómo falla y con la misma rapidez 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 aparición de signos 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.
tercero Optimizaciones de clasificador específico
En lugar de 30 clases, use un esquema de ‘uno contra muchos’–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 la clasificación en Clase B y ‘todo lo demás’, etc. .
El método Fisher (probablemente la forma más común de optimizar un clasificador Naive Bayes). Para mí, pienso en Fisher como normalizando (más correctamente, estandarizando) las probabilidades de entrada Un NBC usa las probabilidades de características para construir una probabilidad de ‘todo el documento’. El método de 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.
Sugeriría usar un Clasificador SGD como en this 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.
-
Yo suelo ver eso por problemas de clasificación de texto SVM o Regresión Logística cuando se entrena uno contra todos supera a NB. Como puede ver en este buen artículo de la gente de Stanford 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, ajuste su fórmula TFIDF (por ejemplo, sublinear tf, smooth_idf).
-
Normalizar sus muestras con normalización l2 o l1 (predeterminado en Tfidfvectorization) porque compensa las diferentes longitudes de los documentos.
-
Perceptrón 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. Implementé uno muy paralelo usando Theano/Lasagne, que es fácil de usar y se puede descargar aquí.
-
Intentar ajuste su regularización l1/l2/elasticnet. Hace una gran diferencia en SGDClassifier/SVM/Logistic Regression.
-
Tratar de usar n-gramas que es configurable en tfidfvectorizer.
-
Si sus documentos tienen estructura (por ejemplo, tienen títulos) considere usar diferentes características para diferentes partes. Por ejemplo, agregue título_palabra1 a su documento si la palabra1 aparece en el título del documento.
-
Considere usar el longitud del documento como una característica (por ejemplo, número de palabras o caracteres).
-
Considere usar meta informacion sobre el documento (por ejemplo, hora de creación, nombre del autor, URL del documento, etc.).
-
Hace poco Facebook publicó su código de clasificación FastText que funciona muy bien en muchas tareas, asegúrese de probarlo.
Recuerda algo, que tienes la capacidad de añadir una puntuación si te fue preciso.