Genetische Algorithmen: Fitness-Funktion für Feature-Auswahl-Algorithmus

8

Ich habe den Datensatz n x m, wo es n Beobachtungen gibt und jede Beobachtung besteht aus m Werten für m Attribute. Jede Beobachtung hat auch das Ergebnis beobachtet, das ihr zugewiesen wurde. m ist groß, zu groß für meine Aufgabe. Ich versuche, eine beste und kleinste Teilmenge von m Attributen zu finden, die den ganzen Datensatz noch recht gut repräsentiert, so dass ich nur diese Attribute für das Lehren eines neuronalen Netzes verwenden konnte.

Ich möchte dafür einen genetischen Algorithmus verwenden. Das Problem ist die Fittness-Funktion. Es sollte zeigen, wie gut das generierte Modell (Teilmenge der Attribute) die ursprünglichen Daten noch widerspiegelt. Und ich weiß nicht, wie man bestimmte Teilmengen von Attributen gegen die ganze Menge auswertet. Natürlich könnte ich das neuronale Netzwerk verwenden (das diese ausgewählten Daten später verwenden wird), um zu überprüfen, wie gut die Teilmenge ist - je kleiner der Fehler, desto besser die Teilmenge. ABER, das dauert in meinem Fall ein wenig Zeit und ich möchte diese Lösung nicht verwenden. Ich suche nach einem anderen Weg, der vorzugsweise nur auf dem Datensatz funktioniert.

Was ich gedacht habe, war: Teilmenge S (durch genetischen Algorithmus gefunden) zu trimmen, so dass es nur Werte für Teilmenge S enthält und überprüft, wie viele Beobachtungen in diesem Datenser nicht mehr unterscheidbar sind (gleiche Werte für dasselbe) Attribute) mit unterschiedlichen Ergebniswerten. Je größer die Zahl ist, desto schlechter ist die Teilmenge. Aber mir erscheint das etwas zu rechenintensiv.

Gibt es andere Möglichkeiten zu bewerten, wie gut eine Teilmenge von Attributen immer noch den gesamten Datensatz repräsentiert?

    
agnieszka 03.11.2011, 09:48
quelle

1 Antwort

6

Diese Kostenfunktion sollte tun, was Sie wollen: summieren Sie die Faktorladungen, die den Features entsprechen, die jede Teilmenge enthalten .

Je höher diese Summe ist, desto größer ist der Anteil der Variabilität in der Antwortvariablen, der nur mit diesen Merkmalen erklärt wird. Wenn ich das OP verstehe, ist diese Kostenfunktion eine getreue Übersetzung von "stellt das ganze Set ziemlich gut" vom OP dar.

Die Reduzierung auf Code ist einfach:

  1. Berechnen Sie die Kovarianzmatrix Ihrer Datenmenge (entfernen Sie zuerst die Spalte, die die Antwortvariable enthält, d. h. wahrscheinlich die letzte ein). Wenn Ihre Datenmenge m x n ist (Spalten x Zeilen), dann ist dies der Fall Kovarianzmatrix wird n x n sein, mit "1" s die Hauptdiagonale hinunter.

  2. Führen Sie als Nächstes eine Eigenwertzerlegung für diese Kovarianz durch Matrix; Dies gibt Ihnen den Anteil der Gesamtvariabilität in der Antwortvariablen, die von diesem Eigenwert beigetragen wird Eigenwert entspricht einem Merkmal oder einer Spalte). [ Hinweis, Singularwert-Dekomposition (SVD) wird oft für diesen Schritt verwendet, aber es ist unnötig - eine Eigenwertzerlegung ist viel einfacher, und macht immer den Job, solange Ihre Matrix quadratisch ist, was Kovarianzmatrizen sind immer ].

  3. Ihr genetischer Algorithmus liefert bei jeder Iteration eine Menge von Kandidatenlösungen (in Ihrem Fall Funktionsuntergruppen). Die nächste Aufgabe in GA, oder jeder kombinatorischen Optimierung, ist es, diese Kandidaten zu bewerten Lösungen nach ihrer Kostenfunktion. In deinem Fall die Kosten Funktion ist eine einfache Summation des Eigenwertanteils für jede Feature in dieser Teilmenge. (Ich denke du würdest skalieren / normalisieren wollen Diese Berechnung, so dass die höheren Zahlen am wenigsten passen obwohl.)

Eine Beispielrechnung (mit python + NumPy ):

%Vor%

Es ist also die dritte Spalte der Werte, die genau darüber liegen (eine für jedes Feature), die summiert werden (abhängig davon, welche Features in einer bestimmten Teilmenge vorhanden sind) mit der Kostenfunktion auswerten).

    
doug 03.11.2011, 12:37
quelle