Lewati ke konten utama

Decomposition Nilai Singular (SVD): Hal yang Perlu Anda Ketahui

Decomposition Nilai Singular (SVD) adalah metode faktorisasi matriks yang memecah matriks apa pun menjadi tiga komponen yang lebih sederhana, mengungkap struktur dasarnya.
Diperbarui 22 Mei 2026  · 12 mnt baca

Jelajahi dengan AI

Buka di ChatGPTBuka di ClaudeBuka di Perplexity

Pernahkah Anda mencoba mengekstrak pola berguna dari sebuah dataset dengan ribuan fitur?

Anda tahu bahwa dataset berukuran besar pasti menyimpan struktur yang berguna. Masalahnya, dataset mentah membawa banyak noise, redundansi, nilai hilang, dan jauh lebih banyak dimensi daripada yang sebenarnya Anda butuhkan. Kebanyakan algoritma machine learning akan kesulitan memahami data seperti ini, atau paling tidak memperlambat waktu pelatihan.

Decomposition Nilai Singular (SVD) memecah matriks apa pun (dalam hal ini, dataset) menjadi tiga matriks yang lebih sederhana yang menampilkan struktur intinya. Inilah matematika di balik sistem rekomendasi, kompresi gambar, dan teknik reduksi dimensi seperti PCA — dan setelah Anda memahaminya, Anda akan melihatnya di mana-mana dalam pekerjaan harian Anda.

Dalam artikel ini, saya akan membahas apa itu SVD, cara kerjanya, di mana ia digunakan dalam data science, dan kapan Anda sebaiknya memilih alternatif lain.

Apakah Anda merasa konsep seperti vektor dan determinan membingungkan? Baca Mengupas Tuntas Konsep Matematika untuk Deep Learning sebelum melanjutkan yang ini.

Apa Itu Decomposition Nilai Singular (SVD)?

SVD adalah metode yang memecah matriks apa pun menjadi tiga matriks yang lebih sederhana.

Bayangkan begini. Anda memiliki sebuah matriks A — bisa berupa dataset atau gambar. SVD membagi A menjadi tiga bagian:

Rumus SVD

Rumus SVD

  • U adalah matriks ortogonal m x m. Kolom-kolomnya disebut vektor singular kiri, dan menjelaskan hubungan antarbaris pada A

  • \Sigma adalah matriks diagonal m x n. Nilai pada diagonalnya adalah nilai singular — selalu non-negatif dan diurutkan dari terbesar ke terkecil

  • V* adalah transpose konjugat dari matriks ortogonal n x n. Baris-barisnya disebut vektor singular kanan, dan menjelaskan hubungan antarkolom pada A

Setiap bagian menunjukkan hal yang berbeda tentang data asli. U memuat pola tingkat baris (bagaimana baris saling terkait), \Sigma memuat bobot kepentingan (seberapa besar tiap pola berpengaruh), dan V* memuat pola tingkat kolom (bagaimana kolom saling terkait).

Analogi sederhananya begini. Bayangkan Anda menjelaskan sebuah resep kepada seseorang. Anda bisa memecahnya menjadi tiga bagian: bahan (apa saja isinya), takaran (seberapa banyak masing-masing), dan langkah (bagaimana cara menggabungkannya). Tidak satu pun dari bagian ini sendiri dapat merekonstruksi hidangannya, tetapi bersama-sama memberikan semua yang perlu diketahui. SVD melakukan hal yang sama pada matriks — ia memisahkan “apa,” “seberapa banyak,” dan “bagaimana” ke dalam komponen terpisah yang bisa Anda olah secara mandiri.

Keunggulan SVD dalam aljabar linear adalah ia bekerja pada matriks apa pun. Tidak perlu berbentuk bujur sangkar, juga tidak butuh properti khusus. Matriks m x n apa pun bisa didekomposisi dengan cara ini, itulah sebabnya ia muncul di begitu banyak tempat dalam data science.

Cara Kerja SVD dalam Praktik

Mari kita lihat lebih dekat cara kerja SVD, mulai dari awal.

Menjelaskan dekomposisi matriks

Misalkan Anda memiliki matriks 3×2 A:

Dekomposisi matriks

Dekomposisi matriks

SVD mendekomposisi ini menjadi U (3×3), \Sigma (3×2), dan V* (2×2). Kolom-kolom U berasal dari eigenvector A x A^T, dan kolom-kolom V berasal dari eigenvector A^T x A. Nilai singular dalam \Sigma adalah akar kuadrat dari eigenvalue dari salah satu hasil perkalian tersebut.

