Melihat 64 Dimensi
Termasuk bagian Pembelajaran Tanpa Pengawasan dalam perjalanan Machine Learning di Coddy. Pelajaran 29 dari 51.
Bab ini menerapkan PCA pada digit tulisan tangan. Di akhir bab, kamu merangkum hasil pemindaian menjadi beberapa angka lalu menyusunnya kembali:
Pertama, lihat. Satu pemindaian berukuran 64 piksel, dan tidak ada grafik yang memiliki 64 sumbu, jadi PCA memadatkannya menjadi 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))Tidak ada skaler di sini: setiap piksel menggunakan satu satuan, dengan intensitas dari 0 hingga 16.
PCA tidak pernah melihat y; PCA hanya memberi warna pada titik-titik. Namun, setiap digit berkumpul di areanya sendiri: strukturnya sudah ada di dalam piksel.
Tantangan
SedangAplikasi tulisan tangan untuk anak-anak ingin mengetahui digit mana yang mungkin tertukar oleh anak-anak. Program membaca beberapa digit yang diketik berurutan seperti 358, lalu menyimpannya ke chosen.
- Ringkas semua 1,797 hasil pemindaian menjadi masing-masing 2 angka dengan PCA, lalu simpan ke
points. - Buat scatter plot hasil pemindaian setiap digit yang dipilih, dengan label digitnya. Tambahkan legenda dan tampilkan.
- Panggil
report_closest(points, y, chosen).
Untuk 046, program mencetak:
Closest on the map: 4 and 6 (13.6 apart)dan menggambar ini. Lalu Coddy menjelaskan grafikmu:
Coba sendiri
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
# Dari Mengukur Kemiripan: menampilkan dua angka yang dipilih dengan pusat paling berdekatan di peta
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 hasil pemindaian: masing-masing 64 piksel di X, angka yang digambar di y
digits = load_digits()
X = digits.data
y = digits.target
# Angka yang akan dibandingkan, diketik berurutan seperti 358
chosen = []
for ch in input():
chosen.append(int(ch))
# Jangan ubah baris-baris di bawah ini
fig, ax = plt.subplots()
ax.set_title("Digits that look alike")
ax.set_xlabel("Component 1")
ax.set_ylabel("Component 2")
# Tulis kodemu di bawah ini
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pembelajaran Tanpa Pengawasan
1Menemukan Kelompok
Belajar Tanpa LabelMengukur KemiripanK-Means secara ManualK-Means dengan scikit-learnRangkuman: Anggota Gym4Pengelompokan Hierarkis
Penggabungan Langkah demi LangkahModel AglomeratifDendrogramRingkasan: Ras Anjing7PCA dalam Praktik
Melihat 64 DimensiKomponen sebagai PolaKompres dan RekonstruksiPCA Sebelum ModelRangkuman: Pemindai Wajah10Proyek: Penjelajah Digit
Amati DigitnyaPerkecil dengan PCAKelompokkan DigitBeri Nama pada KelompokTemukan yang Tidak BiasaLatihan sendiri: Compiler Python online