Tekil değer ayrışımının matematiksel zeminini ilk iki yazıda atmıştım (#1, #2) ve en son legolarla elimizdeki oyuncağı yapmaya gelmişti konu. İkinci yazıyı bitirmeden önce eldeki matrisi 1. dereceden matrislerin doğrusal kombinasyonu şeklinde yazabileceğimizi görmüştük. Bu yazıda hiç formüle girmeden örneklerle tekil değer ayrışımının nasıl çalıştığını ve bize nasıl bilgiler verdiğini göstereceğim. Bu örneklerde kahramanlarımız bana yardım edecekler. Konuyu Matlab kodlarıyla birlikte ilerleteceğim. Neyse, konuya girelim.

Günlerden bir gün Atilla'nın sağ kolu Tarkan, Fatih'in fedaisi Kara Murat ve fakirlerin sevgili dostu Robin Hood ok yarışına dalaşırlar. 9 tane -üstünde 1'den 5'e kadar sayı bulunan- hedef vardır. Sırayla atışırlar. Hedefler matrisin satırları olacak şekilde; Tarkan, Robin Hood ve Kara Murat da sırasıyla sütunları olacak şekilde yazarsak şöyle bir skor elde ederler.

A = [4 4 4
     4 4 4
     3 3 3
     4 4 4
     5 5 5
     4 4 4
     4 4 4
     3 3 3
     2 2 2];

Dikkatinizi çekerse bu matris 1. dereceden bir matris, çünkü diğer sütunlar ilk sütunun aynısı.

Şimdi hangi kahramaranın hangi hedefte ne kadar başarılı olacağı sorusu ile ilgilenelim. İki tane merak ettiğimiz değer olsun: Birisi hedef kolaylığı, ikincisi ise kahramanın kabiliyeti. Bu iki değeri bildiğimiz takdirde kahramanımızın elde ettiği skoru

tahmini skor = hedef kolaylığı × kahramanın kabiliyeti

formülü ile tahmin edebiliriz. Şimdilik hedef kolaylığını hedefte elde edilen skor, kahramanın kabiliyetini de 1 alalım. Örneğin, Tarkan'ın yapmış olduğu birinci atıştaki değer 4; demek ki Tarkan 4'ü vurdu ve kabiliyeti 1. Bunu matrisin tüm elemanları için ayrı ayrı düşünebiliriz. Bu şekilde ayrı ayrı yazmak yerine tüm matrisi hedef kolaylıkları vektörü ve kahramanların kabiliyetleri vektörü şeklinde yazabiliriz.

Tarkan Robin Hood Kara Murat
4 4 4
4 4 4
3 3 3
4 4 4
5 5 5
4 4 4
4 4 4
3 3 3
2 2 2
=
Hedef Kolaylığı
4
4
3
4
5
4
4
3
2
×
Kahramanın Kabiliyeti
Tarkan Robin Hood Kara Murat
1 1 1


Matematikçiler değerleri düzenli tutmayı severler. Vektörleri normalize ederek, yani birim vektör olarak tutmak da bunlardan biridir. İlgilendiğimiz vektörleri normalize eder ve ağırlıklarını dışa alırsak şöyle bir ayrışım elde ederiz.

Tarkan Robin Hood Kara Murat
4 4 4
4 4 4
3 3 3
4 4 4
5 5 5
4 4 4
4 4 4
3 3 3
2 2 2
=
Hedef Kolaylığı
0.3549
0.3549
0.2662
0.3549
0.4437
0.3549
0.3549
0.2662
0.1775
×
Ölçek
19.5192
×
Kahramanın Kabiliyeti
Tarkan Robin Hood Kara Murat
0.5774 0.5774 0.5774

 

Bu değerleri elle hesaplamadık tabii ki, kodladık:

[U, S, V] = svd(A);U(:,1)SV(:,1)
ans =

    0.3549
    0.3549
    0.2662
    0.3549
    0.4437
    0.3549
    0.3549
    0.2662
    0.1775

S =

   19.5192         0         0
         0    0.0000         0
         0         0         0
         0         0         0
         0         0         0
         0         0         0
         0         0         0
         0         0         0
         0         0         0

ans =

    0.5774
    0.5774
    0.5774

Bahsi geçen hedef kolaylığı değerleri sol tekil vektör, kahramanların kabiliyetleri ise sağ tekil vektör olarak adlandırılan vektörler.

Farkettiyseniz tekil değerlerden yalnızca biri sıfırdan farklı. Çünkü bu matris 1. dereceden bir matris. Elbette gerçekte kahramanlarımızın tümü aynı puanı almadı. Çekişme çetin oldu.

A = [2 3 4
     3 4 5
     4 3 4
     4 4 5
     5 5 5
     2 3 5
     3 4 4
     3 3 4
     1 2 3];

Şimdi skorları, tekil değer ayrışımının ilk vektörleri ile ifade etmeye çalışalım. Altta sizin için bunları verdim. Anlaşılması için tekil değeri, hedef kolaylığı ve kahramanın kabiliyeti vektörlerinin içine paylaştırdım.

[U, S, V] = svd(A);

scale = 1/mean(V(:,1));
U(:,1) * S(1,1) * 1/scale
V(:,1) * scale
A1 = U(:,1) * S(1,1) * V(:,1)'
ans =

    3.0522
    4.0338
    3.6125
    4.3140
    4.9082
    3.4395
    3.6464
    3.3323
    2.0705

ans =

    0.8562
    0.9599
    1.1839

A1 =

    2.6134    2.9297    3.6134
    3.4539    3.8720    4.7755
    3.0932    3.4676    4.2767
    3.6938    4.1409    5.1072
    4.2026    4.7114    5.8107
    2.9451    3.3016    4.0720
    3.1222    3.5001    4.3169
    2.8533    3.1987    3.9451
    1.7728    1.9874    2.4512
Tarkan Robin Hood Kara Murat
2.6134 2.9297 3.6134
3.4539 3.8720 4.7755
3.0932 3.4676 4.2767
3.6938 4.1409 5.1072
4.2026 4.7114 5.8107
2.9451 3.3016 4.0720
3.1222 3.5001 4.3169
2.8533 3.1987 3.9451
1.7728 1.9874 2.4512
=
Hedef Kolaylığı
3.0522
4.0338
3.6125
4.3140
4.9082
3.4395
3.6464
3.3323
2.0705
×
Kahramanın Kabiliyeti
Tarkan Robin Hood Kara Murat
0.8562 0.9599 1.1839


Sonuçlara bakılırsa Tarkan geride kalırken, Robin Hood biraz daha iyi. Ama Kara Murat'tan ötesi yok :) Beşinci hedef en kolay hedefken, sonuncusu en zor olarak gözüküyor. Bu küçük örnekte gözle bakarak da bu bilgilere erişebilirdik fakat daha fazla kahramanın olduğunu ve çok daha fazla hedef olduğunu düşünürseniz bu işi akıllıca yapmak için tekil değer ayrışımı birebir.

Bir boyutlu TDA kullandığımız ve matrisimiz 3. dereceden olduğu için matrisi tam olarak ifade edemeyip yaklaşık olarak tahmin ettik. 3 tekil teğeri de kullanarak ifade edecek olsaydık şöyle olacaktı.

Tarkan Robin Hood Kara Murat
2 3 4
3 4 5
4 3 4
4 4 5
5 5 5
2 3 5
3 4 4
3 3 4
1 2 3
=
Hedef Kolaylığı
0.2765 -0.3050 -0.1120
0.3654 -0.2088 -0.1710
0.3273 0.3701 0.5874
0.3908 0.1287 0.1787
0.4446 0.4808 -0.2952
0.3116 -0.5608 0.3028
0.3303 0.0471 -0.5858
0.3019 0.0326 0.2377
0.1876 -0.4011 -0.0530
×
Ölçek
19.2978 0 0
0 2.3595 0
0 0 1.0140
×
Kahramanın Kabiliyeti
Tarkan Robin Hood Kara Murat
0.4898 0.5491 0.6772
0.7965 0.0341 -0.6037
0.3546 -0.8351 0.4206

 

Tekil değer ayrışımı ile eldeki veriyi anlamlı baz vektörler cinsinden ifade ettik. Örneğin ilk satırdaki 2 skoru (0.2765 * 19.2978 * 0.4898) + (-0.3050 * 2.3595 * 0.7965) + (-0.1120 * 1.0140 * 0.3546) biçiminde hesaplandı. Dikkat ederseniz burada [0.4898 0.7965 0.3546] vektörüne bir izdüşüm (iç çarpım) var. Bu skoru her bir boyut için Tarkan'ın kabiliyet değerlerine (italik) karşılık gelen değerleri bulacak şekilde çözümledik. Kalın yazdıklarım da bunların katkıları oldu. Önceki yazılarda elipsoidin yarıçapı demiştik ya, işte bu değerler elde edilen dikey tekil vektörler boyunca hesaplanan standart sapmalar olarak da yorumlanabilir.

Hesaplanan yaklaşık değer ile matrisin gerçek değerleri arasındaki farka bakmak iyi bir alıştırma olabilir. Boyutu arttırıp değerlerle oynayarak sonuçları gözlemlemek ve hesaba katılan tekil değer sayısını arttırarak hata payının nasıl değiştiğini görmek de ayrı bir alıştırma.

Özetlersek eldeki veriyi TDA ile bileşenlerine ayırdık ve verideki her örneğin bu bileşenler için katsayılarını bulduk. Alternatif olarak bunu özdeğer ayrışımı ile de yapabilirdik. Bir sonraki yazıda birtakım noktalara doğru oturtmaya çalışacağız ve matematiksel ve sezgisel altyapıyı artık tamamlamanın verdiği rahatlıkla temel bileşenler analizine geçeceğiz.

Not: Bu yazıyı yazarken şu belgeden birçok konuda yararlandım.