Python ile Karar Ağaçları (Decision Trees) Uygulaması

Makine öğreniminde en çok kullanılan sınıflandırma algoritmalarından biri olan karar ağaçları, oldukça basit bir algoritmadır. Verileri sınıflandırmak için karar kurallarını kullanarak çalışır ve bu kararları görselleştirerek mantığını kolayca açıklayabilir. Bu yazıda, Python programlama dilini kullanarak karar ağaçları ile nasıl sınıflandırma yapabileceğimizi öğreneceğiz. Örnek olarak, Iris veri kümesi üzerinden bir çiçeğin türünü tahmin etmeye çalışacağız.

Karar Ağaçları Nedir?

Karar ağaçları, gözetimli öğrenme modelidir ve verileri sınıflandırmak için karar kurallarını kullanır. Bu algoritma, kararlar ve sonuçlar arasında bir ağaç yapısında bağlantılar kurarak çalışır. Bu nedenle, adını da bu yapıdan alır.

Birçok makine öğrenmesi algoritması verileri daha soyut bir şekilde temsil ederken, karar ağaçları verileri daha somut bir şekilde temsil eder. Bu nedenle, karar ağaçları daha iyi yorumlanabilir ve anlaşılabilir.

Karar ağaçlarının en büyük avantajı görselleştirilmiş olmalarıdır. Kullanıcılar, ağaç yapısını inceleyerek modelin mantığını ve kararlarını kolayca anlayabilirler.

Örneğin, finansal bir kurum kredi başvurusunda bulunan müşteriler hakkında karar vermek istiyor olsun. Müşteriler hakkında bazı özellikleri (yaş, medeni durum, gelir durumu vb.) biliniyorsa, bu özellikler kullanılarak müşterinin kredi alıp alamayacağına karar verilebilir.

Bu durumda veriler çok boyutlu hale gelir ve bir karar tablosu oluşturmak zorlaşır. Bu durumda karar ağaçları devreye girer ve veri kümesini tek bir özelliğe göre ayırır. Örneğin;

  • Müşterinin yaşı 30’dan büyükse
  • Müşterinin yaşı 30’dan küçükse

Özellikler arasında birden fazla ayrım yapılabilir. Bu ayrımlara göre bir akış diagramı oluşturulur ve bu diagram bir ağaç yapısı oluşturur. Özelliklerin oluşturduğu her bir kök, yeni ayrımlar oluşturabilir. Her dalın sonunda ise sonuca ulaşılır.

Karar Ağaçlarının Özellikleri

Karar ağaçlarının sahip olduğu bazı özellikler şunlardır:

  • Doğruluk: Karar ağaçları verileri doğru sınıflandırarak yüksek doğruluk oranına sahip olabilir.
  • Görselleştirme: Karar ağaçları verileri görselleştirerek anlaşılabilirliği arttırır.
  • Kapsamlılık: Karar ağaçları çok sayıda veriyi işleyebilir ve karmaşık sınıflandırma problemlerini çözebilir.
  • Esneklik: Karar ağaçları farklı türdeki verilerle çalışabilir ve kolayca uyarlanabilir.

Karar Ağaçlarının Kullanım Alanları

Karar ağaçları, birçok alanda kullanılabilir. İşte bazı örnekler:

  • Tıp: Karar ağaçları hastalık teşhisinde kullanılabilir.
  • Pazarlama: Karar ağaçları müşteri segmentasyonu yaparak hedef kitle belirlemede kullanılabilir.
  • Maliye: Karar ağaçları kredi değerlendirmesi yaparak risk analizi konusunda yardımcı olabilir.
  • Üretim: Karar ağaçları kalite kontrol süreçlerinde kullanılabilir.
  • Sosyal Bilimler: Karar ağaçları anket verilerini analiz ederek sosyal eğilimlerin belirlenmesinde yardımcı olabilir.

Python ile Karar Ağaçları (Decision Trees)

Pandas kütüphanesi ile veri kümesini okuyup inceledikten sonra, DecisionTreeClassifier sınıfını kullanarak karar ağacı oluşturacağız. Bu sınıfı sklearn kütüphanesinden alacağız.

Kütüphanelerimizi projemize dahil ettikten sonra veri kümesini eğitim ve test veri kümesine ayıracağız. fit() fonksiyonu ile eğitim veri kümesinin özelliklerini modele vereceğiz ve predict() fonksiyonu ile de tahmin edeceğiz.

