Decision Tree
Published: 2024-04-24 11:52:56

Karar ağaçları, makine öğrenmesinde kullanılan popüler bir tahmin modelidir. Hem sınıflandırma (categorical output) hem de regresyon (numerical output) problemleri için kullanılabilirler.

Karar ağacı modeli, bir dizi karar kuralına dayalı olarak verileri analiz eder. Bu kurallar genellikle "if-then" biçimindedir. Bir karar ağacının her düğümü bir özelliği temsil eder, her dal bir karar kuralını temsil eder ve her yaprak düğümü bir çıktıyı (sonucu) temsil eder.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qhx4cgbkjajwue263x2i.png)

Görüldüğü gibi her yaprak düşüm yani boş olan kutular bir sonucu temsil ediyor. soldaki alanda 6 alan var. Yaprak düğüm olarak da 6 düğüm var. 


Karar ağaçlarının avantajları şunlardır:

Anlaşılması ve Yorumlanması Kolay: Karar ağaçları genellikle grafiksel bir biçimde gösterilir, bu da onları anlamayı ve yorumlamayı kolaylaştırır.
Az Ön İşlem Gerektirir: Karar ağaçları genellikle verinin normalleştirilmesi veya standardize edilmesi gibi ön işlemleri gerektirmez.
Hem Kategorik hem de Sayısal Verilerle Çalışabilir: Karar ağaçları hem kategorik hem de sayısal özelliklerle çalışabilir.
Otomatik Özellik Seçimi: Karar ağacı algoritması, en önemli özellikleri otomatik olarak belirler ve bu özelliklere göre dallanır.


Basit bir **karar ağacı regresyonu** örneği Python kodu:

```python
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.tree import DecisionTreeRegressor

# Veri setini yükle (kendi veri setinizi buraya koyabilirsiniz)
dataset = pd.read_csv('PozisyonSeviyeMaas.csv')

# Bağımsız ve bağımlı değişkenleri oluştur
X = dataset.iloc[:, 1:2].values
y = dataset.iloc[:, 2].values

# Karar Ağacı Regresyon modelini oluştur ve eğit
regressor = DecisionTreeRegressor(random_state=0)
regressor.fit(X, y)

# Belirli bir seviye için tahmin yap (örneğin, seviye 6.5)
level_to_predict = np.array([6.5]).reshape(-1, 1)
predicted_salary = regressor.predict(level_to_predict)
print(f"Tahmin edilen maaş (seviye 6.5): {predicted_salary[0]}")

# Karar Ağacı Regresyon sonuçlarını görselleştir
plt.scatter(X, y, color='red')
plt.plot(X, regressor.predict(X), color='blue')
plt.title('Karar Ağacı Regresyonu')
plt.xlabel('Pozisyon Seviye')
plt.ylabel('Maaş')
plt.show()
```

Bu kod, veri setindeki pozisyon seviyelerine göre maaş tahmini yapmak için bir karar ağacı regresyon modeli oluşturur ve eğitir.

Karar ağaçları, müşteri segmentasyonu, tıbbi teşhis, kredi risk değerlendirmesi ve daha birçok uygulamada kullanılır. Bununla birlikte, karar ağaçları aşırı uyuma (overfitting) eğilimli olabilirler, bu da modelin eğitim verilerine çok iyi uyması ancak yeni verilere genelleme yapma yeteneğinin düşmesi anlamına gelir. Bu sorunu çözmek için genellikle karar ağaçları, rastgele ormanlar gibi ensemble yöntemlerinin bir parçası olarak kullanılır.


## Sınıflandırma


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bl7ahd735aofkdeycwfj.png)



Karar ağacının her bir düğümü bir özelliği temsil eder, her bir dal bir karar kuralını ve her bir yaprak düğümü bir sonucu (sonuç veya sınıf) temsil eder. Ana fikir, veri kümesini daha küçük alt kümeler halinde bölerek karmaşık kararları basitleştirmektir.

Karar ağaçları oluşturulurken, en iyi özellikler ilk olarak seçilir. 'En iyi' özellik, hedef değişken üzerinde en büyük etkiye sahip olan özelliktir. **Bu seçim genellikle bilgi kazanımı veya Gini impurity gibi metrikler kullanılarak yapılır.**

Karar ağaçlarının avantajları arasında kolay anlaşılabilirlik, gerektiğinde eksik değerlerle başa çıkabilme ve hem kategorik hem de sayısal verilerle çalışabilme özelliği bulunur. Bununla birlikte, çok fazla dallanma overfitting'e (aşırı uyum) yol açabilir ve bu da modelin yeni verilere genelleme yeteneğini azaltabilir.

Örneğin, bir hava durumu veri setimiz olduğunu düşünelim. Hedef değişken 'oynayabilir miyiz?' (evet veya hayır). Özellikler arasında sıcaklık, hava durumu (güneşli, bulutlu, yağmurlu vb.) ve rüzgar hızı olabilir. Karar ağacı algoritması, bu özellikleri kullanarak bir dizi karar kuralı oluşturur (örneğin, 'eğer hava durumu güneşli ve sıcaklık 20 dereceden yüksekse, oynayabiliriz').

Sınıflandırma için python kodu:
Scikit-learn kütüphanesini kullanarak bir karar ağacı sınıflandırıcısı oluşturmanın örneği:
```
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score

# Iris veri setini yükle
iris = load_iris()
X = iris.data
y = iris.target

# Veriyi eğitim ve test setlerine ayır
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Karar ağacı sınıflandırıcısını oluştur
clf = DecisionTreeClassifier()

# Modeli eğitim verileriyle eğit
clf.fit(X_train, y_train)

# Test setindeki tahminleri yap
y_pred = clf.predict(X_test)

# Tahminlerin doğruluğunu kontrol et
print("Accuracy:", accuracy_score(y_test, y_pred))
```
Bu kod parçacığı, iris veri setini kullanarak bir karar ağacı sınıflandırıcısı oluşturur ve eğitir. Daha sonra model, test setindeki verileri tahmin etmek için kullanılır ve bu tahminlerin doğruluğu accuracy_score fonksiyonu ile hesaplanır.



Burda Bilgi kazanımı(information gain), Gini impurity kavramı bizim için önemlidir. Bu metrikler Karar ağacı algoritmalarını anlamak için önemlidir. 



Bu kaynak da karar ağacı öğrenmesi için güzel bir anlatım sunuyor. ==>

https://bilgisayarkavramlari.com/2012/04/11/karar-agaci-ogrenmesi-decision-tree-learning/