Eine zunehmende Anzahl von Merkmalen führt zu einer Verringerung der Genauigkeit, jedoch zu einer Erhöhung des Vorlaufs / Rückrufs

15

Ich bin neu im maschinellen Lernen. Im Moment benutze ich einen Naive Bayes (NB) Klassifikator, um kleine Texte in 3 Klassen mit NLTK und Python als positiv, negativ oder neutral zu klassifizieren.

Nach einigen Tests mit einem Datensatz von 300.000 Instanzen (16.924 positive, 7.477 negative und 275.599 neutrale) stellte ich fest, dass die Genauigkeit abnimmt, wenn ich die Anzahl der Merkmale erhöhe, aber die Präzision / Abrufrate für positive und negative Klassen zunimmt. Ist dies ein normales Verhalten für einen NB-Klassifikator? Können wir sagen, dass es besser wäre, mehr Funktionen zu verwenden?

Daten:

Features: 50    
Accuracy: 0.88199
F_Measure Class Neutral 0.938299
F_Measure Class Positive 0.195742
F_Measure Class Negative 0.065596

Features: 500   
Accuracy: 0.822573
F_Measure Class Neutral 0.904684
F_Measure Class Positive 0.223353
F_Measure Class Negative 0.134942

Danke im Voraus...

Edit 2011/11/26

Ich habe 3 verschiedene Merkmalsauswahlstrategien (MAXFREQ, FREQENT, MAXINFOGAIN) mit dem Naive Bayes-Klassifikator getestet. Hier sind zunächst die Genauigkeit und die F1-Maße pro Klasse:

Bildbeschreibung hier eingeben

Dann habe ich den Zugfehler und den Testfehler mit einem inkrementellen Trainingssatz aufgezeichnet, wenn MAXINFOGAIN mit den Top-100- und den Top-1000-Features verwendet wurde:

Bildbeschreibung hier eingeben

Es scheint mir also, dass, obwohl die höchste Genauigkeit mit FREQENT erzielt wird, der beste Klassifikator derjenige ist, der MAXINFOGAIN verwendet, stimmt das ? Bei Verwendung der Top-100-Funktionen besteht eine Verzerrung (Testfehler stehen in der Nähe eines Zugfehlers), und das Hinzufügen weiterer Trainingsbeispiele hilft nicht. Um dies zu verbessern, benötigen wir mehr Funktionen. Mit 1000 Funktionen wird die Verzerrung reduziert, aber der Fehler steigt ... Ist das in Ordnung? Muss ich weitere Funktionen hinzufügen? Ich weiß nicht wirklich, wie ich das interpretieren soll ...

Danke noch einmal...

