Garfield
YZF Admin
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ı
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.
Metin çıktısında örneğin
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.
Görsel kalabalıklaştığında ağacın iç yapısını
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.
Belirli bir tahminin neden o yaprağa ulaştığını incelemek için
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.
Aynı ağacı farklı amaçlarla incelerken aşağıdaki ayrımı koruyun.
Tabloda özellikle
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
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.
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.- Gerekli paketleri içe aktarın. scikit-learn ve çizim için matplotlib kurulu olmalıdır.
- Modeli eğitin.
DecisionTreeClassifiernesnesinifit(X, y)ile eğitin; dalları incelemeden önce modelin gerçekten eğitilmiş olması gerekir. - Ağacı çizin.
plot_tree()çıktısında her düğümün koşulunu,samplesdeğerini, sınıf dağılımını ve tahminini okuyun. - 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.- İ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.
- Karar yolunu çıkarın.
decision_path(sample)sonucundaki sütun indisleri, gözlemin geçtiği düğümlerdir. - Her düğümün koşulunu yazdırın. Düğüm indislerini
tree_.featurevetree_.thresholdile eşleştirerek hangi koşulların izlendiğini kontrol edin. - Son yaprağı doğrulayın.
apply(sample)ile bulunan yaprak düğümününvalueve 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 bilgi | Ne anlatır? | Ne kanıtlamaz? |
|---|---|---|
| Özellik ve eşik | Düğümün veriyi hangi koşulla iki dala ayırdığını gösterir. | Özelliğin tek başına neden olduğunu göstermez. |
| samples | Düğü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 class | Düğü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ği | Kararı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. |
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.