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

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

Merhaba, Veri Madenciliği üzerine olan eğitim yazılarımızdan birindesiniz. Bir önceki bölümde sizlerle kaggle.com üzerinde ki popüler başlangıç yarışmalarından biri olan, Titanic: Machine Learning from Disaster projesine başlamıştık. CRISP-DM metodolojisini takip ettiğimiz için, ilk bölümde “Data Understanding” yani veriyi anlamak üzerine yoğunlaşmıştık. Bu bölümde, bir sonra ki aşama olan “Data Preparation” yani veriyi hazırlamak üzerine yoğunlaşacağız.

KNIME üzerinde, veriyi anlamak üzerine kullandığımız tüm araçları proje ilerlerken çalışma alanımızda karışıklık olmaması amacıyla, tek bir “Metanode” içerisinde topladım (R-1.1). Bunu yapmanın yolu, tek bir Metanode içerisine koymak isteğiniz tüm araçları seçerek, sağ tık ile “Collapse in Metanode” seçeneğini seçmeniz. Çalışma alanımızı boşalttığımıza göre, yola koyulalım.

R-1.1

Veriyi inceledik ve kendimize bir takım notlar çıkarttık. Siz de birinci yazıyı okurken, kendi kişisel notlarınızı çıkartmış olmalısınız. Veri Madenciliği yaparken, takip ettiğimiz metodolojiye göre adımları dikkatlice izlemek çok önemli. Bu yazıda, benim aldığım notlardan bir kısmını beraber uygulayacağız. Bunlardan ilki “Survived” kolonununda ki verilerin integer olması sorunu. Bildiğiniz gibi verimizde belirtilen kişinin yaşayıp, yaşamadığını gösteren “Survived” isimli bir kolonumuz bulunmaktaydı. Bu kolonda, 1 — Hayatta Kaldı, 0 — Öldü şeklinde yorumlanabileceği çıkarımını yapmıştık. Ancak 1 ve 0, integer oldukları için numeric verilerdir. Numeric veriler ise, birbirleri arasında bir sıralamaya tabii tutulabilir. Bildiğiniz gibi, matematiksel olarak 1, 0’dan büyük bir sayıdır. Biz veriyi anlama kısmında, bu kolonun anlamının ne olduğunu öğrendiğimiz için, hayatta kalma ya da ölme arasında sayısal olarak bir sıralama yapılamayacağını, bunlara daha çok bir kategori gibi bakılabileceğini anlamıştık( Veri Madenciliği lügatında bu tarz veriler, “Binary Attributes” olarak geçer). Bu sebeple, bu kolonu integer’dan string değerlere çevirmeliyiz ki, model oluştururken nominal bir veri muamelesi görebilsin. Bunu yapabilmek için, KNIME bize güzel bir tool sunmakta. Aracımızın ismi “Number To String”. Hemen node repository’e giderek, arama kutucuğunun yardımıyla node’umuza ulaşıyoruz ve çalışma alanımıza ekliyoruz. Veri setimizle bağlantısını kurduktan sonra, yapmamız gereken bir kaç ayar bulunmakta ( R-2.2).

R-1.2

“Configure” ile bu ayarlara gidip, ekran görüntüsünde gösterildiği gibi ayarlamalarımızı yapıyoruz. Include kısmında numeric veriden string’e çevirmek istediğimiz kolonu bırakıyoruz ve diğer kolonları Exclude kısmına geçiriyoruz. OK-Execute tuşuna bastıktan sonra, node’umuzu çalıştıralım ve sonucu görmek için sağ tıklayıp “Transformed input” seçeneğini seçelim(R-1.3).

R-1.3

