0Pricing
R Academy · Ders

Karar Ağaçları: Topluluk Modellerinin Temeli

rpart ile karar ağaçları oluşturup görselleştirin ve yanlılık-varyans ödünleşimini anlayın.

Karar Ağaçları: Topluluk Modellerinin Temeli, CoddyKit'te ücretsiz bir R Academy 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, R Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. R Academy kursu toplamda 4 dersten oluşur.

Karar Ağaçları Nasıl Bölünür?

Bir karar ağacı, özellik uzayını yinelemeli olarak dikdörtgen bölgelere ayırır. Algoritma her düğümde tüm özellikleri ve olası tüm bölme noktalarını tarayarak hedef değişkeni en iyi ayıran bölmeyi bulur. Sonuç, if-else kurallarından oluşan bir ağaçtır.

library(rpart)

# Fit a classification tree
tree <- rpart(
  Species ~ .,
  data   = iris,
  method = 'class'  # use 'anova' for regression
)

print(tree)

GINI ve Entropi Bölme Ölçütleri

Bölme ölçütü, bir düğümün saflığını ölçer. Gini safsızlığı, rastgele seçilen bir öğenin yanlış sınıflandırılma olasılığını ölçer. Entropi (bilgi kazanımı), bilgi düzensizliğindeki azalmayı ölçer. Her ikisi de genellikle benzer ağaçlar üretir; Gini'nin hesaplanması daha hızlıdır ve rpart'ın varsayılanıdır.

# Default: Gini impurity (parms = list(split = 'gini'))
tree_gini <- rpart(Species ~ ., data = iris, method = 'class')

# Using information gain (entropy)
tree_entropy <- rpart(
  Species ~ ., data = iris, method = 'class',
  parms = list(split = 'information')
)

cat('Gini root split:', tree_gini$frame$var[1])
cat('Entropy root split:', tree_entropy$frame$var[1])

printcp() — Karmaşıklık Tablosu

printcp(tree), karmaşıklık parametresi (CP) tablosunu yazdırır. Her satırda bir ağaç boyutu (bölme sayısı), eğitim verisi üzerindeki göreli hata ve çapraz doğrulamalı hata (xerror) gösterilir. CP tablosu, en uygun budama düzeyini bulmak için kullanılır.

tree <- rpart(medv ~ ., data = MASS::Boston, method = 'anova',
              control = rpart.control(minsplit = 5, cp = 0.001))

printcp(tree)

# Identify the CP with minimum cross-validated error
best_cp <- tree$cptable[
  which.min(tree$cptable[, 'xerror']),
  'CP'
]
cat('Best CP:', best_cp)

prune() — Ağacı Budama

prune(tree, cp), ağacı cp tarafından belirtilen karmaşıklık düzeyine kadar budar. Budama, tahmin değerine çok az katkı sağlayan dalları birleştirerek aşırı öğrenmeyi önler. Standart yaklaşım şöyledir: CV hatasını en aza indiren CP değerini bulun ve ardından budama uygulayın.

best_cp <- tree$cptable[
  which.min(tree$cptable[, 'xerror']), 'CP'
]

pruned_tree <- prune(tree, cp = best_cp)

cat('Original tree nodes:', nrow(tree$frame))
cat('Pruned tree nodes:', nrow(pruned_tree$frame))

rpart.plot() — Ağacı Görselleştirme

rpart.plot paketindeki rpart.plot(tree), karar ağacının temiz ve renkli bir görselleştirmesini üretir. Her iç düğümde bölme kuralı, her yaprakta ise tahmin edilen sınıf ve eğitim örneklerinin oranı gösterilir.

library(rpart.plot)

tree <- rpart(Species ~ ., data = iris, method = 'class')
pruned <- prune(tree, cp = 0.02)

rpart.plot(
  pruned,
  type   = 4,     # split labels on branches
  extra  = 104,   # show class + probability
  fallen.leaves = TRUE
)

Yanlılık-Varyans Dengesi

Derin ve budanmamış bir ağaç düşük yanlılığa (eğitim verisine neredeyse kusursuz biçimde uyar) ancak yüksek varyansa (verilerdeki küçük değişiklikler çok farklı ağaçlar üretir) sahiptir. Sığ veya budanmış bir ağacın yanlılığı daha yüksek, varyansı ise daha düşüktür. En uygun ağaç, bu iki hata kaynağı arasında denge kurar.

Random forest ve boosting gibi topluluk yöntemleri bu dengeyi doğrudan ele alır.

# Deep tree = low bias, high variance (overfits)
deep_tree <- rpart(medv ~ ., data = MASS::Boston,
                   control = rpart.control(minsplit = 2, cp = 0))

# Shallow tree = high bias, low variance (underfits)
shallow_tree <- rpart(medv ~ ., data = MASS::Boston,
                      control = rpart.control(maxdepth = 2))

cat('Deep nodes:', nrow(deep_tree$frame))
cat('Shallow nodes:', nrow(shallow_tree$frame))

Karar Ağacında Aşırı Öğrenme

Budanmamış bir ağaç, her eğitim örneğini ezberleyerek eğitim hatasını sıfıra indirebilir. Aynı ağaç görülmemiş veriler üzerinde değerlendirildiğinde performans çöker. Bu, denetimli öğrenmede aşırı öğrenmenin klasik örneğidir.

set.seed(42)
train_idx <- sample(nrow(MASS::Boston), 400)
train_bos <- MASS::Boston[train_idx, ]
test_bos  <- MASS::Boston[-train_idx, ]

# Fully grown tree
full <- rpart(medv ~ ., data = train_bos,
              control = rpart.control(cp = 0, minsplit = 2))

train_pred <- predict(full, train_bos)
test_pred  <- predict(full, test_bos)

cat('Train RMSE:', sqrt(mean((train_pred - train_bos$medv)^2)))
cat('Test  RMSE:', sqrt(mean((test_pred  - test_bos$medv)^2)))

rpart ile Değişken Önemini Belirleme

rpart, her yordayıcı için variable.importance değerini kaydeder: bu değer, tüm bölmeler boyunca ilgili değişkene atfedilebilen bölme ölçütündeki toplam iyileşmedir. Böylece modelin kararlarını hangi özelliklerin yönlendirdiğine dair hızlı bir fikir edinilir.

tree <- rpart(medv ~ ., data = MASS::Boston, method = 'anova')

# Variable importance (sorted)
imp <- sort(tree$variable.importance, decreasing = TRUE)
print(imp)

# Quick barplot
barplot(imp, las = 2, main = 'Variable Importance',
        col = 'steelblue', cex.names = 0.8)

Ağaçlardan Topluluklara

Tek bir karar ağacı kararsızdır: verileri yeniden örneklemek çok farklı ağaçlar üretir. Topluluk yöntemleri bu kararsızlıktan yararlanır:

  • Bagging / Random Forests: Önyükleme ile oluşturulmuş örneklemler üzerinde çok sayıda ağacın ortalamasını alır.
  • Boosting: Ağaçları sıralı olarak oluşturur; her ağaç bir öncekinin hatalarını düzeltir.
  • Her iki yöntem de ağaçların ifade gücünü korurken varyansı azaltır.
# Demonstrating instability of a single tree
set.seed(1); t1 <- rpart(medv ~ ., data = MASS::Boston[sample(506, 400), ])
set.seed(2); t2 <- rpart(medv ~ ., data = MASS::Boston[sample(506, 400), ])

# Root split may differ between trees
cat('Tree 1 root split:', t1$frame$var[1])
cat('Tree 2 root split:', t2$frame$var[1])

rpart Denetim Parametreleri

