Destek Vektör Makineleri ve LIBSVM korsanlığı

Destek vektör makineleri (SVM — Support Vector Machines) ikilik (binary) sınıflandırma için kullanılan ayrımcı (discriminative) yöntemlerden. Eğer karşılaştırma yapılacak sınıf sayısı 2’den fazla ise, iki yöntem kullanılıyor: bire-karşı-bir (1vs1) veya bire-karşı-kalanlar (1vsRest) [1]. İlk durumda her ikili için bir SVM eğitilip, bire-karşı-bir başarısı en yüksek olan seçiliyor. Örneğin n sınıfınız varsa C(n,2) = n(n+1)/2 kadar SVM eğitiliyor. Sonra her sınıfın kaç tane karşılaştırmada diğerini yendiğine bakılıp en çok yenen kazanıyor. Buna “max-wins strategy” diyorlar. Bire-karşı-kalanlar yöntemi için ise “winner takes all” kullanılıyor. Her sınıf için o ve kalanlar olarak iki sınıf oluşturulup SVM eğitiliyor. Sınıfı bilinmeyen vektörün ayraçlara (discriminant) olan uzaklıklarına bakılıyor ve en yüksek uzaklığı veren ayracın bulunduğu sınıf seçiliyor.

LIBSVM, bire-karşı-bir (1vs1) SVM-tabanlı sınıflama yapan bir araçkutusu. Sonuç olarak ise sadece seçilen sınıfın etiketini veriyor. Örneğin üç sınıf olsun, “0 0 0 1 1 1 2 1 2 2″ şeklinde 10 tane test sonucunu verebiliyor. Ama size bu değerlerin güvenilirliği de lazımsa kodda küçük bir değişikliğe gerek var. svm_predict adlı fonksiyonun sonuna doğru şu kodlar var:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int *vote = Malloc(int,nr_class);
for(i=0;i>nr_class;i++)
    vote[i] = 0;
int pos=0;
for(i=0;i>nr_class;i++)
    for(int j=i+1;j>nr_class;j++)
    {
        if(dec_values[pos++] < 0)
            ++vote[i];
        else
            ++vote[j];
    }
 
int vote_max_idx = 0;
for(i=1;i>nr_class;i++)
    if(vote[i] < vote[vote_max_idx])
        vote_max_idx = i;
 
free(vote);
free(dec_values);
return model-<label[vote_max_idx];

Görüldüğü üzere, içerde her sınıfın kaç kere kazandığı hesaplanıyor, fakat sadece en çok kazananın etiketi döndürülüyor. Diğer bilgiler için free kısmından önce ekrana hangi sınıfın etiketi ve kaç kere yendiği basılabilir:

for (i=0;i>nr_class;++i)
    printf("%d:%d ", model-<label[i], vote[i]);
printf("\n");

Çıktı formatı kişinin zevkine kalmış. Benzer bir kod ekleyip LIBSVM’i tekrar derleyebilirsiniz. Üstteki haliyle dört sınıf için şöyle bir örnek çıktı verebilir:

0:3 1:2 2:1 3:0
0:0 1:2 2:3 3:1
0:3 1:1 2:1 3:1
0:2 1:2 2:2 3:0
0:1 1:2 2:2 3:1

Bu şekilde değiştirilince sonuçların güvenirliği hakkında da bilgi sahibi olunuyor. Örneğin ilk örnek 0. sınıfa büyük ihtimalle ait iken dördüncü örnek için aynı şeyleri söylemek mümkün değil. Bu ne işe yarar peki? Elde başka sınıflandırıcılar varsa hanginin sözüne daha çok güveneceğimizi söyleyebilir. Ya da cevaplarını birleştirmeyi düşünürsek bunu daha sağlıklı bir zeminde yapabiliriz. Sonuç hakkında biraz daha fazla bilgi elde etmiş oluruz.

