Je travaille sur un projet dans R où j'ai environ 1200 e-mails d'une entreprise, dont la plupart sont étiquetés classe ou classe, qui sont les types de demandes. Environ 1000 e-mails sont étiquetés classeet 200 sont étiquetés classeMon 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.
la source
Réponses:
(Tous les e-mails sont en français ou en anglais)
Méthodes de prétraitement:
-> 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:
pred:
335 | 10
59 | 12
331 | 1
83 | 1
330 | 2
83 | 1
1 | 83
12 | 320
la source
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 à
class1
etclass2
. Ces mots n'aident peut-être pas l'algorithme à distinguer les classes, vous pouvez donc supprimer ces mots et effectuer des tests.la source
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.
la source
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.
la source