Kurs
Hiç binlerce özelliğe sahip bir veri kümesinden faydalı kalıplar çıkarmaya çalıştınız mı?
Büyük bir veri kümesinin içinde faydalı bir yapı olduğundan eminsinizdir. Sorun şu ki, ham veri kümeleri çokça gürültü, fazlalık, eksik değer ve aslında ihtiyaç duyduğunuzdan çok daha fazla boyut içerir. Çoğu makine öğrenmesi algoritması bu tür verileri anlamakta başarısız olur ya da en iyi ihtimalle eğitim süresini yavaşlatır.
Tekil Değer Ayrışımı (SVD), herhangi bir matrisi (bu durumda veri kümesi) temel yapısını gösteren üç daha basit matrise ayırır. Tavsiye sistemlerinin, görüntü sıkıştırmanın ve PCA gibi boyut indirgeme tekniklerinin arkasındaki matematik budur - ve bunu anladığınızda, günlük işinizde her yerde karşınıza çıktığını göreceksiniz.
Bu yazıda size SVD'nin ne olduğunu, nasıl çalıştığını, veri biliminde nerelerde kullanıldığını ve ne zaman alternatiflere yönelmeniz gerektiğini anlatacağım.
Vektörler ve determinantlar gibi kavramlar gözünüzü mü korkutuyor? Devam etmeden önce Derin Öğrenme için Matematiksel Kavramların Gizemini Giderme yazımızı okuyun.
Tekil Değer Ayrışımı (SVD) Nedir?
SVD, herhangi bir matrisi üç daha basit matrise ayıran bir yöntemdir.
Şöyle düşünün. Elinizde bir A matrisi var - bu bir veri kümesi ya da görsel olabilir. SVD, A matrisini üç parçaya böler:

SVD formülü
-
U,m x mboyutunda ortonormal bir matristir. Sütunlarına sol tekil vektörler denir veA’nın satırları arasındaki ilişkileri açıklar -
\Sigma,m x nboyutunda köşegen bir matristir. Köşegen üzerindeki değerler tekil değerlerdir - her zaman negatif olmayan ve büyükten küçüğe sıralanmış hâlde -
V*,n x nboyutunda ortonormal bir matrisin eşlenik transpozudur. Satırlarına sağ tekil vektörler denir ve A’nın sütunları arasındaki ilişkileri açıklar.
Her parça, orijinal veri hakkında farklı bir şey gösterir. U satır düzeyindeki kalıpları (satırların birbiriyle ilişkisi), \Sigma önem ağırlıklarını (her kalıbın ne kadar önemli olduğunu) ve V* sütun düzeyindeki kalıpları (sütunların birbiriyle ilişkisi) tutar.
Bir benzetme yapalım. Birine bir tarifi anlatıyorsunuz. Üç parçaya ayırabilirsiniz: malzemeler (neler var), oranlar (her birinden ne kadar), ve adımlar (nasıl birleştiriliyorlar). Bu parçaların hiçbiri tek başına yemeği yeniden oluşturmaz, ama birlikte ihtiyacınız olan her şeyi verir. SVD de matrislerde aynısını yapar - “ne”, “ne kadar” ve “nasıl” sorularını birbirinden bağımsız çalışılabilecek bileşenlere ayırır.
SVD’yi lineer cebirde öne çıkaran şey, herhangi bir matriste çalışabilmesidir. Kare olmasına gerek yoktur, özel özelliklere de ihtiyaç duymaz. Herhangi bir m x n matris bu şekilde ayrıştırılabilir; bu yüzden veri biliminde her yerde karşımıza çıkar.
SVD Pratikte Nasıl Çalışır
SVD’nin nasıl çalıştığına, en baştan başlayarak yakından bakalım.
Matris ayrıştırmasının açıklanması
Diyelim ki elinizde 3×2 boyutunda bir A matrisi var:

Matris ayrıştırması
SVD bunu U (3×3), \Sigma (3×2) ve V* (2×2) olarak ayrıştırır. U’nun sütunları A x A^T’nin özvektörlerinden, V’nin sütunları ise A^T x A’nin özvektörlerinden gelir. \Sigma’daki tekil değerler, her iki çarpımın da özdeğerlerinin karekökleridir.
Güzel haber şu ki, bunları elle hesaplamanız gerekmiyor. Python’da tek satır kod yeterli:
import numpy as np
A = np.array([[1, 2], [3, 4], [5, 6]])
U, sigma, Vt = np.linalg.svd(A, full_matrices=True)

