Ana içeriğe atla

Python - Support Vector Machines (Sınıflandırma)

Destek Vektör Makinesi (SVM), sınıflandırma veya regresyon problemleri için kullanılabilen denetimli bir makine öğrenmesi algoritmasıdır. Bu algoritmada, her bir veri maddesini belirli bir koordinatın değeri olan her özelliğin değeri ile birlikte n-boyutlu boşluğa (burada n sahip olduğunuz özelliklerin sayısı) bir nokta olarak çizilir. Ardından, iki sınıftan oldukça iyi ayrım yapan hiper-düzlemi bularak sınıflandırma gerçekleştirilir.

Doğrusal SVM


SVM’de temel amaç, veri sınıflarını birbirlerinden büyük bir boşluk ile ayırmaktır. Başka bir deyişle, iki boyutlu veri düşünürsek, SVM veri sınıflarının arasına öyle bir çizgi çekmek ister ki bu sınıflar birbirinden büyük bir boşlukla ayrılmış olsun. Yani ortadaki bu çizgiye en yakın olan veri noktalarının dahi bu çizgiye uzaklığı maksimum düzeyde olsun. Bir görsel ile destekleyecek olursak; Grafik düzlemin görüldüğü üzere elimizde iki grup veri var ve biz bunları etiketleyerek sınıflandırma yapmak istiyoruz. Destek vektör makine algoritması uygulandığında ortadan geçen paralel çizgiyi elde etmiş oluruz. Bu sayede elimizdeki veriler ve gelecek veriler için sınıflandırma yapabilecek durumda oluruz. Grafikteki çizilen paralel aralığın kestiği noktalar destek noktalarıdır.


Grafiğin ortasında bir çizgi var(yeşil çizgi) ve bu çizgi veriyi mümkün olan en büyük boşluk ile ayırmış durumda. En büyük boşluk hedefine ulaşmak istememizin nedeni ise veriyi en büyük boşluk ile ayırmayı başardığımızda, yeni veri noktalarının tahmininden yüksek düzeyde emin olacak olmamız. Yanlardaki iki siyah çizgi ise her sınıfın ortadaki çizgiye en yakın gözlemlerinin üzerinden geçiyor. Ortadaki çizgiye “Karar Sınırı” diyoruz. Siyah çizgiler üzerindeki noktaların karar sınırına olan uzaklıkları ise “Margin” yani kenarlar olarak adlandırılıyor. SVM algoritmasının amacı da bu kenarları maksimize etmek. Siyah çizgiler üzerinde karar sınırına en yakın olan bu veri noktalarına “Support Vectors” yani destek vektörleri denmektedir. Karar sınırını destekleyen noktalar bunlar olduğu için bu ad verilmiştir.

Analizimde yine diabets verisini kullanacağım. Bunun için veri setimi çağırdıktan sonra modelimi kuruyorum ve model parametrelerimi inceliyorum. Burada benim için en önemli parametre “C” parametresi.


Tahmin aşamasına geçince test setimi tahmin et dedikten sonra ilkel test doğruluk oranını hesaplıyorum.


Şimdi model tuning aşamasına geçebilirim. Doğrusal svm incelediğim için kernel kısmına “linear” girdikten sonra tune edeceğim “C” parametresi 1 ile 10 arasında bir değer olsun diyorum. Parametre değerini girdikten sonra 10 katlı cross validation yaptırıyorum.


En optimum C değerini bul dedikten sonra bu değere göre modeli tune ediyorum ve doğrulanmış accuracy oranını hesapladıktan sonra doğrusal olmayan svm analizime geçiyorum.


Doğrusal Olmayan SVM

Doğrusal olmayan svm’lerde ise boyut arttırma tekniği uygulanıyor. Sol görseldeki mavi noktaların yukarı çekilmesiyle grafiğe üç boyut verilmiştir. Böylece sınıflara ayırmış oluyoruz.


Yine diabest veri seti üzerinden devam edip modelimi kuruyorum. Tahmin aşamasına geçince test setimi tahmin et dedikten sonra ilkel test doğruluk oranını hesaplıyorum.


Şimdi model tuning aşamasına geçebilirim. Doğrusal svm incelediğim için kernel kısmına “linear” girdikten sonra tune edeceğim “C” ve “gamma” parametreleri için giriş yapıyorum. Parametre değerlerini girdikten sonra 10 katlı cross validation yaptırıyorum.


En optimum C ve gamma değerini bul dedikten sonra bu değere göre modeli tune ediyorum ve doğrulanmış accuracy oranını hesapladıktan analizimi bitiriyorum.


Yorumlar