Gibt es irgendwelche Ansätze zu folgen, um diese Art von Datensätzen zu handhaben, die so unausgeglichen sind.?
Ihr Datensatz ist fast ausgeglichen. 70/30
ist fast gleich. Mit gut bestückten Bäumen ist es möglich, auf sehr viel unausgewogenere Daten zu trainieren, wie Kredit-Scoring, Betrugserkennung und medizinische Diagnostik, wobei der prozentuale Anteil der positiven Werte weniger als 1% betragen kann.
Ihr Problem ist möglicherweise nicht in Klassenungleichgewicht, aber in der falschen Metrik Sie verwenden. Wenn Sie die Genauigkeit berechnen, benachteiligen Sie Ihr Modell implizit für falsch negative und falsch positive Ergebnisse. Aber ist es wirklich so? Wenn Klassen unausgewogen sind oder aus geschäftlicher oder physikalischer Sicht nicht vergleichbar sind, können andere Metriken wie Präzision, Abruf oder ROZ-AUC von mehr Nutzen als Genauigkeit sein. Für Ihr Problem würde ich ROC AUC empfehlen.
Vielleicht, was Sie wirklich wollen, ist probabilistische Klassifizierung. Und wenn du es binär halten willst, spiele mit dem Schwellenwert, der für die Klassifizierung verwendet wird.
Wie kann ich mein Modell weiter verbessern?
Weil es Analyse des Textes ist, würde ich genauere Datenreinigung empfehlen. Einige Richtungen zu beginnen mit:
- Haben Sie verschiedene Regime der Lemmatisierung/Stemming versucht?
- Wie haben Sie spezielle Entitäten wie Zahlen, Smileys, Abkürzungen, Firmennamen usw. vorverarbeitet?
- Haben Sie Kollokationen ausgenutzt, indem Sie mit Wörtern Bigramme oder sogar Trigramme in Ihr Modell eingefügt haben?
- Wie sind Sie mit der Negation umgegangen?Ein einzelnes "Nein" könnte die Bedeutung dramatisch ändern, und
CountVectorizer
fängt das schlecht ab.
- Haben Sie versucht, die Semantik von den Wörtern zu extrahieren, z.B. passen Sie die Synonyme an oder verwenden Sie das Wort embeddins aus einem vortrainierten Modell wie word2vec oder fastText?
Vielleicht ist Baum-basierte Modelle nicht die beste Wahl. Nach meiner eigenen Erfahrung wurde die beste Stimmungsanalyse von linearen Modellen wie der logistischen Regression oder einem flachen neuronalen Netzwerk durchgeführt. Aber Sie sollten sie stark regularisieren, und Sie sollten Ihre Funktionen weise skalieren, z. mit TF-IDF.
Und wenn Ihr Dataset groß ist, können Sie tief Lernen und trainieren eine RNN auf Ihre Daten versuchen. LSTM ist oft das beste Modell für viele textbezogene Probleme.
Sollte ich versuchen, Downsampling.?
Nein, Sie sollten nie Down-Probe, es sei denn, Sie zu viel Daten auf Ihrem Computer zu verarbeiten. Downsampling erzeugt Verzerrungen in Ihren Daten.
Wenn Sie wirklich die relative Wichtigkeit der Minderheitsklasse für Ihren Klassifikator erhöhen möchten, können Sie einfach die Beobachtungen wiedergewichten. Soweit ich weiß, können Sie unter LightGBM
Klassengewichte mit dem Parameter scale_pos_weight
ändern.
Oder ist es die maximal mögliche Genauigkeit? Wie kann ich mir dessen sicher sein?
Sie nie wissen kann. Aber Sie können ein Experiment machen: Bitten Sie mehrere Menschen, Ihre Testproben zu kennzeichnen und sie miteinander zu vergleichen. Wenn nur 90% der Markierungen übereinstimmen, kann auch ein Mensch die restlichen 10% der Proben nicht korrekt klassifizieren, so dass Sie das Maximum erreicht haben.
Und wieder liegt die Konzentration nicht zu sehr auf Genauigkeit. Vielleicht ist es für Ihre Geschäftsanwendung in Ordnung, wenn Sie einige positive Bewertungen falsch als negativ kennzeichnen, solange alle negativen Bewertungen erfolgreich identifiziert werden.
Danke für die Informationen. Ich habe die Daten für Zahlen gereinigt, Smileys etc. mit 'Textacy', ich habe auch versucht, verschiedene' Stemmers' und 'Lemmatisations' –
Ich habe versucht,' auc' als Metrik, die keine Verbesserungen zeigten. Ich habe nicht verwendet word2vec wie ich kann nicht das Modell in meiner Maschine .. –
ich mit dem Training 'LSTM' mit' Keras' versucht haben, aber die Ergebnisse waren nicht so vielversprechend. –