Kabar baiknya, Anda tidak perlu menghitungnya secara manual. Di Python, Anda hanya butuh satu baris kode:

import numpy as np

A = np.array([[1, 2], [3, 4], [5, 6]])
U, sigma, Vt = np.linalg.svd(A, full_matrices=True)

Keluaran Numpy

Keluaran Numpy

Ketiga matriks saling berinteraksi melalui perkalian. U memutar data pada ruang baris, \Sigma menskalakan sepanjang tiap sumbu, dan V* memutarnya pada ruang kolom. Hasilnya adalah matriks asli A.

Peran nilai singular

Nilai diagonal dalam \Sigma menunjukkan seberapa besar kontribusi tiap komponen terhadap keseluruhan matriks.

Nilai singular pertama selalu yang terbesar — ia menangkap pola paling dominan dalam data. Setiap nilai berikutnya menangkap lebih sedikit. Jika beberapa nilai singular pertama besar dan sisanya mendekati nol, artinya sebagian besar informasi dalam matriks terkonsentrasi hanya pada beberapa komponen.

Inilah yang membuat kompresi data menjadi mungkin.

Anda dapat mengabaikan nilai singular kecil (beserta kolom padanannya pada U dan baris dalam V*) tanpa kehilangan banyak informasi. Hasilnya adalah pendekatan berperingkat lebih rendah dari matriks asli yang lebih kecil dan lebih cepat diproses.

Jumlah nilai singular non-nol juga memberi tahu Anda rank matriks — jumlah baris atau kolom yang saling bebas linear. Jika matriks 100×50 hanya memiliki 10 nilai singular non-nol, berarti data hanya memiliki 10 dimensi independen. Empat puluh sisanya bersifat redundan.

Merekonstruksi matriks

Anda dapat membangun kembali matriks asli dengan mengalikan ketiga komponen tersebut:

Rekonstruksi matriks

Rekonstruksi matriks

Namun yang Anda inginkan sebenarnya adalah rekonstruksi parsial. Jadi, alih-alih menggunakan semua nilai singular, Anda hanya menyimpan k nilai teratas dan vektor yang terkait. Ini memberi Anda pendekatan berperingkat-k dari A:

Pendekatan matriks berperingkat-k

Pendekatan matriks berperingkat-k

Teorema Eckart-Young menjamin bahwa pendekatan berperingkat-k ini adalah matriks terdekat dengan peringkat k terhadap A asli (diukur dengan norma Frobenius). Dengan kata lain, jika Anda akan mengompresi sebuah matriks menjadi k dimensi, SVD memberi hasil terbaik yang mungkin.

Aplikasi SVD dalam Data Science

Setelah Anda mulai memperhatikan, SVD muncul di lebih banyak tempat daripada yang Anda kira.

Idenya selalu mengambil matriks besar, menyimpan bagian yang penting, dan membuang sisanya. Yang berubah adalah definisi “penting” sesuai dengan masalahnya.

Reduksi dimensi

Dataset berdimensi tinggi sulit dikelola dan diinterpretasikan. Semakin banyak fitur berarti waktu pelatihan lebih lama dan risiko overfitting lebih tinggi. SVD mencegah hal ini dengan mengurangi jumlah dimensi.

Secara garis besar caranya begini. Anda mendekomposisi matriks data, melihat nilai singular, dan hanya menyimpan k komponen teratas. Nilai singular kecil mewakili noise dan variasi minor, jadi menghapusnya hampir tidak memengaruhi kualitas data. Yang tersisa adalah representasi ringkas yang masih menyimpan sebagian besar struktur asli.

Inilah tepatnya cara kerja Principal Component Analysis (PCA). PCA memusatkan data lalu menjalankan SVD pada hasilnya. Komponen utama adalah vektor singular kanan, dan nilai singular memberi tahu berapa banyak varians yang dijelaskan setiap komponen.

Sistem rekomendasi

Perusahaan seperti Netflix dan Amazon memiliki matriks pengguna-item yang sangat besar dengan sebagian besar entri kosong. Seorang pengguna menilai beberapa film dari ribuan, sehingga matriksnya jarang (sparse). SVD hadir untuk mengisi kekosongan tersebut.

