Yeni Başlayanlar İçin Python İle Karar Ağaçları

0 5.485

Her ne kadar derin öğrenme makine öğrenmesi için günümüzde en gözde konu olsa da, karar ağacı temelli algoritmalar gerçek dünya yarışmalarını domine etmektedir. Kaggle yarışmalarının kazananlarının yarısından fazlasının karar ağacı temelli yöntemleri benimsediğini biliyoruz. Bu yazıda Python temelli hafifsiklet bir karar ağacı iskeleti (framework) olan Chefboost ile nasıl gerçek dünya problemlerine odaklanacağımızı inceleyeceğiz. İskelet, ID3, C4.5, CART ve Regresyon ağaçları gibi sıradan karar ağaçları algoritmalarını kapsarken Adaboost, Rastgele Ormanlar (Random Forest) ve Eğim Arttırmalı (Gradient Boosting) gibi ileri teknikleri de içermektedir.

Yazılım iskeletini kullanarak bir kaç satır python kodu ile modellerimizi geliştirebileceğiz. Algoritmaların matematiksel temelleri bu yazımızın odağının dışında kalması sebebiyle merak edenleriniz linkler üzerinden algoritmaların detaylarını öğrenebilirler.

Hafifsiklet Bir İskelet

Markette hali hazırda XGBoost, LightGBM gibi çok güçlü gradyan arttırmalı iskeletler bulunmakta. Her ikisinde de elinizdeki veri setinin nümerik olmayan alanlarını modelleme safhasından önce nümerik değerlere dönüştürmeniz beklenmekte. Hele ki öznitelik kategorik bir alansa (şube kodu gibi nümerik değer büyüklük küçüklük belirtmiyorsa) XGBoost bunu sizden one-hot encoding ile dönüştürmenizi beklemekte. Chefboost’a veri setini olduğu gibi aktarmanız yeterli olacaktır. Veri tiplerinin hiç bir önemi bulunmamakta.

Dahası modellenmiş karar ağaçları yalnızca python if cümlelerinden oluşan dedike python dosyaları olarak saklanmaktadır. Dolayısıyla modellenmiş karar ağaçlarını kolayca okuyabilecek, anlayabilecek ve manipüle edebileceksiniz.

İskeletin Kurulumu

Yazılım iskeletini kurmak için en kolay yöntem Python Package Index PyPI aracılığıyla kurulumu yapmanız. Komut satırında aşağıdaki komutu çalıştırmanız yeterli olacaktır.

pip install chefboost

Alternatif olarak kod repo’su GitHub‘ta da paylaşılmış durumda. Kurulumu pip üzerinden yapmak istemiyorsanız tek yapmanız gereken aşağıdaki komutu komut satırında çalıştırmak.

git clone https://github.com/serengil/chefboost.git

Komut satırı size sevili gelmiyorsa repo adresine girdikten sonra klonla veya indir sonrasında da zip’i indir tuşu aracılığıyla iskelet kodunu bilgisayarınıza indirebilirsiniz.

Merhaba, Dünya!

Chefboost dizinine Dispatcher.py adında bir dosya yaratıyoruz. Chefboost.py ve Dispatcher.py dosyalarının aynı dizinde olduğundan emin olmalısınız.

ID3 Algoritması

ID3, en eski ve en yaygın karar ağacı algoritmasıdır. Algoritma sizden nominal öznitelikler ve nominal hedef değerleri beklemektedir. Bu algoritma için dataset/golf.txt veri setini kullanabiliriz. Veri seti eskiye ait hava durumu, sıcaklık, nem ve rüzgar bilgileriyle birlikte golf oynama kararlarını içermektedir.

golf.txt

Karar ağacı modelinin kurulması fit komutu ile yapılmaktadır. Bu komuta veri setini ve algoritmayı  beslememiz yeterli olacaktır.