rpart.control(), ağacın nasıl büyüyeceğini belirler. Temel parametreler şunlardır: cp (karmaşıklık cezası), minsplit (bölme denemesi için gereken en az gözlem sayısı), minbucket (en küçük yaprak boyutu) ve maxdepth. Ağaç tabanlı modelleri ayarlamak için bu parametreleri anlamak çok önemlidir.

ctrl <- rpart.control(
  cp        = 0.005,  # complexity penalty
  minsplit  = 20,     # min obs to try a split
  minbucket = 7,      # min obs in any leaf
  maxdepth  = 10      # max tree depth
)

tree <- rpart(medv ~ ., data = MASS::Boston,
              method = 'anova', control = ctrl)

printcp(tree)

Ağaç Performansını Değerlendirme

Budamadan sonra ağacı ayrılmış sınama kümesi üzerinde değerlendirin. Regresyon için RMSE ve R-kare, sınıflandırma için doğruluk ve karışıklık matrisi hesaplayın. Tek bir ağacın sağladığı değeri anlamak için bu ölçütleri kıyaslama modelleriyle karşılaştırın.

pruned_tree <- prune(tree, cp = best_cp)

test_pred <- predict(pruned_tree, newdata = test_bos)

rmse <- sqrt(mean((test_pred - test_bos$medv)^2))
ss_res <- sum((test_pred - test_bos$medv)^2)
ss_tot <- sum((test_bos$medv - mean(test_bos$medv))^2)
r2 <- 1 - ss_res / ss_tot

cat('RMSE:', round(rmse, 3))
cat('R2:', round(r2, 3))

Hızlı Kontrol

prune(tree, cp = best_cp) çağrısının amacını en iyi açıklayan ifade hangisidir?

Karar Ağaçları Özeti

Toplulukların Temeli: Karar Ağaçlarından çıkarılacak temel sonuçlar:

  • Ağaçlar özellik uzayını yinelemeli olarak bölümlere ayırır; bölmelerde Gini veya entropi ölçütleri kullanılır.
  • rpart(y ~ ., data, method) ağacı uyarlar; printcp() karmaşıklık tablosunu gösterir.
  • Çapraz doğrulamalı hatanın en düşük olduğu CP değerini bulun ve ardından prune(tree, cp) kullanın.
  • rpart.plot() ağaç yapısını görselleştirir.
  • Derin ağaçlar aşırı öğrenir (düşük yanlılık, yüksek varyans); sığ ağaçlar yetersiz öğrenir.
  • tree$variable.importance, yordayıcıları toplam bölme iyileşmelerine göre sıralar.
  • Topluluk yöntemleri (random forest, boosting), tek ağaçların kararsızlığını giderir.
# Standard rpart workflow
tree <- rpart(y ~ ., data = train, method = 'anova',
              control = rpart.control(cp = 0.001))

best_cp <- tree$cptable[which.min(tree$cptable[, 'xerror']), 'CP']
pruned  <- prune(tree, cp = best_cp)

test_pred <- predict(pruned, newdata = test)
rmse <- sqrt(mean((test_pred - test$y)^2))
cat('Pruned Tree RMSE:', rmse)

Sıkça Sorulan Sorular

“Karar Ağaçları: Topluluk Modellerinin Temeli” dersi ücretsiz mi?

Evet — “Karar Ağaçları: Topluluk Modellerinin Temeli” 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 R Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. R Academy kursu toplamda 4 dersten oluşur.

“Karar Ağaçları: Topluluk Modellerinin Temeli” dersinde ne öğreneceğim?

rpart ile karar ağaçları oluşturup görselleştirin ve yanlılık-varyans ödünleşimini anlayın. R Academy 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.

R Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te R Academy, 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ı: Topluluk Modellerinin Temeli” 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 R Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her R Academy 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ı: Topluluk Modellerinin Temeli
  2. ranger ile Rastgele Ormanlar
  3. xgboost ile Gradyan Artırma
  4. Özellik Önem Derecesi ve Model Yorumlama
← R Academy Sayfasına Dön