Classification des e-mails dans R

8

Je travaille sur un projet dans R où j'ai environ 1200 e-mails d'une entreprise, dont la plupart sont étiquetés classe1 ou classe2, qui sont les types de demandes. Environ 1000 e-mails sont étiquetés classe1et 200 sont étiquetés classe2Mon objectif est d'utiliser l'apprentissage supervisé pour construire un modèle qui classera les nouveaux e-mails.

Mais, après beaucoup de prétraitement (analyse, suppression de mots vides, etc.) et essai d'algorithmes typiques (SVM, arbres de décision, etc.) sur une matrice de termes de document, ma matrice de confusion contenait de nombreux faux positifs et faux négatifs, mais seulement quelques faux négatifs avec SVM.

Je me demande comment pourrais-je améliorer mes résultats? Dois-je utiliser un suréchantillonnage ou une représentation bi-gramme? Je suppose que le problème est que les sujets des deux catégories sont très proches.

MarcelRitos
la source
Pouvez-vous fournir plus d'informations? Quel type de SVM utilisez-vous - comme dans, quelle fonction du noyau, et comment avez-vous optimisé les paramètres? Pouvez-vous nous donner plus d'informations sur les méthodes de prétraitement que vous avez utilisées? De plus, j'ai remarqué que vous avez dit qu'il y avait principalement deux classes ... comment gérez-vous les autres classes?
Kyle.
"deux catégories sont vraiment proches" - pouvez-vous les nommer (ou des similaires)?
lukeA
Pourriez-vous fournir les étiquettes de classe réelles et un texte illustratif pour chaque classe? La science est le détail ...
Brandon Loudermilk

Réponses:

2

(Tous les e-mails sont en français ou en anglais)

Méthodes de prétraitement:

  • Fusionnez le "Résumé" et le "Contenu" qui sont la tête de l'e-mail et le contenu
  • Supprimer toutes les adresses e-mail
  • Supprimer tout "De: Quelqu'un À: quelqu'un ... sujet: quelque chose"
  • Supprimer toutes les images incluses dans l'e-mail
  • Commandez l'email selon leur classe
  • Remplacer tout accent français par aucun accent comme é -> e; ê -> e ...
  • Réduire le texte
  • supprimer la ponctuation
  • supprimer des numéros
  • bande d'espace blanc
  • supprimer un prénom d'une liste et des mots spécifiques
  • supprimer les mots vides en français et en anglais
  • document tige en français et anglais
  • Supprimer le terme

-> Alors Document Matrice des termes, avec TF-IDF

Les deux classes sont issues d'un support technique, deux catégories "complexe" et "facile", "complexe" sont des sujets autour de la finance (en théorie), problème "simple" avec le logiciel (en théorie) mais en pratique ils ont beaucoup de mots en commun. Et les autres classes, je ne les prends pas en compte, je me concentre sur les deux pour l'instant

En fait, le type d'algorithme de classification que j'ai utilisé n'est pas si pertinent car j'ai essayé avec 5 algo et aucun n'a donné de bons résultats

Exemple (matrice de confusion) Arbre de décision:

  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

bouritosse
la source
Vous pouvez avoir de bonnes raisons à cela, mais pourquoi supprimez-vous des champs tels que les pièces jointes et l'expéditeur? Cela pourrait contenir des informations. J'ai trouvé dans une configuration quelque peu similaire, que certaines personnes sont plus enclines à créer des documents d'un certain type.
S van Balen
La matrice de confusion pour NB est-elle correcte? (Je suppose que le coin supérieur gauche est réel et prédiction de classe 1)
S van Balen
0

Puisque vous ne traitez qu'avec 2 classes, vous pouvez créer un commonality.cloud()des deux classes (j'utilise cette fonction sur R, je ne connais pas les autres langages).

Il montrera les mots communs à class1et class2. Ces mots n'aident peut-être pas l'algorithme à distinguer les classes, vous pouvez donc supprimer ces mots et effectuer des tests.

TheBiro
la source
0

Vous voudrez peut-être essayer un classificateur bayésien au lieu de SVM ou d'arbres de décision. Votre problème est une généralisation du problème du filtre anti-spam, c'est-à-dire la classification des e-mails en «Spam» (classe 1) ou «Pas de spam» (classe 2). La plupart des filtres anti-spam utilisent la classification bayésienne au lieu de la méthode d'apprentissage supervisé la plus courante.

Alex S Kinman
la source
0

Vous pouvez étudier les fonctionnalités: j'ai remarqué que vous avez supprimé les chiffres. Il se peut que vous ayez fait cela parce qu'ils ne sont pas susceptibles d'entrer en collision, mais vous pouvez également résoudre ce problème en introduisant des classes de mots (@ number @ ou @ big_number @, etc.).

Vous pouvez également essayer d'utiliser les classes de mots sur d'autres groupes de mots. Si cela fonctionne, cela pourrait indiquer que votre ensemble souffre de rareté (ce qui ne me surprendrait pas). Vous pouvez utiliser un sélecteur de fonctionnalités à cet effet, par exemple en classant vos dimensions sur le gain d'informations.

Des moyens plus avancés pour lutter contre la rareté comprennent: l'algorithme de Rocchio ou word2vec.

S van Balen
la source