Idenya adalah mendekomposisi matriks rating menjadi preferensi pengguna dan karakteristik item. Matriks U merepresentasikan hal-hal yang diperhatikan setiap pengguna (genre, tempo, nuansa), dan V* merepresentasikan apa yang ditawarkan tiap item. Nilai singular dalam \Sigma menskalakan faktor-faktor ini berdasarkan kepentingannya. Saat Anda mengalikannya kembali, Anda mendapatkan rating prediksi untuk film yang belum dilihat pengguna.

Dalam praktiknya, SVD standar tidak bekerja langsung pada matriks jarang karena menganggap nilai hilang sebagai nol. Itulah mengapa sistem menggunakan variasi seperti truncated SVD atau metode faktorisasi matriks yang hanya beroperasi pada entri yang teramati.

Kompresi gambar

Gambar skala abu-abu hanyalah matriks nilai piksel. SVD dapat mengompresnya dengan hanya menyimpan nilai singular yang paling penting.

Misalkan Anda memiliki gambar 1000×1000. SVD penuh menghasilkan 1000 nilai singular. Namun jika Anda hanya menyimpan 50 teratas, Anda merekonstruksi gambar dengan hanya 50 komponen alih-alih 1000. Gambarnya akan terlihat sedikit buram, tetapi masih dikenali — dan kebutuhan penyimpanan turun dari 1.000.000 nilai menjadi sekitar 100.500 (50 kolom U + 50 nilai singular + 50 baris V*).

Semakin banyak nilai singular, kualitas gambar semakin baik tetapi kompresi berkurang. Semakin sedikit nilai, berkas semakin kecil namun kehilangan lebih banyak. Anda yang menentukan titik komprominya sesuai kebutuhan.

Pertimbangan Kinerja dan Keterbatasan

Semakin besar matriks Anda, semakin tinggi biaya komputasinya.

Biaya komputasi

SVD penuh pada matriks m x n memiliki kompleksitas waktu O(mn²) (dengan asumsi m >= n). Untuk matriks kecil, tidak masalah. Untuk matriks dengan jutaan baris dan ribuan kolom, biayanya mahal.

Memori adalah kendala lainnya. SVD penuh menghasilkan tiga matriks padat, dan menyimpan semuanya sekaligus bisa melampaui RAM yang tersedia.

Solusinya adalah menghindari komputasi SVD penuh saat tidak diperlukan. Truncated SVD hanya menghitung k nilai singular teratas dan vektornya, yang jauh lebih cepat. Di Python, scipy.sparse.linalg.svds dan sklearn.decomposition.TruncatedSVD melakukan ini. Randomized SVD melangkah lebih jauh dengan menggunakan pengambilan sampel acak untuk mengaproksimasi dekomposisi, dan bekerja baik ketika Anda hanya membutuhkan komponen dominan.

Stabilitas dan akurasi

SVD umumnya stabil secara numerik, tetapi dapat kesulitan dengan pola data tertentu.

Data yang sangat bising adalah salah satu contohnya. Jika rasio signal-to-noise rendah, nilai singular teratas tidak akan terpisah dari noise. Anda akan berakhir menyimpan noise dalam pendekatan Anda atau mengurangi sinyal saat melakukan truncation.

Matriks yang buruk kondisinya (ill-conditioned) juga bermasalah. Ketika rasio antara nilai singular terbesar dan terkecil sangat besar (condition number tinggi), kesalahan numerik kecil selama komputasi akan teramplifikasi. Ini dapat menghasilkan hasil yang tidak andal, terutama dengan batasan presisi floating-point.

Solusinya adalah memeriksa nilai singular sebelum melakukan truncation. Plot dan cari penurunan yang jelas antara sinyal dan noise. Jika penurunannya bertahap tanpa siku yang jelas, SVD mungkin bukan alat terbaik untuk dataset tersebut.

Alternatif untuk SVD

SVD bukan satu-satunya dekomposisi matriks, dan tidak selalu menjadi pilihan terbaik untuk setiap pekerjaan.

Setiap alternatif yang saya cantumkan di bawah ini menyelesaikan jenis masalah tertentu. Mereka bukan pengganti SVD karena bekerja di bawah asumsi dan batasan yang berbeda. Pilihan yang tepat, seperti biasa, bergantung pada tugas yang ingin Anda selesaikan.

Eigendecomposition

Eigendecomposition adalah yang paling terkait dengan SVD. Ia memecah matriks bujur sangkar menjadi eigenvalue dan eigenvector:

Rumus eigendecomposition

Rumus eigendecomposition

