WEKA ile SVM

Yazan : Şadi Evren ŞEKER

Bu yazının amacı, site üzerinde gelen bir soru üzerine, WEKA programı üzerinde, destekçi vektör makinesinin (SVM) gerçekleştirilmesi ile ilgili bir uygulama anlatmaktır.

WEKA üzerinde genel olarka bir işlem yapmak için aşağıdaki adımlar izlenebilir:

Yukarıdaki adımlara göre, öncelikle, işlenmek için hazır bir veri kümemiz bulunması gerekiyor.

Yazımızdaki amacımız, konuyu öğrenmek olduğu için, WEKA kurulumu ile gelen örnek veri kümelerinden birsini, bu yazı kapsamında kullanacağız.

  1. Adım: WEKA’yı açıyoruz:

2. Adım: Önce veri kümemize bir göz atalım. WEKA’nın kurulumu ile birlikte gelen data dizini altındaki, labor.arff dosyasını görmek için, açılan ilk weka ekranında (yukarıdaki resimde temsil edilen), “Experimenter” düğmesine basıyoruz. Açılan ekranda, File / Open seçeneklerini menülerden seçtikten sonra, dosya seçicisinden “labor.arff” dosyasını işaretleyip açıyoruz:

Kullanacağımız örnek veri kümesi yukarıdaki şekildedir. Hızlı bir bakışla, verilerin, çalışan verileri olduğunu ve her çalışanın maaş, çalışma süreleri, sosyal güvenliğine ait bilgilerin yer aldığı bir veri kümesi olduğunu söyleyebiliriz. Şimdiki adımımız bu veri kümesi üzerinden SVM algoritmasını çalıştırmak olacak.

3. Adımda WEKA’nın ilk açılan ana ekranına dönerek, bu sefer “Explorer” düğmesine basıyoruz ve WEKA içerisinde yer alan fonksiyonları kullanacağımız ekran açılıyor.

Yukarıdaki açılan Weka Explorer ekranında bulunan ilk sekme olan Preprocess sekmesinde (ki ilk açıldığında bu sekme açık gelir), bulunan “Open File” düğmesine tıklayarak dosya seçicimizi açıyoruz ve yine Weka’nın kurulumuyla gelen data dizini altında bulunan “labor.arff” dosyasını seçerek açıyoruz.

Ekranda, seçilen bu dosyanın ön işleme sonuçları görülüyor. Buna göre sol taraftaki listede, ilk başta görüntülediğimiz arff dosyasının her bir kolonu yer almakta olup, her kolona tıklandığında, bu kolon ile ilgili veri detayları sağ tarafta çubuk grafik olarak görülmektedir.

4. Adımda WEKA’nın sınıflandırma işlemi için ilgili modülün yüklenmesine geçecegiz. Bu işlem için, ekranın üzerinde bulunan “Classify” sekmesine geçiyoruz.

Sekmeye geçtikten sonra “Choose” düğmesine tıklayarak kullanacağımız modülü seçeceğiz. Burada WEKA içerisinde yüklü olan ve konu ile ilgisi olan 3 ayrı modülden bahsetmekte yarar vardır:

Listede görülen classifiers klasörü altındaki functions elemanlarıdır. Bunların tamamı, sınıflandırma için kullanılan fonksiyonlardır. Tam bu noktada 3 ayrı alternatiften bahsedelim:

SMO

Yani birden fazla kümeye, veriyi bölmeye yarar. Listede bulunan SMO, SVM benzeri bir yapıdadır.

Sequential Minimal Optimisation kelimelerinin baş harflerinden oluşan SMO, esas itibariyle Suppor Vector kullanan bir algoritmadır. Algoritmanın detayı için WEKA dokümantasyonunda da yer alan aşağıdaki makalelere bakılabilir:

  • J. Platt: Fast Training of Support Vector Machines using Sequential Minimal Optimization. In B. Schoelkopf and C. Burges and A. Smola, editors, Advances in Kernel Methods – Support Vector Learning, 1998.
  • S.S. Keerthi, S.K. Shevade, C. Bhattacharyya, K.R.K. Murthy (2001). Improvements to Platt’s SMO Algorithm for SVM Classifier Design. Neural Computation. 13(3):637-649.
  • Trevor Hastie, Robert Tibshirani: Classification by Pairwise Coupling. In: Advances in Neural Information Processing Systems, 1998.

