Decision Tree, Random Forest ve Gradient Boosting
Bir doktor hastaya teşhis koyarken sırayla sorular sorar: 'Ateşin var mı? Öksürük var mı? Ne zamandır?' — işte karar ağaçları tam da bu mantıkla çalışır. Veriyi adım adım sorularla bölerek karara ulaşan bu yapı, tablo verisi için en sezgisel ve güçlü ML ailesidir.
Bir karar ağacı üç temel yapıdan oluşur:…
🎯20 Soruluk Oyun
Karar ağacı '20 Soruluk Oyun' gibidir: her soru cevap uzayını yarıya böler. 'Canlı mı?' → 'Memeli mi?' → 'Evcil mi?' derken seçenekleri daraltırsınız. İyi sorular (yüksek Information Gain) oyunu hızlı bitirir, kötü sorular işe yaramaz.
Ağaç hangi soruyu soracağını nasıl seçer?…
Gini(D) = 1 - Σᵢ pᵢ²D veri kümesinde pᵢ, i. sınıfın oranıdır. İki sınıf eşit dağılmışsa Gini = 0.5 (maksimum karışıklık), tek sınıf varsa Gini = 0 (saf yaprak).
⚠️Karar ağaçları sınırsız büyürse her örnek için ayrı bir yaprak oluşturur — %100 eğitim doğruluğu ama sıfır genelleme! Bu, overfitting'in ders kitabı örneğidir.
Ağacı kontrol altında tutmak için hiperparametreler:…
Basit karar ağacı eğitimi
| 1 | from sklearn.tree import DecisionTreeClassifier |
| 2 | from sklearn.datasets import load_iris |
| 3 | |
| 4 | X, y = load_iris(return_X_y=True) |
| 5 | tree = DecisionTreeClassifier(max_depth=3, random_state=42) |
| 6 | tree.fit(X, y) |
| 7 | |
| 8 | # En önemli özellikler |
| 9 | for i, imp in enumerate(tree.feature_importances_): |
| 10 | print(f"Özellik {i}: {imp:.3f}") |
✦ Quiz
Bir karar ağacında Gini impurity değeri 0 ise bu ne anlama gelir?
Tek ağaç yerine yüzlerce ağaç eğitip oylarını sayarsak ne olur? **Random Forest** tam bunu…
Tek Karar Ağacı
Random Forest
Random Forest ağaçları **paralel** eğitir, Gradient Boosting ise **seri**:…
💡Random Forest için n_estimators=100 iyi bir başlangıç. Gradient Boosting'de ise learning_rate düşük tutup (0.01-0.1) ağaç sayısını early stopping ile belirlemek en güvenli strateji.
Gradient Boosting'in optimize edilmiş versiyonları:…
Random Forest ile özellik önem sıralaması
| 1 | from sklearn.ensemble import RandomForestClassifier |
| 2 | from sklearn.datasets import load_iris |
| 3 | import numpy as np |
| 4 | |
| 5 | X, y = load_iris(return_X_y=True) |
| 6 | feature_names = ['sepal_len', 'sepal_wid', 'petal_len', 'petal_wid'] |
| 7 | |
| 8 | rf = RandomForestClassifier(n_estimators=100, random_state=42) |
| 9 | rf.fit(X, y) |
| 10 | |
| 11 | # Önem sırasına göre listele |
| 12 | indices = np.argsort(rf.feature_importances_)[::-1] |
| 13 | for i in indices: |
| 14 | print(f"{feature_names[i]}: {rf.feature_importances_[i]:.3f}") |
✦ Quiz
Random Forest'ta 'bootstrap sampling' ne işe yarar?
Random Forest (Bagging)
Gradient Boosting
✦ Quiz
Gradient Boosting'de learning_rate'i düşürmek ne etkisi yapar?
ℹ️Tablo verisi yarışmalarında (Kaggle, vb.) XGBoost/LightGBM + dikkatli özellik mühendisliği kombinasyonu, derin öğrenme modellerini bile çoğu zaman geride bırakır. Sinir ağları her derde deva değil!
Bağlantılı Konular