Klassifizieren von E-Mails in R.

8

Ich arbeite an einem Projekt in R, in dem ich ungefähr 1200 E-Mails von einem Unternehmen habe, von denen die meisten als Klasse 1 oder Klasse 2 gekennzeichnet sind. Dies sind die Arten von Anfragen. Ungefähr 1000 E-Mails sind mit Klasse und 200 mit Klasse Mein Ziel ist es, mithilfe von überwachtem Lernen ein Modell zu erstellen, das neue E-Mails klassifiziert.1212

Aber nach viel Vorverarbeitung (Parsen, Entfernen von Stoppwörtern usw.) und Ausprobieren typischer Algorithmen (SVM, Entscheidungsbäume usw.) in einer Dokumenttermmatrix enthielt meine Verwirrungsmatrix viele falsch positive und falsch negative, aber nur wenige falsch negative mit SVM.

Ich frage mich, wie ich meine Ergebnisse verbessern kann. Muss ich Oversampling oder Bi-Gramm-Feature-Darstellung verwenden? Ich denke, das Problem ist, dass die Themen der beiden Kategorien sehr eng sind.

MarcelRitos
quelle
Können Sie weitere Informationen bereitstellen? Welche Art von SVM verwenden Sie - wie in, welche Kernelfunktion und wie haben Sie die Parameter optimiert? Können Sie uns weitere Informationen zu den von Ihnen verwendeten Vorverarbeitungsmethoden geben? Außerdem ist mir aufgefallen, dass Sie gesagt haben, es gäbe hauptsächlich zwei Klassen ... wie gehen Sie mit den anderen Klassen um?
Kyle.
"zwei Kategorien sind wirklich nah" - können Sie sie (oder ähnliche) nennen?
LukeA
Könnten Sie die tatsächlichen Klassenbezeichnungen und einen illustrativen Text für jede Klasse bereitstellen? Wissenschaft ist das Detail ...
Brandon Loudermilk

Antworten:

2

(Alle E-Mails sind oder in Französisch oder Englisch)

Vorverarbeitungsverfahren:

  • Führen Sie "Zusammenfassung" und "Inhalt" zusammen, die den Kopf der E-Mail und den Inhalt bilden
  • Entfernen Sie alle E-Mail-Adressen
  • Entfernen Sie alle "Von: Jemand An: Jemand ... Betreff: etwas"
  • Entfernen Sie alle in der E-Mail enthaltenen Bilder
  • Bestellen Sie die E-Mail entsprechend ihrer Klasse
  • Ersetzen Sie alle französischen Akzente durch keine Akzente wie é -> e; ê -> e ...
  • Setzen Sie den Text nach unten
  • Interpunktion entfernen
  • Zahlen entfernen
  • Streifen Leerraum
  • Entfernen Sie einen Vornamen aus einer Liste und einige bestimmte Wörter
  • Entfernen Sie Stoppwörter in Französisch und Englisch
  • Stammdokument in Französisch und Englisch
  • Begriff entfernen

-> Dann Dokumenttermmatrix mit TF-IDF

Die beiden Klassen stammen aus einem technischen Support, zwei Kategorien "komplex" und "einfach", "komplex" sind Themen rund um Finanzen (theoretisch), "einfaches" Problem mit der Software (theoretisch), aber in der Praxis haben sie viele Wörter gemeinsam. Und die anderen Klassen, die ich nicht berücksichtige, konzentrieren sich vorerst nur auf die beiden

Eigentlich ist die Art des Klassifizierungsalgorithmus, den ich verwendet habe, nicht so relevant, weil ich es mit 5 algo versucht habe und keiner gute Ergebnisse lieferte

Beispiel (Verwirrungsmatrix) Entscheidungsbaum:

  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
quelle
Sie haben vielleicht gute Gründe dafür, aber warum entfernen Sie Felder wie Anhänge und Absender? Dies kann Informationen enthalten. Ich habe in einem etwas ähnlichen Setup festgestellt, dass bestimmte Personen eher dazu neigen, Dokumente eines bestimmten Typs zu verfassen.
S van Balen
Ist die Verwirrungsmatrix für NB korrekt? (Ich gehe davon aus, dass oben links die tatsächliche Klasse 1 und die Vorhersage ist)
S van Balen
0

Da es sich nur um 2 Klassen handelt, können Sie commonality.cloud()aus beiden Klassen eine erstellen (ich verwende diese Funktion für R, ich kenne keine anderen Sprachen).

Es wird die Worte zeigen , die gemeinsam sind class1und class2. Diese Wörter helfen dem Algorithmus möglicherweise nicht, die Klassen zu unterscheiden, sodass Sie diese Wörter entfernen und einige Tests durchführen können.

TheBiro
quelle
0

Möglicherweise möchten Sie einen Bayes'schen Klassifikator anstelle von SVM oder Entscheidungsbäumen ausprobieren. Ihr Problem ist eine Verallgemeinerung des Spamfilterproblems, dh die Klassifizierung von E-Mails in "Spam" (Klasse 1) oder "Nicht-Spam" (Klasse 2). Die meisten Spam-Filter verwenden die Bayes'sche Klassifizierung anstelle der allgemeineren überwachten Lernmethode.

Alex S. Kinman
quelle
0

Sie könnten die Funktionen studieren: Ich habe festgestellt, dass Sie die Zahlen entfernt haben. Es könnte sein, dass Sie das getan haben, weil sie wahrscheinlich nicht kollidieren, aber Sie könnten das auch lösen, indem Sie Wortklassen (@ number @ oder @ big_number @ usw.) einführen.

Sie können versuchen, die Wortklassen auch für andere Wortgruppen zu verwenden. Wenn das funktioniert, könnte dies darauf hinweisen, dass Ihr Set unter Sparsamkeit leidet (was mich nicht überraschen würde). Zu diesem Zweck können Sie eine Funktionsauswahl verwenden, indem Sie beispielsweise Ihre Dimensionen nach dem Informationsgewinn ordnen.

Fortgeschrittenere Methoden zur Bekämpfung der Sparsamkeit sind: Rocchios Algorithmus oder word2vec.

S van Balen
quelle