Ana içeriğe geç

Orta7 dk

Özdeğer ve özvektör (PCA'ya hazırlık)

Önkoşul:Matris çarpımı: dönüşüm olarak okumak

Kanca

  1. derste gördün: bir matris ÇOĞU vektörün yönünü değiştirir. Peki hiç DEĞİŞMEYEN, sadece UZAYAN ya da KISALAN vektörler var MI?

Sezgi

Evet — ve bunlara ÖZVEKTÖR (eigenvector) denir. Bir matrisle çarpılınca YÖNÜ hiç değişmeyen, sadece BOYU değişen özel vektörlerdir. Boyunun kaç KATINA çıktığına da ÖZDEĞER (eigenvalue) denir.

Mekanizma

Bir matrisi üç farklı vektöre uygulayıp, HANGİLERİNİN yönünün DEĞİŞMEDİĞİNE bakalım:

Bazı vektörlerin yönü değişmiyor

# Bir matris, ÇOĞU vektörün YÖNÜNÜ değiştirir. Ama BAZI ÖZEL vektörler için,
# matris sadece BÜYÜKLÜĞÜ değiştirir, YÖNÜ aynı kalır -- bunlara ÖZVEKTÖR denir.
M = np.array([[2, 1], [1, 2]])

v1 = np.array([1, 0])   # rastgele bir vektör
v2 = np.array([1, 1])   # ÖZEL bir yön
v3 = np.array([1, -1])  # BAŞKA bir özel yön

for isim, v in [("v1=[1,0]", v1), ("v2=[1,1]", v2), ("v3=[1,-1]", v3)]:
    Mv = M @ v
    # v'nin yönü ile Mv'nin yönü AYNI MI? (biri diğerinin sabit katıysa AYNI yön)
    orantili = np.allclose(Mv * v[0], v * Mv[0]) if v[0] != 0 else np.allclose(Mv[0], 0)
    print(f"{isim}: M @ v = {Mv.tolist()}  -- {'YÖN AYNI (özvektör!)' if orantili else 'YÖN DEĞİŞTİ'}")

print("\nv1=[1,0] için Mv=[2,1] -- bu, v1 ile AYNI yönde DEĞİL (v1 yatay, Mv çapraz).")
print("v2=[1,1] için Mv=[3,3] = 3 x [1,1] -- TAM OLARAK AYNI yönde, sadece 3 KATINA çıkmış!")
print("v3=[1,-1] için Mv=[1,-1] = 1 x [1,-1] -- YİNE AYNI yönde, hiç DEĞİŞMEMİŞ!")
v1=[1,0]: M @ v = [2, 1]  -- YÖN DEĞİŞTİ
v2=[1,1]: M @ v = [3, 3]  -- YÖN AYNI (özvektör!)
v3=[1,-1]: M @ v = [1, -1]  -- YÖN AYNI (özvektör!)

v1=[1,0] için Mv=[2,1] -- bu, v1 ile AYNI yönde DEĞİL (v1 yatay, Mv çapraz).
v2=[1,1] için Mv=[3,3] = 3 x [1,1] -- TAM OLARAK AYNI yönde, sadece 3 KATINA çıkmış!
v3=[1,-1] için Mv=[1,-1] = 1 x [1,-1] -- YİNE AYNI yönde, hiç DEĞİŞMEMİŞ!

Matematik

Özdeğer denklemi
Mv=λvMv = \lambda v

Bir vv vektörü, bir MM matrisinin özvektörüdür EĞER MvMv, vv‘nin sadece bir SKALER (λ\lambda, özdeğer) katıysa. Yani matris, vv‘yi DÖNDÜRMEZ — sadece λ\lambda katına ÖLÇEKLER.

Kod

np.linalg.eig ile otomatik bulma

# NumPy'nin np.linalg.eig fonksiyonu, ÖZDEĞERLERİ (eigenvalue) ve ÖZVEKTÖRLERİ
# (eigenvector) OTOMATİK bulur -- elle bulduklarımızla KARŞILAŞTIRALIM.
ozdegerler, ozvektorler = np.linalg.eig(M)

print(f"\nnp.linalg.eig(M) özdeğerleri: {ozdegerler.tolist()}")
print(f"np.linalg.eig(M) özvektörleri (sütun olarak):\n{ozvektorler}")

# Elle bulduğumuz v2=[1,1] yönü, normalize edilince özvektörle örtüşmeli.
v2_normalize = v2 / np.linalg.norm(v2)
print(f"\nv2=[1,1] normalize edilmiş hâli: {v2_normalize.tolist()}")
print(f"NumPy'nin bulduğu ilk özvektör: {ozvektorler[:, 0].tolist()}")
print(f"Bu iki yön (işaret farkı olabilir) AYNI DOĞRULTUDA: {np.allclose(np.abs(v2_normalize), np.abs(ozvektorler[:, 0]))}")

np.linalg.eig(M) özdeğerleri: [(3+0j), (1+0j)]
np.linalg.eig(M) özvektörleri (sütun olarak):
[[ 0.70710678+0.j -0.70710678+0.j]
 [ 0.70710678+0.j  0.70710678+0.j]]

v2=[1,1] normalize edilmiş hâli: [0.7071067811865475, 0.7071067811865475]
NumPy'nin bulduğu ilk özvektör: [(0.7071067811865475+0j), (0.7071067811865475+0j)]
Bu iki yön (işaret farkı olabilir) AYNI DOĞRULTUDA: True
Üç panelde bir vektörün ve dönüşmüş hâlinin karşılaştırılması; v2 ve v3 panellerinde yön değişmiyor, v1 panelinde değişiyor.
v1=[1,0] dönüştürülünce YÖNÜ değişiyor (özvektör DEĞİL). v2=[1,1] ve v3=[1,-1] ise dönüştürülünce AYNI yönde kalıyor -- bunlar M'nin özvektörleri.

Nerede işe yarar

Özvektör/özdeğer fikri, ilerideki KRİTİK bir tekniğin doğrudan temelidir:

  • Makine Öğrenmesi kategorisindeki PCA, bir veri kümesinin KOVARYANS matrisinin özvektörlerini bulur — bu özvektörler, verideki EN ÇOK DEĞİŞEN yönleri gösterir.
  • Boyut indirgeme, verideki BİLGİYİ EN ÇOK koruyan birkaç özvektöre PROJEKSİYON yapmaktır.
  • Google’ın PageRank algoritması BİLE, özünde, bir matrisin en büyük özdeğerine karşılık gelen özvektörü bulmaktır.

Bu 2 hatayı yaparsın:

  1. Özvektörü “SABİT kalan vektör” sanmak — HAYIR, YÖNÜ sabit kalır ama BOYU (özdeğer kadar) DEĞİŞEBİLİR.
  2. Her matrisin özvektörünün “kolayca GÖRÜLEBİLECEK” basit sayılar olduğunu düşünmek — genelde özvektörleri BULMAK, np.linalg.eig gibi bir ALGORİTMA gerektirir.

Kendini test et

1. Notebook'ta v2=[1,1] için M @ v2 = [3,3] çıkıyor. Bu NEDEN v2'nin bir ÖZVEKTÖR olduğunu gösterir?
  1. Çünkü [3,3] daha büyük bir vektör
  2. Çünkü [3,3], [1,1]'in TAM OLARAK 3 KATI -- yani M, v2'nin YÖNÜNÜ değiştirmeden sadece 3 kat BÜYÜTTÜ (özdeğer=3) (doğru cevap)
  3. Çünkü v2 pozitif sayılardan oluşuyor
  4. Bir hesaplama hatası

Neden: ozel-yonler-tanim bloğunda bu AÇIKÇA belirtiliyor: 'Mv=[3,3] = 3 x [1,1] -- TAM OLARAK AYNI yönde, sadece 3 KATINA çıkmış'.

2. numpy-ile-doprulama bloğunda np.linalg.eig(M) özdeğerleri [3, 1] ve ilk özvektörü [0.707, 0.707] buluyor. Bu, elle bulduğumuz v2=[1,1] ile NASIL ilişkili?
  1. Hiçbir ilişkisi yok
  2. [0.707, 0.707], v2=[1,1]'in NORMALİZE edilmiş (uzunluğu 1 yapılmış) hâli -- NumPy'nin bulduğu özvektör, elle bulduğumuz YÖNLE AYNI DOĞRULTUDA (doğru cevap)
  3. NumPy farklı bir matris kullandı
  4. Bu bir tesadüf

Neden: numpy-ile-doprulama bloğunda v2_normalize=[0.707,0.707] ile NumPy'nin özvektörü KARŞILAŞTIRILIYOR ve 'AYNI DOĞRULTUDA: True' sonucu doğrulanıyor.

3. Makine Öğrenmesi kategorisindeki PCA (temel bileşen analizi), özvektörleri NASIL kullanır?
  1. Kullanmaz, tamamen farklı bir yöntemdir
  2. Verinin KOVARYANS matrisinin özvektörlerini bularak, verideki EN ÇOK DEĞİŞEN (en bilgilendirici) yönleri tespit eder -- bu ders TAM OLARAK bu fikrin matematiksel temelidir (doğru cevap)
  3. Sadece görselleştirme için kullanır
  4. Rastgele yönler seçer

Neden: kullanım bölümünde bu AÇIKÇA bağlanıyor: PCA, kovaryans matrisinin özvektörlerini bularak verideki en önemli yönleri bulur.

Özet

Özet

  • Bir özvektör, bir matrisle çarpılınca YÖNÜ hiç değişmeyen özel bir vektördür.
  • Bir özdeğer, o özvektörün ne KADAR ölçeklendiğini (kaç katına çıktığını) gösteren sayıdır: Mv = λv.
  • np.linalg.eig(M), bir matrisin TÜM özdeğer ve özvektörlerini otomatik bulur.
  • Bu dersteki M=[[2,1],[1,2]] örneğinde özdeğerler 3 ve 1, özvektörler [1,1] ve [1,-1] yönleridir.
  • Makine Öğrenmesi kategorisindeki PCA, verideki en önemli yönleri bulmak için TAM OLARAK bu fikri kullanır.
Sonraki adım: Fonksiyon ve grafik sezgisi →