Visualiser 64 dimensions
Fait partie de la section Apprentissage non supervisé du Journey Machine Learning de Coddy. Leçon 29 sur 51.
Ce chapitre met PCA en pratique sur des chiffres manuscrits. À la fin, tu réduiras un scan à quelques nombres et le reconstruiras :
D’abord, regarde. Un scan fait 64 pixels, et aucun graphique n’a 64 axes, alors PCA les réduit à 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))Pas de normaliseur ici : chaque pixel utilise la même unité, l’encre allant de 0 à 16.
PCA n’a jamais vu y ; il ne fait que colorer les points. Pourtant, chaque chiffre se regroupe dans sa propre zone : la structure était dans les pixels.
Défi
MoyenUne application d’écriture manuscrite pour enfants veut savoir quels chiffres les enfants pourraient confondre. Le programme lit certains chiffres, saisis ensemble comme 358, dans chosen.
- Réduis les 1 797 scans à 2 nombres chacun avec PCA, dans
points. - Trace les scans de chaque chiffre choisi, étiquetés avec le chiffre. Ajoute une légende et affiche le graphique.
- Appelle
report_closest(points, y, chosen).
Pour 046, le programme affiche :
Closest on the map: 4 and 6 (13.6 apart)et dessine ceci. Ensuite, Coddy décrit ton graphique :
Essayez vous-même
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
# Extrait de Measuring Similarity : affiche les deux chiffres choisis dont les centres sont les plus proches sur la carte
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 images numérisées : 64 pixels chacune dans X, le chiffre dessiné dans y
digits = load_digits()
X = digits.data
y = digits.target
# Les chiffres à comparer, saisis à la suite comme 358
chosen = []
for ch in input():
chosen.append(int(ch))
# Ne modifiez pas les lignes ci-dessous
fig, ax = plt.subplots()
ax.set_title("Digits that look alike")
ax.set_xlabel("Component 1")
ax.set_ylabel("Component 2")
# Écrivez votre code ci-dessous
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Apprentissage non supervisé
1Découvrir des groupes
Apprendre sans étiquettesMesurer la similaritéK-Means à la mainK-Means avec scikit-learnRécapitulatif : les membres de la salle de sport4Classification hiérarchique
Fusion étape par étapeModèles agglomératifsDendrogrammesRécapitulatif : races de chiens7L’ACP en pratique
Visualiser 64 dimensionsLes composantes comme motifsCompresser et reconstruireL’ACP avant un modèleRécapitulatif : scanner de visages10Projet : Explorateur de chiffres
Observer les chiffresRéduire avec la PCARegrouper les chiffresNommer les groupesRepérer les intrus2Choisir k
InertieLa méthode du coudeScores de silhouetteMettre à l’échelle avant le clusteringRécapitulatif : zones de livraisonEntraînez-vous par vous-même : Compilateur Python en ligne