2016-06-05 11 views
1

Ich baue ein Sentiment-Analyse-Programm mit einigen Tweets, die ich gesammelt habe. Die beschrifteten Daten, die ich gesammelt habe, würden durch ein neurales Netzwerk gehen, das sie in zwei Klassen klassifiziert, positiv und negativ.Ist das Verhältnis von zwei Klassen bei Klassifizierungsproblemen wichtig?

Die Daten werden noch etikettiert. Bisher habe ich beobachtet, dass die positive Kategorie sehr wenige Beobachtungen enthält.

Die Datensätze für die positive Kategorie in meinem Trainingssatz könnten etwa 5% des Trainingsdatensatzes sein (das gleiche Verhältnis könnte sich auch in der Population widerspiegeln).

Würde dies zu Problemen im letzten "Programm" führen? Die Größe des Datensatzes beträgt ca. 5000 Datensätze.

Antwort

4

Ja, ja, es kann. Es gibt zwei Dinge zu beachten:

  1. 5% von 5000 ist 250. So werden Sie versuchen, die Datenverteilung Ihrer Klasse basierend auf nur 250 Proben zu modellieren. Dies könnte für neuronale Netzwerke um Größenordnungen zu klein sein. Folglich benötigen Sie möglicherweise 40x mehr Daten, um eine repräsentative Stichprobe Ihrer Daten zu erhalten. Während man die Mehrheitsklasse leicht durch Subsampling reduzieren kann, ohne das große Risiko, die Struktur zu zerstören, gibt es keine Möglichkeit mehr "Struktur" von weniger Punkten zu bekommen (du kannst Punkte replizieren, Rauschen hinzufügen etc., aber das fügt keine Struktur hinzu, dies fügt nur Annahmen hinzu).
  2. Klassenungleichgewicht kann auch zu Konvergenz zu naiven Lösungen führen, wie "immer falsch", die eine Genauigkeit von 95% hat. Hier können Sie einfach mit der Kostenfunktion herumspielen, um sie robuster gegenüber Unausgewogenheit zu machen (insbesondere - von @PureW vorgeschlagene Zugaufteilung ist nichts anderes als "Black Box" -Methode, die Verlustfunktion zu ändern, so dass sie mehr Gewicht auf Minderheit hat Wenn Sie Zugriff auf Ihren Classifier-Verlust haben, wie in NN, sollten Sie dies nicht tun - sondern stattdessen die Kostenfunktion ändern und trotzdem alle Daten behalten.
+0

Da die Datenpunkte Tweets hier sind, muss ich mehr von ihnen sammeln, wie Sie darauf hinweisen. Sammeln Sie also mehr Daten für die Klasse mit weniger Datensätzen? – Bhashithe

+1

Ich würde empfehlen, mit "wahrem Verhältnis" zu sammeln, solange die kleinste Klasse groß genug ist, um mit der Verarbeitung zu beginnen. Es ist einfacher, Daten hinterher zu verwerfen und dann neue zu bekommen, wenn es möglich ist - einfach mehr von allem sammeln. Wenn es aus irgendeinem Grund zu teuer ist - verfolgen Sie den wahren Prior und konzentrieren Sie sich auf die Minderheitsklasse, und verwenden Sie diesen Prior (5% gegenüber 95%) später sowohl in Ihrem Klassifizierer als auch im Test – lejlot

2

Ohne gleichmäßige Aufteilungen der verschiedenen Klassen möchten Sie möglicherweise Gewichtungen in Ihre Verlustfunktion einfügen, so dass Fehler in der kleineren Klasse als wichtiger erachtet werden.

Eine andere Lösung, da 5000 Samples je nach Problem sehr viele Daten enthalten können, könnte sein, mehr Datensätze zu samplen. Sie nehmen grundsätzlich diesen Satz von 5000 Proben und probieren Datenpunkte daraus, so dass Sie einen neuen Datensatz mit einer gleichmäßigen Aufteilung der Klassen haben. Dies bedeutet, dass der neue Datensatz nur 10% des ursprünglichen Datensatzes enthält. Aber es ist gleichmäßig zwischen den Klassen aufgeteilt. Sie können diese Probenahme mehrmals wiederholen und erhalten mehrere Datensätze, die nützlich sind in bootstrap aggregating.

+0

Ich habe Sentiment Analyse mit 2B Daten durchgeführt. Also ich denke, 5k ist nicht viel verglichen damit. Ich mag Ihre Idee, dass das Training gleichmäßig verteilt ist. Wird das beachten. – Bhashithe

Verwandte Themen