Decomposisi Singular Value (Singular Value Decomposition atau SVD) adalah sebuah metode dalam aljabar linear yang memecah matriks menjadi tiga komponen utama: matriks singular, vektor singular kiri, dan vektor singular kanan. SVD memiliki kegunaan yang luas dalam berbagai bidang seperti pengolahan citra, analisis data, pengenalan pola, dan kompresi data. Dalam SVD, matriks asli dipecah menjadi produk dari tiga matriks: matriks singular, matriks vektor singular kiri, dan matriks vektor singular kanan. Matriks singular berisi nilai-nilai singular yang menggambarkan pentingnya setiap vektor singular dalam matriks asli. Matriks vektor singular kiri berisi vektor-vektor singular yang membentuk sumbu-sumbu utama atau kontribusi utama dari matriks asli. Matriks vektor singular kanan berisi vektor-vektor singular yang mempengaruhi atau dipengaruhi oleh matriks asli. SVD sangat berguna dalam pemampatan data karena memungkinkan kita untuk mengidentifikasi pola dan struktur penting dalam matriks asli, serta menghilangkan informasi yang kurang penting. Dengan demikian, SVD memberikan representasi yang lebih efisien dan ringkas untuk matriks asli, yang dapat digunakan untuk berbagai tujuan analisis dan manipulasi data.

library(MASS)

a <- matrix(c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1), 9, 4)

a.svd <- svd(a)
a.svd$d
## [1] 3.464102e+00 1.732051e+00 1.732051e+00 1.922963e-16

SVD adalah salah satu teknik paling penting dalam aljabar linear dan memiliki aplikasi luas dalam berbagai bidang. Tujuan utama SVD adalah untuk memecah matriks asli menjadi tiga komponen utama yang saling berinteraksi: matriks singular, vektor singular kiri, dan vektor singular kanan.

ds <- diag(1/a.svd$d[1:3])
u <- a.svd$u
v <- a.svd$v
us <- as.matrix(u[, 1:3])
vs <- as.matrix(v[, 1:3])

(a.ginv <- vs %*% ds %*% t(us))
##             [,1]        [,2]        [,3]        [,4]        [,5]        [,6]
## [1,]  0.08333333  0.08333333  0.08333333  0.08333333  0.08333333  0.08333333
## [2,]  0.25000000  0.25000000  0.25000000 -0.08333333 -0.08333333 -0.08333333
## [3,] -0.08333333 -0.08333333 -0.08333333  0.25000000  0.25000000  0.25000000
## [4,] -0.08333333 -0.08333333 -0.08333333 -0.08333333 -0.08333333 -0.08333333
##             [,7]        [,8]        [,9]
## [1,]  0.08333333  0.08333333  0.08333333
## [2,] -0.08333333 -0.08333333 -0.08333333
## [3,] -0.08333333 -0.08333333 -0.08333333
## [4,]  0.25000000  0.25000000  0.25000000

SVD memungkinkan kita untuk mengidentifikasi pola-pola penting dan struktur yang terkandung dalam matriks asli. Dalam konteks pemampatan data, kita dapat menggunakan SVD untuk menghilangkan informasi yang kurang penting dan mempertahankan informasi yang paling signifikan. Dengan mempertahankan sejumlah singular values dan vektor-vektor singular yang paling penting, kita dapat menggambarkan kembali matriks asli dengan representasi yang lebih efisien dan ringkas.

Selain itu, SVD juga digunakan dalam berbagai tugas analisis data seperti reduksi dimensi, pemrosesan citra, pengenalan pola, rekomendasi sistem, dan banyak lagi. Dalam pemrosesan citra, misalnya, SVD dapat digunakan untuk mengompresi gambar dengan menyimpan hanya singular values terbesar dan menghasilkan gambar yang terkompresi dengan tingkat kehilangan informasi yang dapat dikontrol.

ginv(a)
##             [,1]        [,2]        [,3]        [,4]        [,5]        [,6]
## [1,]  0.08333333  0.08333333  0.08333333  0.08333333  0.08333333  0.08333333
## [2,]  0.25000000  0.25000000  0.25000000 -0.08333333 -0.08333333 -0.08333333
## [3,] -0.08333333 -0.08333333 -0.08333333  0.25000000  0.25000000  0.25000000
## [4,] -0.08333333 -0.08333333 -0.08333333 -0.08333333 -0.08333333 -0.08333333
##             [,7]        [,8]        [,9]
## [1,]  0.08333333  0.08333333  0.08333333
## [2,] -0.08333333 -0.08333333 -0.08333333
## [3,] -0.08333333 -0.08333333 -0.08333333
## [4,]  0.25000000  0.25000000  0.25000000

Secara keseluruhan, SVD memberikan kerangka kerja yang kuat untuk menganalisis, memahami, dan memanipulasi matriks dalam berbagai aplikasi. Dengan memecah matriks menjadi komponen-komponen yang saling terkait, SVD memungkinkan kita untuk mendapatkan wawasan yang lebih baik tentang data dan memanfaatkannya dengan lebih efektif.