CodeBlanks Logo Icon CodeBlanks

Neden indirgeriz?

Boyut indirgeme, hesaplama maliyetini azaltır ve gürültüyü filtreler.

Neden indirgeriz?

Başlıca nedenler:

  • Hız ve bellek: daha az sütun, daha hızlı eğitim.
  • Gürültü azaltma: küçük varyanslı bileşenler çoğu zaman gürültüdür.
  • Görselleştirme: 2-3 boyuta inince veri çizilebilir.
  • Boyutun laneti: çok boyutta noktalar birbirinden neredeyse eşit uzaklaşır; mesafe tabanlı yöntemler zayıflar.
rng = np.random.default_rng(0)
for d in [2, 100, 1000]:
    A = rng.random((200, d))
    m = np.linalg.norm(A[1:] - A[0], axis=1)
    print(d, round(m.min() / m.max(), 2))   # 1'e yaklaştıkça "en yakın" anlamsızlaşır

Gürültü giderme

Az bileşenle indirip geri dönmek, veriyi en güçlü desenlere yansıtır; küçük varyanslı bileşenlerdeki gürültü atılır:

gurultulu = X + rng.normal(0, 4, X.shape)
pca = PCA(n_components=0.5).fit(gurultulu)
temiz = pca.inverse_transform(pca.transform(gurultulu))
print(((temiz - X) ** 2).mean() < ((gurultulu - X) ** 2).mean())   # True

Çok az bileşen tutulursa gürültüyle birlikte gerçek ayrıntılar da kaybolur; denge yine doğrulamayla bulunur.

Uygulama Gürültüyü temizle

Rakam verisine rng.normal(0, 4, X.shape) gürültüsü ekle. Gürültülü veriye varyansın %50'sini koruyan PCA uydurup geri döndür. Gürültülü ve temizlenmiş verinin özgün veriye ortalama kare hatasını round(..., 2) ile aynı satırda yazdır.

Başlangıç kodu

model.py
import numpy as np
from sklearn.datasets import load_digits

X, y = load_digits(return_X_y=True)
from sklearn.decomposition import PCA

rng = np.random.default_rng(0)

# buraya yaz

Örnek çözüm

model.py
import numpy as np
from sklearn.datasets import load_digits

X, y = load_digits(return_X_y=True)
from sklearn.decomposition import PCA

rng = np.random.default_rng(0)

gurultulu = X + rng.normal(0, 4, X.shape)
pca = PCA(n_components=0.5).fit(gurultulu)
temiz = pca.inverse_transform(pca.transform(gurultulu))
print(round(((gurultulu - X) ** 2).mean(), 2), round(((temiz - X) ** 2).mean(), 2))

Beklenen çıktı

16.01 7.22

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Boyutun lanetinde en yakın ve en uzak komşu mesafelerinin oranı nasıl değişir?

  • 0'a yaklaşır
  • Değişmez
  • Negatif olur
  • 1'e yaklaşır Doğru cevap

Açıklama: Tüm noktalar benzer uzaklıkta olunca "en yakın" komşu bilgisi değersizleşir.

2 Her satırın ilk noktaya uzaklığını hesapla.

Soru
m = np.linalg.norm(A[1:] - A[0], ____=1)
Cevap
m = np.linalg.norm(A[1:] - A[0], axis=1)

Açıklama: axis=1 her satır için ayrı bir norm verir.

3 Nedenleri eşleştir.

Kavram Anlamı
Hız Daha az sütun
Gürültü Küçük bileşenleri at
Görselleştirme 2-3 boyut
Boyutun laneti Mesafeler eşitlenir

Orta seviye bölümündeki tüm dersler