Makine Öğrenmesi
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.
Örnek çözümü göster
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))
Kendini test et
-
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
Cevabı göster
1'e yaklaşır — Tüm noktalar benzer uzaklıkta olunca "en yakın" komşu bilgisi değersizleşir.
-
Her satırın ilk noktaya uzaklığını hesapla.
m = np.linalg.norm(A[1:] - A[0], ____=1)
Cevabı göster
m = np.linalg.norm(A[1:] - A[0], axis=1)
-
Nedenleri eşleştir.
- 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
Sıradaki ders: PCA vs t-SNE