Fit komutunun çağırılması outputs/rules dizini altında karar kurallarını oluşturacaktır. Oluşturulan karar ağacı ilk önce hava durumunu kontrol etmektedir. Örneğin havanın kapalı olduğu durumda (overcast) golf oynuyormuşuz. Havanın güneşli (sunny) olduğu durumda ise nem (humidity) durumuna bağlı olarak golf oynama kararımız değişiyormuş. Görüldüğü gibi karar ağacının çıktılarını okumak ve anlamak oldukça kolay.

Tahminleme

Bir karar ağacı modeli kurulduğunda artık yeni örneklemler için tahminde bulunabiliriz. Predict fonksiyonuna karar ağacı modelini ve tahmin etmek istediğimiz öznitelikleri aktaracağız.

Eğitim setimizdeki bir örnekleme ait tahminde de bulunabiliriz. Aşağıdaki kullanım veri setinin ilk elemanını tahmin edecektir.

Tabi bir for döngüsü kurarak eğitim setindeki tüm örneklemleri de tahmin ettirebiliriz.

C4.5 Algoritması

C4.5 algoritması nominal ve nümerik öznitelikler için çalışabilirken hedef değeri olarak ID3 algoritmasındaki gibi nominal değer beklemektedir. İskelet klasöründeki dataset/golf2.txt veri seti C4.5 algoritması için uygun bir veri setidir.

golf2.txt

ID3 algoritmasında olduğu gibi algoritmayı belirtmek yeterli olacaktır.

C4.5 algoritması nümerik öznitelikleri binary olarak her değer için ikiye böler ve kazanım oranının en yüksek olduğunu karar verirken kullanır. Örneğin hava sıcaklığı veri setinde nümerik bir değerken, karar ağacı 83’ten büyük olup olmama durumuna göre dallanmıştır. Algoritma aslında nümerik değer bir değerden büyük ya da küçük şeklinde nominal değere dönüştürmüştür.

ID3 algoritması bilgi kazanımını karar verme adımında kullanırken C4.5 kazanım oranını kullanmaktadır.

CART algoritması

Classification and Regression Trees yani sınıflandırma ve regresyon ağaçlarının kısaltması olan CART algoritması C4.5’ta olduğu gibi nümerik veya nominal öznitelikler, nominal hedef değeri için çalışmaktadır.

CART algoritması karar noktalarını belirlerken GINI indeks değerini kullanmaktadır.

Alaadin’in Cini
Regresyon Ağaçları

Şimdiye kadar bahsettiğimiz tüm algoritmalar hedef değerini nominal değerler olarak beklemekteydi. Regresyon ağaçları ise sadece nümerik hedef değerleri için çalışmaktadır. İskelet klasöründe bulunan dataset/golf3.txt ve dataset/golf4.txt veri setleri bu algoritma için uygundur. Bundan öncesinde golf oynama kararımızı tahmin etmeye çalışmışken bu veri setlerinde golf oyuncularının sayılarını tahmin etmeye çalışacağız.

golf4.txt

İskelete bu tip bir veri seti için farklı bir algoritma besleseniz bile çalışma zamanında algoritmayı regresyon ağacı olarak güncelleyecektir. Regresyon ağacı algoritmasını aşağıdaki şekilde belirtebilirsiniz.

Bu sefer aşağıda görüldüğü şekilde nümerik değerler fonksiyonun sonucu olarak döndürülecektir.

Regresyon ağaçları standart sapma değerlerini karar verme noktalarında kullanmaktadır.

İleri teknikler

Şimdiye kadar sıradan karar ağacı algoritmalarından bahsettik. İleri teknikler de aslında bu algoritmaları kullanacaklardır.

Rastgele ormanlar

Veri setini n parçaya böldükten sonra her bir parçaya sıradan karar ağacı algoritmalarının beslenmesi ile rastgele ormanlar algoritması çalışmaktadır. Sınıflandırma problemleri için n adet karar ağacının cevabından fazla olan, regresyon problemleri için ise cevapların ortalaması sonuç olacaktır. Kararların eşitlik durumunun önüne geçmek için n değerinin asal bir sayı olması beklenmektedir.