kanzen_master
quelle
1
Es hängt davon ab, was Sie mit "bester Klassifikator" meinen. Wenn Ihre Aufgabe darin besteht, einen Klassifikator mit insgesamt guter Genauigkeit zu erstellen, würde ich FREQENT wählen. Auf der anderen Seite würde ich MAXINFOGAIN wählen, wenn Sie, wie bei den meisten seltenen Klassenklassifizierungsaufgaben, die seltene Klasse (das könnte die "negative" oder die "positive" Klasse sein) besser klassifizieren möchten. Ich denke, Ihre Interpretation der Lernkurven ist korrekt: Mit 100 Merkmalen haben Sie eine Voreinstellung und Sie können sie hinzufügen. Mit 1000 haben Sie eine Abweichung und Sie können sie entfernen. Vielleicht können Sie einen Kompromiss zwischen 100 und 1000 Funktionen versuchen, um bessere Ergebnisse zu erzielen.
Simone
Danke für deine Hilfe, Simone! Ich habe alles bis auf den letzten Teil verstanden ... Könnten Sie mir bitte sagen, wie Sie die hohe Varianz bei den 1000 Merkmalen sehen? Da der Unterschied zwischen Test- und
Zugfehlern
Ich füge meiner Antwort einige Beispiele hinzu. Wenn die Kurven nicht so eng sind, wird das Problem als mit hoher Varianz eingestuft . In Ihrem Fall habe ich Ihnen vielleicht gesagt, dass mit weniger Funktionen eine bessere Leistung erzielt wird und dass 1000 Funktionen wahrscheinlich ein Problem mit hoher Varianz darstellen. Anstatt die Ergebnisse von Merkmalauswahlalgorithmen mit den auf dem Trainingssatz berechneten Maßen zu zeichnen, versuchen Sie, Ihre Daten in Training (2/3 von ihnen) und Validierung aufzuteilen, führen Sie dann die Merkmalauswahl auf dem Trainingssatz durch und werten Sie sie auf dem Testsatz aus . Sie sollten ein Maximum in der Mitte des Grundstücks finden.
Simone
Danke für die Antwort. Das dritte Beispiel Ihres aktualisierten Beitrags (gutes Ergebnis, Zug, Testfehlerkurven sind weder zu nah noch zu weit entfernt) sieht aus wie die Lernkurve, die ich mit 1000 Features gezeichnet habe. Daher dachte ich, dass die Verwendung von etwa 1000 Features ein "gutes Ergebnis" wäre. In diesem Fall ist der Fehler jedoch höher, was nicht gut ist. Aber wenn ich nur den Abstand zwischen den Kurven betrachte, kann ich bei 1000 Features keine hohe Varianz feststellen ... (Übrigens, ich teile die Daten bereits zu 2/3 als Trainingssatz, zu 1/3 als Testsatz und führe ein Feature aus Auswahl auf dem Trainingsset und Auswertung auf dem
Testset
1
IN ORDNUNG. Ich bin ziemlich neu im Erlernen von Kurven und Ihre Beispiele waren wirklich interessant und haben mir Einblicke in sie verschafft. Also, danke D T. Ja, in beiden Fällen kann es zu Verzerrungen kommen. Meiner Meinung nach haben Sie einen sehr verzerrten Datensatz, und anstatt die Genauigkeit zu testen, ist es wichtig, einen Blick auf das F-Maß zu werfen. Wenn Sie sich Ihre Grundstücke ansehen, ist es anscheinend umso besser, je mehr Funktionen Sie haben. Tatsächlich verbessert sich das F-Maß. Ich habe gehört, dass es in der Textklassifizierung üblich ist, viele Features zu verwenden, wenn Ihre Features die Worthäufigkeit in Ihrem Text sind. Übrigens bin ich es nicht gewohnt und ich kann dir nicht mehr sagen.
Simone

Antworten:

18

Genauigkeit gegen F-Maß

Wenn Sie eine Metrik verwenden, sollten Sie zunächst wissen, wie man sie spielt. Die Genauigkeit misst das Verhältnis der korrekt klassifizierten Instanzen über alle Klassen hinweg. Das heißt, wenn eine Klasse häufiger vorkommt als eine andere, wird die resultierende Genauigkeit eindeutig von der Genauigkeit der dominierenden Klasse dominiert. In Ihrem Fall, wenn man ein Modell M konstruiert, das für jede Instanz nur "neutral" vorhersagt, wird die resultierende Genauigkeit sein

eincc=neutreinl(neutreinl+pÖsichtichve+neGeintichve)=0,9188

Gut, aber nutzlos.

Das Hinzufügen von Merkmalen verbesserte die Fähigkeit von NB, die Klassen zu unterscheiden, deutlich, aber durch Vorhersagen von "positiv" und "negativ" werden Neutrale falsch klassifiziert, und daher nimmt die Genauigkeit ab (grob gesprochen). Dieses Verhalten ist unabhängig von NB.

Mehr oder weniger Funktionen?

Im Allgemeinen ist es nicht besser, mehr Funktionen zu verwenden, sondern die richtigen Funktionen zu verwenden. Mehr Features sind insofern besser, als ein Feature-Auswahl-Algorithmus mehr Auswahlmöglichkeiten hat, um die optimale Teilmenge zu finden (ich schlage vor, Folgendes zu untersuchen: Feature-Auswahl von crossvalidated ). Wenn es um NB geht, besteht ein schneller und solider (aber nicht optimaler) Ansatz darin, InformationGain (Ratio) zu verwenden, um die Merkmale in absteigender Reihenfolge zu sortieren und das obere k auszuwählen.

Auch dieser Hinweis (mit Ausnahme von InformationGain) ist unabhängig vom Klassifizierungsalgorithmus.

EDIT 27.11.11

Es gab viel Verwirrung hinsichtlich der Abweichung und der Varianz bei der Auswahl der richtigen Anzahl von Merkmalen. Ich empfehle daher, die ersten Seiten dieses Tutorials zu lesen: Bias-Variance tradeoff . Das Wesentliche ist:

  • High Bias bedeutet, dass das Modell nicht optimal ist, dh der Testfehler ist hoch (underfitting, wie Simone es ausdrückt)
  • Hohe Varianz bedeutet, dass das Modell sehr empfindlich auf das zum Erstellen des Modells verwendete Beispiel reagiert . Dies bedeutet, dass der Fehler stark vom verwendeten Trainingssatz abhängt und daher die Varianz des Fehlers (über verschiedene Kreuzvalidierungsfalten hinweg bewertet) extrem unterschiedlich sein wird. (Überanpassung)

Die eingezeichneten Lernkurven geben tatsächlich den Bias an, da der Fehler eingezeichnet ist. Was Sie jedoch nicht sehen können, ist die Varianz, da das Konfidenzintervall des Fehlers überhaupt nicht aufgezeichnet wird.

Beispiel: Wenn Sie eine dreifache Kreuzvalidierung sechsmal durchführen (Ja, eine Wiederholung mit unterschiedlicher Datenpartitionierung wird empfohlen, Kohavi schlägt sechs Wiederholungen vor), erhalten Sie 18 Werte. Ich würde jetzt erwarten, dass ...

  • Mit einer kleinen Anzahl von Merkmalen ist der durchschnittliche Fehler (Bias) geringer, die Varianz des Fehlers (der 18 Werte) ist jedoch höher.
  • Bei einer hohen Anzahl von Merkmalen ist der durchschnittliche Fehler (Bias) höher, die Varianz des Fehlers (der 18 Werte) jedoch niedriger.

Dieses Verhalten des Fehlers / der Abweichung ist genau das, was wir in Ihren Darstellungen sehen. Über die Varianz können wir keine Aussage machen. Dass die Kurven nahe beieinander liegen, kann ein Hinweis darauf sein, dass der Testsatz groß genug ist, um die gleichen Eigenschaften wie der Trainingssatz aufzuweisen, und daher der gemessene Fehler zuverlässig sein kann, aber dies ist (zumindest soweit ich verstanden habe) es reicht nicht aus, eine Aussage über die Varianz (des Fehlers!) zu treffen.

Wenn ich mehr und mehr Trainingsbeispiele hinzufüge (wobei die Größe des Testsatzes konstant bleibt), würde ich erwarten, dass die Varianz beider Ansätze (kleine und große Anzahl von Features) abnimmt.

Oh, und vergessen Sie nicht, den Infogewinn für die Funktionsauswahl nur anhand der Daten im Trainingsbeispiel zu berechnen! Man ist versucht, die vollständigen Daten für die Featureauswahl zu verwenden und dann eine Datenpartitionierung durchzuführen und die Kreuzvalidierung anzuwenden. Dies führt jedoch zu einer Überanpassung. Ich weiß nicht, was du getan hast, das ist nur eine Warnung, die man niemals vergessen sollte.

steffen
quelle
1
Vielen Dank für Ihre Antwort, sehr klare Erklärung. Ich verwende den maximalen Informationsgewinn als meine Strategie zur Auswahl von Funktionen und teste mit der 5-fachen Kreuzvalidierung. Ich denke, um zu wissen, welche Top-k-Features ich verwenden soll, muss ich den Algorithmus iterativ testen, indem ich die Anzahl der Features jedes Mal erhöhe und das k nehme, das die höchste f_score ergibt. Ich vermute jedoch, dass sich "top k" je nach Datensatz wahrscheinlich ändert ... oder?
kanzen_master
1
Richtig. Wenn jedoch der neue Datensatz dem alten ähnlich ist (gleiche Merkmale mit gleichen Verteilungen), bleibt k der gleiche. Sie können einen genetischen Algorithmus hinzufügen, um den Bereich möglicher Lösungen schneller zu durchsuchen, oder (noch besser) einen genetischen Algorithmus verwenden, um die optimale Teilmenge von Funktionen unabhängig von InformationGain zu finden.
Steffen
1
Laut Stanfords Vorlesungen bedeutet es tatsächlich, dass es Abweichungen gibt, wenn Sie gut getrennte Trainings- und Testkurven sehen, die die Anzahl der Trainingsbeispiele variieren. Ein besserer Ansatz wäre natürlich, die Konfidenzintervalle zu schätzen.
Simone
1
@DT 1. Ich kenne die Vorlesung nicht, daher kann ich Andrewgs Erklärung nicht mit meiner verbinden, sorry. 2. Nein. Kleine Anzahl von Merkmalen => Überanpassung => geringe Vorspannung, hohe Varianz. Hohe Anzahl von Merkmalen => Unteranpassung => hohe Vorspannung, geringe Varianz. Ich schlage wirklich vor, die Varianz des Fehlers der cv-Falten für eine unterschiedliche Anzahl von Merkmalen und Trainingsbeispielen aufzuzeichnen.
steffen
2
1. steffen, die vorlesung gibt es hier: ml-class.org/course/video/preview_list (teil x, abschnitt " lernkurven ") 2. ich verstehe . Ich dachte, dass, wenn viele Funktionen während des Trainings gelernt => Modell wird komplex und passt das Trainingsset => Varianz ...
kanzen_master
5

Um zu wissen, ob es sinnvoll ist, mehr Funktionen zu verwenden, würde ich Lernkurven zeichnen. Ich denke, dies wird in der 10. Einheit der maschinellen Lernklasse von Stanford mit dem Titel "Ratschläge für die Anwendung maschinellen Lernens", die Sie hier finden: http://www.ml-class.org/course/video/preview_list, klar erklärt .

Wenn Sie Lernkurven zeichnen, können Sie verstehen, ob Ihr Problem entweder die hohe Abweichung oder die hohe Varianz ist. Solange Sie die Anzahl der Trainingsbeispiele erhöhen, sollten Sie den Trainingsfehler und den Testfehler (dh 1-Genauigkeit) aufzeichnen. Letzterer ist der Fehler Ihres Klassifikators, der auf einem anderen Datensatz geschätzt wird. Wenn diese Kurven nahe beieinander liegen, liegt ein Problem mit hoher Abweichung vor, und es wäre wahrscheinlich vorteilhaft, weitere Features einzufügen. Auf der anderen Seite haben Sie ein Problem mit hoher Varianz, wenn Ihre Kurven ziemlich getrennt sind, solange Sie die Anzahl der Trainingsbeispiele erhöhen. In diesem Fall sollten Sie die Anzahl der von Ihnen verwendeten Funktionen verringern.

Bearbeiten

λ

λ

Hohe Varianz

λ

Hohe Vorspannung

λ=1

Gutes Ergebnis

Simone
quelle
Groß! Vielen Dank! Da beide Antworten sehr hilfreich waren, ich aber nicht beide als Antworten markieren kann, werde ich die erste als Antwort markieren. Aber ich denke, das ist definitiv der beste Weg, dies zu überprüfen.
kanzen_master 23.11.11
Übrigens versuche ich, die Lernkurve eines Klassifikators zu zeichnen, der die Top-100-Funktionen mit dem Maximum Information Gain Score verwendet. Während ich den Trainingsdatensatz vergrößere, möchte ich Trainingsfehler und Testfehler aufzeichnen. Welche Größen sollten für den anfänglichen Zugdatensatz (schrittweise zu erhöhen) und für den Testdatensatz (statisch für alle Tests) verwendet werden?
Nochmals vielen
2
Teilen Sie Ihren Datensatz in einen Trainingssatz und einen Testsatz auf. Beginnen Sie mit sehr wenigen Trainingsaufzeichnungen und fahren Sie dann mit dem Hinzufügen von Aufzeichnungen fort. Berechnen Sie für jede Iteration den Trainingssatzfehler mit den Datensätzen, die Sie zum Trainieren Ihres Klassifikators verwendet haben, und berechnen Sie dann den Testsatzfehler immer mit allen Testdatensätzen. Ich weiß, dass dies eine in der Praxis übliche Standardmethode ist. Es wäre interessant, Ihre Ergebnisse zu sehen! Prost, Simone.
Simone
1
Simone, ich habe den ersten Beitrag mit einigen Ergebnissen zu Genauigkeit, F1-Maßen und Lernkurven und meiner Interpretation unten aktualisiert. Könnten Sie das bitte überprüfen? Danke ...
kanzen_master