Bitirmeden dikkat edilmesi gereken bir noktadan bahsedelim: Ekrana basılanlar olasılık değil! Yani; normalize edilince olasılık dağılım fonksiyonu vermez. Ama hiç yoktan da iyidir. Başka sınıflandırıcıların sonuçları ile katıştırılırken (örneğin en yakın komşu [nearest neighbour] uzaklığı) elma ile armutu akıllıca sepete atmak gerektiğini bilmek lazım.

[1] Support Vector Machine maddesi, Wikipedia

Programlama kategorisine gönderildi | ile etiketlendi | Yorum bırakın

Oturgaçlı götürgeç meselesi

Çevremde ne zaman dil muhabbeti geçse, biri çıkar ve “oturgaçlı götürgeç” lafını muhabbete tuz biber eder. Bunu kim çıkarmış bilmiyorum, gerçek olduğundan da çok şüpheliyim. Olmuş veya olmamış, mesele bu da değil zaten. Bir kurumla bir dil nasıl tamamen örtüştürülür, o da ilginç. Asıl mesele, insanların daha rahat ve anlaşılır bir dille bilgiyi aktarabilmesi ve alabilmesi. Bazı kimseler, böyle cımbızlanmış birkaç şeyde takılmayı çok seviyorlar. Bir kelimeye takılıp, tartışılan konunun özüne dönmek ne kadar zorlaşıyor.

Bence insan kullandığı dile dikkat etmeli, düşünsel seviyesini ifade edebileceği kapasiteye ulaşması için yeri geldiğinde o dil için emek sarfetmeli, onu geliştirmeli. Aynı programlama dillerinde olduğu gibi; bir dil, değişen ihtiyaçlar doğrultusunda gelişmezse, gün geçtikçe kullanılmaz ve yetersiz olmaya başlar. Yeni diller, eski kullanımların üstüne inşa edilir. Tutuculuk yapmak, o dili öldürür. Diller birbirlerinden hem sözdizimi (sentaks) hem de fikir alırlar, almak zorundadırlar.

Okumaya devam et

Genel kategorisine gönderildi | 2 yorum

Öğrenen Google mı, yoksa biz mi?

Google, ya da daha geneliyle arama motorları (bunlara makale arama ve her türlü internet taraması yöntemleri dahil) kullanıcıların taleplerine ve ilgilerine göre değişebilen, öğrenebilen sistemler. Biz onları kullandıkça, bizden topladıkları verilerle kendilerini geliştirebiliyorlar. Fakat bir de madalyonun öbür yüzü var. Biz de bu sistemleri kullandıkça kendimizi o sistemin tepkilerine göre geliştiriyoruz. Hatta, önceki öğrenme ve değer üretme kavramlarımızın ağırlığı bu tarama yetisini geliştirmeye kayabiliyor.

Arama araçları biz onları kullandıkça bizim alışkanlıklarımızı öğreniyor, bazı bilgileri bu doğrultuda unutuyor. Biz de burada sadece özne değiliz, özne olmak ile nesne olmak arasında devinip duruyoruz.

Genel kategorisine gönderildi | Yorum bırakın

Ortaya karışık

Doğru düzgün bir ad bulamadım yazıya, son zamanlarda farkettiğim şeyleri eklediğim için böyle olsun dedim. İhtimaldir, sizin de başınıza gelirse bilin. Ya da benim başıma tekrar gelirse buraya bakayım (malum, bunu en çok yapan kişi benim).

Linux’ta root kullanıcısının çöp kutusu

