Menu
CoddyTech

Comprimere e ricostruire

Fa parte della sezione Apprendimento non supervisionato del percorso Machine Learning di Coddy. Lezione 31 di 51.

I punteggi delle componenti di una scansione sono una ricetta: parti dalla scansione media, poi aggiungi ogni schema moltiplicato per il suo punteggio. inverse_transform ripercorre la ricetta fino a ottenere 64 pixel:

pca = PCA(n_components=10).fit(X)
codes = pca.transform(X)                # 10 numeri per scansione
rebuilt = pca.inverse_transform(codes)  # di nuovo 64 pixel

Ecco tre scansioni ricostruite usando un numero sempre maggiore di numeri:

Uno 0, un 3 e un 5, ciascuno ricostruito usando 2, 5, 10 e 20 numeri, poi la scansione reale. Con 2 numeri, tutti e tre sono sfocature simili; con 20, ciascuno è chiaramente leggibile

Pochi numeri danno una sfocatura vicino alla cifra media; ogni componente aggiunta ripristina i dettagli. Venti numeri invece di 64 sono già leggibili chiaramente.

challenge icon

Sfida

Medio

Una penna intelligente trasmette ogni cifra come k numeri PCA, letti dal programma. Che cosa si perde?

  1. Adatta PCA con k componenti a X. Comprimi tutte le scansioni, poi ricostruiscile in rebuilt.
  2. Stampa le righe qui sotto; l’errore è la differenza assoluta media rispetto a X.
  3. Disegna la scansione più recente, X[-1], su axs[0] e la sua ricostruzione su axs[1], entrambe con gray_r. Mostra.

Per 7:

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

e disegna questo. Coddy descrive poi i tuoi pannelli:

Due immagini di 8 per 8 affiancate: la scansione più recente della penna, un 8, e la sua ricostruzione da 7 numeri, un 8 più sfocato

Provalo tu

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

# 1,797 scansioni di 64 pixel; la scansione più recente della penna è nell'ultima riga
digits = load_digits()
X = digits.data
k = int(input())

# Non modificare le righe qui sotto
fig, axs = plt.subplots(1, 2)
axs[0].set_title("Scan")
axs[1].set_title(f"Rebuilt from {k} numbers")

# Scrivi il tuo codice qui sotto
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Apprendimento non supervisionato

Esercitati da solo: Compilatore Python online