Clasificación de correo electrónico en R


8

Estoy trabajando en un proyecto en R donde tengo aproximadamente 1200 correos electrónicos de una empresa, la mayoría de los cuales están etiquetados como clase o clase , que son los tipos de solicitudes. Aproximadamente 1000 correos electrónicos están etiquetados como clase , y 200 están etiquetados como clase Mi objetivo es utilizar el aprendizaje supervisado para construir un modelo que clasifique los nuevos correos electrónicos.1212

Pero, después de mucho preprocesamiento (análisis, eliminación de palabras vacías, etc.) y de probar algoritmos típicos (SVM, árboles de decisión, etc.) en una matriz de términos del documento, mi matriz de confusión contenía muchos falsos positivos y falsos negativos, pero solo unos pocos falsos negativos con SVM.

Me pregunto cómo podría mejorar mis resultados. ¿Necesito usar sobremuestreo o representación de características bi-gram? Supongo que el problema es que los temas de las dos categorías son muy cercanos.


¿Me puede proporcionar más información? ¿Qué tipo de SVM está utilizando, como en qué función del núcleo y cómo optimizó los parámetros? ¿Puede darnos más información sobre los métodos de preprocesamiento que utilizó? Además, noté que dijiste que en su mayoría había dos clases ... ¿cómo manejas las otras clases?
Kyle.

"dos categorías son realmente cercanas" , ¿puede nombrarlas (o similares)?
lukeA

¿Podría proporcionar las etiquetas de clase reales y un texto ilustrativo para cada clase? La ciencia son los detalles ...
Brandon Loudermilk

Respuestas:


2

(Todos los correos electrónicos son o en francés o en inglés)

Métodos de preprocesamiento:

  • Combinar "Resumen" y "Contenido", que son el encabezado del correo electrónico y el contenido
  • Eliminar todos los correos electrónicos
  • Eliminar todo "De: Alguien Para: alguien ... sujeto: algo"
  • Eliminar todas las imágenes incluidas en el correo electrónico
  • Ordene el correo electrónico de acuerdo a su clase
  • Reemplace todo el acento francés por ningún acento como é -> e; ê -> e ...
  • Poner texto para bajar
  • eliminar puntuación
  • eliminar números
  • tira de espacio en blanco
  • eliminar algún nombre de una lista y algunas palabras específicas
  • eliminar palabras de detención en francés e inglés
  • documento madre en francés e inglés
  • Eliminar término

-> Luego, matriz de términos del documento, con TF-IDF

Las dos clases son de soporte técnico, dos categorías "complejo" y "fácil", "complejo" son temas relacionados con las finanzas (en teoría), el problema "simple" con el software (en teoría) pero en la práctica tienen muchas palabras en común. Y las otras clases no las tengo en cuenta, solo me concentro en las dos por ahora

En realidad, el tipo de algoritmo de clasificación que utilicé no es tan relevante porque probé con 5 algo y ninguno dio buenos resultados

Ejemplo (matriz de confusión) Árbol de decisión:

  Decision tree:           

pred:

335 10
59 | 12

SVM:

331 1
83 | 1

Knn (n=10):

330 2

83 1

Naive Bayes:

1 | 83

12 | 320


Es posible que tenga buenas razones para esto, pero ¿por qué elimina campos como archivos adjuntos y remitente? Esto podría contener información. En una configuración algo similar, he encontrado que ciertas personas son más propensas a crear documentos de cierto tipo.
S van Balen

¿Es correcta la matriz de confusión para NB? (Supongo que arriba a la izquierda es clase 1 real y predicción)
S van Balen

0

Como solo se trata de 2 clases, puede crear una commonality.cloud()de ambas clases (uso esta función en R, no sé sobre otros idiomas).

Mostrará las palabras que son comunes en class1y class2. Es posible que estas palabras no ayuden al algoritmo a distinguir las clases para que pueda eliminar estas palabras y realizar algunas pruebas.


0

Es posible que desee probar un clasificador bayesiano en lugar de SVM o árboles de decisión. Su problema es una generalización del problema del filtro de spam, es decir, clasificar los correos electrónicos en 'Spam' (clase 1) o 'No Spam' (clase 2). La mayoría de los filtros de spam utilizan la clasificación bayesiana en lugar del método de aprendizaje supervisado más común.


0

Podrías estudiar las características: me di cuenta de que eliminaste los números. Podría ser que hiciste eso porque no es probable que choquen, pero también podrías resolverlo introduciendo clases de palabras (@ number @ o @ big_number @, etc.).

También puede intentar usar las clases de palabras en otros grupos de palabras. Si eso funciona, podría indicar que su conjunto sufre de escasez (lo que no me sorprendería). Podría usar un selector de funciones para ese propósito, por ejemplo, clasificando sus dimensiones en la ganancia de información.

Entre las formas más avanzadas de combatir la escasez se incluyen: el algoritmo de Rocchio o word2vec.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.