Random Forest Nedir? Karar Ağaçlarından Güçlü Modellere
Makine öğrenmesinde en yaygın kullanılan ve güvenilir algoritmalardan biri olan Random Forest, birden fazla karar ağacını bir araya getirerek tek bir ağacın zayıflıklarını ortadan kaldırır. Bu yazıda Random Forest'ın temelini oluşturan karar ağaçlarından başlayarak, ensemble learning mantığına, algoritmanın adım adım çalışmasına ve Python ile pratiğe taşınmasına kadar kapsamlı bir rehber sunuyoruz.
Karar Ağacı (Decision Tree) Nedir?
Karar ağacı, veriyi ardışık evet/hayır sorularıyla bölerek sınıflandırma ya da regresyon yapan bir modeldir. Her iç düğüm bir özelliğe göre bölünme kriteri, her yaprak düğüm ise bir tahmin değeri içerir. Karar ağaçları yorumlanabilirliği yüksek, eğitimi hızlı modellerdir; ancak eğitim verisine aşırı uyum (overfitting) sağlama eğilimleri nedeniyle tek başlarına kullanıldığında genelleme performansları sınırlı kalır.
Ensemble Learning ve Bagging Yöntemi
Ensemble learning, birden fazla modelin tahminlerini birleştirerek daha güçlü ve kararlı bir model elde etme yaklaşımıdır. Bu yaklaşımın iki temel yöntemi vardır: bagging (Bootstrap Aggregating) ve boosting.
Bagging yönteminde eğitim verisi yerine koyarak örnekleme (bootstrap) ile birden fazla alt kümeye bölünür, her alt küme üzerinde ayrı bir model eğitilir ve tahminler çoğunluk oylaması (sınıflandırma) ya da ortalama alma (regresyon) ile birleştirilir. Bu süreç varyansı düşürür, overfitting riskini azaltır ve modeli daha kararlı hale getirir.
Random Forest Algoritması: Adım Adım
Random Forest, bagging yönteminin üstüne bir de rastgele özellik seçimi ekleyerek karar ağaçları arasındaki korelasyonu kırar. Algoritma şu adımları izler:
- Eğitim verisinden bootstrap örneklemesi ile B adet alt küme oluşturulur.
- Her alt küme üzerinde bir karar ağacı büyütülür; ancak her bölünme noktasında tüm özellikler değil, rastgele seçilen m özellik aday olarak değerlendirilir (genellikle m = √p, p toplam özellik sayısı).
- Ağaçlar budanmadan tam derinliğe kadar büyütülür.
- Tahmin aşamasında tüm ağaçların çıktıları birleştirilir: sınıflandırmada çoğunluk oyu, regresyonda aritmetik ortalama alınır.
İpucu: Rastgele özellik seçimi, ağaçların birbirinden bağımsız hatalar yapmasını sağlar. Böylece birleştirme adımında hatalar büyük ölçüde birbirini götürür ve genel doğruluk artar. Bu ilke "wisdom of crowds" olarak da bilinir.
Feature Importance (Değişken Önemi)
Random Forest, her özelliğin tahmin gücüne ne kadar katkıda bulunduğunu hesaplayan yerleşik bir feature importance mekanizmasına sahiptir. Bu değer, bir özellik kullanılarak yapılan bölünmelerdeki safsızlık azalmasının (Gini impurity veya entropi) tüm ağaçlar üzerindeki ortalamasıdır. Yüksek feature importance değerine sahip değişkenler, modelin kararlarında daha belirleyici rol oynar ve araştırmacılara hangi değişkenlerin gerçekten önemli olduğunu gösterir.
Temel Hiperparametreler
Random Forest modelini kurarken ayarlanması gereken başlıca hiperparametreler şunlardır:
- n_estimators: Ormandaki ağaç sayısı. Daha fazla ağaç genellikle daha kararlı sonuç verir; ancak hesaplama maliyeti artar. 100–500 arası yaygın başlangıç değeridir.
- max_depth: Her ağacın maksimum derinliği. Sınırlandırılmazsa overfitting riski artar; çok kısıtlanırsa underfitting oluşur.
- max_features: Her bölünmede değerlendirilen özellik sayısı. Sınıflandırmada varsayılan √p, regresyonda p/3'tür.
- min_samples_split / min_samples_leaf: Bölünme için gereken minimum örnek sayısı; küçük değerler overfitting'e yol açabilir.
- bootstrap: Alt küme oluşturma yöntemi; True ile bootstrap örneklemesi uygulanır.
Random Forest ile Tek Karar Ağacı Karşılaştırması
| Özellik | Tek Karar Ağacı | Random Forest |
|---|---|---|
| Overfitting Riski | Yüksek | Düşük |
| Yorumlanabilirlik | Yüksek | Orta |
| Doğruluk | Orta | Yüksek |
| Eğitim Süresi | Çok Hızlı | Orta |
| Gürültüye Dayanıklılık | Düşük | Yüksek |
| Feature Importance | Var (sınırlı) | Var (güvenilir) |
| Hiperparametre Sayısı | Az | Orta |
Python ile Random Forest Uygulaması
scikit-learn kütüphanesi, Random Forest için kullanımı kolay bir arayüz sunar. Aşağıda temel bir sınıflandırma örneği verilmiştir:
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
import pandas as pd
# Veri yükleme ve bölme
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
# Model tanımlama ve eğitim
rf = RandomForestClassifier(
n_estimators=200,
max_depth=10,
max_features='sqrt',
random_state=42,
n_jobs=-1 # tüm CPU çekirdeklerini kullan
)
rf.fit(X_train, y_train)
# Değerlendirme
print(classification_report(y_test, rf.predict(X_test)))
# Feature importance
importances = pd.Series(
rf.feature_importances_, index=X.columns
).sort_values(ascending=False)
print(importances.head(10))
Avantajlar ve Dezavantajlar
Avantajlar: Overfitting'e karşı dirençlidir; eksik veriye ve aykırı değerlere dayanıklıdır; ön işleme gerektirmez (ölçekleme zorunlu değildir); hem sınıflandırma hem regresyon görevlerinde kullanılır; yerleşik feature importance sağlar; paralel eğitime uygundur.
Dezavantajlar: Tek bir karar ağacına kıyasla yorumlanması güçtür; büyük n_estimators değerlerinde bellek ve işlem süresi artar; gerçek zamanlı düşük gecikme gerektiren uygulamalarda yavaş kalabilir; çok boyutlu seyrek verilerle (örn. metin verisi) performansı sınırlı olabilir.
Kaynaklar
- Breiman, L. (2001). Random Forests. Machine Learning, 45(1), 5–32.
- Hastie, T., Tibshirani, R., & Friedman, J. (2009). The Elements of Statistical Learning (2nd ed.). Springer.
Random Forest Modelinizi Birlikte Kuralım
Verinize özel Random Forest modeli kurulumu, hiperparametre optimizasyonu ve yorumlama desteği için uzman ekibimizle iletişime geçin.
Ücretsiz Danışmanlık Al