• Yapay zeka soru ve sorunlarınızı uygun olan kategorilere açıp yanıt alabilirsiniz...

Scikit-learn karar ağacının dalları nasıl incelenir?

Garfield

YZF Admin
Yaş
40
Konum
YurtDışı
Katılım
27 Eki 2026
Konular
664
Mesajlar
689
AI Seviyesi
Yeni
Karar ağacının dallarını incelemek için modeli önce görselleştirin, ardından her düğümün koşulunu, örnek sayısını ve sınıf dağılımını tree_ öznitelikleriyle okuyun. Tek bir gözlemin hangi dallardan geçtiğini görmek için decision_path() kullanın. Böylece ağacın hangi özelliği hangi eşikle böldüğünü, yaprakta hangi tahmini ürettiğini ve modelin neden karmaşıklaştığını somut olarak takip edebilirsiniz. Karar ağacında her iç düğüm bir koşul, her yaprak ise tahmin içerir; bir veri satırı kökten başlayıp koşullara göre tek bir yaprağa ilerler.

Ağacı görsel olarak inceleme​


Aşağıdaki varsayımsal örnek, sınıflandırma yapan küçük bir karar ağacını hem çizdirir hem de metin biçiminde gösterir. plot_tree() dalları hızlıca görmeyi, export_text() ise koşulları satır satır okumayı sağlar.
  1. Gerekli paketleri içe aktarın. scikit-learn ve çizim için matplotlib kurulu olmalıdır.
  2. Modeli eğitin. DecisionTreeClassifier nesnesini fit(X, y) ile eğitin; dalları incelemeden önce modelin gerçekten eğitilmiş olması gerekir.
  3. Ağacı çizin. plot_tree() çıktısında her düğümün koşulunu, samples değerini, sınıf dağılımını ve tahminini okuyun.
  4. Metin görünümünü alın. export_text() çıktısında girinti, kökten yaprağa uzanan dal seviyesini gösterir.
Python:
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier, plot_tree, export_text
import matplotlib.pyplot as plt

iris = load_iris()
X, y = iris.data, iris.target

model = DecisionTreeClassifier(max_depth=3, random_state=42)
model.fit(X, y)

plt.figure(figsize=(14, 8))
plot_tree(
    model,
    feature_names=iris.feature_names,
    class_names=iris.target_names,
    filled=True,
    rounded=True
)
plt.tight_layout()
plt.show()

print(export_text(model, feature_names=iris.feature_names))

Metin çıktısında örneğin petal width (cm) <= 0.8 satırı, ilgili düğümde bu koşulun sınandığını gösterir. Girintili alt satırlar, koşulun dallarından sonra gelen yeni düğümlerdir. En alt satırdaki class: ... ifadesi yaprak tahminidir. Görseldeki samples, o düğüme ulaşan eğitim örneği sayısını; value, sınıflara göre dağılımı; class, düğümün seçtiği tahmini gösterir.

Dikkat: Ağacın dalları eğitim verisini açıklayan kurallardır; tek başına nedensellik kanıtlamaz. Bir özellik kökte yer alıyorsa model açısından erken ve yararlı bir bölme sağlamış olabilir, fakat bu özellik gerçek hayatta mutlaka en önemli veya neden olan değişken demek değildir.

Düğümleri sayısal olarak okuma​


Görsel kalabalıklaştığında ağacın iç yapısını model.tree_ üzerinden inceleyebilirsiniz. Düğüm dizilerindeki aynı indis, aynı düğümü temsil eder. children_left ve children_right ilgili düğümün sol ve sağ çocuklarını; feature kullanılan özellik indeksini; threshold bölme eşiğini verir. feature değeri -2 ise düğüm yapraktır.

Python:
from sklearn.tree import _tree

for node_id in range(model.tree_.node_count):
    left = model.tree_.children_left[node_id]
    right = model.tree_.children_right[node_id]
    samples = model.tree_.n_node_samples[node_id]

    if left == _tree.TREE_LEAF:
        print(f"Düğüm {node_id}: yaprak, örnek sayısı={samples}")
    else:
        feature_id = model.tree_.feature[node_id]
        threshold = model.tree_.threshold[node_id]
        feature_name = iris.feature_names[feature_id]
        print(
            f"Düğüm {node_id}: {feature_name} <= {threshold:.3f}, "
            f"sol={left}, sağ={right}, örnek sayısı={samples}"
        )

Bu çıktı, dalların hangi düğüme bağlandığını gösterir. Sol çocuk, scikit-learn karar ağaçlarında gözlemin koşulu sağladığı yolu; sağ çocuk ise koşulun sağlanmadığı yolu temsil eder. Eşik ve özellik birlikte okunmalıdır; yalnızca özelliğin adını görmek, dalın hangi koşulla ayrıldığını söylemez.

Tek bir gözlemin geçtiği dalı bulma​


