JAVA dilinde WEKA ile kod geliştirilmesi

Yazan: Şadi Evren ŞEKER
WEKA, geliştiriliş şekli itibariyle JAVA dili üzerinde yazılmış açık kaynak kodlu bir yazılımdır. Bunun anlamı, WEKA içerisinde bulunan ve bu bölüme kadar ara yüzleri kullanarak eriştiğimiz bütün işlemlere, JAVA dilinden yapılacak basit nesne tanımlama ve metot çağırmaları ile ulaşabileceğimizdir.
Basit bir WEKA kodu
Weka ile yazılım geliştirme işlemine basit bir kod ile başlayacağız. Amacımız bir CSV dosyasını ARFF dosyasına çevirmek olsun. Bunun için daha önce anlatılan ve Weka içerisinde bulunan CSV Loader ve ARFF Saver sınıflarını kullanacağız (daha detaylı bilgi için Weka Knowledge Flow (Bilgi Akışı) başlıklı yazıya bakabilirsiniz)
Weka üzerinde bu kütüphaneler Weka’yı bilgisayarımıza indirdiğimiz anda gelmektedir. Weka kurulumu sırasında gelen weka.jar dosyası bütün bu kodları içinde barındırmaktadır. Bu kodda kullanacağımız kütüphanelere aşağıdaki import satırları ile ulaşmak mümkündür.

import weka.core.Instances;
import weka.core.converters.ArffSaver;
import weka.core.converters.CSVLoader;

Yukarıdaki import satırlarının tam olarak yolunu bulabilmek için Weka’nın sitesinde bulunan API kullanılabilir.
Weka, açık kaynak kodlu bir proje olduğu için bütün doküman bilgilerine ve son sürümüne weka.sourceforge.net adresinden erişmek mümkündür. Nitekim API adresine de “http://weka.sourceforge.net/doc/overview-summary.html” yazılarak ulaşılabilir.

Klasik javadocs ile üretilmiş sayfalardan veya Java API’sinden alışık olunacağı üzere sınıflar, paketler ve her sınıfın altındaki bilgilere bu ara yüzden erişilebilir.
Bizim kullanacağımız CSVLoader ve ARFFSaver sınıfları ise import satırlarında da görüldüğü üzere weka.core.converter altında bulunmaktadır. Buradan, kullanacağımız sınıf hakkında daha detaylı bilgiye erişebiliriz.
Kodumuz 3 bölümden oluşacaktır:
• Girdi dosyasının yüklenmesi
• CSV yapısının ARFF yapısına çevrilmesi
• ARFF dosyasının kaydedilmesi
Yukarıdaki bu yapıya göre dosyaların yüklenmesi ve kaydedilmesi, temel Java bilgileri ile çözülebilir. Bu aşamada yeni ve önemli olan bilgi, aradaki dönüşüm aşamasıdır.

CSVLoader loader = new CSVLoader();
Loader.setSource(sourceFile);
Instances data = loader.getDataSet();

// save ARFF
ArffSaver saver = new ArffSaver();
saver.setInstances(data);
saver.setFile(new File(newFile));
saver.setDestination(new File(newFile));
saver.writeBatch();

Yukarıdaki kodda bu dönüşüm işlemi görülmektedir. CSVLoader kullanılarak bir loader objesi oluşturulmuş, ardından giriş dosyasından bu kayıtlar okunarak yine bir Weka sınıfı olan Instances sınıfından data objesi tanımlanmış. Bu data objesine CSVLoader nesnesinin veri kümesi döndürülmüştür.
Kodun ikinci kısmında ise bir ArffSaver sınıfı oluşturulmuş ve bu sınıfın içerisine daha önce oluşturduğumuz data nesnesi parametre olarak verilmiş, ardından dosya ismi, dosya konumu saver nesnesine verilerek writeBatch() metodu ile dosyaya kayıt gerçekleştirilmiştir.
Yukarıdaki kritik kısmı alıntılanan kodun tamamı aşağıda verilmiştir.

import weka.core.Instances;
import weka.core.converters.ArffSaver;
import weka.core.converters.CSVLoader;

import java.io.*;

public class csvarff {

   public static void main(String[] args) throws Exception {

      // CSV yükleme aşaması
      CSVLoader loader = new CSVLoader();
      loader.setSource(new File("girdi.csv"));
      Instances data = loader.getDataSet();

      // ARFF kayıt aşaması
      ArffSaver saver = new ArffSaver();
      saver.setInstances(data);
      saver.setFile(new File("cikti.arff"));
      saver.setDestination(new File("cikti.arff"));
      saver.writeBatch();
   }
}

Bir cevap yazın

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