Menu
CoddyTech

Komprimieren und rekonstruieren

Teil des Abschnitts Unüberwachtes Lernen der Machine Learning-Journey von Coddy. Lektion 31 von 51.

Die Komponentenwerte eines Scans sind ein Rezept: Beginne mit dem durchschnittlichen Scan und addiere dann jedes Muster multipliziert mit seinem Wert. inverse_transform setzt das Rezept zurück in 64 Pixel um:

pca = PCA(n_components=10).fit(X)
codes = pca.transform(X)                # 10 Zahlen pro Scan
rebuilt = pca.inverse_transform(codes)  # wieder 64 Pixel

Hier sind drei Scans, die aus immer mehr Zahlen rekonstruiert wurden:

Eine 0, eine 3 und eine 5, jeweils rekonstruiert aus 2, 5, 10 und 20 Zahlen, dann der echte Scan. Aus 2 Zahlen sind alle drei ähnlich verschwommen; aus 20 ist jede klar lesbar

Wenige Zahlen ergeben eine Unschärfe nahe der durchschnittlichen Ziffer; jede hinzugefügte Komponente stellt Details wieder her. Zwanzig Zahlen statt 64 sind bereits gut zu erkennen.

challenge icon

Aufgabe

Mittel

Ein intelligenter Stift überträgt jede Ziffer als k PCA-Zahlen, die vom Programm eingelesen werden. Was geht verloren?

  1. Passe PCA mit k Komponenten an X an. Komprimiere alle Scans und baue sie dann in rebuilt wieder auf.
  2. Gib die folgenden Zeilen aus; der Fehler ist die mittlere absolute Differenz zu X.
  3. Zeichne den neuesten Scan, X[-1], auf axs[0] und seinen Wiederaufbau auf axs[1], beide mit gray_r. Zeige die Abbildung an.

Für 7:

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

und zeichnet dies. Coddy beschreibt dann deine Abbildungen:

Zwei 8-mal-8-Bilder nebeneinander: der neueste Scan des Stifts, eine 8, und sein Wiederaufbau aus 7 Zahlen, eine unschärfere 8

Probier es selbst

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

# 1,797 Scans mit 64 Pixeln; der neueste Scan des Stifts steht in der letzten Zeile
digits = load_digits()
X = digits.data
k = int(input())

# Ändere die folgenden Zeilen nicht
fig, axs = plt.subplots(1, 2)
axs[0].set_title("Scan")
axs[1].set_title(f"Rebuilt from {k} numbers")

# Schreibe deinen Code darunter
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Unüberwachtes Lernen

Übe selbstständig: Online-Python-Compiler