Numpy çıktısı
Üç matris çarpım yoluyla etkileşir. U veriyi satır uzayında döndürür, \Sigma her eksen boyunca ölçekler ve V* veriyi sütun uzayında döndürür. Sonuç, orijinal A matrisidir.
Tekil değerlerin rolü
\Sigma’daki köşegen değerler, her bileşenin genel matrise ne kadar katkı yaptığını gösterir.
İlk tekil değer her zaman en büyüktür - verideki en baskın kalıbı yakalar. Sonrakiler daha azını yakalar. İlk birkaç tekil değer büyük, geri kalanlar sıfıra yakınsa, bilginin çoğu yalnızca birkaç bileşende yoğunlaşmış demektir.
İşte bu, veri sıkıştırmayı mümkün kılar.
Küçük tekil değerleri (ve U ’daki karşılık gelen sütunları ve V*’daki satırları) çok az bilgi kaybıyla hariç tutabilirsiniz. Ortaya çıkan şey, daha küçük ve üzerinde çalışması daha hızlı olan, orijinal matrisin daha düşük rütbeli bir yaklaşımıdır.
Sıfır olmayan tekil değerlerin sayısı aynı zamanda matrisin rütbesini — yani doğrusal olarak bağımsız satır veya sütun sayısını — verir. Eğer 100×50 boyutlu bir matrisin yalnızca 10 adet sıfır olmayan tekil değeri varsa, verinin yalnızca 10 bağımsız boyutu var demektir. Kalan 40 tanesi fazlalıktır.
Matrisi yeniden oluşturma
Orijinal matrisi üç bileşeni yeniden çarparak tekrar oluşturabilirsiniz:

Matrisin yeniden oluşturulması
Ama asıl istediğiniz kısmi yeniden oluşturmadır. Yani tüm tekil değerleri kullanmak yerine yalnızca en büyük k değeri ve bunların karşılık gelen vektörlerini tutarsınız. Bu size A’nın rütbe-k yaklaşımını verir:

Rütbe-k matris yaklaşımı
Eckart-Young teoremi, bu rütbe-k yaklaşımının orijinal A’ya (Frobenius normu ile ölçüldüğünde) rütbesi k olan mümkün olan en yakın matris olduğunu garanti eder. Başka bir deyişle, bir matrisi k boyuta indirecekseniz, SVD size mümkün olan en iyi sonucu verir.
Veri Biliminde SVD’nin Uygulamaları
Dikkatle bakmaya başladığınızda, SVD’nin beklediğinizden daha fazla yerde karşınıza çıktığını görürsünüz.
Fikir, her zaman büyük bir matrisi almak, önemli kısımları tutmak ve geri kalanını kaldırmaktır. Değişen şey, probleme bağlı olarak “önemli”nin ne anlama geldiğidir.
Boyut indirgeme
Yüksek boyutlu veri kümeleriyle çalışmak ve bunları yorumlamak zordur. Daha fazla özellik, daha uzun eğitim süreleri ve aşırı uyum riskinin artması demektir. SVD, boyut sayısını azaltarak bunu önler.
Genel olarak şöyle işler: Veri matrisinizi ayrıştırır, tekil değerlere bakar ve yalnızca en büyük k bileşeni tutarsınız. Küçük tekil değerler gürültü ve küçük varyasyonları temsil eder; bu yüzden onları çıkarmak veri kalitesini pek etkilemez. Geriye, orijinal yapının çoğunu koruyan kompakt bir gösterim kalır.
Bu, Temel Bileşen Analizi (PCA)’nin tam olarak yaptığı şeydir. PCA veriyi merkezler ve ardından sonuç üzerinde SVD çalıştırır. Temel bileşenler sağ tekil vektörlerdir ve tekil değerler her bileşenin ne kadar varyans açıkladığını gösterir.
Tavsiye sistemleri
Netflix ve Amazon gibi şirketlerin çoğu girdisi boş olan devasa kullanıcı-öğe matrisleri vardır. Bir kullanıcı binlerce filmden sadece birkaçına puan verir; dolayısıyla matris seyrektir. SVD, boşlukları doldurmak için burada devreye girer.
Fikir, puanlama matrisini kullanıcı tercihleri ve öğe özelliklerine ayırmaktır. U matrisi her kullanıcının neye önem verdiğini (tür, tempo, ton) temsil eder, V* ise her öğenin ne sunduğunu. \Sigma’daki tekil değerler bu faktörleri önemine göre ölçekler. Bunları yeniden çarptığınızda, bir kullanıcının henüz izlemediği filmler için tahmini puanlar elde edersiniz.
Pratikte, standart SVD seyrek matrislerde doğrudan çalışmaz çünkü eksik değerleri sıfır kabul eder. Bu nedenle sistemler, yalnızca gözlemlenen girdiler üzerinde çalışan trunked SVD veya matris çarpanlarına ayırma gibi varyasyonları kullanır.
Görüntü sıkıştırma
Gri tonlamalı bir görüntü, piksel değerlerinden oluşan bir matristir. SVD, yalnızca en önemli tekil değerleri tutarak bunu sıkıştırabilir.
Diyelim ki 1000×1000 boyutunda bir görüntünüz var. Tam SVD size 1000 tekil değer verir. Ancak yalnızca en büyük 50 tanesini tutarsanız, görüntüyü 1000 yerine sadece 50 bileşenle yeniden oluşturursunuz. Görüntü biraz bulanık görünür ama tanınabilir olur — ve depolama gereksinimi 1.000.000 değerden yaklaşık 100.500’e düşer (U’nun 50 sütunu + 50 tekil değer + V*’nın 50 satırı).
Daha fazla tekil değer daha iyi görüntü kalitesi ama daha az sıkıştırma demektir. Daha az değer ise daha küçük dosyalar ama daha fazla kayıp demektir. Bu dengeyi kullanım durumunuza göre siz belirlersiniz.
Performans Hususları ve Sınırlamalar
Matrisiniz büyüdükçe, karşılaşacağınız hesaplama maliyeti artar.
Hesaplama maliyeti
Bir m x n matris üzerinde tam SVD’nin zaman karmaşıklığı O(mn²)’dir (m >= n varsayımıyla). Küçük matrisler için sorun yoktur. Milyonlarca satır ve binlerce sütunu olan bir matris için ise maliyet yüksektir.
Bellek bir diğer darboğazdır. Tam SVD üç yoğun matris üretir ve bunların hepsini aynı anda depolamak mevcut RAM’inizi aşabilir.
Çözüm, ihtiyaç duymadığınızda tam SVD’yi hesaplamaktan kaçınmaktır. Trunked SVD yalnızca en büyük k tekil değeri ve vektörlerini hesaplar; bu çok daha hızlıdır. Python’da scipy.sparse.linalg.svds ve sklearn.decomposition.TruncatedSVD bunu yapar. Rastgeleleştirilmiş SVD ise ayrıştırmayı yaklaşık olarak elde etmek için rastgele örnekleme kullanır ve yalnızca baskın bileşenlere ihtiyacınız olduğunda iyi çalışır.
Kararlılık ve doğruluk
SVD çoğu durumda sayısal olarak kararlıdır, ancak bazı veri kalıplarında zorlanabilir.
Aşırı gürültülü veriler buna bir örnektir. Sinyal-gürültü oranı düşükse, en büyük tekil değerler gürültüden ayrılamaz. Yaklaşımınızda gürültüyü korur ya da kırpma yaparken sinyali azaltırsınız.
Kötü koşullandırılmış matrisler bir diğer sorundur. En büyük ve en küçük tekil değerler arasındaki oran çok büyük olduğunda (yüksek koşul sayısı), hesaplama sırasında oluşan küçük sayısal hatalar büyütülür. Bu da özellikle kayan nokta hassasiyet sınırlarında güvenilmez sonuçlar üretebilir.
Çözüm, kırpmadan önce tekil değerlerinizi incelemektir. Onları çizip sinyal ile gürültü arasında net bir düşüş olup olmadığına bakın. Eğer azalma kademeliyse ve belirgin bir dirsek yoksa, SVD o veri kümesi için en iyi araç olmayabilir.
SVD’ye Alternatifler
SVD, mevcut tek matris ayrıştırması değildir ve her iş için her zaman en iyi seçenek de değildir.
Aşağıda listeleyeceğim her alternatif belirli bir tür problemi çözer. Farklı varsayım ve kısıtlar altında çalıştıkları için SVD’nin yerini tutan yöntemler değildir. Doğru seçim, her zamanki gibi, yapmaya çalıştığınız göreve bağlıdır.
Öz ayrışımı (Eigendecomposition)
Öz ayrışımı SVD’ye en yakın olanıdır. Kare bir matrisi özdeğerler ve özvektörlere ayırır:

Öz ayrışımı formülü
Burada Q özvektörleri tutar, \Lambda ise özdeğerlerden oluşan köşegen bir matristir.
Kısıt, yalnızca kare matrislerde çalışmasıdır. Veri matrisiniz m x n ve m != n ise, öz ayrışımı bunu doğrudan işleyemez. SVD her matris şeklinde çalışır; bu yüzden daha genel bir araçtır.
Kare, simetrik matrisler (kovaryans matrisleri gibi) için öz ayrışımı ve SVD yakından ilişkili sonuçlar üretir. Pozitif yarı belirli bir matrisin tekil değerleri özdeğerleridir. Dolayısıyla PCA’de kovaryans matrisleriyle çalışıyorsanız, her iki yöntem de aynı sonuçları verir. SVD yalnızca kare olmayan durumlara genelleşen versiyondur.
QR ayrışımı
QR ayrışımı, bir matrisi ortonormal bir Q matrisi ve üst üçgensel bir R matrisi olarak böler:

QR ayrışımı formülü
Özellikle doğrusal denklem sistemlerini ve en küçük kareler problemlerini çözmek için belirli görevlerde SVD’den daha hızlıdır.
Verdiği bilgi ise daha sınırlıdır. QR size tekil değerleri vermez; bu nedenle matrisinizin rütbesi ya da hangi bileşenlerin daha ağır bastığı hakkında bilgi sağlayamaz. Eğer Ax = b çözmeniz gerekiyor ve temel yapıyla ilgilenmiyorsanız, QR iyi bir seçenektir. Ancak veriyi anlamanız veya sıkıştırmanız gerekiyorsa SVD daha iyi bir tercihtir.
Negatif Olmayan Matris Çarpanlarına Ayırma (NMF)
NMF, bir matrisi tüm değerleri negatif olmayan iki matrise ayırır:

NMF formülü
Bu kısıt, NMF’yi doğası gereği negatif olmayan veriler (piksel yoğunlukları ya da kelime sayımları gibi) için çok uygun kılar. Öte yandan, SVD bunu zorlamaz. Ayrıştırılmış matrislerinde negatif değerler olabilir; bu da bazen yorumlanması zor bileşenler üretir.
NMF özellikle metin madenciliği ve konu modellemede popülerdir. W’nin her sütunu bir konuyu temsil edebilir ve H’nin her satırı bu konunun her belgede ne kadar göründüğünü gösterir. Negatif olmama kısıtı, konuların kelimelerin toplanan kombinasyonlarından inşa edilmesi anlamına gelir; bu da onları SVD’nin karma işaretli bileşenlerine kıyasla daha kolay okunur kılar.
Dezavantajı, NMF’nin tekil bir çözümü garanti etmemesi ve sonuçların başlatmaya bağlı olmasıdır. SVD aynı girdi için her zaman aynı çıktıyı üretir.
Rastgeleleştirilmiş SVD
Matrisiniz tam SVD için fazla büyükse ama yine de tekil değerlere ihtiyaç duyuyorsanız, rastgeleleştirilmiş SVD’ye bakmaya değer. Tam ayrıştırmayı hesaplamadan, en büyük k tekil değer ve vektörü yaklaşık olarak elde etmek için rastgele izdüşümler kullanır. scikit-learn (TruncatedSVD) ve Facebook’un fbpca gibi kütüphaneler bu yaklaşımı uygular ve milyonlarca satırlı matrislere iyi ölçeklenir.
Aşağıdaki tablo, hangi yöntemi ne zaman seçmeniz gerektiğini özetler.

