Vedere 64 dimensioni
Fa parte della sezione Apprendimento non supervisionato del percorso Machine Learning di Coddy. Lezione 29 di 51.
Questo capitolo applica PCA alle cifre scritte a mano. Alla fine, comprimi una scansione in pochi numeri e la ricostruisci:
Per prima cosa, guarda. Una scansione è di 64 pixel e nessun grafico ha 64 assi, quindi PCA li comprime a 2:
digits = load_digits()
X = digits.data
y = digits.target
points = PCA(n_components=2).fit_transform(X)
for d in range(10):
ax.scatter(points[y == d, 0], points[y == d, 1], label=str(d))Qui non c'è alcuno scaler: ogni pixel condivide la stessa unità, con valori dell'inchiostro da 0 a 16.
PCA non ha mai visto y; colora solo i punti. Eppure ogni cifra si raccoglie nella propria area: la struttura era nei pixel.
Sfida
MedioUn'app di scrittura a mano per bambini vuole sapere quali cifre i bambini potrebbero confondere. Il programma legge alcune cifre, inserite tutte insieme come 358, in chosen.
- Riduci tutte le 1,797 scansioni a 2 numeri ciascuna con PCA, in
points. - Rappresenta con uno scatter plot le scansioni di ogni cifra scelta, etichettate con la cifra. Aggiungi una legenda e mostra il grafico.
- Chiama
report_closest(points, y, chosen).
Per 046, stampa:
Closest on the map: 4 and 6 (13.6 apart)e disegna questo. Poi Coddy descrive il tuo grafico:
Provalo tu
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
# Da Measuring Similarity: stampa le due cifre scelte i cui centri sono più vicini sulla mappa
def report_closest(points, y, chosen):
best = -1
for i in range(len(chosen)):
for j in range(i + 1, len(chosen)):
a = points[y == chosen[i]].mean(axis=0)
b = points[y == chosen[j]].mean(axis=0)
dist = np.sqrt(((a - b) ** 2).sum())
if best == -1 or dist < best:
best = dist
pair = (chosen[i], chosen[j])
print(f"Closest on the map: {pair[0]} and {pair[1]} ({best:.1f} apart)")
# 1,797 scansioni: 64 pixel ciascuna in X, la cifra rappresentata in y
digits = load_digits()
X = digits.data
y = digits.target
# Le cifre da confrontare, digitate una dopo l'altra come 358
chosen = []
for ch in input():
chosen.append(int(ch))
# Non modificare le righe qui sotto
fig, ax = plt.subplots()
ax.set_title("Digits that look alike")
ax.set_xlabel("Component 1")
ax.set_ylabel("Component 2")
# Scrivi il tuo codice qui sotto
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Apprendimento non supervisionato
1Trovare gruppi
Apprendimento senza etichetteMisurare la similaritàK-Means a manoK-Means in scikit-learnRiepilogo: iscritti alla palestra4Clustering gerarchico
Unire passo dopo passoModelli agglomerativiDendrogrammiRiepilogo: razze canine7PCA nella pratica
Vedere 64 dimensioniComponenti come schemiComprimere e ricostruirePCA prima di un modelloRiepilogo: scanner facciale10Progetto: Esplorare le cifre
Osserva le cifreRiduci con PCARaggruppa le cifreDai un nome ai gruppiTrova gli elementi insoliti2Scelta di k
InerziaIl metodo del gomitoPunteggi silhouetteScala prima del clusteringRiepilogo: zone di consegnaEsercitati da solo: Compilatore Python online