Veri Bilimi Araçları ve Uygulamarı Bölüm 1- KNIME Analytic Platform

Veri Bilimi Araçları ve Uygulamarı Bölüm 1- KNIME Analytic Platform

Merhaba, bir seri olmasına karar verdiğim veri bilimi yazılımlarını incelediğim ve uygulama ile destekleyeceğim seriinin ilk yazısında Java ile yazılan ve Eclipse üzerine inşa edilen workflow tarzı görsel proglama ile veri bilimi ve yapay zeka uygulamaları hazırlanabilen KNIME uygulamasının kurulumu, çok kullanılan GNU/linux sistemler üzerinde yapılandırması ve bir makine öğrenmesi uygulamasıyla kullanımını inceleyeceğim. Hazırladığım uygulamayı kaydedip bir github reposunda paylaşmayıda planlıyorum.

KNIME

KNIME Analytic, Java ile yazılmış bir veri bilimi ortamıdır. Bu yazılım çeşitli düğümler kullanarak bir workflow şeklinde görsel programlama yapmaya imkan sağlar ve ileri seviye kodlama bilmeden bile bir veri madenciliği uygulaması geliştirmeye imkan sağlayan bir uygulamadır. Çok çeşitli ve zengin bir plugin merkezine sahiptir ve akademide de oldukça sık kullanılır. Görsel programlamanın yanında kullanıcının oluşturduğu scriptleri ve kodları da kullanabiliceği genişletilebilir bir veri bilimi platformudur. KNIME bir çok işletim sistemine kurulumu desktekleyen çapraz platform bir yazılımdır. İndirmek için linke tıklayabilirsiniz. Bu yazıda KNIME'ı sadece GNU/Linux dağıtımları için inceleyeceğim.

Yapılandırma

KNIME uygulamsının tar.gz uzantılı arşivini istediğiniz lokasyona extract edebilirsiniz.

~$ tar xvf knime-analytic-?.?.?.tar.gz -C /opt/knime

Dizin içinde KNIME'ın tüm kütüphane ve plugin dosyaları mevcuttur. Knime isimli bir binary dosya bulunur ve bunu kullanarak uygulamayı başlatabilirsiniz. Fakat çalışmak için java 'ya ihtiyacı vardır.

JAVA 11

KNIME Analytic Java 11 ve daha üstü sürümlerle çalışıyor. Bu sebeple KNIME için openjdk-11 veya openjdk-latest paketlerinden birini kurabilirsiniz. Kullandığınız dağıtıma göre ana depodan bu jdk' ları rahatlıkla indirip kurabilirsiniz. Örneğin RHEL tabanlılar için ;

~$ sudo dnf/yum install java-11-openjdk # or java-latest-openjdk

Veya Debian tabanlılar için

~$ sudo apt install openjdk-11-jdk # or default-jre

Burada önerebileceğim bir başka seçenek ise Belsoft tarafından yayınlanan libertica jdk sürümleridir. Bunlar opensource ve ücretsiz olarak dağıtılan java jdk sürümleridir. Standart ve full paket gibi bir çok seçenekle jdk indirebilir ve kurabilirsiniz. Bir çok işletim sistemine yönelik kurulum scriptleri veya arşivleri [bu sayfada] (bell-sw.com/pages/downloads/#mn) bulabilirsiniz. KNIME Analitic için standart jdk-11-lts yeterlidir. Linux için kullanacağımız tar.gz paketini indirip bir dizine extract edilmelidir. Daha sonra JAVA_HOME ve PATH değişkenleri güncellenerek java kurulumu tamamlanır.

~$ mkdir -p ~/libertica-jdks
~$ tar xvf /path/to/downloaded-jdk.tar.gz -C ~/libertica-jdks/

~$ export JAVA_HOME=~/libertica-jdks/jdk-11.?.?
~$ export PATH=$PATH:JAVA_HOME/bin
## after this
~$ java -version

Bu oturumda jdk kullanılabilir. Eğer sürekli bu konumda kullanmak isterseniz JAVA_HOME ve PATH için export kullanılan satırları .bashrc veya zsh kullanıyorsanız .zshrc dosyanıza eklemelisiniz.

Java kurulumundan sonra knime kurulan dizine gidip ./knime scriptini çalıştırmanız yeterlidir. Eğer sisteminizde birden fazla jdk kurulu ise spesifik olarak ./knime -v /path/to/jdk-11/bin ile jdk-11 in yolunu verebilirsiniz.

Eğer bir dektop entry oluşturmak isterseniz bunun için;

[Desktop Entry]
Type=Application
Name=KNIME Analytic Platform
Description=Data Science Environment
Exec=/path/to/knime-folder/knime_4.?.?/knime
Icon=/rpath/to/knime-folder/knime_4.?.?/icon.svg
Categories=Development;Science;
terminal=false

entry'i ~/.local/share/application/knime.desktop isimli bir dosya oluuşturup ilgili lokasyona kaydedebilirsiniz. Eğer exec komutunda problem yaşarsanız. exec komutunda parametre olarak ./knime scriptini çalıştıran bir shell script i verebilirsiniz. Eğer görüntü sunucusu olarak wayland kullanıyorsanız uygulama içinde de problem yaşayabilirsiniz. BU sebeple bashrc veya zshrc veya hangi shell i kullanıyorsanız konfigurasyon dosyanıza veya KNIME'ı başlatan script dosyanınızın içine export GDK_BACKEND=x11 satırını ekleyebilirsiniz. Zaten x11 kullanıyorsanız sorun yaşamayacaksınız. KNIME ı başlatan shell script örneğin;

#/bin/bash
export GDK_BACKEND=x11
./knime -v /path/to/java-jdk-11/bin

şeklinde olabilir.

knime.png

Extention kurulumları

KNIME uygulaması birçok extentiona sahipti.Kullanıcı sayısının fazla olması ve genişletilebilir olması diğer veri madenciliği uygulamaları arasında onu zirveye taşıyan en önemli faktörlerdir. Uygulamada File menüsünden Install KNIME Extentions... seçerek arayüzü açabilirsiniz. İstediğiniz eklentiyi arayarak kurulum yapabilirsiniz. Örneğin Twitter API a bağlanıp veri çekebilmek için kullanılması gereken KNIME twitter connector eklentisini kurabilirsiniz. Gerekli bağımlılık paketleri ile birlikte kurulumu yapılacaktır. Yeni pluginleri okuyabilimesi için uygulmamanın yeniden başlatılması gerekecektir.

knime extention.png

Ardından Node Repository bölümünden istediğiniz düğümü arayarak projenize ekleyebilirsiniz.

knime twitter.png

KNIME ile Makine Öğrenmesi Uygulaması

Bu bölümde bir makine öğrenmesi uygulaması hazırlamak için bir adet hazır bir veri seti kullanılacaktır. UCI Machine Learning Repository sinde bulunan HCV Data Dataset isimli verisetini kullanılarak KNME nodeları ile bir veri madenciliği workflow'u oluşturulacaktır. File menüsünden new project ile proje oluşturulur. Node Repository bölümünden file reader veya csv reader arayarak dosyamı projeye ekliyorum. Benzer şekilde yapmak istedğim işlemleri Node Repository'de arayarak projeme ekleyip çalıştırıyorum ve her işlem sonunda çıktıyı bir sonraki node'un girdisi olarak veriyorum.

Düğümlere sağ tıkladığımda yapılan işlemi konfigure edip daha sonra çalıştırıyorum. Yine sağ tıkladığımda menünün altında işlem sonucunda düğümün çıktılarını görebiliyorum. Aşağıdaki Normalize düğümü normalize edilmiş tabloyu ve modeli çıktı olarak sunmakta.

knime-menu.png

Bu uygulamada yapılan işlemlere aşağıdaki şekilde görülebilmektedir.

knime-uygulama.png

Uygulamada önce csv dosyasındaki veriler csv reader düğümü ile okunarak içindeki sex gibi kategorik değerler sayıya dönüştürülmesi için category to number düğümüne verildi. Bu düğümün çıktısı Id ve kategorik cinsiyet değerlerinin çıkarımlası için column filter düğümüne verildi. Çıktı olarak alınan veriseti Normalize düğümüne verildi. 0-1 normalizasyonu uygulanan veriseti %70 eğitim, %30 test olarak ayrılmak üzere Partitioning düğümüne verildi. Parçalardan eğiitim veriseti RProp MLP Learner düğümüne verilerek bir model oluşturuldu. Bu model ve test veriseti MultiLayerPerceptron Predicter düğümüne verilerek test edildi. Ve düğümün çıktısı Scorer düğümünde karşılaştırma matrisi ve başarımla ilgili score değerlerinin bulunduğu tabloya dönüştürüldü.

Perceptron modelimiz 1 hidden layer ve 10 nöron ile denendiğinde görüldü ki sırasıyla karşılaştırma matrisimiz ve başarım değerlerimiz;

knime-confusion.png

knime-score.png

olarak karşımıza çıkmakta. Oldukça başarılı bir model olduğu görülmekte fakat burada kullandığımız veriseti ham veri değildi. Veri seti üzeride veri ön işleme adımları uygulanmış halinin performansı %98 accuracy olarak karşımıza çıktı. Önişleme başarımı kesinlikle artıran bir faktördür. Eğer sizde ham veri seti ile direct olarak model oluşturursanız bu seviyede bir başarıma ulaşamadığını görebilirsiniz.

Bu verisetine uygulanan ön işleme adımları sırasıyla;

  • R ile eksik verilerin temizlenmesi
  • Smote ile ovesample veriseti dengeleme
  • R boxplot ile outlier temizliği
  • İkinci defa SMOTE ile veriseti dengeleme

Bu proje ve verisetini linkteki repo da bulabilirsiniz.

Kaynaklar ve proje