CodeBlanks Logo Icon CodeBlanks

Varyans

PCA, en çok varyansı açıklayan bileşenleri seçer.

Varyansı korumak

PCA'nın hedefi, boyutu düşürürken toplam varyansın olabildiğince çoğunu korumaktır. Her bileşenin taşıdığı varyans, verinin kovaryans matrisinin bir özdeğeridir; bileşen yönleri ise özvektörlerdir:

C = np.cov(Xs, rowvar=False)
ozdeger = np.linalg.eigvalsh(C)[::-1]   # büyükten küçüğe
print(np.allclose(ozdeger[:3], PCA(3).fit(Xs).explained_variance_))   # True

Ölçekli veride her özelliğin varyansı 1 olduğundan toplam varyans özellik sayısına eşittir.

Dönüşüm varyansı korur

Tüm bileşenler tutulursa PCA yalnızca bir döndürmedir: hiçbir bilgi kaybolmaz ve toplam varyans aynı kalır. Bilgi kaybı yalnızca bileşen atınca olur:

tam = PCA().fit(Xs)
print(round(tam.explained_variance_.sum(), 3))   # ~13 (n-1 düzeltmesiyle)
print(round(Xs.var(axis=0, ddof=1).sum(), 3))   # aynısı

PCA'nın varyansları ddof=1 ile hesaplanır; karşılaştırmada aynı düzeltme kullanılmalıdır.

Uygulama Özdeğerlerle doğrula

Ölçekli şarap verisinin kovaryans matrisinin özdeğerlerini np.linalg.eigvalsh ile büyükten küçüğe sırala. İlk üçünün PCA(n_components=3).fit(Xs).explained_variance_ ile aynı olduğunu np.allclose ile yazdır. Ardından tüm özdeğerlerin toplamını round(..., 3) ile yazdır.

Başlangıç kodu

model.py
import numpy as np
from sklearn.datasets import load_wine
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA

X, y = load_wine(return_X_y=True)
Xs = StandardScaler().fit_transform(X)

# buraya yaz

Örnek çözüm

model.py
import numpy as np
from sklearn.datasets import load_wine
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA

X, y = load_wine(return_X_y=True)
Xs = StandardScaler().fit_transform(X)

ozdeger = np.linalg.eigvalsh(np.cov(Xs, rowvar=False))[::-1]
print(np.allclose(ozdeger[:3], PCA(n_components=3).fit(Xs).explained_variance_))
print(round(ozdeger.sum(), 3))

Beklenen çıktı

True
13.073

Soru ve cevaplar

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

1 13 özellikli ölçekli veride (her biri varyans ≈ 1) toplam varyans yaklaşık kaçtır?

  • 0
  • 13 Doğru cevap
  • 1
  • 169

Açıklama: Toplam varyans sütun varyanslarının toplamıdır; dönüşüm bunu korur.

2 Kovaryans matrisini sütunlar arasında hesapla.

Soru
C = np.cov(Xs, ____=False)
Cevap
C = np.cov(Xs, rowvar=False)

Açıklama: rowvar=False her sütunu bir değişken sayar.

3 Kavramları eşleştir.

Kavram Anlamı
özdeğer Bileşenin varyansı
özvektör Bileşen yönü
tüm bileşenler Kayıpsız döndürme
bileşen atmak Bilgi kaybı

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