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.