Bir bilgisayar mühendisi için programlama dili, öğrendiklerini sınadığı, deneyler yaptığı bir laboratuardır ve mühendisler deneylerini, kestiremedikleri sonuçları gözlemlemek için değil, öngördükleri sonuçları doğrulamak için yapar...

Çekirdek Metodu II - Çekirdek Metodu ve Polinomal Çekirdekler

Çekirdek metodu, polinomal çekirdekler ve matlab ile yapılmış basit kod örnekleri.

Önceki: Çekirdek Metodu I - Boyut Yüseltmenin Ne Faydası Olabilir?

Önceki yazıdaki örnekte 2 boyutlu uzaydan 3 boyutlu uzaya geçmiştik. Geçiş yapacağımız uzayın boyutu ne kadar fazla olursa, yapmamız gereken işlemlerin sayısının da o kadar artacağı ortada. Ayrıca bir önceki yazının başında verilerimizi sonsuz boyutlu uzaylara bile düşürebileceğimizi söylemiştik. O zaman şimdi soru şu: Φ fonksiyonu ile yeni bir uzaya eşlenen noktaların yeni koordinatlarını hesaplamakla hiç uğraşmadan, yani aslında çok boyutlu yeni uzaya hiç uğramadan orada var olduklarını bildiğimiz noktalar üzerinde işlem yapabilir miyiz?

Önceki örneğimizi nokta çarpımlar (<x,y> ifadesi x ile y'nin  nokta çarpımı simgeliyor) cinsinden yazıp, dönüşümden önceki vektörler ile dönüşümden sonraki vektörler arasında bir ilişki yakalamaya çalışalım:

Kuadratik çekirdek

Yeni uzayda yer aldığını bildiğimiz Φ(x) ve Φ(y) vektörlerinin nokta çarpımlarını, Φ fonksiyonuna veya yeni koordinatlara ihtiyaç duymadan, x ve y vektörlerinin nokta çarpımlarını kullanarak hesaplayabildik. Demek ki, dönüşümün noktalarımızı taşıdığı yeni uzaydaki herhangi iki vektörün nokta çarpımını, dönüşümden önceki vektörlerin cinsinden ifade edebiliyoruz. Böylece bizi yeni uzaya düşüren dönüşümü açıkça yazmamız veya noktaların yeni uzaydaki koordinatlarını hesaplamaya çalışmamız gerekmiyor.

Açıkça yazmak zorunda kalmadığımız doğrusal olmayan bir dönüşümle yeni uzaya taşındığını bildiğimiz iki vektörün yeni uzaydaki nokta çarpımını ifade eden fonksiyona çekirdek adını veriyoruz. Son örneğimizdeki çekirdek, 2. dereceden bir polinomal çekirdek (kuadratik çekirdek) idi. (Matlab ile yaptığımız ilk örnekte neden özellikle o şekilde bir fonksiyon seçtiğimizi ilerleyen kısımlarda detaylandıracağımızı söylemiştik. İşte nedeni buydu; çekirdeğimizin eski uzaydaki iki vektörün nokta çarpımı cinsinden ifade edebileceğini göstermek.) Polinomal çekirdeğin derecesini arttırırsak, yeni uzayın boyutunu da arttırmış oluruz. Çünkü yeni koordinatları eski koordinatların seçtiğimiz dereceye kadarki tüm doğrusal olmayan kombinasyonları ile elde ediyoruz. (Başka kaynaklarda polinomal çekirdeği bir c sabiti eklenmiş haliyle de görebilirsiniz.)

Belki yukarıdaki denklemleri görünce farketmişsinizdir; vektörlerinin nokta çarpımları bulduğumuz 3 boyutlu uzaydaki nokta çarpımlarla aynı sonuçları veren 4 boyutlu başka bir uzay daha kendini hemen belli ediyor. Farketmediyseniz, tersten giderek çekirdeği açıp Φ(x) fonksiyonunu elde etmeye çalışın:

Aynı nokta çarpımlarını veren bir diğer fonksiyon.

Çekirdekteki 2xy'yi, 3 boyutlu uzaydaki ikinci koordinatların çarpımından da, 4 boyutlu bu uzaydaki 2. ve 3. koordinatların çarpımlarının toplamından da elde edebiliyoruz. Demek ki noktaları 4 boyutlu bu uzaya da taşısak, 3 boyutlu diğer uzaya da taşısak, hesaplayacağımız nokta çarpımlar aynı sonuçları verecek. Ayrıca daha yüksek dereceli çekirdekler, çok daha fazla sayıda uzaydaki nokta çarpımları temsil edebilir.

Şimdi Matlab ile çok basit bir örnek yapalım. Rastgele iki vektörün nokta çarpımlarını önce uzun yoldan, vektörleri 3 (veya 4) boyutlu uzaya düşürerek hesaplayalım. Daha sonra çekirdek metodunu kullanarak kısa yoldan aynı sonuca ulaşalım:

% Nokta çarpımı tanımlayalım.
% Matlab'in dot() fonksiyonunu da kullanabilirdik.
noktaCarpim=@(x,y) x*y';

% Rastgele iki nokta. Aslında rastgele değil, şu an saat 22 19 :)
x=[2 2];
y=[1 9];

