Random Forest: yüz ağaç bir orman yapar
2026 · makine öğrenmesi · ensemble · 14 dakika
Tek bir karar ağacı gürültüye takılır, eğitim verisini ezberler. Random Forest çözümü basit: yüzlerce farklı ağaç kur, hepsini oy kullandır, çoğunluğa bak. Aşağıda ağaç eklendikçe karar sınırının nasıl yumuşadığını ve doğruluğun nasıl arttığını canlı görüyorsun.
Ensemble öğrenimi nedir?
Tek uzman yerine çok sayıda uzmanın oyuna katıldığı yaklaşım. Her ağaç biraz farklı — çünkü farklı veri görür ve farklı bölmeler yapar. Ama hataları korelasyonsuz olduğundan, birlikte ortalamak hataları yok eder.
Random Forest iki kaynak rastgelelik kullanır:
- Bootstrap sampling: her ağaç, eğitim verisinin rastgele bir alt örneğini (yerine koyarak) görür
- Feature randomness: her bölmede sadece rastgele seçilmiş özellikler denenir — ağaçlar birbirinden farklılaşır
Neden tek ağaçtan daha iyi?
Tek bir ağaç eğitim verisine aşırı uyar — her gürültüyü ezberler. Farklı bootstrap örnekleri gören ağaçlar farklı hataları öğrenir. Ama hatalar birbirinden bağımsız olduğundan, ortalamaları iptal olur. İstatistiksel olarak: N bağımsız ağacın varyansı, tek ağacın varyansının 1/N katıdır.
feature randomness bu korelasyonu kırıp etkiyi artırıyor.
OOB (Out-of-Bag) hatası
Bootstrap sampling sırasında her ağaç, eğitim verisinin ortalama %37'sini hiç görmez (OOB örnekleri). Bu noktalar, o ağaç için doğal bir test seti oluşturur — ayrı validation setine gerek kalmaz.
Tüm ağaçların OOB tahminleri birleştirilince, cross-validation'a yakın ve hesaplaması çok daha ucuz bir hata tahmini elde edilir.
Feature importance
Random Forest her özelliğin ne kadar Gini düşürdüğünü takip eder. Çok sayıda bölmede kullanılan, Gini'yi çok düşüren özellikler önemli kabul edilir. Ücretsiz bir özellik seçimi aracı gibi davranır.
Python'da
from sklearn.ensemble import RandomForestClassifier
import pandas as pd
# Veri
df = pd.read_csv('musteriler.csv')
X = df[['yas', 'harcama']]
y = df['premium']
# Model
rf = RandomForestClassifier(
n_estimators=100, # ağaç sayısı
max_depth=5, # ağaç derinliği
max_features='sqrt',# bölmede denenen özellik sayısı
oob_score=True, # OOB hatası hesapla
random_state=42,
)
rf.fit(X, y)
print(f"OOB Doğruluk: {rf.oob_score_:.2%}") # ~%93
print(f"Özellik Önemi: {rf.feature_importances_}") # [0.38, 0.62]
# Tahmin
rf.predict([[35, 8.5]]) # [1] → Premium
rf.predict_proba([[35, 8.5]]) # [[0.07, 0.93]]Ne zaman kullanılır?
- Tabular veri — yapılandırılmış CSV/SQL verileri için hâlâ en güvenilir baseline
- Overfitting korkusu — tek ağaç ezberliyor, RF bunu otomatik bastırır
- Feature importance gerektiğinde — hangi değişken önemli?
- Az hiperparametre — n_estimators yüksek tut, genelde yeter
- ⚠ Görüntü ve dil için derin öğrenme daha iyi
- ⚠ Gradient Boosting (XGBoost) genelde biraz daha iyi acc verir, ama daha hassas tuning gerektirir
Özet
- Random Forest, bootstrap + feature randomness ile farklılaştırılmış ağaçların oylamasıdır
- Ağaç sayısı arttıkça karar sınırı yumuşar, varyans düşer
- OOB örnekleri ücretsiz validation sağlar
- Tabular veri için güçlü, yorumlanabilir ve güvenilir bir baseline
Önceki: Decision tree: ağacı sen büyüt →