CodeBlanks Logo Icon CodeBlanks

PCA vs t-SNE

PCA doğrusal, t-SNE doğrusal olmayan boyut indirgeme yöntemidir.

PCA ve t-SNE

t-SNE, yüksek boyutta yakın olan noktaları 2 boyutta da yakın tutmaya çalışan doğrusal olmayan bir yöntemdir. Yerel komşulukları korur; bu yüzden kümeler görsel olarak çok net ayrılır:

from sklearn.manifold import TSNE
Z = TSNE(n_components=2, perplexity=30, random_state=0).fit_transform(X)

Farklar: PCA doğrusal, hızlı ve deterministiktir, yeni veriye transform uygulanabilir. t-SNE doğrusal değil, yavaştır, rastgeledir ve transform yöntemi yoktur.

t-SNE grafiğini okumak

t-SNE grafiğinde dikkatli olunmalıdır:

  • Küme boyutları anlamsızdır; yoğun kümeler genişleyebilir.
  • Kümeler arası mesafeler güvenilir değildir.
  • perplexity sonucu çok değiştirir (5-50 arası denenir).
  • Farklı random_state farklı yerleşim verir.

Güvenilir olan tek şey yerel komşuluktur: grafikte yan yana olan noktalar özgün uzayda da yakındır.

Uygulama Komşulukların korunması

Rakam verisinin ilk 500 örneğini PCA (2 bileşen) ve t-SNE (perplexity=30, random_state=0) ile 2 boyuta indir. Her iki 2 boyutlu gösterimde 5 komşulu KNN'in 5 katlı CV doğruluğunu round(..., 3) ile aynı satırda yazdır (önce PCA). Bu, yerel komşulukların ne kadar korunduğunu ölçer.

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
from sklearn.manifold import TSNE
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import cross_val_score

X, y = X[:500], y[:500]

# 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
from sklearn.manifold import TSNE
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import cross_val_score

X, y = X[:500], y[:500]

Zp = PCA(n_components=2).fit_transform(X)
Zt = TSNE(n_components=2, perplexity=30, random_state=0).fit_transform(X)
knn = KNeighborsClassifier(n_neighbors=5)
print(round(cross_val_score(knn, Zp, y, cv=5).mean(), 3), round(cross_val_score(knn, Zt, y, cv=5).mean(), 3))

Beklenen çıktı

0.682 0.952

Soru ve cevaplar

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

1 Neden t-SNE çıktısı bir sınıflandırıcıya girdi olarak kullanılmaz?

  • Hep 3 boyut üretir
  • Kullanılır
  • Yeni veriye uygulanamaz ve mesafeleri bozar Doğru cevap
  • Çok doğrudur

Açıklama: t-SNE görselleştirme aracıdır; transform yoktur ve küme arası uzaklıklar anlamlı değildir.

2 t-SNE için komşuluk ölçeğini ayarla.

Soru
Z = TSNE(n_components=2, ____=30, random_state=0).fit_transform(X)
Cevap
Z = TSNE(n_components=2, perplexity=30, random_state=0).fit_transform(X)

Açıklama: perplexity kabaca her noktanın dikkate aldığı komşu sayısıdır.

3 Özellikleri eşleştir.

Kavram Anlamı
PCA Doğrusal, hızlı
t-SNE Doğrusal değil, yerel
transform Yalnızca PCA'da
perplexity t-SNE komşuluk ölçeği

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