Knime ile Veri Madenciliği Giriş Projesi ( Bölüm 3 — Model Hazırlamak)

Ozan Yurtsever
IKU Deep Learning
Published in
6 min readNov 27, 2018

Merhaba, Veri Madenciliği üzerine eğitim yazılarımızdan birine daha hoşgeldiniz. Bildiğiniz gibi KNIME platformunu kullanarak, kaggle.com üzerinde bulunan başlangıç projesi Titanic: Machine Learning from Disaster üzerinde iki yazımızdan beri çalışmaktayız. Bu yazımız ise, başlatmış olduğumuz bu serinin son yazısı olucak. Takip ettiğimiz metodoloji CRISP-DM‘i sizlere bir kez daha göstermek istiyorum(R-1.1);

R-1.1

Bu serinin ilk yazısı olan Part 1 — Veriyi Anlamak kısmında, Business Understanding ve Data Understanding aşamalarını detaylıca ele almıştık. Serinin ikinci yazısı, Part 2 — Veriyi Hazırlamak kısmında ise Data Preparation aşamasını tamamlamıştık. Metodolojimize dayanarak, devam etmemiz gereken bir sonra ki aşama, Modeling yani Model Oluşturma aşaması . Aslında bundan önce üzerinden geçtiğimiz aşamalar, çok büyük önem taşısalarda, artık elimize çalışır bir sistemin geçmeye başladığı aşamalara daha yeni gelmiş bulunmaktayız. Özenle temizlediğimiz verimizi, bir öğrenme algoritması kullanarak model oluşturmaya çalışacağız. Bu yazı da, “Decision Tree Classification” yani “Karar Ağacı Sınıflandırması” algoritmasını kullanacağız. Bunun sebebi, karar ağaçlarının biz insanlar tarafından anlaşılır olmaya daha yatkın olması. Lafı uzatmadan uygulamaya geçelim, KNIME çalışma alanımızın son halini bir görelim(R-1.2);

R-1.2

Verimizi hazırlamak için kullandığımız 3 adet node’umuz çalışma alanımızda bıraktığımız yerde durmaktalar. Geçen yazımızda da kullandığımız, “Metanode” yöntemini bu 3 node üzerinde de kullanarak çalışma alanımızda kargaşayı önlemek istiyorum. Bunu nasıl yapacağınızı, bir önce ki yazıdan bulabilirsiniz(R-1.3).

R-1.3

Çalışma alanımızda yerimizi açtıktan sonra, model oluşturma işlemlerine başlayabiliriz. Bahsettiğim gibi, Karar Ağacı algoritmasını kullanacağız. Veri Bilimi, Makine Öğrenmesi ve Derin Öğrenme üzerine teorik eğitici yazılarımı da yakında blogumda paylaşıyor olacağım. Bu yazılar yardımı ile, KNIME gibi platformlarda kullandığınız bu tip algoritmaların çalışma mekanizmalarını öğrenebilirsiniz. Ancak şimdilik bu detaya inmeden, KNIME’ın bize sunduğu kolay arayüzünü kullanarak yolumuza devam edeceğiz. Arama kısmına, “tree” yazalım. Karşımıza çıkan node’lar arasından “Decision Tree Learner” node’unu sürükleyerek çalışma alanımıza bırakıyoruz. Bunu yaptıktan sonra, daha önce ön hazırlıktan geçirdiğimiz verimizi, Karar Ağacı Öğrenicisine bağlamamız gerekiyor. Verimizin ön aşamadan geçirilme aşamalarını, bir metanode içerisine sıkıştırmıştık. Bu metanode’dan bir çıkış alabilmek için, üzerine sağ tıklayıp, “Metanode” seçeneğini genişleterek “Reconfigure” üzerine tıklıyoruz. Karşımıza bir ayar penceresi gelecek ( R-1.3);

R-1.3