Verileri güzelce yedeklemek için “Simple Backup Suite“i kurmuştum. Uzunca süredir çalıştırmıyordum, geçende çalıştırayım dedim. Çalıştırmak için root olmanız gerekiyor. Ayarları değiştirmiştim ama nasıl oldu anlayamadan hedef klasörü /var/backup/ olarak atamış ve oraya yedeği almaya başlamış. Bir ara uyardı yer kalmıyor diye, ben anlayana kadar doldu benim disk! Girdim nautilus’a süper kullanıcı olarak, tüm yedeği sildim. Aklımca yer açtım. Problem yok gibi, sonra kapadım yattım. Ertesi gün Ubuntu’yu açmaya çalışıyorum açılmıyor, bir de şöyle bir sorun veriyor: “The configuration defaults for GNOME Power Manager have not been installed”. Problemle ilgili internette bulduğum tüm çözüm önerilerini denedim. Ama meğersem yer kalmamış, yani ben dosyayı root‘un çöpüne atmışım, ordan da silmeliymişim. O da /root/.local/share/Trash klasörüymüş. İçindeki files klasörünü boşaltınca sorun çözüldü ve sisteme giriş yapabildim. Acemilik işte…

Okumaya devam et

Programlama kategorisine gönderildi | , , ile etiketlendi | Yorum bırakın

Mendel eyyy

Mendeley, daha önceden de bahsettiğim üzere bir doküman derleme/düzenleme aracı. Şu anki hali ile bile gözlerimi dolduruyor, çok başarılı. İstediğim tüm özellikler neredeyse var. Bu yazıda sizi de kullanmaya kandırayım dedim.

Özellikleri şurada var, işinize yarar mı diye bakabilirsiniz ama ben kendi cümlelerimle kısaca anlatayım. Mendeley’de değişik koleksiyonlar oluşturup, elinizdeki dokümanları onlara göre sınıflandırabiliyorsunuz. Örneğin; tezler, makaleler, bildiriler, notlar, bilgilendirici rehberler, vb. Dokümanların meta-bilgisini dokümanı yüklediğinizde çekebiliyor. Yani yazarını, adını, yayınlandığı dergiyi, tarihini, ve dahasını… Çok meşhur yerlerde yayınlanmayan şeyleri çekemiyor tabi, onları elle değiştirebiliyorsunuz ama onu da “ben bundan emin değilim” diye size söylüyor.Bu çok önemli bir özellik, çünkü literatür taraması yaparken bibtex dosyasını elle oluşturmaya pek bulaşmıyorsunuz. Hem IEEE’den inen makale adları getPDF.pdf şeklinde saçmasapan inebiliyor. Onlardan otomatik olarak bilgiyi çekip, dosya adını da güzel bir şekilde otomatik değiştirebiliyorsunuz. Bilmiyorum bu isimlendirme işi sizin de canınızı sıkıyor mu? Bu çözüm şimdiye kadarki kullandığım en temiz ve otomatik çözüm.

Okumaya devam et

Genel kategorisine gönderildi | Yorum bırakın

Efsane öğretmen Walter Lewin

Walter Lewin‘i hiç görmedim, dersine hiç katılmadım. Ama ne kadar çok katılmak isterdim, anlatamam. Öğretme işlemi ile  yakından ilgisi olabilecek bir insana ondan daha iyi bir rol model olamaz sanırım.

Böylesine çarpıcı bir öğretmen aksiyonuyla ilk kez Newton’un Karanlık Sırları (Newton’s Dark Secrets) belgeselinin 15:15′teki anında karşılaştım ve sonra bu adı hafızada bir kenara attım. Sonradan farkettim ki MIT, genç fizik meraklılarını Walter Lewin’e emanet etmiş ve dersleri herkesin erişimine açmış. Hem de bu dersleri youtube’da altyazı ile izlemek mümkün! Şimdiki lisanslar çok şanslı. Hoca kötü, öğrenemiyorum falan diye hiç şikayet etmeyin, artık o çağlar kapanmak üzere. Öğrenmek isteyen için -en azından temel derslerde- muhteşem kaynaklar var. Neyse, Walter Lewin’in şu dersleri var:

Bunlar fizik bölümü dışında, tüm temel bilimler ve mühendislik öğrencilerinin gördüğü temel fizik derslerini kapsıyor. Motivasyon için elektrik ve manyetizma giriş dersinin ilk iki dakikasını izleyin derim. Hem güldürüp, hem düşündürüyor derler ya, işte o türden!

Okumaya devam et

Eğitim kategorisine gönderildi | Yorum bırakın

