0Pricing
Learn AI with Python · Ders

Karar Ağaçları: Kuram ve Uygulama

Gini safsızlığı, bilgi kazanımı, ağaç derinliği ve aşırı öğrenme — sklearn DecisionTreeClassifier.

Karar Ağaçları: Kuram ve Uygulama, CoddyKit'te ücretsiz bir Learn AI with Python dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Learn AI with Python öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Learn AI with Python kursu toplamda 4 dersten oluşur.

Karar Ağacı Nedir

Karar ağacı, özellik değerlerine göre verileri dallara ayırır ve bir yaprak düğümünde tahmine ulaşana kadar evet/hayır soruları sorar.

Her iç düğüm bir özelliği sınar, her dal bir sonucu temsil eder ve her yaprak bir sınıf atar. Karar yollarını takip edebildiğiniz için ağaçların yorumlanması kolaydır.

Gini Safsızlığı

Gini safsızlığı, bir düğümdeki sınıfların ne kadar karışık olduğunu ölçer. Saf bir düğümde (tek bir sınıftaki tüm örneklerde) Gini değeri 0'dır.

Formül Gini = 1 - sum(p_i^2) şeklindedir; burada p_i, i sınıfının oranıdır. Ağaç, safsızlığı en çok azaltan bölmeleri seçer.

import numpy as np

def gini(labels):
    classes, counts = np.unique(labels, return_counts=True)
    probs = counts / counts.sum()
    return 1 - np.sum(probs ** 2)

print(gini([0, 0, 1, 1]))   # 0.5 (max mix)
print(gini([0, 0, 0, 0]))   # 0.0 (pure)

Bilgi Kazancı ve Entropi

Alternatif bir bölme ölçütü, entropiye dayanan bilgi kazancıdır. Entropi -sum(p_i * log2(p_i)) şeklindedir.

Bilgi kazancı = entropi(üst düğüm) - ağırlıklı entropi(alt düğümler). Gini ve entropi genellikle benzer ağaçlar üretir; Gini'nin hesaplanması biraz daha hızlıdır.

import numpy as np

def entropy(labels):
    _, counts = np.unique(labels, return_counts=True)
    p = counts / counts.sum()
    return -np.sum(p * np.log2(p))

print(entropy([0, 0, 1, 1]))   # 1.0
print(entropy([0, 0, 0, 1]))   # ~0.81

DecisionTreeClassifier Eğitimi

Scikit-learn, DecisionTreeClassifier sağlar. Bölme ölçütünü criterion parametresiyle seçersiniz (gini veya entropy).

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split

X, y = load_iris(return_X_y=True)
Xtr, Xte, ytr, yte = train_test_split(X, y, random_state=0)

clf = DecisionTreeClassifier(criterion="gini", random_state=0)
clf.fit(Xtr, ytr)
print("Accuracy:", clf.score(Xte, yte))

Aşırı Öğrenme ve max_depth

Kısıtlanmamış bir ağaç, her yaprak saf olana kadar büyür ve gürültüyü ezberler. Bu durum aşırı öğrenmeye yol açar.

max_depth parametresi, ağacın ne kadar derinleşebileceğini sınırlar ve onu genelleme yapmaya zorlar. Daha küçük derinlik = daha basit model = daha az aşırı öğrenme.

from sklearn.tree import DecisionTreeClassifier

shallow = DecisionTreeClassifier(max_depth=3, random_state=0)
deep = DecisionTreeClassifier(max_depth=None, random_state=0)
# shallow generalizes better on unseen data;
# deep often overfits the training set

Diğer Ön Budama Parametreleri

max_depth parametresinin yanı sıra büyümeyi şu parametrelerle denetleyebilirsiniz:

  • min_samples_split bir düğümü bölmek için gereken en az örnek sayısı
  • min_samples_leaf bir yapraktaki en az örnek sayısı
  • max_leaf_nodes toplam yaprak sayısı üst sınırı

Bunların tümü varyansı azaltır ve aşırı öğrenmeyle mücadele eder.

from sklearn.tree import DecisionTreeClassifier

clf = DecisionTreeClassifier(
    max_depth=5,
    min_samples_split=10,
    min_samples_leaf=5,
    random_state=0,
)

plot_tree ile Görselleştirme

