Knime ile Veri Madenciliği : Karar Ağaçları

Knime ile Veri Madenciliğine Giriş  :

Bu yazımda hep birlikte Knime Programı ile örnek bir veri madenciliği çalışması yapacağız.

Öncelikle senaryomuzu anlatayım.

Tıpta bazı hastalıkların özellikle yüksek tansiyon gibi sebebi bilinmeyen hastalıklar vardır. Bu hastalıkların sebebi genetik olabilir veya başka tetikleyici durumlar olabilir. Sebebi bilinmediğinden dolayı hekimler bu hastalığı tedavi etmek yerine kontrol etmeye yönelik ilaçlar önerir. Birden çok değişik etken maddeli ilaçlar vardır ve hekimler deneme yanılma yöntemi ile  doğru etken maddeli ilacı bulmaya çalışırlar.

Biz elimizdeki temizlenmiş ve örneğimizi yaparken hızlı olması amacıyla küçültülmüş gerçek bir veri setinden , veri madenciliği yöntemleri ile hangi hastada hangi ilacı kullanmamız gerektiğini tahmin etmeye çalışacağız.

Veri Setini İndirmek İçin Tıklayınız.

Veri Setimizi İnceleyelim.

Age : Yaş
Sex : Cinsiyet
BP : Tansiyon
Cholestero : Kolesterol
Na : Sodyum
K : Potasyum
Drug :(İlaç ) Burası tahmin etmeye çalışacağımız sınıfımızdır.

 

  • Proje Oluşturmak.

Knime programını açıp New sekmesinden  “New Knime Workflow” sekmesine tıklayıp yeni bir çalışma sayfası oluşturalım.

  • Veri setini içeri aktarıp okutmak.

Verimiz bir .xls dosyasıdır yani Excel dosyasıdır. Knime programımızı açıp orada “Excel Reader” tetikleyicisini çalışma alanımıza taşıyalım. Sol alt tarafta bulunan Arama kısmına Excel Reader (XLS) olanı seçmemiz gerekiyor.

Böyle bir modülü çalışma sayfamıza ekledikten sonra sağ tıklayıp “Configure” sekmesine tıklayarak

Resimde görüldüğü gibi ayarları yapıyoruz. Alt tarafta bulunan refresh butonuna tıklayarak veriyi yenileyebiliriz ve anlık görüntüleyebiliriz.
Hemen ardından düzenli çalışmak amacıyla Excel Reader modülünün adını Node 1 yerine “Excel Okuyucu” olarak değiştirelim ve modülünün çalışmaya hazır anlamına gelen “Sarı” konuma geldiğine emin olalım.

Sonrasında modüle sağ tıklayarak “Execute” sekmesine tıklayalım. Eğer yaptığımız işlemlerde herhangi bir sorun yoksa ve okuma başarılı ise görünüm aşağıdaki gibi olacaktır.

 

  • Veriyi İnceleyelim.

Veri setimizi sanal makine üzerinde aldıktan sonra veri ile ilgili neler yapılabilir ona bakalım. Öncelikle verilerin dağılımı incelemek için dinamik bir histogram kullanabiliriz. Bunun için sol tarafta bulunan arama kısmına “Histogram” yazdıktan sonra interactive olanı çalışma alanımıza sürükleyelim ve excel ile bağlayalım. Excelin sağ tarafında ki oku Histogram modülünün sol tarafında ki ok ile bağlamamız gerekli.

Bu şekilde bir çalışma alanına sahip olduktan sonra Histogram modülüne sağ tıklayarak “Execute and Open Views” diyerek dağılımları inceleyebiliriz.

Varsayılan olarak “10” farklı şekilde verileri ayırır. Bunu düzenlemek için “Bin Settings”  sekmesinden “Number of Bins” kısmından düzenleme yapabiliriz ve varsayılan olarak sol taraftaki ilk satırdan başlar bunu da aşağıdaki şekilde değiştirebilirsiniz.

Örnek olarak bir Histogram çalışması yapalım. Yaş sütununu “Genç-Orta-Yaşlı” şeklide 3′ e ayırmak istersem “Age” seçili iken “Number of Bins” sayısını 3 yaparak bu sonuca ulaşabilirim.

Resmi yorumlayacak olursak Yaş sütununu 3 farklı gruba ayırdım. 0-26 arası Genç  ,26-52 arası Orta ve 52-78 arası Yaşlı diyebilirim. Bu işlemi tahmin edeceğimiz sınıf ve diğer sütunlar içinde yapıp dağılımları incelenmelidir.

  • Verilerin Birbirine Karşı Dağılımı

Verilerin kendi içinde nasıl gruplandığını gördük birde birbirleri ile bir etkileşimi var mı ona bakalım. Buna görmek için çalışma alanımıza “Scatter Plot” modülünü koyup “Excel Okuyucu” ile birbirlerine bağlayalım.

Not : Scatter plot modülünü kullanabilmek için sütunlarımızın ikisininde sayısal değerlere sahip olması gerekmektedir. Scatter Plotu çalışma sayfamıza ekledikten sonra böyle bir alana sahip olmamız gerekiyor.