Bu pencereden öncelikle kırmızı okla gösterdiğim “Add” butonuna tıklayarak bir küçük pencerinin daha gelmesini bekliyoruz, daha sonra bu küçük pencereden mavi okla gösterdiğim kısımdan, Metanode’umuzdan yapacağımız çıkışın tipini belirliyoruz. “Data” seçtikten sonra ise, Finish ile ayar penceremizi kapatabiliriz. Bu ayarlamalar sonunda, Metanode’umuzun sağ tarafında bir çıkış oku belirmiş olmalı, buradan, yeni eklediğimiz Decision Tree Learner’ımıza bağlantı kurarak, model oluşturmaya devam edebiliriz(R-1.4);

R-1.4

Verimizi öğrenicimize bağladığımıza göre, sıradaki aşama öğrenicinin ayarlarını yapmak olucak. Decision Tree Learner’a sağ tıklayıp Configure tıklıyoruz. Karşımıza bir ayar penceresi açılacak ( R-1.5);

R-1.5

Yazımızın konu aldığı projemiz oldukça başlangıç seviye bir proje olduğu için, bu pencerede ki diğer ayarları olduğu gibi bırakıcaz. Sadece kırmızı okla gösterdiğim kısım olan, öğrenmek istediğimiz sütunu belirlediğimiz “Class column” kısmından “Survived” sütununu seçip, OK ile bu pencereyi kapatacağız. Bunu yapıp, öğrenici node’u çalıştıralım. Eğer trafik lambası yeşile döndüyse öğrenici başarılı olmuş demektir. Tebrikler, ilk makine öğrenmesi modelimizi oluşturmuş olduk. Decision Tree Learner’a sağ tıklayıp, View: Decision Tree View seçeneğini seçelim(R-1.6). Bu sayede öğrenicimiz, neyi nasıl sınıflandırmış bunu görebileceğiz.

R-1.6

Görebileceğiniz üzere, ağacımızın en üst kısmı olan, bizim kök(root) diye adlandırdığımız kutucukta, 0 yani ölmüş yolcuların %61,6 ve 1 yani yaşayan yolcuların %38,4 oranlarının olduğu gösterilmiş. Daha sonra, sınıflandırma açısından en uygun kolonun “Sex” yani Cinsiyet kolonu olduğuna karar verilmiş. Aşağı doğru oluşan dallara bakarsak, solda ki kutucuk olan “male”, Survived durumunun 0 halini kategorize ederken, female 1 halini kategorize etmekte. Karar Ağacımızın bu iki değişkeni, sınıflandırıcı olarak seçmesinde ki ana sebep, erkek yolcuların %81,1’i ölmüşken, kadın yolcuların %74,2’sinin kurtulmuş olmasıdır. Daha ağacımızın bu aşamasındayken bile, %81,1 ihtimalle erkek bir yolcunun ölmüş olduğunu doğru bilebiliriz. Ancak karar ağacımız öğrenmeyi burada kesmiyor, ve aşağı doğru dallanmaya devam ediyor. Bu dallanmayı görebilmek için, en alttaki dalların altında ki + butonuna basarak ağacımızı genişletiyoruz(R-1.7);

R-1.7