plot_tree, her bölmeyi, Gini değerini ve her düğümdeki sınıf dağılımını okuyabilmeniz için ağacın tamamını çizer.

import matplotlib.pyplot as plt
from sklearn.tree import plot_tree
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris

X, y = load_iris(return_X_y=True)
clf = DecisionTreeClassifier(max_depth=3).fit(X, y)

plt.figure(figsize=(12, 6))
plot_tree(clf, filled=True, feature_names=load_iris().feature_names)
plt.show()

Özellik Önemleri

Eğitimden sonra feature_importances_, her özelliğin tüm bölmeler boyunca safsızlığı ne kadar azalttığını gösterir. Değerlerin toplamı 1.0'dır.

Bu, hangi girdilerin model için en önemli olduğunu sıralamanın hızlı bir yoludur.

from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris

data = load_iris()
clf = DecisionTreeClassifier(max_depth=3).fit(data.data, data.target)

for name, imp in zip(data.feature_names, clf.feature_importances_):
    print(f"{name}: {imp:.3f}")

Maliyet-Karmaşıklık Budaması (ccp_alpha)

Sonradan budama, tam bir ağaç büyüttükten sonra zayıf dalları keser. ccp_alpha parametresi budamanın ne kadar agresif yapılacağını denetler: daha yüksek alfa daha fazla düğümü kaldırır.

Aday alfa değerlerini bulmak için cost_complexity_pruning_path kullanın.

from sklearn.tree import DecisionTreeClassifier

base = DecisionTreeClassifier(random_state=0)
path = base.cost_complexity_pruning_path(Xtr, ytr)
alphas = path.ccp_alphas

pruned = DecisionTreeClassifier(ccp_alpha=0.01, random_state=0)
pruned.fit(Xtr, ytr)

En İyi Alfa Değerini Seçme

ccp_alpha değerini seçmek için her aday alfa değeriyle bir ağaç eğitin ve doğrulama doğruluğunu karşılaştırın. En iyi alfa, doğruluk ile basitlik arasında denge kurar.

from sklearn.tree import DecisionTreeClassifier

scores = []
for a in alphas:
    t = DecisionTreeClassifier(ccp_alpha=a, random_state=0)
    t.fit(Xtr, ytr)
    scores.append((a, t.score(Xte, yte)))

best = max(scores, key=lambda s: s[1])
print("Best alpha:", best[0])

Güçlü ve Zayıf Yönler

Artıları: yorumlanması kolaydır, ölçeklendirme gerektirmez, doğrusal olmayan sınırları ve karma veri türlerini işler.

Eksileri: varyansı yüksektir (verilerdeki küçük değişiklikler ağacı değiştirir), aşırı öğrenmeye yatkındır ve yalnızca eksenlere hizalı bölmeler kullanır. Bu zayıflıklar, rastgele ormanlar gibi topluluk yöntemlerini gerekli kılar.

Hızlı Kontrol

Karar ağacı kavramlarını anlayıp anlamadığınızı sınayın.

Özet

Özet: Karar ağaçları verileri Gini safsızlığı veya bilgi kazancı kullanarak böler. Ön budama (max_depth, min_samples_leaf) veya sonradan budama (ccp_alpha) ile aşırı öğrenmeyi denetleyin. Modelleri plot_tree ve feature_importances_ ile inceleyin. Yüksek varyansları, topluluk yöntemlerinin kullanılmasını gerekli kılar.

Sıkça Sorulan Sorular

“Karar Ağaçları: Kuram ve Uygulama” dersi ücretsiz mi?

Evet — “Karar Ağaçları: Kuram ve Uygulama” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Learn AI with Python kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Learn AI with Python kursu toplamda 4 dersten oluşur.

“Karar Ağaçları: Kuram ve Uygulama” dersinde ne öğreneceğim?

Gini safsızlığı, bilgi kazanımı, ağaç derinliği ve aşırı öğrenme — sklearn DecisionTreeClassifier. Learn AI with Python ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Learn AI with Python öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Learn AI with Python, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“Karar Ağaçları: Kuram ve Uygulama” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Learn AI with Python dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Learn AI with Python dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Karar Ağaçları: Kuram ve Uygulama
  2. Rastgele Ormanlar ve Bagging
  3. Gradyan Artırma: GBM ve XGBoost
  4. LightGBM ve CatBoost
← Learn AI with Python Sayfasına Dön