Aşağıdaki kodlar ile bu işlemleri gerçekleştirebiliriz:

# Kütüphanelerimiz dahil ediyoruz.
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import classification_report

# Iris veri kümesini yüklüyoruz.
iris = pd.read_csv('iris.csv')

# Veri kümesini inceleyip özelliklerimizi belirliyoruz.
iris.head()  # İlk 5 satırı görüntüle
X = iris.drop('species', axis=1)  # Özellikler
Y = iris['species']  # Sonuç değişkeni

# Eğitim ve test veri kümesine ayırıyoruz.
X_train, X_test, Y_train, Y_test = train_test_split(X,Y,test_size=0.2)

# Modelimizi oluşturuyoruz.
decision_tree = DecisionTreeClassifier()
decision_tree.fit(X_train,Y_train)

# Test veri kümesinden tahminler alıyoruz.
y_pred = decision_tree.predict(X_test)

# Sonuçlarımızı raporluyoruz.
print(classification_report(Y_test,y_pred))

Kodda ilk olarak pandas ve numpy kütüphanelerini dahil ettik. Daha sonra sklearn kütüphanesinden eğitim/test veri kümesine ayırma fonksiyonunu ve karar ağacı sınıfını dahil ettik.

read_csv() fonksiyonu ile iris veri kümesini yükledik. Veri kümesinin ilk 5 satırını görüntüleyip özelliklerimizi belirledik. Özelliklerimizi belirledikten sonra eğitim/test veri kümesine ayırdık.

Modelimizi DecisionTreeClassifier sınıfını kullanarak oluşturduk. fit() fonksiyonu ile eğitim veri kümesinin özelliklerini modele verdik. predict() fonksiyonu ile de test veri kümesinden tahminler aldık.

classification_report() fonksiyonu ile de sonuçlarımızı raporladık. Rapor sonucunda her tür için doğruluk oranlarını görebiliriz.

Aşağıdaki kodlar ile karar ağacımızı görselleştirebiliriz:

# Görselleştirme için gerekli kütüphaneler
from sklearn import tree
import matplotlib.pyplot as plt

# Görselleştiriyoruz.
plt.figure(figsize=(15,10))
tree.plot_tree(decision_tree,
               feature_names=iris.columns[:-1],
               class_names=decision_tree.classes_,
               filled=True)
plt.show()

Kodda ilk olarak matplotlib.pyplot kütüphanesini dahil ettik. Daha sonra plot_tree() fonksiyonunu kullanarak görselleştirme işlemini gerçekleştirdik.

Aşağıdaki görselde, eğitim verilerimiz üzerinden oluşturduğumuz karar ağacının çizimini görebilirsiniz:

Decision Tree Visualization

Ağacımızda her bir düğümde bir özellik ile ilgili bir ayrım vardır. Örneğin, en üst düğümde petal length < 2.45'ten küçük mü büyük mü sorusu sorulmaktadır.

Eğer petal length 2.45’ten küçükse soldaki dala gidilir ve orada da petal width özelliği kontrol edilir. Petal width özelliği de 1.75’ten küçük mü büyük mü sorusunu sorar.

Eğer petal width 1.75’ten küçükse soldaki dala gidilir ve Iris Setosa türü olduğu sonucuna ulaşılır.

Eğer petal width 1.75’ten büyükse Iris Versicolor türü olduğu sonucuna ulaşılır.

Eğer petal length 2.45’ten büyükse sağdaki dala gidilir ve orada yine petal width özelliği kontrol edilir.

Eğer petal width 1.75’ten küçükse Iris Versicolor türü olduğu sonucuna ulaşılır.

Eğer petal width 1.75’ten büyükse Iris Virginica türü olduğu sonucuna ulaşılır.

Sonuç

Bu yazıda Python programlama dilini kullanarak Iris veri kümesi üzerinden karar ağaçları algoritmasını uyguladık. Pandas kütüphanesini kullanarak veri kümesini okuduk ve DecisionTreeClassifier sınıfını kullanarak modelimizi oluşturduk. fit(), predict(), classification_report(), train_test_split(), plot_tree() fonksiyonlarını kullanarak modelimizi eğittik, tahminler aldık ve sonuçlarımızı raporladık.

Ayrıca matplotlib.pyplot kütüphanesini kullanarak karar ağacımızı görselleştirdik.

Scroll to Top