Pertama-tama, Anda harus menentukan apakah Anda ingin semua komponen atau yang paling signifikan?
Nyatakan matriks Anda dengan menjadi jumlah sampel dan dimensi N MA ∈ RN× MNM.
Jika Anda ingin semua komponen cara klasik untuk pergi adalah menghitung matriks kovarians (yang memiliki kompleksitas waktu ) dan kemudian menerapkan SVD untuk itu (tambahan ). Dalam hal memori, ini akan membutuhkan (matriks kovarian + vektor tunggal dan nilai-nilai yang membentuk basis ortogonal) atau GB dalam presisi ganda untuk . O ( N M 2 ) O ( M 3 ) O ( 2 M 2 ) ≈ 1.5 AC∈ RM.× MO ( NM.2)O ( M3)O ( 2 M2)≈ 1.5SEBUAH
Anda bisa menerapkan SVD langsung ke matriks jika Anda menormalkan setiap dimensi sebelum itu dan mengambil vektor singular kiri. Namun, praktis saya akan mengharapkan SVD dari matriks lebih lama.ASEBUAHSEBUAH
Jika Anda hanya membutuhkan sebagian kecil komponen (mungkin paling signifikan), Anda mungkin ingin menerapkan PCA iteratif . Sejauh yang saya tahu semua algoritma ini terkait erat dengan proses Lanczos sehingga Anda bergantung pada spektrum dan secara praktis akan sulit untuk mencapai akurasi SVD untuk vektor yang diperoleh dan akan menurun dengan jumlah vektor tunggal.C