Menu
CoddyTech

Comprimir e reconstruir

Parte da seção Aprendizado não supervisionado do Journey de Machine Learning da Coddy. Lição 31 de 51.

As pontuações dos componentes de uma digitalização são uma receita: comece pela digitalização média e, em seguida, some cada padrão multiplicado pela sua pontuação. inverse_transform segue a receita de volta até 64 pixels:

pca = PCA(n_components=10).fit(X)
codes = pca.transform(X)                # 10 números por varredura
rebuilt = pca.inverse_transform(codes)  # 64 pixels novamente

Aqui estão três exames reconstruídos a partir de quantidades cada vez maiores de números:

Um 0, um 3 e um 5, cada um reconstruído a partir de 2, 5, 10 e 20 números, seguidos pelo exame real. Com 2 números, os três são borrões semelhantes; com 20, cada um é claramente legível

Poucos números deixam o dígito borrado, próximo da média; cada componente adicionado restaura os detalhes. Vinte números, em vez de 64, já permitem ler com clareza.

challenge icon

Desafio

Médio

Uma caneta inteligente transmite cada dígito como k números de PCA, lidos pelo programa. O que se perde?

  1. Ajuste o PCA com k componentes em X. Comprima todos os escaneamentos e, em seguida, reconstrua-os em rebuilt.
  2. Imprima as linhas abaixo; o erro é a diferença absoluta média em relação a X.
  3. Desenhe o escaneamento mais recente, X[-1], em axs[0] e sua reconstrução em axs[1], ambos com gray_r. Exiba.

Para 7:

Sent: 7 numbers per scan instead of 64
Average pixel error: 1.739

e desenha isto. Em seguida, o Coddy descreve seus painéis:

Duas imagens de 8 por 8 lado a lado: o escaneamento mais recente da caneta, um 8, e sua reconstrução a partir de 7 números, um 8 mais borrado

Experimente você mesmo

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA

# 1,797 digitalizações de 64 pixels; a digitalização mais recente da caneta está na última linha
digits = load_digits()
X = digits.data
k = int(input())

# Não altere as linhas abaixo
fig, axs = plt.subplots(1, 2)
axs[0].set_title("Scan")
axs[1].set_title(f"Rebuilt from {k} numbers")

# Escreva seu código abaixo
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Aprendizado não supervisionado

Pratique por conta própria: Compilador de Python online