Le cours classique d'apprentissage automatique de Coursera (Stanford, Dr. Andrew Ng) comme première étape de l'apprentissage de l'apprentissage automatique. Une série qui implémente des tâches de programmation Matlab / Octave en Python pour ce cours. Cette fois, nous effectuerons une analyse en composantes principales (ACP) dans la seconde moitié de l'apprentissage non supervisé de l'ex-7.
Importez diverses bibliothèques.
import numpy as np
import scipy.io as scio
import matplotlib.pyplot as plt
from sklearn import decomposition
Chargez les données au format .mat de Matlab avec scipy.io.loadmat ()
. Les données sont 5000 morceaux d'images en niveaux de gris de 256 gradations de 32x32 pixels. Il est livré dans une matrice bidimensionnelle 5000x1024.
Montrons ceci tel quel (seulement les 100 premières images).
data = scio.loadmat('ex7faces.mat')
X = data['X'] #X est une matrice bidimensionnelle de 5000x1024
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()
Cliquez ici pour la sortie.
En appliquant l'analyse des composantes principales aux données d'image d'origine représentées par 32x32 pixels = 1024 dimensions, les données sont réduites à 100 dimensions. L'analyse en composants principaux est un coup dans la classe sklearn.decomposition.PCA ()
. Vous pouvez spécifier le nombre de composants principaux à prendre avec le paramètre n_components =
.
pca = decomposition.PCA(n_components=100)
pca.fit(X)
Les résultats de l'analyse des composants principaux sont stockés dans pca.components_
. Il s'agit d'une matrice bidimensionnelle 100x1024. Ce vecteur de composant principal peut être affiché tel quel. N'afficherons que les 36 premiers composants principaux.
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()
Cliquez ici pour les résultats.
Dans l'analyse en composantes principales, les informations d'image exprimées à l'origine par le vecteur à 1024 dimensions sont réduites à 100 dimensions. Le jeu de données à dimension réduite peut être obtenu avec pca.transform (X)
(vecteur bidimensionnel 5000x100).
Multipliez cela par le vecteur composant principal pour restaurer un vecteur bidimensionnel 5000x1024. Les données restaurées sont les données d'origine compressées avec 100 composants principaux et restaurées pour pouvoir être affichées. Affichons les 100 premières images du résultat reconstruit.
Xreduce = pca.transform(X) #Réduction de dimension. Le résultat est une matrice 5000x100
Xrecon = np.dot(Xreduce, pca.components_) #Reconstitution. Le résultat est une matrice de 5000x1024
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()
Cliquez ici pour les résultats. Par rapport à l'image originale ci-dessus, vous pouvez voir que les caractéristiques brutes ont été restaurées, bien que les détails aient été perdus.
Cette fois aussi, le code est simple.
Recommended Posts