CodeBlanks Logo Icon CodeBlanks

Görselleştirme

Boyut indirgeme, yüksek boyutlu veriyi 2B veya 3B'de görselleştirmeye yarar.

Görselleştirme için indirgeme

Yüksek boyutlu veriyi anlamanın en hızlı yolu 2 boyuta indirip sınıf renkleriyle çizmektir. Sınıflar grafikte ayrılıyorsa basit bir model bile iyi çalışacaktır; iç içeyse problem zordur:

Z = PCA(n_components=2).fit_transform(Xs)
fig, ax = plt.subplots()
sc = ax.scatter(Z[:, 0], Z[:, 1], c=y, cmap="tab10", s=8)
ax.set_xlabel("1. bileşen")
ax.set_ylabel("2. bileşen")
fig.colorbar(sc)

Eksen etiketlerinde açıklanan varyans oranını yazmak grafiğin ne kadar bilgiyi gösterdiğini anlatır.

Merkezlerle özetlemek

Grafiğe ek olarak her sınıfın 2 boyutlu uzaydaki ortalaması hesaplanabilir; birbirine yakın merkezler, modelin karıştıracağı sınıf çiftlerini önceden gösterir:

merkez = np.array([Z[y == k].mean(axis=0) for k in range(10)])
from scipy.spatial.distance import pdist, squareform
D = squareform(pdist(merkez))
np.fill_diagonal(D, np.inf)
print(np.unravel_index(D.argmin(), D.shape))   # en yakın sınıf çifti

Bu çiftler genellikle karmaşıklık matrisinde en çok karışan sınıflarla örtüşür.

Uygulama İki boyutlu harita

Rakam verisini PCA ile 2 boyuta indir, sınıf renkleriyle çizip kaydet. İlk iki bileşenin açıkladığı toplam varyans oranını round(..., 3) ile yazdır. Ardından 2 boyutta merkezleri en yakın sınıf çiftini pdist/squareform ile bulup 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)
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from scipy.spatial.distance import pdist, squareform

# 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)
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from scipy.spatial.distance import pdist, squareform

pca = PCA(n_components=2)
Z = pca.fit_transform(X)
fig, ax = plt.subplots()
ax.scatter(Z[:, 0], Z[:, 1], c=y, s=8)
fig.savefig("rakam.png")
print(round(pca.explained_variance_ratio_.sum(), 3))
merkez = np.array([Z[y == k].mean(axis=0) for k in range(10)])
D = squareform(pdist(merkez))
np.fill_diagonal(D, np.inf)
print(tuple(int(v) for v in np.unravel_index(D.argmin(), D.shape)))

Beklenen çıktı

0.285
(5, 8)

Soru ve cevaplar

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

1 İlk iki bileşen varyansın yalnızca %20'sini açıklıyorsa grafikte sınıfların karışık görünmesi ne anlama gelir?

  • Veri yanlıştır
  • Sınıflar diğer bileşenlerde ayrılıyor olabilir Doğru cevap
  • Sınıflar kesinlikle ayrılamaz
  • PCA hatalıdır

Açıklama: 2 boyutlu görüntü bilginin küçük bir kısmıdır; karışıklık kesin bir sonuç değildir.

2 Sınıfları renklendirerek çiz.

Soru
ax.scatter(Z[:, 0], Z[:, 1], ____=y)
Cevap
ax.scatter(Z[:, 0], Z[:, 1], c=y)

Açıklama: c parametresi sayısal değerleri renk haritasıyla eşler.

3 Adımları eşleştir.

Kavram Anlamı
PCA(2) 2 boyuta indir
c=y Sınıf renkleri
sınıf merkezleri Ortalama konum
yakın merkezler Karışacak sınıflar

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