Weka Knowledge Flow

Yazan : Şadi Evren ŞEKER

Bu yazının amacı, veri madenciliği çalışmalarında sıkça kullanılan araçlardan birisi olan WEKA yazılımının “knowledge flow environment” ekranını basit bir örnek üzerinden anlatmaktır.

Knowledge flow ekranının amacı, Weka içerisinde bulunan çok sayıdaki kütüphaneye göresel bir ortamdan erişebilmektir.

Amaç: Bu örnekte, Weka’nın kurulumu ile birlkte gelen, hazır veri kümelerinden (data set) cpu.arff dosyasını kullanarak sınıflandırma (classification) yapmaktır.

Bu yazı aşağıdaki adımlardan oluşmaktadır:

  1. Adım: Wekanın Çalıştırılması ve Knowldge Flow Ekranına Erişim
  2. Adım: ArffLoader bileşeni ile bir arff dosyasının yüklenmesi
  3. Adım:Yüklenen veri kümesi üzerinden hedef sınıfın belirlenmesi
  4. Adım: Veri kümesinin test ve eğitim (test and training) kümelerine ayrıştırılması
  5. Adım: Sınıflandırıcının eklenmesi
  6. Adım: Sınıflandırıcının sonuçlarının ve hata miktarının değerlendirilmesi
  7. Adım: Sonuçların gösterilmesi.

1. Adım: Wekanın Çalıştırılması ve Knowldge Flow Ekranına Erişim

Weka’nın çalıştırılması veı Knowledge Flow Ekranına erişim.

Weka ilk defa çalıştırıldığında, aşağıdakine benzer bir ekran açılacaktır.

Yukarıdaki görüntüde de gösterildiği üzere KnowledgeFlow düğmesine tıklayarak ekranımızı açıyoruz. Aşağıdaki gibi bir ekran belirecektir:

Bu ekranda, ekranın üst kısmında bulunan araçları kullanarak, veri akış düzeneği hazırlayacağız ve bu düzenek üzerinden bir sınıflandırma çalıştıracağız.

2. Adım: ArffLoader bileşeni ile bir arff dosyasının yüklenmesi

İlk adım olarak veri dosyamızı, oratama yüklemek için gerekli olan aracmızı ekrana ekleyelim. Ekleyeceğimiz araç, en üstte bulunan gruplardan, DataSources grubu altındaki “Arff Loader” aracıdır.

Ekranımıza eklemek için basitçe bu aracın üzerine tıkladıktan sonra fare imlecimiz büyük bir artıya dönüşecektir. Ardından ekran içerisinde bir yere tıklanınca, Arff Loader aracının logosunun bir kopyası çalışma ekranına eklenecektir.

İkinci adımda ArffLoader aracının istediğimiz veri dosyasını yüklemesi için ister çift tıklayarak ister de sağ tıkladığımızda açılan menüden, “configure” seçeneğini seçerek dosya yükleme diyaloğunu açalım:

Açılan diyalog, genelde Wekanın kurulum dizinini doğrudan işaret edecektir ve bu dizinde, kurulum ile birlikte gelen data klasörü altında cpu.arff dosyası bulunacaktır.

Dosyayı işaretleyip onaylayalım.

İkinci adımda, yüklediğimiz dosyanın bir sınıf seçicisi tarafından işlenmesi gerekmektedir. Buradaki amaç, dosya içerisindeki çok sayıdaki kolondan, hangisinin sınıflandırmada kullanılaca olan hedef sınıf olduğunu belirtmektir. Bunu daha iyi anlatabilmek için arff dosyasının içeriğini göstermek istiyorum:

Dosyanın 9. Satırından itibaren dosya içeriği başlamaktadır. Bu dosyanın 9. Satırında bulunan relation komutu ile kurulmak istenen ilişkiye bir isim verilmiştir. Ardından gelen attribute satırları her kolonun ismidir. Sırasıyla MYCT, MMIN, MMAX şeklinde gitmektedir. Dikkat edileceği üzere 7 kolon ismi bulunmaktadır. Ardından 18. Satırda başlayan data komutu artık bundan sonraki her satırın bir kayıt olduğunu (instance) belirtmektedir. Gerçekten de 19. Satırdan itibaren her satırda yeni bir kayıt olup her kayıtta da 7 kolon bulunmaktadır. Kolonlar arff dosya yapısında virgül ile ayrılmaktadır. Örneğin veri kümemizin (data set) 3. Kayıdının CHMIN değeri , 8 olarak görülmektedir (21. Satırın 5. Kolonu. Hazır bahsediyorken, arff dosyasının kolon komutlarını da açıklamak istiyorum “@attribute MYCT real” şeklinde geçen satırın anlamı, bu kolondaki verilerin birer reel sayı olduğudur. Veri kümesindeki değerlere göre farklı tipler verilebilir.

Bu ufak bilgilendirmeden sonra konumuza dönelim, ClassAssigner ile amaçlanan bu 7 sınıftan hangisini hedef sınıf seçtiğimizdir. Yani diğer 6 sınıftaki verilerle acaba 7. Sınıftaki verileri doğru tahmin (prediction) edebilecek miyiz (ilişkiyi (correlation)) doğru kurabilecek miyiz? Şeklinde soruyu tefsir etmek mümkündür.

3. Adım:Yüklenen veri kümesi üzerinden hedef sınıfın belirlenmesi

Evaluation grubu altındaki Class Assigner bileşenini seçerek ekranımıza ekliyoruz:

Sırada, eklediğimiz bu iki bileşeni, birbirine bağlamak var. Bunun için, weka’da her zaman, verinin kaynağından hedefine doğru gitmemiz gerekiyor. ArffLoader üzerinde sağ tıklayarak açılan menüdeki connections seçeneği altındaki dataSet seçeneğini seçeceğiz. Burada connections pasif görülecektir, aslında başlık olduğu için pasif görülüyor kısaca siz açılan menüden dataSet seçeneğini seçebilirsiniz (Biraz görsel tasarım problemleri bulunuyor J )

Seçimin ardından, şimdiye kadar eklediğimiz bileşenlerin 4 köşesinde birer mavi kutucuk belirecektir. Bu bağlama haline geçtiğimizi ifade ediyor ve bağlayacağımız bileşen olan ClassAssigner üzeirne fare ile giderek tıklıyoruz.

Aşağıdaki şekilde iki bileşen birbirine bağlanmış oluyor. Artık yüklenen arff dosyası önce ClassAssigner bileşenine gelecek ve burada işlenecek demiş oluyoruz. Şimdi ClassAssigner bileşenimizi ayarlayabiliriz. ClassAssigner bileşenine çift tıklayarak veya sağ tuşla tıkladığımızda açılan menüden configure seçeneğini seçerek aşağıdaki ayar ekranını açıyoruz:

Bu ekranda, basitçe bizim veri kümemizde bulunan kolon isimleri görülecektir. Bunlardan hedefimizi olan kolonu seçiyoruz ki zaten seçili olarak gelen class bizim hedefimiz olacaktır. OK diyerek diyaloğu onaylıyoruz.

4. Adım: Veri kümesinin test ve eğitim (test and training) kümelerine ayrıştırılması

Sırada CrossValidationFoldMaker bileşenini yerleştirmek var. Yine evaluation grubu altında bulunan bileşeni, ekranımızdaki boş bir alana yerleştiriyoruz:

Bu bileşenin amacı, test ve eğitim kümeleri (test and training set) oluştururken kullanacağımız yöntemi “cross validation fold” olarak ayarlamaktır. Çift tıkladığımızda veya sağ tuşla tıkladığımızda açılan ekrandan configure seçeneğini seçtiğimizde açılan ayar ekranına bakacak olursak:

Kendi ayarı 10 ve 1 olarak ayarlı gelecektir. Bunun anlamı, veri kümemizi 10 eşit parçaya bölüp her seferinde 9 parçayı eğitim ve 1 parçayı test amacıyla kullanacak olmasıdır. Bu işlem 10 kere tekrarlanacak ve her seferinde test için ayrılan parça bir kaydırılacak, neticede de her parça 1 kere test için kullanılmış ve 10 kere eğitim için kullanılmış olacaktır. Sonuçta 10 çalışmadan çıkan neticelerin ortalaması alınacak ve başarı buna göre ölçülecektir. (bu yazı wekada araçların kullanımı için hazırlandığından bir paragraf kısa açıklama ile iktifa ediyor ve konuya devam ediyorum).

Açılan diyaloğu gördükten sonra kapatıp, ClassAssigner bileşeni ile bağlayabiliriz. Yine bağlantıya kaynaktan başlayacak ve ClassAssigner üzerine sağ tuşla tıkladıktan sonra açılan pencereden dataSet seçeneğini seçecek (connections altında) ve bileşenlerimizin köşelerinde mavi kutular çıktıktan sonra CrossValidationFoldMaker bileşenine tıklayacağız:

Neticede iki bileşen birbirine bağlanmış olacak ve aralarındaki ilişki dataSet olarak atanmış olacaktır.

5. Adım: Sınıflandırıcının eklenmesi

Sırada sınıflandırıcımızı (classifier) seçmek var. Bu örnek kapsamında K-NN (k nearest neighborhood, en yakın k komşu) algoritmasını kullanmak istiyor olalım. Basitçe Classifiers grubu altında bulunan IBK bileşenini ekranımızda boş bir alana yerleştiriyoruz.

Ufak bir not. IB1 sınıflandırıcısı K=1 için çalışan knn algoritmasıdır ve IBk ise k değerinin atanabildiği sınıflandırıcıdır. Heme bağlantı için CrossValidationFoldMaker bileşenine sağ tuşla tıklayıp açılan menüden önce traininSet seçip Ibk ile bağlayalım:

Ardından aynı işlemi testSet için tekrar edelim:

Neticede iki bağlantı da (testSet ve trainingSet) iki bileşen arasındaki bağlantıda yerini almış olmalıdır.

Bunun anlamı, ilgili sınıflandırıcımız olan IBk sınıflandırıcımızı, CrossValidationFoldMaker bileşeninin hem eğitim hem de test amacıyla besleyecek olmasıdır. Yani crossValidationFoldMaker bileşeni ürettiği hem test hem de train kümelerini IBk sınıflandırıcısına yollayacaktır.

Şimdi IBk bileşenine çift tıklayarak veya sağ tuşla tıklanınca açılan menüden configure seçeneğini seçtiğimizde açılan ekrandan ayarlarını yapalım:

İlk açılışta gelen ayarlardan KNN değerini 3 yapalım. Bunun anlamı en yakın 3 komşuyu dikkate alacağıdır. Diğer ayarlarının detayını, konumuz dışında olduğu için girmeden yazı kapsamında atlyorum. KNN değerini 3 yaptıktan sonra OK düğmesine basarak diyaloğu onaylıyoruz.

Buraya kadar olan aşamalarda, verimizi yükledik, hedef sınıfımızı belirledik, veri kümemizi eğitim ve test verileri olarak böldük ve sınıflandırıcımıza vererek sınıflandırma işlemini yaptık.

6. Adım: Sınıflandırıcının sonuçlarının ve hata miktarının değerlendirilmesi

Şimdi sırada sınıflancırıcımızı çıkarmış olduğu verileri değerlendirmek var. Evet sınıflandırıcımız çalışacak ama ne kadar başarılı bir sonuç çıkaracak? Bunu değerlendirmek için classifierPerformanceEvaluator bileşenini, Evaluation grubundan seçerek ekranımıza ekliyoruz ve batchClassifier seçeneği ile sınıflandırıcımız olan IBk bileşenini, ClassifierPerformanceEvaluator bileşenine ekliyoruz.

Artık sınıflandırıcımızdan çıkan sonuçları da değerlendirebilecek durumdayız. Geriye bu sonuçları görüntülemek kalıyor.

7. Adım: Sonuçların gösterilmesi.

Weka bize yine çeşitli alternatifler sunuyor. Biz basitçe Visualization grubu altında bulunan TextViewer seçeneğini ekranımıza yerleştirerek, sınıflandırıcımızın performans değerlendirmesini çıktısını bu yeni bileşene text seçeneği ile bağlıyoruz:

Artık düzeneğimiz (system) hazır. Yapacağımız son şey, düzeneğimizi çalıştırarak sonuçları görmek. Bunun için düzeneğin en başındaki arffLoader üzerinde sağ tuşla tıklayarak, açılan menüden startLoading seçeneğini seçmemiz yeterlidir.

Seçimin ardından, ekranın en altında bulunan status ekranında çalışma ile ilgili bilgiler belirecektir. Ne kadar sürdüğü (mesela yukarıdaki ekran görüntüsünde 45 dakikadır bu yazıyı yazıyor olduğum için ekranın 45.22 dakikadır açık olduğunu gösteriyor diğer adımlar gösterilmeyecek kadar kısa sürdüğünden onlarda bir zaman bilgisi belirmiyor) geçilen adımlar ve neticeleri gösterilmektedir.

Sonuç olarak sınıflandırıcımızın başarısını görmek için son adımda eklediğimiz TextViewer üzerinde sağ tuşa tıklıyor ve showresults diyoruz:

Yeni bir pencere açılıyro ve bu pencerede, sınıflandırıcımızın başarısını gösteren neticeler beliriyor:

Burada, wekanın kullandığı hata ölçüm değerlerine göre sınıflandırıcımızın başarısı gösterilmekte.

Örneğimiz burada bitiyor ve basitçe Wekanın bir sınıflandırma işlemini kullanacak kadar bilgiyi bu yazı kapsamında verdiğimi umuyorum. Ancak ufak bir not daha eklemek istiyorum. Çok sık kullanıldığı için scatterPlotMatrix bileşenini kullanarak eğitim verisini görsel olarak göstermek için aşağıdaki eklentiyi yaptım:

Yine ArffLoader bileşenine sağ tuşla tıklayarak startLoading dedikten sonra ScatterPlotMatrix üzerinde sağ tuşla tıklayıp, showplot dersek aşağıdakine benzer şekilde eğitim kümemizdeki verilerin görsel değerlerini görebiliriz.

Ayrıca yine bir dipnot olarak, DataSink grubu altındaki bileşenler, çıkan sonuçları veri olarak, dosya, arff dosyası, veri tabanı gibi ortamlara yazmak için kullanılmaktadır. Yazıyı daha karmaşık ve okunması zor hale getirmemek için yazının içerisinde bileşen detaylarına veya çok sayıdaki bileşenlerin her birine değinemiyorum ancak ilgilendiğiniz bir bileşen olursa, yazının altındaki yorum kısmını kullanarak sorabilirsiniz, gelen sorulara cevap vermeye çalışacağım.

Yorumlar

  1. Muhammed

    Selamlar,

    Kitabınızı çalışıyorum ve WEKA’yı Oracle ile uygulamak istiyorum. Ancak WEKA ile Oracle bağlantısını sağlamak biraz kompleks geldi. Destek alabileceğim bir link önerebilir misiniz, ya da eğer uzun bir işlem değilse kısaca anlatır mısınız? Oracle 11GR2’ye WEKA 3.7.10 ile uzaktan erişmek istiyorum bu arada.

    Teşekkürler

  2. bilgisay

    Tam olarak nerede problem yaşıyorsunuz? Olay kısaca şöyle, Weka açıldıktan sonra knowledge flow ekranına girerek data sources sekmesi altındaki database loader öğesini projenize taşıyın (bu yazıdaki arff loader veya kitaptaki csv loader alternatifi olarak).

    Ardından sağ tuşla tıklayarak açılan menüden configure seçeneğini seçerseniz aşağıdaki gibi bir ekran açılır:

    Weka DB yükleme ekranı

    Bu ekranda basitçe veritabanının bağlantı adresini, kullanıcı adı, şifre ve veri tabanından nasıl verinin çekilmesini istiyorsanız bunu düzenleyen sorguyu (query) yazmanız yeterli.

    İsterseniz bir deneyin problem yaşadığınız nokta olursa yazın yardımcı olmaya çalışayım.

    1. Şadi Evren ŞEKER

      Öncelikle weka’nın kaynak koduna eklemeniz gerekir. Weka’yı indirdiğinizde kaynak kodunu içeren weka-src.jar isimli bir dosya da gelir. Bu dosyayı açıp içerisinde ilgili klasöre (örneğin bir karar ağacı algoritması ekliyorsanız /weka/classifiers/trees/ adresine ) kendi kodunuzu bir java dosyası olarak ekleyin. Grafik arayüzünden kullanmak için (knowledge flow gibi) weka/gui/GenericProperitesCreator.props dosyasının içerisinde ilgili kayıtları ekleyin (daha önceden bulunan kayıtlara benzetebilirsiniz) Ardından derleyip weka’yı (weka.jar dosyasını) oluşturun. Eklediğiniz yeni sınıf ekrandaki listede görülecektir.
      Başarılar

Bir cevap yazın

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