Makine Öğrenmesi
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.
Örnek çözümü göster
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)))
Kendini test et
-
İ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
- Sınıflar kesinlikle ayrılamaz
- PCA hatalıdır
Cevabı göster
Sınıflar diğer bileşenlerde ayrılıyor olabilir — 2 boyutlu görüntü bilginin küçük bir kısmıdır; karışıklık kesin bir sonuç değildir.
-
Sınıfları renklendirerek çiz.
ax.scatter(Z[:, 0], Z[:, 1], ____=y)
Cevabı göster
ax.scatter(Z[:, 0], Z[:, 1], c=y)
-
Adımları eşleştir.
- 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
Sıradaki ders: Avantajlar