Scatter Plot modülüne sağ tıklayarak “Execute and Open Views” diyerek çalıştırıp görüntüleyelim. İlk başta varsayılan olarak Age ile Sex sütununu karşılaştıracağı için anlamlı bir şey görmemiz mümkün değildir.

Aynı ekran üzerinde “Column Selection” kısmına tıklayarak X eksinene “Na” sütununu ve Y eksenine “K” sütununu koyalım. Burada ki amacımız Sodyum ile Potasyum arasında bir ilişki olup olmadığını görmektir.

Grafiğimiz bu şekilde olmalıdır.

Bariz olarak bir toplanma yada boşluk göremediğimiz gibi veriyi incelemekte zordur. Bu sebepten dolayı birde veriyi renklendirerek görmeyi deneyelim. Bunun için arama kısmına “Color Manager” yazıp çalışma alanımıza sürüklememiz yeterlidir.

Color Manageri ekledikten sonra bağlantıyı sırasıyla Excel Okuyucusu — Color Manager — Scatter Plot yapmamız gereklidir.

Bağlantılarımız resimde görüldüğü gibi olduktan sonra Scatter Plot modülüne sağ tıklayarak “Execute and Open Views” dedikten sonra yeniden X eksenine Na ve Y eksenine K sütunlarını koyalım.

Veriyi biraz incelediğimizde 0.035 NA değerine sahip bütün hastalar için drugY ilacının başarılı sonuçlar verdiğini görüyoruz. Bunun yanında dikkatli bakınca Na ile K değerleri arasında bir lineer bağlantı göze çarpmaktadır.

Bu bağlantı bize bir takım sonuçlar verebilir öncelikle lineer bağlantının matematiksel formülünü çıkararak ikisi arasında bir bağlantı olup olmadığına bakalım. Matematiksel formülü birbirlerine bölümleridir.

Na / K   adında yeni bir sütun ekleyip yeni veriler yaratmanın nasıl bir yarar sağlayacağını deneyelim. Bunu yapabilmek için çalışma alanımıza bir tane Java Snippet (Simple) modülü ekleyelim.

Bu modül bir takım java kodlarını yazabilmemize olanak sağlar. Yapmamız gereken şey bir değişken oluşturup bütün bir veri seti boyunca her hasta için NA / K oranını hesaplamak.

Java Snippet modülünü “Excel Okuyucu” modülüne bağladıktan sonra Java Snippet’e çift tıklayarak Method kısmına aşağıdaki gibi 3 satırlık bir kod yazdım.

Resimdeki gibi ayarları yaptıktan sonra Kayıt edip “Execute” yapmamız yeterlidir. Tabloyu görmek için Java Snippet modülüne sağ tıklayarak Appended Table dememiz yeterlidir.

Bu şekilde bir takım sonuçlar yarattıktan sonra Bir karar ağacı kullanarak nasıl sonuçlar ile karşılaşacağız ona bakalım.

 

Bunun için sol tarafta bulunan Analytics  — Mining — Decision Tree — Decision Tree Learner modülünü kullanabiliriz.

 

Bu karar ağacı modülünü Java Snippet modülüne bağlıyorum. Çalışma sayfamız bu şekilde olması gerekiyor.

Hemen sonrasında Karar Ağacı modülüne sağ tıklayarak Configure sekmesinden gerekli ayarlamaları yapıyorum.

1.1 Burada tahmin edilmesini istediğim kısmı yani sınıfımı seçiyorum. Bizim veri setimizde bu kısım drug.

1.2 Burada karar ağacı algoritmasını seçeceğim Gini İndex ile Gain Ratio kendi içlerinde birer matematikleri ve hesaplanma şekilleri vardır.(Detaylı bilgi için Veri Madenciliği – Gökhan Silahtaroğlu – Sayfa 68)

1.3 Ağaçlarda düzeltme işlemi yapılsın mı kısmıdır. Buradan MDL yi seçebiliriz.

1.4 Örüntü sayısı ; Yani kaç tekrardan sonra bunu bir örüntü olarak kabul edip işleme almalıyım. Bir şeyin örüntü sayılabilmesi için minimum 2 tekrar gereklidir. Biz bu örnekte minimum 4 tekrar istediğimizi belirttik.

 

Bu şekilde ayarlarımızı yaptıktan sonra Karar ağacımıza sağ tıklayıp “Execute and Open Views” yaparak ağacı görüntüleyebiliriz.

 

 

  • Verinin Yorumlanması

Karar ağacında gördüğünüz gibi en önemli ayırıcı soru Na_K değeri olmuştur. Bu değer 14,82 den büyükse drugY ilacı %100 başarılı olacaktır. Karar vericiler için en önemli parametre ilk olarak Na_K değeridir.

Eğer bu değer 14,82 sayısının altında ise karar verici BP yani Tansiyon değerine bakması gerekiyor. Tansiyonu NORMAL olan hastalar için drugX ilacı % 100 başarı sağlamıştır. Tansiyonu HIGH olan bir hasta için ise karar verici iki ilaç ile deneme yanılma yoluyla karar vermek zorundadır.

BP oranı LOW olan hastalar için bakılması gereken bir sonra ki değer ise Cholesterol değeri olmuştur. NORMAL olanlar için  drugX ilacı %100 başarı sağlar. HIGH olanlar için ise drugC ilacı %100 başarı sağlayacağını söylemektedir.