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.
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.
quelle
Antworten:
(Alle E-Mails sind oder in Französisch oder Englisch)
Vorverarbeitungsverfahren:
-> 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:
pred:
335 | 10
59 | 12
331 | 1
83 | 1
330 | 2
83 | 1
1 | 83
12 | 320
quelle
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
class1
undclass2
. 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.quelle
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.
quelle
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.
quelle