Gördüğünüz gibi, Survived kolonu artık string değerlere dönüştü. Veriyi Hazırlama konusunda ilk adımımızı atmış olduk. Ancak işimiz henüz bitmedi. Yukarda da gördüğünüz gibi, bazı kolonların altında “Missing Values” yani eksik verilerimiz bulunmakta. Eksik verilere karşı önlem almamız, bize bu tür verilere karşı direnci olmayan algoritmaları kullanmak konusunda yardımcı olmakla birlikte, daha iyi modeller oluşturmamızı da sağlayabilir. “Age” , “Cabin” ve “Embarked” kolonu altında bir takım eksik veriler bulunmakta. Cabin kolonunda ki eksik verilere, herhangi bir ön işlem yapmamayı tercih ediyorum çünkü oldukça fazla eksik veri bulunmakta ve değerler kabin numaralarını belirttiği için, oluşturmak istediğimiz modeli kötü yönde etkilemesi muhtemel bir kolon. Ancak aynı zamanda, kabin kolonunu verimden çıkartmakta istemiyorum çünkü kabinlerin konumu insanların hayatta kalmasında önemli bir rol oynamış olabilir. Aslında bu çıkarımları, Veriyi Anlamak kısmında kendimize sorular sorarak yapmıştık. Şimdilik “Age” kolonuna bir ön işlem yaparak yolumuza devam edelim. Ben boş olan değerleri, genel yaş ortalaması ile doldurma yolunu izleyeceğim. Bunun için “Missing Value” node’unu çalışma alanımıza ekliyoruz ve ayarlamalarını yapmaya başlıyoruz.

R-1.4

“Column Settings” sekmesine geçiyoruz ve “Age” kolonumuzu seçiyoruz. Sağ tarafta eksik verileri ne şekilde doldurmak istediğimizi seçeceğiz. Bu yazı için, olabildiğince anlaşılır yolları izlediğimiz için, “Mean” yani ortalamayı seçiyoruz ve OK diyoruz. Burada ayrıca “Embarked” kolonunda ki eksik verilere de işlem yapmayı tercih edebilirsiniz, Embarked string verilerden oluştuğu için, farklı doldurma metodları mevcut. Node’u çalıştırdıktan sonra, output table’a baktığınızda “Age” kolonunda ki eksik verileri ortalama değer olan 29.699 değeri ile doldurulduğunu göreceksiniz. Eksik veri ön işlememizi de bu yazı için tamamladık, dediğim gibi kendi denemenizde daha ileriye gidip “Embarked” verisine de eksik veri ön işlemesi uygulayabilirsiniz. Denemekten korkmayın.

Şimdi yolumuza veri üzerinde işimize yaramayacağını düşündüğümüz kolonları, veriden tamamen çıkartmak ile devam edeceğiz. Benim veriyi anlama aşamasında yaptığım kişisel çıkarımlara göre, “Name” kolonu bizim oluşturmak istediğimiz model için amaca uygun olmayan veriler içeriyor. Kimliksek veriler(burada isim-soyisim bilgileri), her kişi için özel ve farklı oldukları için, ezberleme dışında makineye öğrenim açısından bir şey kazandırmayacaktır. Bu kolonu veriden nasıl çıkartacağımıza gelirsek, KNIME yine bize tek bir node ile kolay bir çözüm sunmakta. “Column Filter” aracı, bize sütunlar üzerinde filtreleme yapabilme özelliği sunuyor ( R-1.5).

R-1.5

“Include” kısmına verimizde kalmasını istediğimiz, Exclude kısmına ise veriden çıkartmak istediğimiz sütunları ekliyoruz ve OK diyoruz. Sağ tıklayıp filtered table’a bakarsanız, “Name” kolonunun veriden çıkartıldığını göreceksiniz.

Örnek olması açısından, bu yazımızda bir takım veri hazırlama araçlarını kullanarak bir veri ön işleme şablonu oluşturduk. Geçen yazıdan sonra yaptığınız çıkarımlara dayanarak, daha farklı ve çeşitli veri hazırlama metodlarını deneyebilir ve bunların efektifliklerini model oluşturma aşamasında gözlemleyebilirsiniz. Veri Bilimi , Veri Madenciliği ve Makine Öğrenmesi alanlarında daha fazla yazılarımı ilerleyen günlerde blog’a yükleyeceğim. Bir sonra ki yazıda, artık son aşama olarak modelimizi oluşturacağız ve daha sonrasında sonuçları nasıl kaggle.com’a yükleriz bunu göreceğiz. Herkese iyi çalışmalar…

Part 1 : Knime ile Veri Madenciliğine Giriş Projesi ( Bölüm 1 — Veriyi Anlamak)

Kaynaklar:

https://www.byrnedata.com/blog/2017/3/9/using-knime-for-kaggle-titanic-survival-model-part-2-models

Data Mining. Concepts and Techniques, 3rd Edition, Jiawei Han

--

--

Ozan Yurtsever
IKU Deep Learning

Software Engineer and Entrepreneur primarily working on web technologies.