Di mana Q memuat eigenvector dan \Lambda adalah matriks diagonal eigenvalue.

Keterbatasannya adalah hanya bekerja pada matriks bujur sangkar. Jika matriks data Anda berukuran m x n dengan m != n, eigendecomposition tidak dapat langsung mengolahnya. SVD bekerja pada bentuk matriks apa pun, itulah sebabnya ia lebih umum digunakan.

Untuk matriks simetris bujur sangkar (seperti matriks kovarians), eigendecomposition dan SVD menghasilkan hasil yang sangat terkait. Nilai singular dari matriks simetris positif semidefinit adalah eigenvalue-nya. Jadi jika Anda bekerja dengan matriks kovarians dalam PCA, kedua metode memberi hasil yang sama. SVD hanyalah versi yang menggeneralisasi ke kasus tidak bujur sangkar.

Dekomposisi QR

Dekomposisi QR membagi matriks menjadi matriks ortogonal Q dan matriks segitiga atas R:

Rumus dekomposisi QR

Rumus dekomposisi QR

Ia lebih cepat daripada SVD untuk tugas tertentu, khususnya untuk menyelesaikan sistem persamaan linear dan masalah least squares.

Komprominya adalah informasi. QR tidak memberi nilai singular, sehingga tidak dapat memberi tahu Anda tentang rank matriks atau komponen mana yang paling berpengaruh. Jika Anda perlu menyelesaikan Ax = b dan tidak peduli dengan struktur dasarnya, QR adalah opsi yang baik. Namun jika Anda perlu memahami atau mengompresi data, SVD adalah pilihan yang lebih baik.

Non-negative Matrix Factorization (NMF)

NMF mendekomposisi matriks menjadi dua matriks dengan semua nilai non-negatif:

Rumus NMF

Rumus NMF

Kendala ini membuat NMF cocok untuk data yang secara inheren non-negatif (pikirkan intensitas piksel atau jumlah kata). Di sisi lain, SVD tidak memaksakan hal ini. Matriks hasil dekomposisinya dapat memiliki nilai negatif, yang terkadang menghasilkan komponen yang sulit diinterpretasikan.

NMF sangat populer dalam penambangan teks dan pemodelan topik. Setiap kolom W dapat merepresentasikan sebuah topik, dan setiap baris H menunjukkan seberapa banyak topik tersebut muncul dalam setiap dokumen. Kendala non-negatif berarti topik dibangun dari kombinasi aditif kata-kata, yang membuatnya lebih mudah dibaca dibanding komponen bercampur tanda pada SVD.

Kekurangannya, NMF tidak menjamin solusi unik, dan hasilnya bergantung pada inisialisasi. SVD selalu menghasilkan keluaran yang sama untuk masukan yang sama.

Randomized SVD

Jika matriks Anda terlalu besar untuk SVD penuh tetapi Anda masih menginginkan nilai singular, randomized SVD patut dipertimbangkan. Ia menggunakan proyeksi acak untuk mengaproksimasi k nilai singular dan vektor teratas tanpa menghitung dekomposisi penuh. Pustaka seperti scikit-learn (TruncatedSVD) dan fbpca dari Facebook menerapkan pendekatan ini, dan skalanya baik untuk matriks dengan jutaan baris.

Tabel di bawah merangkum kapan sebaiknya memilih tiap metode.

Alternatif untuk SVD

Alternatif untuk SVD

Pertimbangan Lain tentang SVD

Ada beberapa hal umum yang membingungkan banyak data scientist pemula.

Yang pertama adalah salah membaca nilai singular. Nilai singular besar berarti komponen tersebut menjelaskan banyak varians dalam data — bukan berarti komponen itu “penting” dalam arti spesifik domain. Misalnya, nilai singular dominan pada matriks rating pengguna mungkin menangkap fakta bahwa sebagian besar orang menilai film populer, bukan pola preferensi yang bermakna. Selalu interpretasikan nilai singular dalam konteks data Anda, bukan sekadar besarnya.

Yang kedua adalah menggunakan SVD padahal tidak perlu. Pada dataset kecil (beberapa ratus baris dan segelintir kolom), SVD hanya menambah kompleksitas yang tidak perlu. Metode sederhana seperti analisis korelasi atau seleksi fitur dasar sering kali menyelesaikan pekerjaan lebih cepat dan dengan lebih sedikit kode. SVD sangat baik saat Anda memiliki data berdimensi tinggi dengan struktur redundan — jika dataset Anda tidak sesuai deskripsi tersebut, gunakan metode yang lebih sederhana.