Karar ağacımız, “male” sınıfı içerisinde de başka sınıflandırmalar yapabileceğine karar vermiş ve iki ayrı dallanmalar yapmış. Aynısı “female” sınıfı için de geçerli. Erkek yolcuların, hayatta kalamamayla ilişkisini bulan karar ağacı, daha sonra aynı zamanda erkek yolcu olupta, yaşları 6,5’un altında olan yolcuların hayatta kalma oranlarının %66,7 olduğunu bulmuş. Bunun tam tersi, 6.5 yaş üstü yolcularda ise %83,2 gibi bir ölüm oranı bulunmakta. Buradan anladığımız kadarıyla, Titanic’te kadınlar, kurtarılma sırası olarak erkeklere göre yüksek bir önceliğe sahip olmuşlar. Ancak erkeklerin kurtulma yüzdesi çok düşük olsa da, 6.5 yaşın altında yaşları küçük erkeklerin kurtarılma sırasında yine öne çıkarıldığını görüyoruz. “female” kısmının alt dallarına baktığımız da ise, belirleyici kolonun “Pclass” yani Bilet Sınıfı olduğunu görüyoruz. Ağacımızın çıkarımına göre, 2.5 altında(1. ve 2. sınıf biletler) kalan bilet sınıfına sahip kadınların %94,7’si kurtarılırken, 2,5 üstü (3. sınıf bilet ) bilet sınıfına sahip kadınların yarısı hayatını kaybetmiş. Buradan da anladığımız kadarıyla, erkeklere göre kurtarılma sırasında cinsiyetsel bir avantaj sağlayan kadınlar, kendi aralarında ise bir nevi sosyal statülerine göre ayrılmışlar. Sosyal statü olarak anlamamızın sebebi, bilet sınıfı yüksek olan kadınların, daha zengin çevreden olmaları ve bunun da hayatta kalmalarında yardımcı olmuş olması. Bu ağacı sonuna kadar genişletip, tüm karar ağacı öğrenme mekanizmasını görebiliriz. Ancak şu an istediğimiz bundan ziyade, hazırladığımız modeli iş üstünde görmek olacak. Bunun için arama kısmından “CSV Reader” node’umuzu tekrar çağırıp, çalışma alanımıza sürüklüyoruz. İçine, daha önce kaggle.com’da Titanic projesinin sayfasından indirmiş olduğumuz “test.csv” dosyasını yükleyeceğiz. Yüklememizi yaptıktan sonra, tekrar arama kısmına giderek bu sefer “Decision Tree Predictor” node’umuzu çalışma alanımıza ekliyoruz. Yeni eklediğimiz iki node’u birbirleriyle bağladıktan sonra, “Decision Tree Learner” node’umuzun çıkışındaki mavi kare şeklinde ki model çıkışını, “Decision Tree Predictor” node’umuzun yine aynı şekilde ki model girişine bağlıyoruz(R-1.8);

R-1.8

Bağlantılarımızı kurduktan sonra, “Decision Tree Predictor” node’umuzu çalıştırıyoruz ve trafik ışığı yeşile döndüğü zaman, sağ tıklayıp “Classified Data” seçeneğine tıklıyoruz. Karşımıza, test verisi olarak yüklediğimiz tablo çıkacak. Ancak burada ek olarak, son sütundan sonra gelen “Prediction (Survived) ” sütunu bulunmakta. test.csv veri setinin ham halini açıp incelerseniz, içerisinde “Survived” kolonunun bulunmadığını görürsünüz. Bunun sebebi, test verisinin tek amacının bizim oluşturuduğumuz makine öğrenmesi modelinin çalışırlığını test etmemiz olmasıdır. Peki, biz bu tahminler doğruluğunu nasıl bileceğiz ? Modelimizin ne kadar başarılı olduğunu nasıl ölçeceğiz ? Bu soruların cevabı, CRISP-DM metodolojisinin devamında ki aşama olan “Evaluation” yani “Başarı Ölçme” kısmında işlenmesi gereken bir konu. Ancak elimizde ki veri, bir yarışmaya ait olduğu için başarı ölçme işini kaggle.com üstlenmiş durumda. Projede anlatıldığı gibi, “Classified Data” nızı düzenleyip proje sayfasına yüklediğiniz takdirde, kaggle sizin tahminlerinizin doğruluğunu gerçek “Survived” bilgileriyle karşılaştırıp, size bir başarı yüzdesi verecektir. Aslında yarışmanın amacı da, bu yüzdeyi “1” yani olabilecek en yüksek başarı oranı ile tamamlayıp, yarışmada 1. olmaya çalışmak. Bahsettiğim “Başarı Değerlendirme” kısmını size bırakıyorum, kaggle’a gidin ve şu ana kadar yaptıklarımızın ve sizin buna ekstradan kattığınız çalışmaların sonucunu yükleyin. Eğer bu yazı serisini bitirdiyseniz, yarışmaya katılıp başarınızı görmeyi de ihmal etmeyin. Tabii ki, yazı eğitim amaçlı ve detaylardan arındırılmış olduğu için, modelimizin mükemmel bir başarı yüzdesi almasını beklemiyoruz. Ancak üzerinde eklemeler ve denemeler yaparak, bu başarı yüzdesini arttırabileceğinizi de unutmayın. Serimiz burada sonlanıyor, başka yazılarda görüşmek üzere…

--

--

Ozan Yurtsever
IKU Deep Learning

Software Engineer and Entrepreneur primarily working on web technologies.