Trainingsdaten bei Neuronalen Netzen
-
Daten von Klasse A sind 8 mal öfter vorhanden als Daten von Klasse B
-
Ich sehe da kein Problem. Der Trainingsdatensatz muss groß genug sein, damit man das KNN vernünftig damit trainieren kann. Ansonsten gibt es keine Größenanforderung. Vor allem muss da kein Verhältnis erfüllt sein, denke ich.
Wie groß ist er denn? Wie viele Beispiele sind da drin?
PS: Aus meiner Sicht ist ein KNN zur Klassifikation eins der letzten Mittel. Wenn Du ein KNN nutzt, dann sagst Du damit im Prinzip, dass Du das Anwendungsgebiet kaum modellieren kannst. Wäre es in Deinem Fall möglich, mit besseren Klassifikatoren zu arbeiten? Bayes-Klassifikator oder so vielleicht?
-
Haengt ganz von der Problemstellung ab.
1.) Wenn diese Verteilung der Trainingsdaten fuer die zugrundeliegende Verteilung repraesentativ sind - d.h. Klasse A tatsaechlich 8 mal oefter vorkommt als B - warum sollte man sie nicht nutzen.
2.) Du solltest deine Trainingsdaten sowieso vorverarbeiten. Es bringt nichts, wenn ein Datensatz 1000 mal vorkommt.
3.) Overfitting kann immer passieren. Crossvalidation kann helfen.
-
Eigentlich ist es ein NeuroFuzzy System und kein reines kNN. Die Daten werden zyklisch aufgenommen und sind in Summe ca 2.8Mio.
Ich kann meine Trainingsdaten nicht vorverarbeiten, da es Situationen gibt, bei der ein Datensatz in beiden Klassen vorkommt.
Meine Idee war es, die Fehlergewichtung unterschiedlich zu gestallten so dass ein Fehler der Klasse A ,welche 8 mal mehr Daten hat als Klasse B, nur eine Fehlergewichtung von 1/8 hat. Wäre dieser Ansatz ok? somit würde sich ein Fehler der Klasse A nicht so stark auswirken wie der von Klasse B?!
-
Ah, jetzt sehe ich erst, was Du meinst.
Also, in Deinen Trainingsdaten ist die Klasse A überrepräsentiert. Kennst Du denn das Verhältnis der Häufigkeit des Auftretens der Klassen? ...auch im richtigen Datensatz?
-
gladio schrieb:
Ich kann meine Trainingsdaten nicht vorverarbeiten, da es Situationen gibt, bei der ein Datensatz in beiden Klassen vorkommt.
Beknackter Grund. Die wuerde ich als erstes entfernen. Welchen Einfluss sollten sie denn haben?
Fehlergewichtung von 1/8 hat
Ja, es geht auch kompliziert. Waehle einfach zufaellig genausoviele Datensaetze aus A, wie du aus B verwenden moechtest (sofern du eine Gleichverteilung der Daten auf die Klassen A und B erwartest).
Kennst Du denn das Verhältnis der Häufigkeit des Auftretens der Klassen?
Sag ich doch. Kurzes Beispiel. Klasse A = 85% Klasse B = 15%. Allein mit diesem Wissen wuerde ich mich als Klassifikator immer fuer A entscheiden, ohne auch nur den Datensatz angeschaut zu haben. D.h. Genauigkeit 85%. Ist fuer den Anfang gar nicht schlecht.
-
Kennst Du die prinzipielle Form der Verteilungsfunktionen für die gemessenen Merkmale? Kannst Du da Normalverteilungen um irgendeinen Mittelwert herum annehmen?
-
Das verhältnis der Häufigkeit ist 1:8. Daher dachte ich mir ich wähle die Fehlergewichtung ebenfalls 1:8
Es geht eigentlich um eine Klassifizierung von Sensorausgaben. In der Summe sind es 6 Stück. Diese Sensorausgaben werden über die eine bestimmte dauer aufgenommen und am ende soll eine Klassifizierung stattfinden. Dadurch, dass oft fehlauslösungen auftauchen, kommt es vor, dass eine Kombination z.B. 1 0 1 1 0 0 mal der Klasse A und mal der Klasse B zugeordnet wird.
Sollte ich diejenigen Daten aus dem Datensatz entfernen, die öfters auftauchen?
Wenn die Kombi 1 0 1 1 0 0 mit der Klasse A 1000 mal auftaucht und mit der Klasse B nur 100 mal dann kann ich doch nicht einfach die 999 mit Klasse A und die 99 mit Klasse B aus dem Datensatz entfernen, oder doch?Ich kenne das Verhältnis, wie oft eine Kombination in der Klasse A und wie oft sie in der Klasse B auftaucht.
-
Ich sag schon gar nichts mehr zur Ausgangsverteilung ...
Eine letzte Frage: Ist dein Vektor aus 6 Sensordaten reellwertig oder sind nur die Werte 0 bzw. 1 fuer die einzelnen Elemente zulaessig? Bei letzterem lohnt sich ein KNN nicht.
-
Die Daten liegen im Intervall [0,1]..
Was hällt ihr von der Idee mit der Fehlergewichtung?
-
gladio schrieb:
Die Daten liegen im Intervall [0,1]..
Was hällt ihr von der Idee mit der Fehlergewichtung?
Du willst also jeden Fehler, der bei Klasse B gemacht wird, 8 mal schlimmer bestrafen als jeden Fehler der Klasse A? Das macht nur dann Sinn, wenn es dir wichtiger ist, auf Klasse B gut zu sein als auf Klasse A. (Wobei du selbst entscheiden musst ob ein "Fehler" jetzt ein Fehler 1. oder 2. Art ist).
Es geht eigentlich um eine Klassifizierung von Sensorausgaben. In der Summe sind es 6 Stück. Diese Sensorausgaben werden über die eine bestimmte dauer aufgenommen und am ende soll eine Klassifizierung stattfinden. Dadurch, dass oft fehlauslösungen auftauchen, kommt es vor, dass eine Kombination z.B. 1 0 1 1 0 0 mal der Klasse A und mal der Klasse B zugeordnet wird.
Kann ein "1 0 1 1 0 0" wirklich mal ein A sein und mal ein B? Oder haette dieser Datenpunkt immer ein A sein sollen, aber aufgrund eines Fehlers gibt die Maschine trotzdem manchmal B aus, obwohl sie nicht sollte? Falls letzteres der Fall ist, waer's am sinnvollsten, die Fehler vorher rauszufiltern (ausser du willst gezielt Regularisation-by-noise machen).
-
Eigentlich ist es mir wichtig beide Klassen gut erkennen zu können. Ich dachte nur, dass ich anhand der Gewichtung die ungleiche Verteilung kompensieren könnte.
Dadurch das die Sensoren fehler aufweisen, kommt es vor das diverse Kombinationen in beiden Klassen auftauchen
-
Was hällt ihr von der Idee mit der Fehlergewichtung?
Schon am Anfang habe ich dir gesagt, dass ist umstaendlich. Ich halte nichts davon. Benutze einfach nicht alle Daten aus Klasse A. Was ist so schwer daran?