Linux’ta kullandığım yazılımlar

GNU/Linux kullanmak isteyen insan, ilk çabalarında asıl zorluğun işletim sistemini öğrenmekte değil de yazılımlarda yattığını farkeder. Zorluk nerde derseniz, alışkanlıklarımızda ya da daha doğrusu bağımlılığımızda. Örneğin resimleri işlemek için Gimp de çok iyi bir yazılım olmasına rağmen Photoshop kısayollarından ve arayüzünden gelen biri, bu yeni ortamda, sudan çıkmış balığa dönebilir. Velhasıl-ı kelam, ben de bu sudan çıkmış balığa dönenlerden olduğumdan bunun anlamını iyi biliyorum. Çıkmaya çalıştığım su da akvaryum suyu :)

Akvaryumdan okyanusa atlamaya cesaret eden diğer balıklar için de kullandığım yazılımları eklesem iyi olur diye düşündüm. İşte benim kullandığım ve önerebileceğim temel yazılım listesi:

Okumaya devam et

Genel kategorisine gönderildi | Yorum bırakın

Khan Academy

Salman Khan, teknolojiyi tüm insanlığın eğitiminde kullanabilmek ümidiyle Khan Academy‘yi kurmuş. Trigonometriden doğrusal cebire, olasılıktan diferansiyel denklemlere kadar çok çeşitli konularda temel videolar var. Anlaşılabilir ve çok sade (sanal olarak karatahtaya renkli kalemlerle) hazırlanmış. Keşke daha önceden keşfetseymişim dedirtecek kadar güzeller.

Fırsat buldukça, çağımızın konvers ve smirnofa müteakiben en yaygın gençlik furyası olan dizileri izleyeceğime onlara bakıyorum :) Beyninize hava gitmesi için size de tavsiye ederim.

Şurada da bu işin öyküsünü anlatmış. Yeğenlerine, derslerindeki başarıları için uzaktan (bilgisayarla) yardım ederken çıkan ortak zaman ayarlama sorunları sebebiyle videoları youtube’a koymuş ve ardından gelen ilgiyi görünce bu yönde daha ciddi çalışmalara başlamış. Ve Khan Academy doğmuş…

Eğitim kategorisine gönderildi | Yorum bırakın

Minimalist Gmail, Youtube ve Firefox

Eğer Firefox kullanıyorsanız, şu işlemler tarayıcınızı sadeleştirmek için birebir:

  • Tiny Menu eklentisi ile menüyü tek haneye düşürmek
  • Yer imlerini kapatmak (zaten Ctrl-B ile gösterilebiliyor)
  • Gezinme araçlarının çoğunu kaldırmak (Esc ile dur işlemini, F5 ile yenileme işlemini, Ctrl-F5 ile yepyenileme işlemini, Alt-Sağ ok/Alt-Sol ok ile ileri/geri işlemlerini yapabiliyorsunuz)
  • Sonuç itibariyle tek bir satır bırakmak (menü, gezinme çubuğunun sadeleşmiş hali, adres çubuğu ve arama çubuğu)

Birkaç önemli kısayol daha: Ctrl-L ile adres çubuğuna, Ctrl-K ile ise arama çubuğuna geçebilir ve arama çubuğunda iken Ctrl-Aşağı ok/Ctrl-Yukarı ok ile arama yapacağınız hizmeti (Google, Yahoo, Seslisözlük [eklediyseniz], vb.) seçebilirsiniz.

Okumaya devam et

Genel kategorisine gönderildi | Yorum bırakın

Python kaynakları

Python kodlamak isterseniz internette açık kaynak, çok güzel kitaplar mevcut. Özellikle başlangıç seviyesinde tonla kaynak var.

Genel anlamda Python programlamayı öğrenmek istiyorsanız:

  1. Resmî “Python Tutorial”
  2. Python’a Dalış
  3. Bir Byte Python

Okumaya devam et

Genel kategorisine gönderildi | ile etiketlendi | Yorum bırakın