SVD’ye alternatifler
SVD ile İlgili Diğer Hususlar
Birkaç yaygın konu, çoğu yeni veri bilimcisini yanıltır.
İlki, tekil değerleri yanlış okumaktır. Büyük bir tekil değer, o bileşenin veride çok miktarda varyansı açıkladığı anlamına gelir — alan-özel anlamda “önemli” olduğu anlamına gelmez. Örneğin, bir kullanıcı puanlama matrisindeki baskın tekil değer, çoğu kişinin popüler filmleri puanladığını yakalayabilir; bu, anlamlı bir tercih kalıbı olmayabilir. Tekil değerleri büyüklüklerine göre değil, verinizin bağlamı içinde yorumlayın.
İkincisi, gereksiz yere SVD’ye başvurmaktır. Küçük veri kümelerinde (birkaç yüz satır ve birkaç sütun) SVD gereksiz karmaşıklık katar. Korelasyon analizi veya temel özellik seçimi gibi basit yöntemler işi daha hızlı ve daha az kodla görür. SVD, fazlalıklı yapıya sahip yüksek boyutlu verilerde harikadır — veri kümeniz bu tanıma uymuyorsa, daha basit yöntemleri tercih edin.
Sonuç
SVD, herhangi bir matrisi yapısını gösteren üç bileşene ayırır. Tekil değerler, verinin hangi bölümlerinin daha çok önem taşıdığını söyler; sol ve sağ tekil vektörler ise bunların arkasındaki satır ve sütun kalıplarını gösterir.
Bu ayrıştırma, günlük kullandığınız birçok pratik aracın temelindedir. Tavsiye sistemleri eksik puanları tahmin etmek için bunu kullanır. Görüntü sıkıştırma ise dosya boyutlarını görsel kaliteyi koruyarak azaltmak için kullanır. Arkalarındaki matematik neredeyse aynıdır, alanlar tamamen farklı olsa da.
Ancak SVD her zaman doğru araç değildir. Büyük matrislerde maliyetlidir ve tekil değerler iyi ayrışmadığında sinyalle gürültüyü karıştırabilir. Ayrıca küçük veri kümeleri için gereğinden fazladır. QR ayrışımı, öz ayrışımı ve NMF gibi alternatifler belirli durumları daha iyi ele alır.
Önemli olan, SVD’yi ne zaman kullanmanız ve ne zaman daha basit bir şeyin daha iyi sonuç vereceğini bilmektir. Bu bilgiyi edinmek için Python ile Makine Öğrenmesi Bilimcisi eğitim yolumuza kaydolun ve 2026’da işe hazır olun.
SVD SSS
Tekil Değer Ayrışımı (SVD) nedir?
SVD, herhangi bir matrisi üç bileşene ayıran bir matris ayrıştırma yöntemidir: sol tekil vektörler (U), tekil değerler (Σ) ve sağ tekil vektörler (V*). Şekli veya boyutu ne olursa olsun herhangi bir matriste çalışır. SVD, veriyi kalıplara ve bunların göreli önemine ayırarak temel yapıyı gösterir.
SVD neden veri bilimi ve makine öğrenmesinde kullanılır?
SVD, yüksek boyutlu veri kümelerindeki boyut sayısını azaltırken en önemli kalıpları korumaya yardımcı olur. PCA ve tavsiye sistemlerinin arkasındaki matematik budur. Bu uygulamaların hepsi, baskın bileşenleri tutup geri kalanını çıkarmaya dayanan aynı fikre güvenir.
SVD ile öz ayrışımı arasındaki fark nedir?
Öz ayrışımı yalnızca kare matrislerde çalışır; SVD ise her matris şeklinde çalışır. Kovaryans matrisleri gibi kare ve simetrik matrislerde her iki yöntem de yakından ilişkili sonuçlar üretir — pozitif yarı belirli bir matrisin tekil değerleri özdeğerleridir. SVD daha genel bir araçtır; bu yüzden çoğu veri bilimi iş akışında varsayılan olarak tercih edilir.
Tekil değerler veri sıkıştırmayla nasıl ilişkilidir?
Tekil değerler büyükten küçüğe sıralanır ve her biri belirli bir bileşenin ne kadar varyans açıkladığını temsil eder. Küçük tekil değerleri (ve karşılık gelen vektörlerini) kaldırmak, küçük kalıpları ve gürültüyü çıkarırken baskın yapıyı korur. Boyutta büyük bir azalma karşılığında doğrulukta küçük bir kayıp yaşanır.
SVD’yi ne zaman kullanmaktan kaçınmalıyım?
SVD, büyük matrislerde maliyetlidir; tam ayrıştırma için zaman karmaşıklığı O(mn^2)’dir. Az sayıda özelliğe sahip küçük veri kümelerinde, korelasyon analizi veya temel özellik seçimi gibi daha basit yöntemler işi daha hızlı görür. Matrisiniz çok büyükse ve yalnızca en üst bileşenlere ihtiyacınız varsa, tam SVD yerine trunked veya rastgeleleştirilmiş SVD daha uygundur.
