Menu
CoddyTech

64 Boyutu Görmek

Coddy'nin Machine Learning Journey'sinin Denetimsiz Öğrenme bölümünün bir parçası. Ders 29 / 51.

Bu bölümde PCA'yı el yazısı rakamlar üzerinde kullanacaksın. Bölümün sonunda bir taramayı birkaç sayıya sıkıştırıp yeniden oluşturacaksın:

Beş kez yeniden oluşturulmuş, elle yazılmış bir 9: 2 sayıdan gri bir bulanıklık, 5 ve 10 sayıdan kabaca bir 9, 20 sayıdan net bir 9 ve en sonda gerçek 64 piksellik tarama

Önce bir göz at. Bir tarama 64 pikselden oluşur ve hiçbir grafikte 64 eksen bulunmaz, bu yüzden PCA bunları 2 eksene indirger:

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))

Burada ölçekleyici yok: her piksel aynı birimi paylaşır; mürekkep değeri 0 ile 16 arasındadır.

İki bileşen üzerinde noktalar olarak gösterilen rakam taramaları; her rakam merkezinde etiketlenmiş: 0'lar altta, 4'ler en sağda, 3'ler en solda, diğer rakamlar aradaki bölgelerde, bazıları üst üste geliyor

PCA, y'yi hiç görmedi; yalnızca noktaları renklendiriyor. Yine de her rakam kendi bölgesinde toplanıyor: yapı piksellerdeydi.

challenge icon

Görev

Orta

Çocuklara yönelik bir el yazısı uygulaması, çocukların hangi rakamları karıştırabileceğini öğrenmek istiyor. Program, chosen içine 358 gibi birlikte yazılmış bazı rakamları okur.

  1. PCA ile 1,797 taramanın tümünü ikişer sayıya indirip points içine koy.
  2. Seçilen her rakamın taramalarını, rakamla etiketleyerek dağılım grafiğinde göster. Bir gösterge ekle ve grafiği görüntüle.
  3. report_closest(points, y, chosen) çağrısını yap.

046 için şu çıktıyı verir:

Closest on the map: 4 and 6 (13.6 apart)

ve bunu çizer. Ardından Coddy grafiğini açıklar:

Birbirine benzeyen rakamlar başlıklı dağılım grafiği ve bir gösterge: 0'lar sol altta, 6'lar ortada altta, 4'ler sağ üstte; 6'lar 4'lere değiyor

Kendin dene

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


# Measuring Similarity bölümünden: haritadaki merkezleri birbirine en yakın olan seçilmiş iki rakamı yazdırır
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 tarama: her biri X içinde 64 piksel, çizilen rakam ise y içinde
digits = load_digits()
X = digits.data
y = digits.target

# Karşılaştırılacak rakamlar, 358 gibi bitişik yazılır
chosen = []
for ch in input():
    chosen.append(int(ch))

# Aşağıdaki satırları değiştirmeyin
fig, ax = plt.subplots()
ax.set_title("Digits that look alike")
ax.set_xlabel("Component 1")
ax.set_ylabel("Component 2")

# Kodunuzu aşağıya yazın
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Denetimsiz Öğrenme bölümündeki tüm dersler

Kendi başına pratik yap: Online Python derleyicisi