Kesimpulan

SVD memecah matriks apa pun menjadi tiga komponen yang menampilkan strukturnya. Nilai singular memberi tahu Anda bagian mana dari data yang paling penting, dan vektor singular kiri serta kanan menunjukkan pola baris dan kolom di baliknya.

Dekomposisi itu berada di balik banyak alat praktis yang Anda gunakan setiap hari. Sistem rekomendasi menggunakannya untuk memprediksi rating yang hilang. Kompresi gambar menggunakannya untuk mengecilkan ukuran berkas sambil menjaga kualitas visual. Matematikanya hampir identik, meski domainnya sangat berbeda.

Namun SVD tidak selalu merupakan alat yang tepat. Ia mahal pada matriks besar dan bisa mencampur sinyal dengan noise ketika nilai singular tidak terpisah dengan baik. Selain itu, terlalu berlebihan untuk dataset kecil. Alternatif seperti dekomposisi QR, eigendecomposition, dan NMF masing-masing lebih baik untuk kasus tertentu.

Kuncinya adalah mengetahui kapan Anda harus menggunakan SVD dan kapan sesuatu yang lebih sederhana akan bekerja lebih baik. Dan untuk mendapatkan pengetahuan itu, daftarlah ke Machine Learning Scientist in Python track kami dan persiapkan diri untuk kerja pada 2026.


Dario Radečić's photo
Author
Dario Radečić
LinkedIn
Senior Data Scientist yang berbasis di Kroasia. Penulis Tekno Teratas dengan lebih dari 700 artikel yang telah diterbitkan, menghasilkan lebih dari 10 juta tayangan. Penulis buku Machine Learning Automation with TPOT.

FAQ SVD

Apa itu Singular Value Decomposition (SVD)?

SVD adalah metode dekomposisi matriks yang memecah matriks apa pun menjadi tiga komponen: vektor singular kiri (U), nilai singular (Σ), dan vektor singular kanan (V*). Metode ini bekerja pada matriks apa pun terlepas dari bentuk atau ukurannya. SVD menampilkan struktur dasar data dengan memisahkannya menjadi pola-pola dan tingkat kepentingannya.

Mengapa SVD digunakan dalam data science dan machine learning?

SVD membantu mengurangi jumlah dimensi pada dataset berdimensi tinggi sambil mempertahankan pola yang paling penting. Inilah matematika di balik PCA dan sistem rekomendasi. Semua aplikasi ini bergantung pada ide yang sama: mempertahankan komponen dominan dan menghapus sisanya.

Apa perbedaan antara SVD dan eigendecomposition?

Eigendecomposition hanya bekerja pada matriks bujur sangkar, sedangkan SVD bekerja pada bentuk matriks apa pun. Untuk matriks bujur sangkar simetris seperti matriks kovarians, kedua metode menghasilkan hasil yang sangat terkait — nilai singular dari matriks positif semidefinit adalah eigenvalue-nya. SVD adalah alat yang lebih umum, itulah sebabnya menjadi default dalam sebagian besar alur kerja data science.

Bagaimana hubungan nilai singular dengan kompresi data?

Nilai singular diurutkan dari yang terbesar ke yang terkecil, dan masing-masing mewakili seberapa banyak varians yang dijelaskan oleh suatu komponen. Menghapus nilai singular kecil (dan vektor padanannya) menghapus pola minor dan noise sambil mempertahankan struktur dominan. Anda menukar sedikit kehilangan akurasi dengan pengurangan ukuran yang besar.

Kapan saya harus menghindari penggunaan SVD?

SVD mahal pada matriks besar, dengan kompleksitas waktu O(mn^2) untuk dekomposisi penuh. Untuk dataset kecil dengan beberapa fitur, metode yang lebih sederhana seperti analisis korelasi atau seleksi fitur dasar akan menyelesaikan pekerjaan lebih cepat. Jika matriks Anda sangat besar dan Anda hanya membutuhkan komponen teratas, truncated atau randomized SVD lebih cocok daripada SVD penuh.

Topik

Belajar bersama DataCamp

Kursus

Klasifikator Linear di Python

4 Hr
66.7K
Dalam kursus ini, Anda akan mempelajari detail tentang klasifikasi linier seperti regresi logistik dan SVM.
Lihat DetailRight Arrow
Mulai Kursus
Lihat Lebih BanyakRight Arrow