% Aldığı n noktasını yeni uzaya taşıyan doğrusal olmayan fonksiyonumuz:
f=@(n) [n(1)*n(1),sqrt(2)*n(1)*n(2),n(2)*n(2)];
% Aynı çekirdeğin farklı boyutlardaki uzayları temsil edebileceğini
% yazmıştık. Yukarıdaki fonksiyonu yorum satırı yapıp aşağıdaki satırı
% açabilirsiniz, uzaylar farklı olsa da sonuç değişmeyecek.
%f=@(n) [n(1)*n(1),n(1)*n(2),n(2)*n(1),n(2)*n(2)];

% Çekirdek fonksiyonumuzu tanımlayalım.
% 2. dereceden bir polinomal çekirdek (kuadratik çekirdek)
cekirdekFonk=@(x,y) noktaCarpim(x,y)^2;

fprintf('Vektörler yeni uzaya taşındığında nokta çarpım (<f(x),f(y)>): %0.3f\n', ...
        noktaCarpim(f(x),f(y)));
fprintf('Çekirdek yardımıyla yeni uzayda nokta çarpım: %0.3f\n', ...
        cekirdekFonk(x,y));

Aynı örneği, 3. dereceden polinomal çekirdek için tekrar edelim. Bunun için yukarıdaki kodta dönüşüm fonksiyonunu (f) ve çekirdek fonksiyonunu (cekirdekFonk) alttakilerle değiştirmemiz yeterli:

f=@(n) [n(1)^3,sqrt(3)*n(1)^2*n(2),sqrt(3)*n(1)*n(2)^2,n(2)^3];
% veya:
%f=@(n) [n(1)^3,n(1)^2*n(2),n(1)^2*n(2),n(1)^2*n(2),n(1)*n(2)^2,n(1)*n(2)^2,n(1)*n(2)^2,n(2)^3];

% 3. dereceden polinomal çekirdek:
cekirdekFonk=@(x,y) noktaCarpim(x,y)^3;

Örneklerde görüldüğü gibi derece arttıkça yapılması gereken işlem sayısı da artıyor. Ancak uygun bir çekirdek seçildiğinde, f fonksiyonunu ve noktaların yeni uzaydaki konumlarını hesaplamamız ve hatta bilmemiz bile gerekmiyor. İlerleyen kısımlarda bir fonksiyonun çekirdek olarak kullanılabilmesi için hangi özelliklere sahip olması gerektiğine de bakacağız.

Sonraki: Çekirdek Metodu III - Polinomal Çekirdeklerin Tanrısı: Gauss Çekirdeği

Sayfayı
Yayın tarihi: 09 Mart 2016 Çarşamba, 22:42
Anahtar kelimeler: çekirdek metodu, çekirdek taktiği, kernel method, kernel trick, kuadratik çekirdek, polinomal çekirdek

Yorum Gönder

 
Yorumunuzu -1. yoruma yanıt olarak gönderiyorsunuz. Yanıtlamayı iptal etmek için buraya tıklayabilirsiniz.

 

Yorumlar

Onaylanmış yorum bulunmuyor.
 
 
Sayfa 37 sorgu ile 0.006 saniyede oluşturuldu.
Atasoy Blog v4 © 2008-2017 Hüseyin Atasoy