Recapitulação: scanner facial
Parte da seção Aprendizado não supervisionado do Journey de Machine Learning da Coddy. Lição 33 de 51.
Desafio
MédioUma câmera na porta do escritório pode manter apenas k números por rosto; o programa lê k. O código inicial desenha 300 rostos de 16 por 16 pixels em X.
- Ajuste o PCA com
kcomponentes. Imprima a proporção da variância mantida, como abaixo. - Desenhe o rosto 0 em
axs[0]e sua reconstrução a partir deknúmeros emaxs[1], ambos comcmap="gray". - Desenhe o componente 1 em
axs[2]comcmap="gray_r". Exiba.
Para outra câmera e 4:
Kept: 80.5% of the variance with 4 numbers per faceEm seguida, Coddy descreve seus três painéis.
Experimente você mesmo
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
# Desenha count rostos de 16 por 16 pixels: uma linha plana de 256 valores de brilho (0 a 1) por rosto
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 rostos capturados pela câmera da porta e quantos números ela pode guardar por rosto
X = make_faces(300, seed=7)
k = int(input())
# Não altere as linhas abaixo
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")
# Escreva seu código abaixo
Todas as lições de Aprendizado não supervisionado
1Encontrando Grupos
Aprendendo sem RótulosMedindo a SimilaridadeK-Means à MãoK-Means no scikit-learnRevisão: Frequentadores da Academia4Clustering Hierárquico
Mesclando passo a passoModelos aglomerativosDendrogramasRevisão: raças de cães7PCA na prática
Visualizando 64 dimensõesComponentes como padrõesComprimir e reconstruirPCA antes de um modeloRecapitulação: scanner facial10Projeto: Explorando os Dígitos
Observe os DígitosReduza com PCAAgrupe os DígitosDê Nome aos GruposEncontre os Diferentes2Escolhendo k
InérciaO método do cotoveloPontuações de silhuetaEscale antes de agruparRecapitulando: zonas de entregaPratique por conta própria: Compilador de Python online