CodeBlanks Logo Icon CodeBlanks

Random forest nedir?

Random forest, birden çok karar ağacını birleştiren ensemble algoritmasıdır.

Random forest nedir?

Tek bir karar ağacı veri değiştikçe çok farklı kurallar öğrenir (yüksek varyans). Random forest yüzlerce ağacı farklı veri örneklemleri ve farklı özellik alt kümeleriyle eğitir, kararlarını oylamayla birleştirir. Ağaçların hataları birbirini götürür.

from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(n_estimators=200, random_state=0).fit(X_train, y_train)
print(rf.score(X_test, y_test))
print(len(rf.estimators_))   # 200 ayrı ağaç

Ölçekleme gerektirmez, az ayarla iyi çalışır ve çoğu tablo verisinde güçlü bir ilk tercihtir.

Ağaçlar neden farklı?

İki rastgelelik kaynağı vardır:

  • Bootstrap: her ağaç, eğitim verisinden yerine koyarak çekilmiş bir örneklemle eğitilir.
  • Özellik alt kümesi: her bölmede yalnızca rastgele seçilmiş max_features özellik değerlendirilir (sınıflandırmada varsayılan √p).

İkincisi önemlidir: güçlü bir özellik tüm ağaçların kökünde olsaydı ağaçlar birbirine benzer, ortalamanın faydası azalırdı.

Uygulama Ağaç ve orman

Tek bir DecisionTreeClassifier(random_state=0) ve RandomForestClassifier(n_estimators=200, random_state=0) eğit. İkisinin test doğruluğunu round(..., 3) ile alt alta yazdır.

Başlangıç kodu

model.py
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier

X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0, stratify=y)
from sklearn.tree import DecisionTreeClassifier

# buraya yaz

Örnek çözüm

model.py
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier

X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0, stratify=y)
from sklearn.tree import DecisionTreeClassifier

agac = DecisionTreeClassifier(random_state=0).fit(X_train, y_train)
rf = RandomForestClassifier(n_estimators=200, random_state=0).fit(X_train, y_train)
print(round(agac.score(X_test, y_test), 3))
print(round(rf.score(X_test, y_test), 3))

Beklenen çıktı

0.902
0.944

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Random forest tek ağaca göre hangi sorunu azaltır?

  • Sapmayı her zaman sıfırlar
  • Eğitim süresini
  • Bellek kullanımını
  • Varyansı (kararsızlığı) Doğru cevap

Açıklama: Birbirinden farklı ağaçların ortalaması, tek ağacın dalgalanmasını yumuşatır.

2 300 ağaçlı bir orman oluştur.

Soru
rf = RandomForestClassifier(____=300, random_state=0)
Cevap
rf = RandomForestClassifier(n_estimators=300, random_state=0)

Açıklama: n_estimators ormandaki ağaç sayısıdır.

3 Kavramları eşleştir.

Kavram Anlamı
bootstrap Yerine koyarak örnekleme
max_features Bölmede aday özellik sayısı
estimators_ Eğitilmiş ağaçlar
oylama Kararların birleşimi

Orta seviye bölümündeki tüm dersler