LibSVM

SVM sınıflandırıcısının en önemli kütüphanesi, bir doktora tezi sırasında ortaya çıkmış olan ve libSVM olarak bilinen açık kaynak kodlu kütüphanedir. Bu kütüphane, ne yazık ki WEKA kurulumu ile gelememektedir. Ancak bu kütüphaneyi WEKA altında kullanmanın iki yolu bulunur. İlki, kütüphaneyi WEKA’ya tanıtmaktır. Bunun için, yukarıdaki temsili resmi verilen listede bulunan libSVM kullanılabilir. Öncelikle kütüphane, aşağıdaki adresten indirlmelidir:

http://www.csie.ntu.edu.tw/~cjlin/libsvm/

Ardından weka’nın paket yöneticisi tarafından kurulmalıdır. Wekanın paket yöneticisi ise WEKA’nın classpath tanımının yapıldığı bir konsolda aşağıdaki komutu vererek çalıştırılabilir:

java weka.core.WekaPackageManager

 

Diğer bir yöntem ise, indirilen libsvm kütüphanesinin WEKA classpath’ine eklenmesidir. İlgili ayarlar yapıldıktan sonra 4. adımda bahsettiğimiz sınıflandırmalardan birisi olarak libSVM kullanılabilir.

LibSVM kullanımı için ikinci bir yöntem ise, LibSVM ve WEKA programlarını, aynı anda içeren wlsvm kütüphanesini kullanmaktır. Bu kütüphaneye de aşağıdaki adresten erişilebilir:

http://www.cs.iastate.edu/~yasser/wlsvm/

SMOreg

SVM ile ilgili, weka içerisinde bulunan 3. bir seçenek de SMOreg seçeneğidir. Bu seçenek, SVM üzerinde Regression (ilkelleme, regrezizasyon) uygulamaya yarayan kütüphanedir. Bu kütüphane için de detaylı bilgi, aşağıdaki kaynaklardan edinilebilir:

  • Alex J. Smola, Bernhard Scholkopf (1998). A Tutorial on Support Vector Regression. NeuroCOLT2 Technical Report Series – NC2-TR-1998-030.
  • S.K. Shevade, S.S. Keerthi, C. Bhattacharyya, K.R.K. Murthy, Improvements to SMO Algorithm for SVM Regression. Technical Report CD-99-16, Control Division Dept of Mechanical and Production Engineering, National University of Singapore.

5. Adımda, Yukarıdaki seçeneklerden birisi seçildikten sonra, seçilen modüle göre ayarlama yapılması gerekemektedir. Örneğin SMO kütüphanesi üzerinden ilerleyecek olalalım. Bu modülün parametre ayarlarını, Object Editor ile yapabiliriz. ObjectEditor’ü açmak için ekranda bulunan ve fonksiyonun parametrelerini içeren metin kutusuna tıklamak yeterlidir:

Açılan bu ekranda, ilgili parametre ayarları yapıldıktan sonra, sınıflandırma fonksiyonunun çalışması için, WEKA Explorer ekranında bulunan “Start” düğmesine basmak yeterli olacaktır. Sonuçlar ve sonuçların değerlendirmeleri (hata miktarları gibi), sonuç ekranında görülecektir. Buradaki sonucu etkileyen diğer bir ayar da, kullanım sırasında eğitim ve test için izlenecek stratejidir.

WEKA doğrudan, 4 farklı özellik desteklemektedir. Bunlar sırasıyla aşağıda anlatılmıştır:

Trainin set seçeneği, seçilen verinin sadece eğitim amaçlı kullanılmasını sağlar. Bu seçenekte önce eğitim yapılıp ardından ikinci bir küme, test amaçlı kullanılabilir. Bu seçenek de yine yukarıdaki ekranda bulunan “Supplied test set” seçeneği ile gösterilen küme üzerinde çalışır.

“Cross-validation” seçeneği, veri kümesine belirtilen (folds sayısı olarak belirtilen) sayıda kümeye böler. Alt kümelerden birisini eğitim kümesi olarak kabul ederek sistemi eğitir. Ardından bu eğitim sonucunu diğer bir alt küme üzerinde sınar (ki bu kümeye sınama kümesi (validating set) veya test kümesi (test set) ismi verilir). Bu işlemi belirtilen küme sayısı kadar tekrarlayarak sisemi iyileştirmeye çalışır.

Son seçenek olan “percentage split” ise, verilen oranda kümeyi ikiye böler ve ilk kümeyi eğitim ikinci kümeyi ise test amaçlı kullanır. Örneğin %66 bölümün anlamı, kümenin ilk %66 kısmının eğitim sonraki %34 kısmının ise test amaçlı kullanılacağıdır.

Yorumlar

  1. özge

    İyi akşamlar hocam,

    Wekayı denemek istedim Experimenter dan open file deyip IMDB nin arff uzantılı dosyasını açmak istediğimde bir hata ile karşılaştım .Başka arffleri eklemeye çalıştığımda da aynı hatayı alıyorum acaba hatamın sebebi nedir. Yazınızda laboru eklemişsiniz benim dosyanın içeriği mi açılmaya uygun değil çözemedim.Bir fikriniz varmı acaba hocam?

    İyi çalışmalar..

  2. Şadi Evren ŞEKER Article Author

    Tam olarak aldığınız hata nedir? Bir de experimenter’dan arff uzantılı dosya açamazsınız. Sanırım yukarıdaki adımları takip ettiğiniz için sorun oldu. Sizin mesajınızdan sonra tekrar kontrol ettim, yazıdaki hatayı düzelttim. Doğrusu arff dosyasını açmak için WEKA’yı ilk çalıştırdığını ekranda, Tools menüsünün altındaki ARFF Viewer programını çalıştırmanız. Yazıda sehven Experimenter olarak geçmiş, katkınız için teşekkür ederim.

    başarılar

  3. elif

    slm hocam ,.data uzantılı dosyayı weka da kullanamk içinonu arff dosyasına cevirmek gerekiyor deil mi,, yani uzantısını nasıl degiştirecez ? tşk ler

  4. Şadi Evren ŞEKER Article Author

    Ne yazık ki bu şekilde otomatik arrf dosyasına çevirim yapan yeterli programlar bulunmuyor. Internette online olarak çevirim yapan bir iki program bulmuştum ancak yeterli başarıda değildi. En güzeli dosyayı açıp dosya üzerinde 5-10 dakika kadar vakit harcayarak çevirim yapmanız. Arrf dosyasının yapısı weka’nın sitesinde detaylıca anlatılmış, başlangıç kısmında her alanın ismi ve tipi belirtilecek ardından veri kısmı başlayacak. Şayet çok fazla sayıda dosya çevirmek istiyorsanız elbette elle hepsini değiştirmek zor olabilir, bu durumda belki bir kod yazarak kendiniz çevirirseniz daha yerinde olur.

    Başarılar

  5. burak

    hocam çalışmalarınız çok güzel ellerinize sağlık. mümkün olduğunca takip etmeye çalışıyorum yazılarınızı. size bir sorum olacaktı hocam. ben libSVM yi bir türlü weka ya tanıtamadım hocam bana yardımcı olursanız sevinirim. Weka nın paket yöneticisini bir türlü çalıştıramadım hocam. Bunu bana açıklarsanız çok sevinirim. iyi günler dilerim.

  6. Şadi Evren ŞEKER Article Author

    WEKA’nın paket yöneticisi ile tam olarak neyi kastediyorsunuz bilmiyorum ama WEKA üzerinden SVM kullanmak için wlsvm kullanabilirsiniz indirmek ve kurulum için adresi aşağıdadır:
    http://www.cs.iastate.edu/~yasser/wlsvm/
    Ayrıca WEKA kullanarak içinde bulunan libSVM bağlantısını kullanmak istiyorsanız, libsvm indirdikten sonra CLASSPATH ortam değişkenine (environment variable) tanıtmanız yeterlidir. Bunun için de aşağdaki yazı faydalı olabilir:
    http://www.bilgisayarkavramlari.com/2009/09/04/classpath-sinif-yolu/

    Başarılar

  7. Aytunc

    Merhaba Hocam;
    Ben weka explorer bölumünde J48 ağacında bir veri seti incelettim output olarak aldıgım bölümde Detailed Accuracy By Class kısmındaki sonuçların nasıl çıkarıldığını anlayamadım.Bilgilendirebilirmisiniz acaba,Teşekkürler

  8. Şadi Evren ŞEKER Article Author

    Sanırım sonuçlardan bahsediyorsunuz. Buradaki bilgiler aslında temel veri madenciliği bilgisi gerektirir (Veya istatistik, veya makine öğrenmesi). Bazıları ile ilgili daha önce yazılar yazmıştım.

    Mesela FP ve TP değerleri (sırasıyla False Positive ve True Positive) aşağıdaki yazıda açıklanmıştı:

    http://www.bilgisayarkavramlari.com/2013/01/20/tip-1-ve-tip-2-hatalar-type-1-and-type-2-error-rates/

    F-Measure olarak geçen değer ise yine aşağıdaki yazıda var:

    http://www.bilgisayarkavramlari.com/2010/09/30/f1-degerlendirme-f1-scoring/

    Ancak diğerleri (sanırım sizin durumunuzda ROC, Precision ve Recall bulunuyor) için ne yazık ki henüz yazı eklemedim. Siteye ilk fırsatta bunları da eklemeye çalışırım (aslında yukarıdaki ilk bağlantıda verdiğim yazıda geçen tip 1 hata maximum precision ve tip 2 hata ise maximum recall değeridir ancak buradan anlaşılması biraz zor olabilir daha detaylı bir yazı yazmaya çalışacağım)

    Başarılar

  9. Ali

    Bu SVM SMO J48 gibi algoritmaların genel olarak ne iş yaptıkları nasıl çalıştıkları haklarında kafamızda oluşabilecek kısa bilgiler var mı? Hepsi sınıflandırma yapıyor ama nasıl yapıyor, neleri hesaplıyor? gibi …
    Bilgilendirseniz veya kaynak gösterebilirseniz sevinirim.

  10. Şadi Evren ŞEKER

    Sitede zaten bu algoritmaları anlatmıştım. Bütün sınıflandırma algoritmaları yok ama çoğu var. Aşağıdaki yazılara bakabilirsiniz.

    Sınıflandırma (Classification) ve sitedeki bazı sınıflandırma algoritmalarına bağlantı içeren yazı: http://bilgisayarkavramlari.sadievrenseker.com/2013/03/31/siniflandirma-classification/
    Sizin bahsettiğiniz sınıflandırma yöntemleri:
    C4.5 Ağacı J48 ile aynı sayılır: http://bilgisayarkavramlari.sadievrenseker.com/2012/11/13/c4-5-agaci-c4-5-tree/
    Genel olarak karar ağacı öğrenmesi: http://bilgisayarkavramlari.sadievrenseker.com/2012/04/11/karar-agaci-ogrenmesi-decision-tree-learning/
    http://bilgisayarkavramlari.sadievrenseker.com/2008/12/01/cok-sinifli-dvm-multiclass-svm/
    http://bilgisayarkavramlari.sadievrenseker.com/2008/12/01/svm-support-vector-machine-destekci-vektor-makinesi/
    http://bilgisayarkavramlari.sadievrenseker.com/2008/12/01/dogrusal-olmayan-dvm-non-linear-svm/

    Şayet bunlar yeterli değilse ihtiyaç duyduğunuz bilgiyi söyleyin onunla ilgili bir yazı yazmaya çalışayım.

  11. Engin

    teşekkürler hocam test option kısmı baya açıklayıcı oldu sadece classify> linearRegression kısmını eclipse içinde kullanmam gerekiyor framework olarak swing düşünüyorum inputtan parametreleri alıp bu classify den hesaplatarak outputa atmam gerekiyor linearRegression un çalışma mantığını anlatabilir misiniz hocam , saygılar…

    İstanbul Üniveritesi Bilgisayar Müh.

    1. Şadi Evren ŞEKER

      Şayet sorunuz linear regression kavramının nasıl çalıştığı ise aşağıdaki yazıda bulunuyor:
      http://bilgisayarkavramlari.sadievrenseker.com/2013/01/26/linear-regression-dogrusal-ilkelleme/

      şayet sorunuz weka ile bu işlemin nasıl yapılacağı yönündeyse, yukarıdaki adımları aynen izleyeceksiniz, sadece 5. adımda SMO örneği için yapılan kısmı linear regression ile değiştireceksiniz. Yani Classify altındaki linearRegression seçeneğini seçeceksiniz.

      Son olarak sanırım java kodunun içerisinden bir Weka kütüphanesine ulaşmak istiyorsunuz, bunun için sitede bir yazı yayınlamıştım diye hatırlıyorum ama bulamadım. Vakit bulabilirsem böyle bir yazıyı sitede yayınlarım ve buradan bağlantısını paylaşırım.

    2. Şadi Evren ŞEKER

      aşağıdaki yazıyı ekledim burada weka içerisindeki kütüphanelere kod ile nasıl müdahale edileceği bilgisi var:

      http://bilgisayarkavramlari.sadievrenseker.com/2015/01/08/java-dilinde-weka-ile-kod-gelistirilmesi/

      Sizin probleminize özel olarak bir sınıflandırıcı kodu da aşağıdaki şekilde eklenebilir:

       import weka.classifiers.trees.J48;
       ...
       String[] options = new String[1];
       options[0] = "-U";            // unpruned tree
       J48 tree = new J48();         // new instance of tree
       tree.setOptions(options);     // set the options
       tree.buildClassifier(data);   // build classifier
      

      bu örnekte J48 veya literatürdeki yakın ismi ile C4.5 sınıflandırıcısının kodu verilmiş, siz benzer şekilde Weka’nın API içerisinde linearRegression sınıfını bulup kullanacaksınız.

      1. Engin

        geri dönüş için teşekkür ederim hocam ben kütüphaneyi ekledim kütüphaneden linearRegressionu çekebiliyorum frameworkte seçtiğim optiona göre hesaplatıp sonucu outputa atmaya çalışacam bu output textarea olabilir . Normalde wekadan çalıştırınca log şöyle görünüyor

        426 java -cp weka.jar weka.classifiers.functions.LinearRegression
        -t /Users/et/Downloads/ludensSheet2.arff -x 2 — -S 1

        tek fark bunu wekadan değil de javanın herhangi bir framework ünde yapmak bir de IudensSheet.arff yi kullanmak araştırmaya devam ediyorum geri dönüş için tşk ederim

  12. Berk

    Merhaba

    Weka’ya yüklediğimiz veri setinde boş kayıtlar olabiliyor bizde veri üzerinde flitre veya sınıflandırma özellikleri kullanılarak değişiklik yapabiliyoruz. Boş kayıtlar üzerinde herhangi bir değişiklik yapmazsak weka veriyi nasıl kullanacaktır? Ör: boş değerli satırları ihmal edecek yada tüm datayı boş değerler ile birlikte alıp kullancak.

    Teşekkürler,

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir