Bölüm 3 · Klasik algoritmalar · Ders 20
Temel bileşen analizi (PCA)
İki IMU ölçümünü, bilgiyi kaybetmeden tek sayıya indirmek
Veri. Rampa çıkan robotun IMU’su 200 kez ileri ve yan ivmeyi ölçtü. Robot rampaya çapraz durduğu için iki sayı birlikte artıp azalıyor: aslında tek bir şeyi, rampanın eğimini anlatıyorlar.
import numpy as npA = np.genfromtxt('imu.csv', delimiter=',', skip_header=1) # 200 ölçüm: [ax, ay], m/s²Z = A - A.mean(0) # ortalaS = Z.T @ Z / len(Z) # kovaryans matrisivals, vecs = np.linalg.eigh(S) # özdeğerler, özvektörlerpc = vecs[:, vals.argmax()] # en çok değişen yönz = Z @ pc # her ölçüm artık tek sayıprint(vals.max() / vals.sum()) # korunan varyans oranıtot = (Z ** 2).sum(1).mean() # toplam varyanshistory = {'angle': [], 'variance': [], 'recon_error': []} # açı taramasıfor deg in range(0, 181, 5):u = np.array([np.cos(np.radians(deg)), np.sin(np.radians(deg))])v = ((Z @ u) ** 2).mean() # bu eksendeki varyansfor k, x in zip(history, (deg, v, tot - v)): history[k].append(float(x))for k, v in [('lambda1', vals.max()), ('lambda2', vals.min()), # son ölçümler('kept', vals.max() / vals.sum()), ('recon_mse', vals.min())]:print(f'{k:<10}{v:>8.4f}')import csvwith open('egitim_gecmisi.csv', 'w', newline='') as f: # satır başına bir açıcsv.writer(f).writerows([list(history), *zip(*history.values())])try:import matplotlib.pyplot as plt # varsa grafik çizfor k in ('variance', 'recon_error'): plt.plot(history['angle'], history[k], label=k)plt.xlabel('angle (deg)'); plt.legend(); plt.show()except ImportError:print('matplotlib yok: grafik atlandı')
Eğitim paneli
Eğitim çalıştırılıyor…
Sahnedeki her sayı, aynı algoritmanın tarayıcında yapılan gerçek çalıştırmasından gelir (sabit tohum, her seferinde aynı sonuç). Python kodunu kendi bilgisayarında çalıştırırsan rastgele başlangıçlar farklı olacağı için sayılar biraz değişebilir.
Veri seti
Tüm veri setleri →- IMU ivme ölçümleriVeri setini indir
- Çiçek ölçüleri (iris benzeri)alıştırmaVeri setini indir
Kodu tarayıcıda çalıştırPython · NumPy · matplotlib · Pyodide
Python ve NumPy bu sayfada, tarayıcında çalışır (Pyodide). Kodu değiştirip yeniden çalıştırabilirsin; dersin veri setleri çalışma klasöründe hazır. Kod matplotlib kullanırsa grafikler çıktının altında görünür, yazdığı dosyalar (ör. egitim_gecmisi.csv) indirilebilir.
Çıktı
Çıktı burada görünecek.Nasıl çalışır
- Önce veri ortalanır: her ölçümden ortalama çıkarılır.
- Kovaryans matrisi, iki sayının birlikte nasıl değiştiğini özetler.
- En büyük özdeğerin özvektörü, veriyi o yöne izdüşürünce varyansın en büyük olduğu yöndür. Sahnede eksen döndükçe varyansın nasıl değiştiğini görürsün.
- Noktalar bu çizgiye izdüşürülür: iki sayı yerine bir sayı. Korunan varyans oranı ne kadar bilgi kaldığını söyler.
Neden önemli
Çok boyutlu sensör verisini sıkıştırmak, gürültüyü azaltmak ve görselleştirmek için ilk araçtır. Görüntü işlemede yüz tanımadan (özyüzler) nokta bulutlarında yüzey yönünü bulmaya kadar, robotikte her yerde karşına çıkar.
ESOF 323, 11. hafta: robotlarda derin öğrenme →