Belirli bir tahminin neden o yaprağa ulaştığını incelemek için decision_path() ile gözlemin ziyaret ettiği düğümleri, apply() ile ulaştığı son yaprağı bulun.
  1. İncelenecek satırı seçin. Eğitim verisindeki bir satırı veya modelin beklediği biçimde hazırlanmış yeni bir satırı iki boyutlu dizi olarak verin.
  2. Karar yolunu çıkarın. decision_path(sample) sonucundaki sütun indisleri, gözlemin geçtiği düğümlerdir.
  3. Her düğümün koşulunu yazdırın. Düğüm indislerini tree_.feature ve tree_.threshold ile eşleştirerek hangi koşulların izlendiğini kontrol edin.
  4. Son yaprağı doğrulayın. apply(sample) ile bulunan yaprak düğümünün value ve tahmin sınıfını karşılaştırın.
Python:
sample = X[0:1]
path = model.decision_path(sample)
node_ids = path.indices
leaf_id = model.apply(sample)[0]

print("İzlenen düğümler:", node_ids)

for node_id in node_ids:
    feature_id = model.tree_.feature[node_id]

    if feature_id == _tree.TREE_UNDEFINED:
        print(f"Düğüm {node_id}: yaprak")
    else:
        feature_name = iris.feature_names[feature_id]
        threshold = model.tree_.threshold[node_id]
        value = sample[0, feature_id]
        direction = "sol" if value <= threshold else "sağ"
        print(
            f"Düğüm {node_id}: {feature_name}={value:.3f}, "
            f"eşik={threshold:.3f} → {direction} dalı"
        )

print("Ulaşılan yaprak:", leaf_id)
print("Tahmin:", model.predict(sample)[0])

Buradaki yol, modelin bu satır için kullandığı karar zinciridir. Bir dalın seçilmesi, o gözlemin ilgili eşikten küçük veya eşit ya da büyük olduğunu gösterir; modelin bu gözlem üzerinde başka özellikleri kullanmadığını da görmenizi sağlar. Ancak bu yol, modelin genel doğruluğunu veya özelliğin nedensel etkisini ölçmez.

Dalları değerlendirirken hangi bilgiyi kullanmalı?​


Aynı ağacı farklı amaçlarla incelerken aşağıdaki ayrımı koruyun.
İncelenen bilgiNe anlatır?Ne kanıtlamaz?
Özellik ve eşikDüğümün veriyi hangi koşulla iki dala ayırdığını gösterir.Özelliğin tek başına neden olduğunu göstermez.
samplesDüğüme ulaşan eğitim örneği sayısını gösterir.Yeni veride aynı dağılımın kesinlikle oluşacağını garanti etmez.
value ve classDüğümdeki sınıf dağılımını ve seçilen tahmini gösterir.Tahminin her durumda doğru olduğunu göstermez.
Düğüm derinliğiKararın kökten kaç koşul sonra verildiğini gösterir.Daha derin dalın mutlaka daha önemli olduğunu göstermez.
decision_path()Tek bir gözlemin geçtiği dal zincirini gösterir.Modelin tüm örneklerde aynı yolu kullandığını göstermez.
Tabloda özellikle samples değerine dikkat edin. Ağacın çok aşağısında yalnızca birkaç eğitim örneği kalıyorsa dal, eğitim verisine aşırı uyum sağlamış olabilir. Bu durumda max_depth, min_samples_leaf veya ccp_alpha gibi budama ve karmaşıklık ayarlarını değiştirip doğrulama verisindeki sonucu karşılaştırın. Amaç ağacı yalnızca daha kolay okunur yapmak değil, yeni verideki performans ile yorumlanabilirlik arasında makul bir denge kurmaktır. Aşırı büyümüş ağaçların eğitim verisini ezberleme riski vardır.

Sonucu nasıl yorumlamalısınız?​


Kök düğümdeki koşul, modelin ilk ayrımını; alt dallar ise önceki koşullara uyan daha küçük veri kümelerindeki ayrımları gösterir. Bir yaprakta tek sınıf baskınsa model o bölgede daha kesin bir tahmin yapabilir; sınıflar karışık kalıyorsa tahminin belirsizliği yükselebilir. Bu yorum, sınıflandırmada value dağılımı ve kullanılan ölçütle birlikte yapılmalıdır.

Yeni bir dal eklemek eğitim doğruluğunu artırabilir, ancak test veya doğrulama performansı düşüyorsa bu, ağacın veriyi fazla ezberlediğine işaret eder. Bu nedenle dalları incelerken yalnızca çizimin görünümüne değil, budama veya derinlik ayarı sonrasında bağımsız doğrulama sonucuna da bakın. Karar ağacı, verideki ilişkileri açıklayan bir kural yapısı sunar; gözlenen ilişkinin nedenini veya gelecekte değişmeyeceğini tek başına garanti etmez.
 

Sen de şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic
Geri
Üst