Récapitulatif : scanner de visages
Fait partie de la section Apprentissage non supervisé du Journey Machine Learning de Coddy. Leçon 33 sur 51.
Défi
MoyenUne caméra à la porte d’un bureau ne peut conserver que k nombres par visage ; le programme lit k. Le code de départ dessine 300 visages de 16 × 16 pixels dans X.
- Ajuste une PCA avec
kcomposantes. Affiche la part de variance conservée, comme ci-dessous. - Dessine le visage 0 sur
axs[0]et sa reconstruction à partir deknombres suraxs[1], les deux aveccmap="gray". - Dessine la composante 1 sur
axs[2]aveccmap="gray_r". Affiche le résultat.
Pour une autre caméra et 4 :
Kept: 80.5% of the variance with 4 numbers per faceCoddy décrit ensuite tes trois panneaux.
Essayez vous-même
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
# Dessine count visages de 16 par 16 pixels : une ligne de 256 valeurs de luminosité (de 0 à 1) par visage
def make_faces(count, seed):
rng = np.random.default_rng(seed)
cols, rows = np.meshgrid(np.arange(16), np.arange(16))
faces = []
for i in range(count):
light = rng.uniform(0.55, 0.95)
side = rng.uniform(-0.25, 0.25)
head = ((cols - 7.5) / 6.2) ** 2 + ((rows - 8) / 7.6) ** 2 < 1
face = head * (light + side * (cols - 7.5) / 7.5)
eye_row = rng.uniform(5, 7)
gap = rng.uniform(2.2, 3.6)
for eye_col in [7.5 - gap, 7.5 + gap]:
face = face - 0.7 * np.exp(-((cols - eye_col) ** 2 + (rows - eye_row) ** 2) / 1.2)
smile = rng.uniform(-2, 2)
mouth_row = 11.5 - smile * ((cols - 7.5) / 3.5) ** 2
mouth = np.exp(-((rows - mouth_row) ** 2) / 0.4) * (np.abs(cols - 7.5) < 3.6)
face = face - 0.6 * mouth + rng.normal(0, 0.04, size=(16, 16))
faces.append(np.clip(face, 0, 1).flatten())
return np.round(np.array(faces), 2)
# 300 visages vus par la caméra de la porte, et le nombre de valeurs qu’elle peut conserver par visage
X = make_faces(300, seed=7)
k = int(input())
# Ne modifiez pas les lignes ci-dessous
fig, axs = plt.subplots(1, 3)
axs[0].set_title("Face")
axs[1].set_title(f"Rebuilt from {k}")
axs[2].set_title("Component 1")
# Écrivez votre code ci-dessous
Toutes les leçons de Apprentissage non supervisé
1Découvrir des groupes
Apprendre sans étiquettesMesurer la similaritéK-Means à la mainK-Means avec scikit-learnRécapitulatif : les membres de la salle de sport4Classification hiérarchique
Fusion étape par étapeModèles agglomératifsDendrogrammesRécapitulatif : races de chiens7L’ACP en pratique
Visualiser 64 dimensionsLes composantes comme motifsCompresser et reconstruireL’ACP avant un modèleRécapitulatif : scanner de visages10Projet : Explorateur de chiffres
Observer les chiffresRéduire avec la PCARegrouper les chiffresNommer les groupesRepérer les intrus2Choisir k
InertieLa méthode du coudeScores de silhouetteMettre à l’échelle avant le clusteringRécapitulatif : zones de livraisonEntraînez-vous par vous-même : Compilateur Python en ligne