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ğişmeyen, sadece uzayan ya da kısalan vektörler var mı?

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ç katına çıktığına da özdeğer (eigenvalue) denir.

Mekanizma

Bir matrisi üç farklı vektöre uygulayıp, hangilerinin yönünün değişmediğine bakalım:

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

# Bir matris, çoğu vektörün yönünü değiştirir. Ama bazı ö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ü aynı mı? (biri diğerinin sabit katıysa aynı 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 aynı (özvektör!)' if orantili else 'Yön değişti'}")

print("\nv1=[1,0] için Mv=[2,1] -- bu, v1 ile aynı yönde değil (v1 yatay, Mv çapraz).")
print("v2=[1,1] için Mv=[3,3] = 3 x [1,1] -- tam olarak aynı yönde, sadece 3 katına çıkmış!")
print("v3=[1,-1] için Mv=[1,-1] = 1 x [1,-1] -- yine aynı yönde, hiç değişmemiş!")
v1=[1,0]: M @ v = [2, 1]  -- Yön değişti
v2=[1,1]: M @ v = [3, 3]  -- Yön aynı (özvektör!)
v3=[1,-1]: M @ v = [1, -1]  -- Yön aynı (özvektör!)

v1=[1,0] için Mv=[2,1] -- bu, v1 ile aynı yönde değil (v1 yatay, Mv çapraz).
v2=[1,1] için Mv=[3,3] = 3 x [1,1] -- tam olarak aynı yönde, sadece 3 katına çıkmış!
v3=[1,-1] için Mv=[1,-1] = 1 x [1,-1] -- yine aynı yönde, hiç değişmemiş!

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ğerleri (eigenvalue) ve özvektörleri
# (eigenvector) otomatik bulur -- elle bulduklarımızla karşılaştıralım.
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) aynı 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) aynı 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.(grafiği tam boyutta, yeni sekmede aç)
v1=[1,0] dönüştürülünce yönü değişiyor (özvektör değil). v2=[1,1] ve v3=[1,-1] ise dönüştürülünce aynı yönde kalıyor -- bunlar M'nin özvektörleri.

Nerede işe yarar

Özvektör/özdeğer fikri, ilerideki kritik 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ğişen yönleri gösterir.
  • Boyut indirgeme, verideki bilgiyi en çok koruyan birkaç özvektöre projeksiyon yapmaktır.
  • Google’ın PageRank algoritması bile, ö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ü “sabit kalan vektör” sanmak — hayır, yönü sabit kalır ama boyu (özdeğer kadar) değişebilir.
  2. Her matrisin özvektörünün “kolayca görülebilecek” basit sayılar olduğunu düşünmek — genelde özvektörleri bulmak, np.linalg.eig gibi bir algoritma 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 katı -- 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çıkça belirtiliyor: 'Mv=[3,3] = 3 x [1,1] -- tam olarak aynı yönde, sadece 3 katına çı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 nasıl ilişkili?
  1. Hiçbir ilişkisi yok
  2. [0.707, 0.707], v2=[1,1]'in normalize edilmiş (uzunluğu 1 yapılmış) hâli -- NumPy'nin bulduğu özvektör, elle bulduğumuz yönle aynı 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şılaştırılıyor ve 'aynı doğrultuda: True' sonucu doğrulanıyor.

3. Makine Öğrenmesi kategorisindeki PCA (temel bileşen analizi), özvektörleri nasıl kullanır?
  1. Kullanmaz, tamamen farklı bir yöntemdir
  2. Verinin kovaryans matrisinin özvektörlerini bularak, verideki en çok değiş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çıkç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 →