Menu
CoddyTech

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:

Satu angka 9 tulisan tangan yang disusun kembali sebanyak lima kali: dari 2 angka menjadi buram abu-abu, dari 5 dan 10 menjadi angka 9 kasar, dari 20 menjadi angka 9 jelas, dan terakhir hasil pemindaian asli berukuran 64 piksel

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.

Pindaian digit sebagai titik pada dua komponen, setiap digit diberi label di bagian tengahnya: digit 0 di bawah, digit 4 jauh di kanan, digit 3 jauh di kiri, digit lainnya berada di area di antaranya, beberapa saling bertumpang tindih

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.

challenge icon

Tantangan

Sedang

Aplikasi 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.

  1. Ringkas semua 1,797 hasil pemindaian menjadi masing-masing 2 angka dengan PCA, lalu simpan ke points.
  2. Buat scatter plot hasil pemindaian setiap digit yang dipilih, dengan label digitnya. Tambahkan legenda dan tampilkan.
  3. 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:

Scatter plot berjudul Digit yang mirip dengan legenda: angka 0 berada rendah di sebelah kiri, angka 6 berada rendah di tengah, angka 4 berada tinggi di sebelah kanan, angka 6 bersinggungan dengan angka 4

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
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pembelajaran Tanpa Pengawasan

Latihan sendiri: Compiler Python online