Gambaran Umum Nilai Eigen dan SVD
Hitung nilai eigen dan vektor eigen dengan np.linalg.eig, lalu pahami bagaimana SVD menjadi dasar reduksi dimensi PCA.
Gambaran Umum Nilai Eigen dan SVD adalah pelajaran Pandas & NumPy Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Pandas & NumPy Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.
Apa Itu Nilai Eigen dan Vektor Eigen?
Vektor eigen dari matriks persegi A adalah vektor tak nol v sedemikian rupa sehingga A @ v = lambda * v — perkalian dengan A hanya mengubah skala v, bukan arahnya. Skalar lambda disebut nilai eigen yang bersesuaian dengan v. Nilai eigen mengungkap 'faktor peregangan' intrinsik dari transformasi linear: nilai eigen sebesar 2 berarti matriks menggandakan panjang dalam arah vektor eigen; nilai eigen negatif membalik arah.
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)Menghitung Nilai Eigen dengan np.linalg.eig()
np.linalg.eig(A) mengembalikan tuple (eigenvalues, eigenvectors). Nilai eigen berupa larik 1-D; vektor eigen berupa larik 2-D, dengan setiap kolom merupakan sebuah vektor eigen. Untuk matriks simetris real (seperti matriks kovarians), nilai eigen selalu real dan vektor eigennya ortogonal — gunakan np.linalg.eigh(A) untuk matriks simetris karena lebih cepat dan dijamin mengembalikan hasil real.
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))Nilai Eigen dan Sifat Matriks
Nilai eigen menyimpan informasi tentang sifat-sifat penting matriks. Determinan sama dengan hasil kali semua nilai eigen: det(A) = product(eigenvalues). Jejak (jumlah elemen diagonal) sama dengan jumlah nilai eigen: trace(A) = sum(eigenvalues). Matriks bersifat definit positif (semua nilai eigen > 0) hanya jika semua nilai eigennya positif — sifat penting untuk matriks kovarians yang valid dan masalah optimisasi konveks.
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))Ikhtisar Dekomposisi Nilai Singular (SVD)
Dekomposisi Nilai Singular (SVD) menguraikan matriks apa pun A (bukan hanya matriks persegi) menjadi A = U @ S @ V.T, dengan U dan V sebagai matriks ortogonal dan S sebagai matriks diagonal yang memiliki nilai singular non-negatif pada diagonalnya. SVD adalah faktorisasi matriks yang paling umum dan stabil secara numerik. SVD menjadi dasar PCA, kompresi gambar, sistem rekomendasi, dan perhitungan pseudoinvers. np.linalg.svd(A) mengembalikan U, s (nilai singular 1-D), dan Vh (V yang ditransposisikan).
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))Nilai Singular dan Peringkat Matriks
Nilai singular (diagonal S) selalu non-negatif dan biasanya dicantumkan dalam urutan menurun. Banyaknya nilai singular yang tidak nol sama dengan peringkat matriks. Nilai singular yang mendekati nol menunjukkan ketergantungan linear yang hampir terjadi di antara baris atau kolom. Nilai singular terbesar memberikan norma spektral matriks, dan rasio antara nilai singular terbesar dan nilai singular terkecil yang tidak nol merupakan bilangan kondisi yang digunakan untuk mengukur kestabilan numerik.
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 dan PCA: Hubungannya
Analisis Komponen Utama (PCA) dapat diimplementasikan secara langsung melalui SVD. Setelah memusatkan matriks data X (dengan mengurangi rata-rata setiap kolom), vektor singular kanan dalam Vh merupakan komponen utama, dan kuadrat nilai singular (dibagi dengan n-1) merupakan varians yang dijelaskan. PCA dari Sklearn menggunakan pendekatan yang persis sama. Memahami hubungan ini memungkinkan Anda mengimplementasikan atau menyesuaikan PCA dari awal untuk reduksi dimensi.
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)Aproksimasi Peringkat Rendah dengan SVD
SVD memungkinkan aproksimasi matriks berperingkat rendah: pertahankan hanya k nilai singular dan vektor teratas, lalu rekonstruksi aproksimasi matriks asli. Ini menjadi dasar kompresi gambar dan pemfilteran kolaboratif untuk rekomendasi. SVD terpotong U[:, :k] @ np.diag(s[:k]) @ Vh[:k, :] memberikan aproksimasi peringkat-k terbaik dalam arti kuadrat terkecil (teorema Eckart-Young).
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')Dekomposisi Eigen vs SVD: Kapan Menggunakan Masing-Masing
Gunakan dekomposisi eigen (np.linalg.eig atau eigh) jika Anda memiliki matriks persegi simetris dan ingin memahami sumbu-sumbu utamanya — misalnya, matriks kovarians dalam PCA atau matriks transisi Markov. Gunakan SVD (np.linalg.svd) jika matriks Anda berbentuk persegi panjang atau jika Anda memerlukan kestabilan numerik maksimum. SVD selalu ada; dekomposisi eigen dapat menghasilkan bilangan kompleks untuk matriks nonsimetris.
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)Teorema Spektral untuk Matriks Simetris
Teorema spektral menyatakan bahwa setiap matriks simetris real A dapat diuraikan menjadi A = Q @ diag(eigenvalues) @ Q.T, dengan Q ortogonal (Q.T = Q⁻¹). Artinya, matriks simetris selalu dapat didiagonalkan dengan nilai eigen real dan vektor eigen ortogonal. Matriks kovarians, matriks kernel dalam SVM, dan matriks Hessian dalam optimisasi semuanya simetris, sehingga teorema ini sangat berguna dalam teori pembelajaran mesin.
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)))Praktik: Iterasi Pangkat untuk Nilai Eigen Dominan
Jika Anda hanya memerlukan nilai eigen terbesar dan vektor eigennya, iterasi pangkat jauh lebih efisien daripada menghitung semua nilai eigen. Mulailah dengan vektor acak, kalikan berulang kali dengan A dan lakukan normalisasi, maka proses tersebut akan konvergen ke vektor eigen dominan. Begitulah algoritme PageRank asli Google bekerja. NumPy menjadikan setiap iterasi sebagai satu perkalian matriks-vektor dengan @.
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))Menggunakan np.linalg.svd dalam Pipeline Data Nyata
Dalam pipeline data nyata, SVD digunakan untuk pengurangan derau dan kompresi data. Setelah menyesuaikan SVD pada data pelatihan, pertahankan hanya k komponen teratas yang mencakup 95% varians. Ini mengurangi dimensi data baru sebelum memasukkannya ke pengklasifikasi atau peregresi, sehingga mempercepat pelatihan dan sering meningkatkan kemampuan generalisasi dengan menghapus dimensi yang mengandung derau. Selalu sesuaikan SVD hanya pada data pelatihan dan terapkan transformasi yang sama pada data pengujian.
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)Pemeriksaan Singkat
Uji pemahaman Anda tentang konsep Analisis Data dari pelajaran ini.
Rangkuman Pelajaran
Dalam pelajaran ini Anda mempelajari bahwa: np.linalg.eig()/eigh() menghitung nilai eigen dan vektor eigen yang mengungkap arah peregangan intrinsik matriks, np.linalg.svd() menguraikan matriks apa pun menjadi U, nilai singular, dan Vh sehingga memungkinkan PCA dan aproksimasi peringkat rendah, serta nilai singular mengukur varians yang ditangkap setiap komponen dan menentukan peringkat matriks. Selanjutnya kita akan membahas penanganan kumpulan data besar dengan mengalirkan file CSV dalam beberapa bagian.
Belajar Python dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 30
- Pelajaran
- 120
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Gambaran Umum Nilai Eigen dan SVD” gratis?
Ya — teks lengkap “Gambaran Umum Nilai Eigen dan SVD” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Pandas & NumPy Academy, upgrade ke CoddyKit PRO. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Gambaran Umum Nilai Eigen dan SVD”?
Hitung nilai eigen dan vektor eigen dengan np.linalg.eig, lalu pahami bagaimana SVD menjadi dasar reduksi dimensi PCA. Kamu berlatih Pandas & NumPy Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Pandas & NumPy Academy?
Tidak diperlukan pengalaman sebelumnya. Pandas & NumPy Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Gambaran Umum Nilai Eigen dan SVD” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Pandas & NumPy Academy ini?
Ya. Setiap pelajaran Pandas & NumPy Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Perkalian Matriks dengan np.matmul dan @
- Determinan, Invers, dan Transpos
- Menyelesaikan Sistem Linear
- Gambaran Umum Nilai Eigen dan SVD