Der klassische Coursera-Kurs für maschinelles Lernen (Stanford, Dr. Andrew Ng) als erster Schritt beim Erlernen von maschinellem Lernen. Eine Reihe, die Matlab / Octave-Programmieraufgaben in Python für diesen Kurs implementiert. Dieses Mal werden wir in der zweiten Hälfte des unbeaufsichtigten Ex-7-Lernens eine Hauptkomponentenanalyse (PCA) durchführen.
Importieren Sie verschiedene Bibliotheken.
import numpy as np
import scipy.io as scio
import matplotlib.pyplot as plt
from sklearn import decomposition
Laden Sie die .mat-Formatdaten von Matlab mit scipy.io.loadmat ()
. Die Daten sind 5000 Teile von Graustufenbildern mit 256 Abstufungen und 32 x 32 Pixel. Es kommt in einer zweidimensionalen Matrix von 5000 x 1024.
Lassen Sie uns dies so anzeigen, wie es ist (nur die ersten 100 Bilder).
data = scio.loadmat('ex7faces.mat')
X = data['X'] #X ist eine zweidimensionale Matrix von 5000 x 1024
fig = plt.figure()
plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)
for i in range(0,100):
ax = fig.add_subplot(10,10,i+1)
ax.axis('off')
ax.imshow(X[i].reshape(32,32).T, cmap = plt.get_cmap('gray'))
plt.show()
Klicken Sie hier für die Ausgabe.
Durch Anwenden der Hauptkomponentenanalyse auf die ursprünglichen Bilddaten, die durch 32 x 32 Pixel = 1024 Dimensionen dargestellt werden, werden die Daten auf 100 Dimensionen reduziert. Die Hauptkomponentenanalyse ist eine Aufnahme in der Klasse "sklearn.decomposition.PCA ()". Mit dem Parameter n_components =
können Sie angeben, wie viele Hauptkomponenten verwendet werden sollen.
pca = decomposition.PCA(n_components=100)
pca.fit(X)
Die Ergebnisse der Hauptkomponentenanalyse werden in "pca.components_" gespeichert. Es ist eine zweidimensionale Matrix von 100 x 1024. Dieser Hauptkomponentenvektor kann so angezeigt werden, wie er ist. Lassen Sie uns nur die ersten 36 Hauptkomponenten anzeigen.
fig = plt.figure()
plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)
for i in range(0,36):
ax = fig.add_subplot(6,6,i+1)
ax.axis('off')
ax.imshow(pca.components_[i].reshape(32,32).T, cmap = plt.get_cmap('gray'))
plt.show()
Klicken Sie hier für die Ergebnisse.
Bei der Hauptkomponentenanalyse wird die ursprünglich durch den 1024-dimensionalen Vektor ausgedrückte Bildinformation auf 100 Dimensionen reduziert. Der dimensionsreduzierte Datensatz kann mit "pca.transform (X)" (zweidimensionaler Vektor 5000x100) erhalten werden. Multiplizieren Sie dies mit dem Hauptkomponentenvektor, um einen zweidimensionalen Vektor von 5000 x 1024 wiederherzustellen. Die wiederhergestellten Daten sind die Originaldaten, die mit 100 Hauptkomponenten komprimiert und wiederhergestellt wurden, damit sie angezeigt werden können. Lassen Sie uns die ersten 100 Bilder des rekonstruierten Ergebnisses anzeigen.
Xreduce = pca.transform(X) #Dimensionsreduzierung. Das Ergebnis ist eine 5000x100-Matrix
Xrecon = np.dot(Xreduce, pca.components_) #Wiederaufbau. Das Ergebnis ist eine 5000x1024-Matrix
fig = plt.figure()
plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)
for i in range(0,100):
ax = fig.add_subplot(10,10,i+1)
ax.axis('off')
ax.imshow(Xrecon[i].reshape(32,32).T, cmap = plt.get_cmap('gray'))
plt.show()
Klicken Sie hier für die Ergebnisse. Im Vergleich zum obigen Originalbild können Sie sehen, dass die groben Merkmale wiederhergestellt wurden, obwohl die Details verloren gegangen sind.
Auch diesmal ist der Code einfach.
Recommended Posts