Ich habe eine Bilddatenmatrix wo ist die Anzahl der Bildbeispiele und ist die Anzahl der Bildpixel: , weil jedes Bild ein 3-Kanal ist Bild. Darüber hinaus gehört jedes der 50000 Bilder zu einer von 10 möglichen Klassen. Das heißt, es gibt 5000 Bilder der Klasse ' car
', 5000 Bilder der Klasse ' bird
' usw. und es gibt insgesamt 10 Klassen. Dies ist ein Teil des CIFAR-10-Datensatzes.
Das ultimative Ziel hierbei ist die Klassifizierung dieses Datensatzes. Zu diesem Zweck erwähnte der Professor, PCA zu testen und diese Merkmale dann in einen Klassifikator zu setzen. Als Klassifikator verwende ich ein vollständig verbundenes neuronales Netzwerk mit einer verborgenen Schicht und einem Softmax-Ausgang.
Mein Problem ist , dass ich glaube , dass ich getan PCA in der richtigen habe Art und Weise , aber ich denke , dass meine Art und Weise möglicherweise sein könnte falsch angewandt .
Das habe ich getan:
Um die PCA meiner Daten zu berechnen, habe ich Folgendes getan:
Zuerst berechne ich das mittlere Bild . Lassen sei der 'th Reihe von . Dann,
Berechnen Sie die Kovarianzmatrix meiner Bilddaten:
Führen Sie eine Eigenvektorzerlegung von durch nachgiebig , , und , wo die Matrix codiert die Hauptrichtungen (Eigenvektoren) als Spalten. (Nehmen Sie außerdem an, dass die Eigenwerte bereits in absteigender Reihenfolge sortiert sind.) Somit:
Führen Sie abschließend eine PCA durch: Berechnen Sie eine neue Datenmatrix , wo ist die Anzahl der Hauptkomponenten, die wir haben möchten. Lassen - das heißt, eine Matrix mit nur der ersten Säulen. Somit:
Die Frage:
Ich denke, meine Methode zur Durchführung von PCA für diese Daten ist falsch angewendet, da ich so meine Pixel im Grunde genommen voneinander dekorreliere. (Angenommen, ich hätte gesetzt). Das heißt, die resultierenden Zeilen vonsehen mehr oder weniger wie Lärm aus. In diesem Fall lauten meine Fragen wie folgt:
- Habe ich die Pixel wirklich dekorreliert? Das heißt, habe ich tatsächlich jegliche Kopplung zwischen Pixeln entfernt, die ein potenzieller Klassifikator möglicherweise verwenden wollte?
- Wenn die Antwort auf das oben Gesagte zutrifft, warum sollten wir dann jemals PCA auf diese Weise durchführen?
- Was den letzten Punkt betrifft, wie würden wir die Dimensionalität über PCA an Bildern reduzieren, wenn tatsächlich die Methode, die ich verwendet habe, falsch ist?
BEARBEITEN:
Nach weiteren Studien und vielen Rückmeldungen habe ich meine Frage wie folgt verfeinert: Wenn man PCA als Vorverarbeitungsschritt für die Bildklassifizierung verwenden sollte, ist es besser:
- Klassifizierung der k Hauptkomponenten der Bilder durchführen? (Matrix oben ist also jetzt jedes Bild von Länge anstelle des Originals )
- ODER ist es besser, die rekonstruierten Bilder von k-Eigenvektoren zu klassifizieren (was dann sein wird)?, also obwohl jedes Bild NOCH das Original ist in der Länge wurde es tatsächlich aus rekonstruiert Eigenvektoren).
Empirisch habe ich festgestellt, dass Validierungsgenauigkeit ohne PCA> Validierungsgenauigkeit mit PCA-Rekonstruktion> Validierungsgenauigkeit mit PCA-PCs.
Die Bilder unten zeigen das in der gleichen Reihenfolge. 0,5> 0,41> 0,31 Validierungsgenauigkeiten.
Training auf Rohpixelbildern mit Länge ::
Training auf Längenbildern aber rekonstruiert mit k = 20 Eigenvektoren:
Und schließlich das Training der $ k = 20 Hauptkomponenten selbst *:
Das alles war sehr aufschlussreich. Wie ich herausgefunden habe, übernimmt PCA keine Garantie dafür, dass die Hauptkomponenten die Abgrenzung zwischen verschiedenen Klassen erleichtern. Dies liegt daran, dass die berechneten Hauptachsen Achsen sind, die lediglich versuchen, die Projektionsenergie über alle Bilder hinweg zu maximieren , unabhängig von der Bildklasse. Im Gegensatz dazu behalten tatsächliche Bilder - ob originalgetreu rekonstruiert oder nicht - immer noch einige Aspekte räumlicher Unterschiede bei, die dazu beitragen können oder sollten, eine Klassifizierung zu ermöglichen.
Antworten:
Ich stimme allen Kommentaren von @amoeba zu. Würde aber ein paar Dinge hinzufügen.
Der Grund, warum PCA für Bilder verwendet wird, liegt darin, dass es als "Merkmalsauswahl" fungiert: Objekte erstrecken sich über mehrere Pixel, sodass korrelierte Änderungen über mehrere Pixel hinweg auf Objekte hinweisen. Wenn Sie nicht korrelierte Pixeländerungen wegwerfen, wird das "Rauschen" beseitigt, was zu einer schlechten Verallgemeinerung führen kann.
Im Allgemeinen schneiden nns (unter Verwendung des Gradientenabfalls) mit sphärischen Eingaben (dh nicht korrelierten normalisierten Eingaben) besser ab. Dies liegt daran, dass Ihre Fehleroberfläche dann symmetrischer ist und die einzelne Lernrate besser funktioniert (Sie benötigen eine kleine Lernrate bei stark gekrümmten Eingaben) Richtungen und eine große Lernrate in flachen Richtungen).
Haben Sie auch Ihre Eingaben (gut) normalisiert oder nur dekorreliert?
Haben Sie die l2-Regularisierung verwendet? Dies hat einen ähnlichen Effekt wie die PCA-Regularisierung. Bei korrelierten Eingaben werden kleine ähnliche Gewichte hervorgehoben (dh das Rauschen gemittelt, große Gewichte bestraft, damit einzelne Pixel keinen unverhältnismäßigen Einfluss auf die Klassifizierung haben können) (siehe z. B. Elemente des statistischen Lernbuchs), sodass Sie möglicherweise keinen Nutzen für PCA gesehen haben, weil das l2 Die Regularisierung war bereits wirksam. Oder vielleicht war das nn zu klein, um zu überpassen.
Zuletzt haben Sie die Parameter neu optimiert ... Ich würde erwarten, dass Sie nach dem Wechsel zu den ersten k Hauptkomponenten eine andere Lernrate und andere Parameter benötigen würden.
quelle
Per Definition entfernt PCA die Korrelation zwischen Variablen. Es wird vor der Klassifizierung verwendet, da nicht alle Klassifizierer gut mit hochdimensionalen Daten umgehen können (neuronale Netze jedoch) und nicht alle Klassifizierer gut mit korrelierten Variablen umgehen können (neuronale Netze jedoch). Insbesondere bei Bildern möchten Sie normalerweise keine Korrelation entfernen, und Sie möchten auch mehrere Ebenen, sodass benachbarte Pixel zu Bildmerkmalen zusammengefasst werden können. Ihre experimentellen Ergebnisse spiegeln die schlechte Wahl dieser Technik für diese spezielle Aufgabe wider.
quelle
Wenn Ihre Bilder (die Bilder, die Sie so vektorisiert haben, dass jedes Bild jetzt eine einzelne Zeile mit M Spalten ist, wobei M die Anzahl der Gesamtpixel x 32 x 32 x 3 ist) wenig bis keine Korrelation enthalten, ist die Anzahl der Hauptkomponenten erforderlich Erklären Sie die meisten Abweichungen (z. B.> 95%) in Ihren Datenerhöhungen. Um festzustellen, wie "machbar" PCA ist, ist es eine gute Idee, die erklärte Varianz zu überprüfen. In Ihrem Fall ist die maximale Anzahl von Komponenten N, da Ihre Datenmatrix eine Größe von NxM hat, wobei M> N ist. Wenn die Anzahl der erforderlichen PCs nahe 50000 liegt, ist die Verwendung von PCA nicht sinnvoll. Sie können die erklärte Varianz berechnen durch:
Ich würde die Anzahl der Hauptkomponenten wählen, was eine Varianz von mindestens mehr als 90% erklärt. Eine andere Methode zur Auswahl der richtigen Anzahl von PCs ist das Zeichnen der Anzahl von PCs gegenüber dem erläuterten kumulativen Varianzdiagramm. Im Diagramm können Sie die Zahl wählen, bei der die erklärte Varianz nicht mehr signifikant zunimmt.
Daher denke ich, dass Ihr Problem darin besteht, eine gute Anzahl von PCs auszuwählen.
Ein weiteres Problem könnte mit der Projektion der Testproben zusammenhängen. Wenn Sie Ihre Stichproben zum Erstellen des NN und zum Testen des NN geteilt haben, müssen Sie den Testdatensatz unter Verwendung der aus dem Trainingsdatensatz erhaltenen Eigenvektoren projizieren.
quelle