Poznajemy 64 wymiary
Część sekcji Uczenie nienadzorowane ścieżki Machine Learning w Coddy. Lekcja 29 z 51.
W tym rozdziale zastosujesz PCA do odręcznych cyfr. Na jego końcu sprowadzisz skan do kilku liczb i odtworzysz go:
Najpierw spójrz. Skan ma 64 piksele, a żaden wykres nie ma 64 osi, więc PCA zmniejsza ich liczbę do 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))Nie ma tu skalera: każdy piksel ma tę samą jednostkę, a natężenie tuszu mieści się w zakresie od 0 do 16.
PCA nie widziała y; jedynie koloruje kropki. A jednak każda cyfra skupia się we własnym obszarze: struktura tkwiła w pikselach.
Wyzwanie
ŚredniAplikacja do nauki pisania dla dzieci chce wiedzieć, które cyfry dzieci mogą ze sobą pomylić. Program odczytuje kilka cyfr, wpisanych razem, na przykład 358, do chosen.
- Za pomocą PCA sprowadź wszystkie 1,797 skanów do 2 liczb każdych i zapisz je w
points. - Narysuj wykres punktowy skanów każdej wybranej cyfry, oznaczonych tą cyfrą. Dodaj legendę i wyświetl wykres.
- Wywołaj
report_closest(points, y, chosen).
Dla 046 program wypisuje:
Closest on the map: 4 and 6 (13.6 apart)i rysuje ten wykres. Następnie Coddy opisuje Twój wykres:
Spróbuj swoich sił
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
# Z Measuring Similarity: wypisuje dwie wybrane cyfry, których środki leżą najbliżej siebie na mapie
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 skanów: każdy ma 64 piksele w X, a narysowana cyfra jest w y
digits = load_digits()
X = digits.data
y = digits.target
# Cyfry do porównania, wpisane jedna po drugiej, np. 358
chosen = []
for ch in input():
chosen.append(int(ch))
# Nie zmieniaj poniższych wierszy
fig, ax = plt.subplots()
ax.set_title("Digits that look alike")
ax.set_xlabel("Component 1")
ax.set_ylabel("Component 2")
# Napisz swój kod poniżej
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Uczenie nienadzorowane
1Znajdowanie grup
Uczenie się bez etykietMierzenie podobieństwaK-Means krok po krokuK-Means w scikit-learnPodsumowanie: członkowie siłowni4Klasteryzacja hierarchiczna
Łączenie krok po krokuModele aglomeracyjneDendrogramyPodsumowanie: rasy psów7PCA w praktyce
Poznajemy 64 wymiarySkładowe jako wzorceKompresuj i odtwórzPCA przed modelemPodsumowanie: skaner twarzy10Projekt: Odkrywca cyfr
Przyjrzyj się cyfromZmniejsz wymiar za pomocą PCAGrupuj cyfryNazwij grupyZnajdź te nietypowe2Wybór k
InercjaMetoda łokciaWyniki silhouetteSkalowanie przed klasteryzacjąPodsumowanie: strefy dostawPoćwicz samodzielnie: Kompilator Python online