Repaso: escáner facial
Parte de la sección Aprendizaje no supervisado del Journey de Machine Learning de Coddy. Lección 33 de 51.
Desafío
IntermedioLa cámara de la puerta de una oficina puede conservar solo k números por cara; el programa lee k. El código inicial dibuja 300 caras de 16 por 16 píxeles en X.
- Ajusta PCA con
kcomponentes. Imprime la proporción de la varianza conservada, como se muestra a continuación. - Dibuja la cara 0 en
axs[0]y su reconstrucción a partir deknúmeros enaxs[1], ambas concmap="gray". - Dibuja el componente 1 en
axs[2]concmap="gray_r". Muestra el gráfico.
Para otra cámara y 4:
Kept: 80.5% of the variance with 4 numbers per faceCoddy describe después tus tres paneles.
Pruébalo tú mismo
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
# Dibuja count caras de 16 por 16 píxeles: una fila plana de 256 valores de brillo (de 0 a 1) por cara
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 caras que vio la cámara de la puerta y cuántos números puede conservar por cara
X = make_faces(300, seed=7)
k = int(input())
# No cambies las líneas de abajo
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")
# Escribe tu código abajo
Todas las lecciones de Aprendizaje no supervisado
1Encontrar grupos
Aprender sin etiquetasMedir la similitudK-Means a manoK-Means en scikit-learnRepaso: miembros del gimnasio7PCA en la práctica
Visualizar 64 dimensionesComponentes como patronesComprimir y reconstruirPCA antes de un modeloRepaso: escáner facial10Proyecto: Explorador de dígitos
Observa los dígitosReduce con PCAAgrupa los dígitosPon nombre a los gruposEncuentra los diferentes2Elegir k
InerciaEl método del codoPuntuaciones de siluetaEscalar antes de agruparRepaso: zonas de entrega3Interpretación de los clústeres
Perfilado de clústeresCentros en unidades realesClústeres frente a etiquetas conocidasCuándo falla K-MeansRepaso: cata de téPractica por tu cuenta: Compilador de Python online