İskelet dizini altındaki dataset/car.data veri setine rastgele ormanlar algoritmasını uygulayabiliriz. Veri seti binlerce örneklemden oluşmaktadır.

car.data

Farklı olarak rastgele ormanlar uygulamayı aktif hale getiriyoruz ve veri setini 5 parçaya bölerek 5 farklı ID3 karar ağacı oluşturmasını bekliyoruz.

Eğitim sonunda rules_0.py’dan rules_4.py’a kadar 5 farklı karar seti outputs/rules altında oluşturulacaktır. İskelet tahminde bulunurken bu 5 karar ağacına sorduktan sonra en baskın cevabı size cevap olarak döndürecektir.

Gradient Boosting (Gradyan Arttırmalı)

Bir regresyon ağacı yaratılacak ve onun yaptığı hatalar ile ikinci, ikincinin hataları ile üçücü şeklinde devam ederek karar ağaçları yaratacağız ve en sonunda tahmin ederken de tüm bu karar ağaçlarına sorarak cevapların toplamını cevap olarak kabul edeceğiz.

Gradient Boosting

Her iterasyonda hatamızın düşmesini bekliyoruz.

Gradient boosting yalnızca regresyon problemleri için uygulanabilmektedir. Eğer elinizde bir sınıflandırma probleminiz varsa bunu önce regresyon problemine dönüştürmeniz sonrasında algoritmayı uygulamanız gerekmektedir. Tabi Chefboost sizin yerinize bunu yapmaktadır.

Konfigürasyonda bu sefer gradient boosting machines uygulamayı aktif hale getiriyoruz ve ard arda kaç ağaç oluşturulmasını istediğimizi belirtiyoruz.

Tahmin ederken iskelet oluşturulan 7 karar ağacına da sorarark cevaplarını toplayarak size cevap olarak döndürecektir.

Adaboost

Rastgele ormanlar ve gradyan arttırma algoritmalarında sıradan karar ağacı algoritmalarını uygularken Adaboost tek seviyeli karar noktalarını kullanmaktadır. Boydan cinsiyet kararı verecekseniz 170’den büyükler erken, küçükler kadındır demek gibi. Bu şekilde tek seviyeli bir karar noktası büyük orada hata yapacaktır. Adaboost bu şekilde zayıf sınıflandırıcıları bir araya getirerek kuvvetli bir sınıflandırıcı oluşturacaktır.

Adaboost’a ait basit sınıflandırıcılar

Konfigürasyona adaboost’u kullanmak istediğimizi söylemek yeterli olacaktır.

Nihai karar ağırlıklı sınıflandırıcı sonuçlarının toplamı kadar olacaktır.

Adaboost’un kararı

Adaboost’u güçsüz işçilerin bir araya gelerek çok ağır taşları yerinden ittirmesi gibi düşünebilirsiniz.

Adaboost benzeri bir süreç

Toparlarken

Bu yazıda python bazlı hafifsiklet bir karar ağacı iskeletini nasıl kullanacağımızı inceledik. Bir kaç satır kod ile ID3, C4.5, CART, Regreson ağaçları gibi sıradan karar ağacı algoritmalarını ve Adaboost, Rastgele Ormanlar, Gradyan Arttırma gibi ileri tekniklerini kullanabiliyorsunuz.

Bir projeyi desteklemenin bir çok yolu bulunmakta, GitHub repo‘sunu yıldızlamak bunlardan birisi.

Oynatma Listesi

Şimdilik İngilizce olmakla birlikte aşağıdaki Youtube playlist ile de algoritmaları nasıl kullanacağınızı adım adım görebilirsiniz.

Bu yazı A Beginner’s Guide to Decision Trees in Python yazısından Türkçe’ye çevrilmiştir.

Email adresiniz yayınlanmayacaktır.