Özdeğer ve Özmatris Nedir?
Bir matrisin özdeğerleri (eigenvalues), matrisin temel özelliklerini yansıtan özel skalar değerlerdir. Eğer bir karesel matrisinin bir özvektörü (eigenvector) ve özdeğeri varsa, şu denklemi sağlar:
Burada , vektörünü sadece ölçeklendirir (büyütür veya küçültür) ama yönünü değiştirmez. Özmatris (eigenmatrix) ise, özvektörleri bir araya getiren bir matristir. Özdeğerler ve özmatrisler, bir sistemin temel yapısını ve dönüşüm özelliklerini anlamada kritik rol oynar. Özdeğerler, PCA ile veri boyutu dönüştürmede kullanılmaktadır; bu konuda yıllar evvel yazdığım ve blogumun ilk yazısı olan "Hiperspektral Görüntülerde PCA ile Boyut İndirme" başlıklı yazıya bu linkten ulaşabilirsiniz.
Özdeğer Dağılımının Önemi ve Makine Öğrenmesindeki Rolü
Özdeğer dağılımı, matrisin yapısını anlamamızı sağlar ve birçok farklı alanda uygulanır. Özellikle makine öğrenmesinde, sinir ağı ağırlık matrislerinin özdeğer spektrumlarını analiz etmek, ağın ögrenme kapasitesini, ve overfitting riskini belirlemeye yardımcı olabilir. Örneğin, rastgele ağırlık matrislerinin özdeğer dağılımı, ağın lineer dinamiklerini anlamamıza yardımcı olur. Güç yasası dağılımı, iyi genelleşen sinir ağlarının özdeğer spektrumlarının belirli aralıklarda kaldığını göstermektedir. Bu nedenle, özdeğer analizinin derin öğrenme modellerinde kullanılması önemli bir araştırma konusudur.
Örnek: Bir Matrisin Özdeğerlerini Hesaplamak
import numpy as npimport matplotlib.pyplot as pltfrom scipy.linalg import eigvalsfrom scipy.stats import linregress# 1. Rastgele bir matris oluşturnp.random.seed(25)A = np.random.randn(100, 100) # 100x100 rastgele matris# 2. Özdeğerleri hesaplaeigenvalues = np.abs(eigvals(A)) # Negatif ve karmaşık sayıları sorun yaratmaması için mutlak değer al# 3. Özdeğer histogramını çizplt.figure(figsize=(6,4))plt.hist(eigenvalues, bins=30, density=True, alpha=0.7, color='blue')plt.xlabel("Özdeğer Büyüklüğü (|λ|)")plt.ylabel("Yoğunluk")plt.title("Özdeğer Dağılımı Histogramı")plt.grid()plt.show()
Kompleks bir sistemde büyük ve küçük ölçekli değişkenler arasındaki ilişki formundadır (Güç yasası dağılımı). Ancak, bu dağılım lineer olmayan bir yapı gösterdiği için doğrudan analiz edilmesi zordur. Logaritmik dönüşüm uygulayarak, güç yasasını doğrusal bir eğim olarak görebilir ve regresyon analizi ile değerini tahmin edebiliriz.
Güç yasası dağılımları şu şekilde modellenir:
Bu ifadeyi logaritmaya alırsak:
Bu, formunda doğrusal bir denklem haline gelir.
Bu yüzden, güç yasasının eğimini () bulmak için log-log dönüşümü gereklidir.
Eğer lineer ölçek kullansaydık, büyük özdeğerler küçükleri baskılar ve dağılımı düzgün göremeyebilirdik. Log-log dönüşümü sayesinde büyük ve küçük değerler daha iyi temsil edilir, böylece dağılımı daha adil bir şekilde inceleyebiliriz.
Aşağıdaki kod, log-log ölçekli histogramı oluşturur ve güç yasası parametresi 'yı regresyon ile tahmin eder:
# 1. Histogram için log-log ölçeğe uygun binler oluşturhist, bin_edges = np.histogram(eigenvalues, bins=np.logspace(np.log10(min(eigenvalues)), np.log10(max(eigenvalues)), 30), density=True)# 2. Log-log dönüşümü uygulalog_bin_centers = (bin_edges[:-1] + bin_edges[1:]) / 2log_x = np.log10(log_bin_centers)log_y = np.log10(hist)# 3. Lineer regresyon ile güç yasası eğimini bulvalid = ~np.isnan(log_y) & ~np.isinf(log_y) # Geçerli noktaları filtreleslope, intercept, _, _, _ = linregress(log_x[valid], log_y[valid])alpha = -slope # Güç yasası α değeri# 4. Log-log histogramı çiz ve regresyon doğrusunu ekleplt.figure(figsize=(6,4))plt.scatter(log_x, log_y, label="Özdeğer Dağılımı", color='blue', s=10)plt.plot(log_x, slope * log_x + intercept, label=f"Regresyon (α={alpha:.2f})", color='red')plt.xlabel("log(λ)")plt.ylabel("log(P(λ))")plt.title("Log-Log Dönüşümlü Özdeğer Dağılımı ve Güç Yasası")plt.legend()plt.grid()plt.show()print(f"Hesaplanan α değeri: {alpha:.2f}")
Aşağıdaki Python kodu, güç yasası dağılımlarını hem log-log ölçeğinde hem de lineer ölçekle çizdirmektedir:
import numpy as npimport matplotlib.pyplot as plt# Define power law functiondef power_law(x, alpha):return x ** -alpha# Generate x valuesx = np.linspace(1, 10, 10) # Lineer ölçek için x değerlerix_log = np.logspace(0.1, 2, 100) # Log-log ölçek için x değerleri# Define alpha valuesalphas = [2, 3, 4, 5, 6]# Create subplotsfig, axes = plt.subplots(1, 2, figsize=(12, 5))# Linear scale plotfor alpha in alphas:y = power_law(x, alpha)axes[0].plot(x, y, label=f'α = {alpha}')axes[0].set_xlabel('x (linear scale)')axes[0].set_ylabel('P(x) (linear scale)')axes[0].set_title('Power Law - Linear Scale')axes[0].legend()axes[0].grid(True)# Log-log scale plotfor alpha in alphas:y_log = power_law(x_log, alpha)axes[1].plot(x_log, y_log, label=f'α = {alpha}')axes[1].set_xscale('log')axes[1].set_yscale('log')axes[1].set_xlabel('x (log scale)')axes[1].set_ylabel('P(x) (log scale)')axes[1].set_title('Power Law - Log-Log Scale')axes[1].legend()axes[1].grid(True, which="both", linestyle="--", linewidth=0.5)plt.tight_layout()plt.show()
Bu kod, farklı değerleri için lineer ve log-dönüşüm kullanılarak elde edilen verileri görselleştirmektedir. Log dönüşümü ile küçük ve büyük değerler daha dengeli bir şekilde gösterilmektedir. Bu bağlamda, değerlerini şu şekilde yorumlayabiliriz:
:
- Bu durumda güç yasası yavaşça azalır, yani küçük değerleri için çok yüksek olabilir. Bu tür düşük değerleri genellikle nadiren görülür, ancak log-log dönüşümü ile bu küçük değerleri daha dengeli bir şekilde gösterilebilir. Bu, uç değerlerin etkisini dengeleyerek daha anlamlı bir analiz sağlar.
:
- Bu aralık, güç yasasının tipik bir şekilde azaldığı bölgedir. Burada , arttıkça düzenli bir şekilde azalır ve log-log grafik üzerinde doğrusal bir ilişki gözlemlenir. Bu tür değerleri, çoğu sistemde yaygın olarak görülen güç yasasına uygun davranışlar sergiler.
:
- Bu durumda güç yasası çok hızlı bir şekilde azalır, yani büyük değerleri çok hızlı bir şekilde sıfıra yaklaşır. Bu tür yüksek değerleri, genellikle uç değerlerin (outliers) baskın olduğu durumlarla ilişkilidir. Log-log dönüşüm, bu hızlı azalmayı daha belirgin bir şekilde gösterir ve büyük değerlerinde önemli farklar ortaya çıkar.
Hiç yorum yok:
Yorum Gönder