Özdeğerler ve SVD'ye Genel Bakış
Özdeğerleri ve özvektörleri np.linalg.eig ile hesaplayın ve SVD'nin PCA boyut indirgeme işleğinin temelini nasıl oluşturduğunu anlayın.
Özdeğerler ve SVD'ye Genel Bakış, CoddyKit'te ücretsiz bir Pandas & NumPy Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Pandas & NumPy Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Pandas & NumPy Academy kursu toplamda 4 dersten oluşur.
Özdeğerler ve Özvektörler Nedir?
Kare bir A matrisinin özvektörü, A @ v = lambda * v koşulunu sağlayan sıfır olmayan v vektörüdür; A ile çarpma yalnızca v'yi ölçekler, yönünü değiştirmez. v'ye karşılık gelen skaler lambda'ya özdeğer denir. Özdeğerler, doğrusal bir dönüşümün kendine özgü “uzatma katsayılarını” gösterir: 2 özdeğeri, matrisin özvektör yönündeki uzunlukları iki katına çıkardığı anlamına gelir; negatif özdeğer ise yönü tersine çevirir.
import numpy as np
A = np.array([[3.0, 1.0],
[0.0, 2.0]])
eigenvalues, eigenvectors = np.linalg.eig(A)
print('Eigenvalues:', eigenvalues)
print('Eigenvectors (columns):')
print(eigenvectors)np.linalg.eig() ile Özdeğerleri Hesaplama
np.linalg.eig(A), (eigenvalues, eigenvectors) ikilisini döndürür. Özdeğerler 1 boyutlu bir dizidir; özvektörler ise her sütunun bir özvektör olduğu 2 boyutlu bir dizidir. Gerçek simetrik matrislerde (kovaryans matrisleri gibi) özdeğerler her zaman gerçektir ve özvektörler diktir. Simetrik matrisler için np.linalg.eigh(A) kullanın; bu işlev daha hızlıdır ve gerçek sonuçlar döndürmesi garanti edilir.
import numpy as np
# Symmetric matrix -> use eigh for efficiency and real eigenvalues
A = np.array([[4.0, 2.0],
[2.0, 3.0]])
vals, vecs = np.linalg.eigh(A)
print('Eigenvalues (real):', vals)
print('Eigenvectors (orthonormal columns):')
print(vecs)
# Verify: A @ v = lambda * v for each eigenvector
for i in range(len(vals)):
lhs = A @ vecs[:, i]
rhs = vals[i] * vecs[:, i]
print(f'v{i} check:', np.allclose(lhs, rhs))Özdeğerler ve Matris Özellikleri
Özdeğerler, önemli matris özelliklerini kodlar. Determinant, tüm özdeğerlerin çarpımına eşittir: det(A) = product(eigenvalues). İz (köşegen elemanlarının toplamı), özdeğerlerin toplamına eşittir: trace(A) = sum(eigenvalues). Bir matrisin pozitif tanımlı olması (tüm özdeğerlerinin > 0 olması) için tüm özdeğerlerinin pozitif olması gerekir; bu, geçerli kovaryans matrisleri ve dışbükey optimizasyon problemleri için kritik bir özelliktir.
import numpy as np
A = np.array([[4.0, 2.0],
[2.0, 3.0]])
vals, _ = np.linalg.eigh(A)
print('Eigenvalues:', vals)
print('Product (should = det):', np.prod(vals))
print('np.linalg.det:', np.linalg.det(A))
print('Sum (should = trace):', np.sum(vals))
print('np.trace:', np.trace(A))
print('Positive definite:', np.all(vals > 0))Tekil Değer Ayrışımına (SVD) Genel Bakış
Tekil Değer Ayrışımı (SVD), herhangi bir A matrisini (yalnızca kare matrisleri değil) A = U @ S @ V.T biçiminde ayrıştırır; burada U ve V ortogonal matrislerdir, S ise köşegeninde negatif olmayan tekil değerler bulunan köşegen bir matristir. SVD, en genel ve sayısal açıdan en kararlı matris ayrıştırmasıdır. PCA'nın, görüntü sıkıştırmanın, öneri sistemlerinin ve sözde ters hesaplamasının temelini oluşturur. np.linalg.svd(A), U, s (1 boyutlu tekil değerler) ve Vh'yi (V'nin transpozu) döndürür.
import numpy as np
A = np.array([[1.0, 2.0, 3.0],
[4.0, 5.0, 6.0]])
U, s, Vh = np.linalg.svd(A, full_matrices=False)
print('U shape:', U.shape)
print('s (singular values):', s)
print('Vh shape:', Vh.shape)
# Reconstruct A
A_reconstructed = U @ np.diag(s) @ Vh
print('Reconstruction correct:', np.allclose(A, A_reconstructed))Tekil Değerler ve Matris Rütbesi
Tekil değerler (S'nin köşegenindeki değerler) her zaman negatif değildir ve geleneksel olarak büyükten küçüğe sıralanır. Sıfırdan farklı tekil değerlerin sayısı, matrisin rütbesine eşittir. Sıfıra yakın tekil değerler, satırlar veya sütunlar arasındaki yaklaşık doğrusal bağımlılığı gösterir. En büyük tekil değer, matrisin spektral normunu verir; en büyük tekil değerin sıfırdan farklı en küçük tekil değere oranı ise sayısal kararlılığı ölçmek için kullanılan koşul sayısıdır.
import numpy as np
# Full-rank matrix
A = np.random.rand(5, 3)
U, s, Vh = np.linalg.svd(A, full_matrices=False)
print('Singular values:', np.round(s, 4))
print('Rank (non-zero sv):', np.linalg.matrix_rank(A))
print('Condition number:', s[0] / s[-1])
# Rank-deficient matrix
B = np.array([[1.0, 2.0], [2.0, 4.0], [3.0, 6.0]])
_, sb, _ = np.linalg.svd(B, full_matrices=False)
print('Rank-deficient sv:', np.round(sb, 8))SVD ve PCA: Aralarındaki Bağlantı
Temel Bileşen Analizi (PCA), doğrudan SVD kullanılarak uygulanabilir. Veri matrisiniz X'i merkezledikten (sütun ortalamalarını çıkardıktan) sonra Vh içindeki sağ tekil vektörler temel bileşenlerdir; tekil değerlerin kareleri (n-1'e bölünmüş hâlleri) ise açıklanan varyanslardır. Sklearn'in PCA uygulaması tam olarak bu yaklaşımı kullanır. Bu bağlantıyı anlamanız, boyut azaltma amacıyla PCA'yı sıfırdan uygulamanıza veya özelleştirmenize olanak tanır.
import numpy as np
np.random.seed(0)
X = np.random.randn(100, 4)
# Center the data
X_centered = X - X.mean(axis=0)
# SVD-based PCA
U, s, Vh = np.linalg.svd(X_centered, full_matrices=False)
# Variance explained by each component
var_explained = (s ** 2) / (X.shape[0] - 1)
total_var = var_explained.sum()
print('Variance explained ratio:', np.round(var_explained / total_var, 3))
# Project onto top 2 principal components
X_pca = X_centered @ Vh[:2].T
print('Reduced shape:', X_pca.shape)SVD ile Düşük Rütbeli Yaklaştırma
SVD, düşük rütbeli matris yaklaştırmasını mümkün kılar: yalnızca en büyük k tekil değeri ve vektörünü tutarak özgün matrise ilişkin bir yaklaştırma yeniden oluşturabilirsiniz. Bu yaklaşım, görüntü sıkıştırmanın ve öneriler için iş birlikçi süzmenin temelidir. Kesilmiş SVD U[:, :k] @ np.diag(s[:k]) @ Vh[:k, :], en küçük kareler anlamında en iyi k-rütbeli yaklaştırmayı verir (Eckart-Young teoremi).
import numpy as np
np.random.seed(1)
A = np.random.rand(20, 15)
U, s, Vh = np.linalg.svd(A, full_matrices=False)
# Rank-3 approximation
k = 3
A_approx = U[:, :k] @ np.diag(s[:k]) @ Vh[:k, :]
error = np.linalg.norm(A - A_approx, 'fro')
total = np.linalg.norm(A, 'fro')
print(f'Approximation error: {error/total:.3f} (fraction of total)')
print(f'Top-3 singular values capture {(s[:3]**2).sum()/(s**2).sum():.1%} of variance')Özdeğer Ayrışımı ve SVD: Hangisi Ne Zaman Kullanılmalı
Özdeğer ayrışımını (np.linalg.eig veya eigh), kare ve simetrik bir matrisiniz olduğunda ve matrisin temel eksenlerini anlamak istediğinizde kullanın; örneğin PCA'daki kovaryans matrisi veya Markov geçiş matrisleri için. Matrisiniz dikdörtgense ya da en yüksek sayısal kararlılığa ihtiyacınız varsa SVD'yi (np.linalg.svd) kullanın. SVD her zaman vardır; özdeğer ayrışımı ise simetrik olmayan matrislerde karmaşık sayılar üretebilir.
import numpy as np
# Non-symmetric matrix: eigenvalues may be complex
A = np.array([[0.0, -1.0],
[1.0, 0.0]])
vals, _ = np.linalg.eig(A)
print('Eigenvalues (complex for rotation):', vals)
# SVD always gives real singular values
_, s, _ = np.linalg.svd(A)
print('Singular values (always real):', s)Simetrik Matrisler için Spektral Teorem
Spektral teorem, her gerçek simetrik A matrisinin A = Q @ diag(eigenvalues) @ Q.T biçiminde ayrıştırılabileceğini söyler; burada Q ortogonaldir (Q.T = Q⁻¹). Bu, simetrik matrislerin her zaman gerçek özdeğerler ve ortogonal özvektörlerle köşegenleştirilebileceği anlamına gelir. Kovaryans matrisleri, SVM'lerdeki çekirdek matrisleri ve optimizasyondaki Hessian matrisleri simetriktir; bu nedenle bu teorem, makine öğrenmesi kuramında her yerde kullanışlıdır.
import numpy as np
A = np.array([[5.0, 2.0, 1.0],
[2.0, 3.0, 0.0],
[1.0, 0.0, 4.0]])
vals, Q = np.linalg.eigh(A)
print('Eigenvalues:', np.round(vals, 4))
# Reconstruct A = Q @ diag(vals) @ Q.T
A_reconstructed = Q @ np.diag(vals) @ Q.T
print('Reconstruction correct:', np.allclose(A, A_reconstructed))
print('Q is orthogonal:', np.allclose(Q.T @ Q, np.eye(3)))Uygulamalı Konu: Baskın Özdeğer için Kuvvet İterasyonu
Yalnızca en büyük özdeğere ve buna karşılık gelen özvektöre ihtiyacınız olduğunda, kuvvet iterasyonu tüm özdeğerleri hesaplamaktan çok daha verimlidir. Rastgele bir vektörle başlayın, bu vektörü art arda A ile çarpıp normalize edin; süreç baskın özvektöre yakınsar. Google'ın özgün PageRank algoritması bu şekilde çalışıyordu. NumPy, her iterasyonu @ ile yapılan tek bir matris-vektör çarpımına dönüştürür.
import numpy as np
A = np.array([[4.0, 1.0, 2.0],
[1.0, 3.0, 0.0],
[2.0, 0.0, 2.0]])
v = np.random.rand(3)
for _ in range(50):
v = A @ v
v = v / np.linalg.norm(v)
eigenvalue_approx = v @ A @ v
print('Dominant eigenvector:', np.round(v, 4))
print('Approx eigenvalue:', round(eigenvalue_approx, 4))
# Verify with eigh
vals, vecs = np.linalg.eigh(A)
print('True max eigenvalue:', round(vals[-1], 4))Gerçek Veri İşleme Hatlarında np.linalg.svd Kullanımı
Gerçek bir veri işleme hattında SVD, gürültü azaltma ve veri sıkıştırma için kullanılır. SVD'yi eğitim verileri üzerinde uyguladıktan sonra varyansın %95'ini yakalayan yalnızca en büyük k bileşeni tutarsınız. Bu, yeni verilerin boyutunu bir sınıflandırıcıya veya regresyon modeline aktarmadan önce azaltır; böylece eğitim hızlanır ve gürültülü boyutlar kaldırıldığı için genelleme çoğu zaman iyileşir. SVD'yi her zaman yalnızca eğitim verileri üzerinde uygulayın ve aynı dönüşümü test verilerine de uygulayın.
import numpy as np
np.random.seed(7)
X_train = np.random.randn(200, 50)
X_test = np.random.randn(40, 50)
# Fit on training data
X_mean = X_train.mean(axis=0)
X_centered = X_train - X_mean
U, s, Vh = np.linalg.svd(X_centered, full_matrices=False)
# Choose k to capture 90% variance
cumvar = np.cumsum(s**2) / (s**2).sum()
k = np.searchsorted(cumvar, 0.9) + 1
print(f'Components to capture 90% variance: {k}')
# Transform test data using the same Vh
X_test_reduced = (X_test - X_mean) @ Vh[:k].T
print('Reduced test shape:', X_test_reduced.shape)Hızlı Kontrol
Bu dersteki Veri Analizi kavramlarını anlayıp anlamadığınızı test edin.
Ders Özeti
Bu derste şunları öğrendiniz: np.linalg.eig()/eigh(), bir matrisin içsel gerilme yönlerini ortaya koyan özdeğerleri ve özvektörleri hesaplar; np.linalg.svd(), herhangi bir matrisi U'ya, tekil değerlere ve Vh'ye ayrıştırarak PCA'yı ve düşük rütbeli yaklaştırmayı mümkün kılar; tekil değerler ise her bileşenin yakaladığı varyansı ölçer ve matrisin rütbesini belirler. Sırada, büyük veri kümelerini CSV dosyalarını parçalar hâlinde akış yoluyla işleyerek ele alacağız.
Sıkça Sorulan Sorular
“Özdeğerler ve SVD'ye Genel Bakış” dersi ücretsiz mi?
Evet — “Özdeğerler ve SVD'ye Genel Bakış” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Pandas & NumPy Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Pandas & NumPy Academy kursu toplamda 4 dersten oluşur.
“Özdeğerler ve SVD'ye Genel Bakış” dersinde ne öğreneceğim?
Özdeğerleri ve özvektörleri np.linalg.eig ile hesaplayın ve SVD'nin PCA boyut indirgeme işleğinin temelini nasıl oluşturduğunu anlayın. Pandas & NumPy Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Pandas & NumPy Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Pandas & NumPy Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Özdeğerler ve SVD'ye Genel Bakış” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Pandas & NumPy Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Pandas & NumPy Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- np.matmul ve @ ile Matris Çarpımı
- Determinantlar, Ters Matrisler ve Transpozlar
- Doğrusal Sistemleri Çözme
- Özdeğerler ve SVD'ye Genel Bakış