Ana içeriğe atla

Scikit-Learn ile Python'da Rastgele Orman Sınıflandırması: Adım Adım Kılavuz (Kod Örnekleriyle)

Bu yazı, scikit-learn ile rastgele orman sınıflandırmasının nasıl ve ne zaman kullanılacağını; kavramlara, iş akışına ve örneklere odaklanarak ele alır. Ayrıca karmaşıklık matrisi ve özellik önemlerini nasıl kullanacağınızı da kapsar.
Güncel 22 Nis 2026  · 14 dk. oku

Bu eğitim, Rastgele Orman (Random Forest) algoritmasının Python'da sınıflandırma için nasıl kullanılacağını açıklar. Şunları öğreneceksiniz:

  • Rastgele Ormanların bir topluluk öğrenmesi yöntemi olarak nasıl çalıştığı
  • scikit-learn kullanarak bir sınıflandırıcıyı nasıl oluşturup eğiteceğiniz
  • Modelinizin performansını yaygın metriklerle nasıl değerlendireceğiniz

Bu makaleden en iyi şekilde yararlanmak için Python, pandas ve scikit-learn hakkında temel bilgiye sahip olmalısınız. Karar ağaçlarının sınıflandırma için nasıl kullanıldığını anlamak faydalıdır; bu nedenle önce Python'da Karar Ağacı Sınıflandırması Eğitimi yazımızı okuyabilirsiniz. Scikit-learn kullanmaya yeni başlıyorsanız Kaggle Eğitimi: İlk Makine Öğrenimi Modeliniz içeriğine göz atın.

Rastgele ormanlar hem sınıflandırma hem de regresyon için kullanılabilse de bu yazıda sınıflandırma modeli kurmaya odaklanacağız. Bu eğitimdeki kodlarla kolayca denemeler yapmak için eşlik eden DataLab çalışma kitabını ziyaret edin. Son olarak, tic_tac_toe veri kümesini kullanarak rastgele orman sınıflandırmasını pratik edebileceğiniz Python'da Model Doğrulama kursumuzu deneyin.

Rastgele Ormanlar Nedir?

Rastgele ormanlar, hem regresyon hem de sınıflandırma görevlerini ele alabilen, popüler bir gözetimli makine öğrenimi algoritmasıdır. Aşağıda rastgele ormanların bazı temel özellikleri yer alır:

  • Rastgele ormanlar, etiketli bir hedef değişkenin bulunduğu gözetimli makine öğrenimi içindir.
  • Rastgele ormanlar, regresyon (sayısal hedef değişken) ve sınıflandırma (kategorik hedef değişken) problemlerini çözmek için kullanılabilir.
  • Rastgele ormanlar bir topluluk yöntemidir; yani diğer modellerin tahminlerini birleştirir.
  • Rastgele orman topluluğundaki küçük modellerin her biri bir karar ağacıdır.

Rastgele Orman Sınıflandırması Nasıl Çalışır

Çözmeniz gereken karmaşık bir sorun olduğunu ve farklı alanlardan uzmanların görüşlerini almak için bir araya geldiğinizi hayal edin. Her uzman, kendi uzmanlığı ve deneyimine dayanarak fikrini belirtir. Ardından uzmanlar, nihai bir karara varmak için oylama yapar.

Rastgele orman sınıflandırmasında, verilerin ve özelliklerin farklı rastgele alt kümeleri kullanılarak birden çok karar ağacı oluşturulur. Her karar ağacı, verileri nasıl sınıflandıracağına dair bir görüş bildiren bir uzman gibidir. Tahminler, her karar ağacının tahmini hesaplanarak ve ardından en popüler sonucun alınmasıyla yapılır. (Regresyonda ise bunun yerine ortalama alma tekniği kullanılır.)

Aşağıdaki diyagramda, n adet karar ağacına sahip bir rastgele orman görüyoruz ve ilk 5'i ile bunların tahminlerini ("Köpek" veya "Kedi") gösterdik. Her ağaç, farklı sayıda özelliğe ve orijinal veri kümesinden farklı bir örneğe maruz kalır; bu nedenle her ağaç farklı olabilir. Her ağaç bir tahminde bulunur.

İlk 5 ağaca baktığımızda, 4/5'inin örneğin Kedi olduğunu tahmin ettiğini görebiliriz. Yeşil daireler, ağacın kararına ulaşmak için izlediği varsayımsal yolu gösterir. Rastgele orman, karar ağaçlarından gelen Cat ve Dog tahminlerinin sayısını sayar ve en popüler tahmini seçer.

rastgele orman sınıflandırmasının nasıl çalıştığını gösteren illüstrasyonRastgele orman sınıflandırmasının nasıl çalıştığının illüstrasyonu. Görsel: Yazar

Veri Kümesini Yükleyin

Bu veri kümesi, Portekizli bir bankacılık kuruluşunun telefon aramalarıyla yürüttüğü doğrudan pazarlama kampanyalarından oluşur. Kampanyaların amacı, vadeli mevduat abonelikleri satmaktır. Bu veri kümesini bank_data adlı bir değişkende saklayacağız. Kullanacağımız sütunlar şunlardır:

  • age: Telefonu alan kişinin yaşı

  • default: Kişinin temerrütte olan bir kredisi olup olmadığı

  • cons.price.idx: Arama zamanındaki tüketici fiyat endeksi skoru

  • cons.conf.idx: Arama zamanındaki tüketici güven endeksi skoru

  • y: Kişinin abone olup olmadığı (tahmin etmeye çalıştığımız şey)

Paketleri İçe Aktarın

Bu eğitimde aşağıdaki paketler ve fonksiyonlar kullanılır:

# Data Processing
import pandas as pd
import numpy as np

# Modelling
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, confusion_matrix, precision_score, recall_score, ConfusionMatrixDisplay
from sklearn.model_selection import RandomizedSearchCV, train_test_split
from scipy.stats import randint

# Tree Visualisation
from sklearn.tree import export_graphviz
from IPython.display import Image
import graphviz

Rastgele Orman İş Akışı

Bu modeli uyarlayıp eğitmek için Makine Öğrenimi İş Akışı infografiğini takip edeceğiz; ancak verilerimiz oldukça temiz olduğu için her adımı uygulamayacağız. Şunları yapacağız:

  • Özellik mühendisliği
  • Veriyi bölme
  • Modeli eğitme
  • Hiperparametre ayarlama
  • Model performansını değerlendirme

Rastgele Orman Sınıflandırıcımız için Veriyi Ön işleme

Ağaç tabanlı modeller, doğrusal modellere göre aykırı değerlere çok daha dayanıklıdır ve çalışmak için değişkenlerin normalize edilmesine ihtiyaç duymaz. Bu nedenle verilerimiz üzerinde çok az ön işleme yapmamız yeterlidir.

  • default sütunumuzdaki no ve yes değerlerini sırasıyla 0 ve 1 ile eşleyeceğiz. Bu örnekte unknown değerlerini no olarak ele alacağız.

  • Ayrıca hedefimiz olan y'yi de 1 ve 0 ile eşleyeceğiz.

bank_data['default'] = bank_data['default'].map({'no':0,'yes':1,'unknown':0})
bank_data['y'] = bank_data['y'].map({'no':0,'yes':1})

Veriyi Bölme

Herhangi bir gözetimli öğrenme modelini eğitirken, veriyi eğitim ve test olarak bölmek önemlidir. Eğitim verisi modeli uyarlamak için kullanılır. Algoritma, özellikler ile hedef arasındaki ilişkiyi eğitim verisinden öğrenir. Test verisi ise modelin performansını değerlendirmek için kullanılır.

Aşağıdaki kod, veriyi önce özellikler ve hedef için ayrı değişkenlere ayırır, sonra da bunları eğitim ve test verisi olarak böler.

# Split the data into features (X) and target (y)
X = bank_data.drop('y', axis=1)
y = bank_data['y']

# Split the data into training and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)

Rastgele Orman Modelini Uydurma ve Değerlendirme

Önce varsayılan parametrelerle bir Rastgele Orman modeli örneği oluşturuyoruz. Ardından bunu eğitim verimize uyarlıyoruz. Modelin öğrenebilmesi için hem özellikleri hem hedef değişkeni geçiyoruz.

rf = RandomForestClassifier()
rf.fit(X_train, y_train)

Bu noktada, eğitilmiş bir rastgele orman modelimiz var; ancak doğru tahminler yapıp yapmadığını öğrenmemiz gerekiyor.

y_pred = rf.predict(X_test)

Bu modeli değerlendirmenin en basit yolu doğruluk oranını (accuracy) kullanmaktır; test setindeki gerçek değerlerle tahminleri karşılaştırır ve modelin kaçını doğru bildiğini sayarız.

accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

Çıktı:

Accuracy: 0.888

Oldukça iyi bir skor! Ancak, hiperparametrelerimizi optimize ederek daha iyisini yapabiliriz. 

Not: Sadece doğruluk, dengesiz verilerde yanıltıcı olabilir. Yanlış pozitif ve yanlış negatif ödünleşimini anlamak için daima kesinlik (precision) ve duyarlılığı (recall) kontrol edin.

Sonuçların Görselleştirilmesi

Aşağıdaki kodu kullanarak ilk 3 ağacımızı görselleştirebiliriz.

# Export the first three decision trees from the forest

for i in range(3):
    tree = rf.estimators_[i]
    dot_data = export_graphviz(tree,
                               feature_names=X_train.columns,  
                               filled=True,  
                               max_depth=2, 
                               impurity=False, 
                               proportion=True)
    graph = graphviz.Source(dot_data)
    display(graph)

image2.png
image1.pngimage7.png

Her ağaç görseli, yalnızca ilk birkaç düğümü gösterecek şekilde sınırlıdır. Bu ağaçlar çok büyük hale gelebilir ve görselleştirmesi zorlaşabilir. Renkler, her düğümün (kutu) çoğunluk sınıfını temsil eder; kırmızı çoğunluk 0'ı (abonelik yok), mavi ise çoğunluk 1'i (abonelik var) gösterir. Düğüm, tamamen 0 veya 1'e yaklaştıkça renkler koyulaşır. Her düğüm ayrıca şu bilgileri içerir:

  1. Bölmede kullanılan değişken adı ve değeri
  2. Her bölmedeki toplam örneklerin yüzdesi
  3. Her bölmedeki sınıflar arasındaki yüzde dağılımı

Hiperparametre Ayarlama

Aşağıdaki kod, her bir hiperparametre için belirli bir aralıkta rastgele arama yapacak olan Scikit-Learn’ün RandomizedSearchCV yöntemini kullanır. Hiperparametreleri ve aralıklarını param_dist sözlüğünde tanımlarız. Bizim durumumuzda şunları kullanıyoruz:

  • n_estimators: ormandaki karar ağaçlarının sayısı. Bu hiperparametrenin artırılması genellikle modelin performansını iyileştirir, ancak eğitim ve tahminin hesaplama maliyetini de artırır.

  • max_depth: ormandaki her karar ağacının maksimum derinliği. max_depth için daha yüksek bir değer belirlemek aşırı uyuma, çok düşük bir değer belirlemek ise yetersiz uyuma yol açabilir.

param_dist = {
  'n_estimators': randint(100, 500),
  'max_depth': randint(3, 15),
  'min_samples_split': randint(2, 10),
  'min_samples_leaf': randint(1, 5)
}


# Create a random forest classifier
rf = RandomForestClassifier(random_state=42, n_jobs=-1)

# Use random search to find the best hyperparameters
rand_search = RandomizedSearchCV(
  rf, param_distributions=param_dist,
  n_iter=10, cv=5, scoring='accuracy',
  n_jobs=-1, random_state=42

RandomizedSearchCV, birçok modeli ( n_iter_ ile tanımlanır) eğitir ve her birini bir değişken olarak saklar. Aşağıdaki kod, en iyi model için bir değişken oluşturur ve hiperparametreleri yazdırır.

Bu durumda, fonksiyona bir puanlama sistemi geçmediğimiz için varsayılan olarak accuracy kullanılır. Bu fonksiyon ayrıca çapraz doğrulama uygular; yani veriyi beş eşit gruba böler ve sonucu değerlendirmek için 4'ünü eğitim, 1'ini test olarak kullanır. Her grup için döngü kurarak bir doğruluk skoru üretir ve en iyi modeli bulmak için ortalamasını alır.

# Create a variable for the best model
best_rf = rand_search.best_estimator_

# Print the best hyperparameters
print('Best hyperparameters:',  rand_search.best_params_)

Çıktı:

Best hyperparameters: {'max_depth': 5, 'n_estimators': 260}

Daha Fazla Rastgele Orman Değerlendirme Metrikleri

Karmaşıklık (confusion) matrisine bakalım. Bu matris, modelin tahmin ettiğini doğru tahminle karşılaştırır. Buradan yanlış pozitifler (sağ üst) ile yanlış negatifler (sol alt) arasındaki ödünleşimi anlayabiliriz. Karmaşıklık matrisini şu kodla görselleştirebiliriz:

# Generate predictions with the best model
y_pred = best_rf.predict(X_test)

# Create the confusion matrix
cm = confusion_matrix(y_test, y_pred)

ConfusionMatrixDisplay(confusion_matrix=cm).plot();

Çıktı:

rastgele orman model değerlendirmesi

Karmaşıklık matrisi kullanılarak rastgele orman sınıflandırıcı değerlendirmesi. Görsel: Yazar

En iyi modeli ayrıca doğruluk, kesinlik ve duyarlılık ile değerlendirmeliyiz (rastgelelik nedeniyle sonuçlarınız farklı olabilir)

y_pred = knn.predict(X_test)

accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)

print("Accuracy:", accuracy)
print("Precision:", precision)
print("Recall:", recall)

Çıktı:

Accuracy: 0.885

Precision: 0.578

Recall: 0.0873

Aşağıdaki kod, her bir karar ağacı içinde veriyi bölmek için en iyi yolu bulmak üzere modelin dahili skorunu kullanarak, her özelliğin önemini görselleştirir.

# Create a series containing feature importances from the model and feature names from the training data
importances = pd.Series(best_rf.feature_importances_, index=X_train.columns)
importances.sort_values(ascending=False).plot.bar()

Bu bize, arama zamanındaki tüketici güven endeksinin, kişinin abone olup olmayacağının en güçlü belirleyicisi olduğunu söylüyor.

Rastgele orman model değerlendirmesi
Önem sırasına göre rastgele orman sınıflandırıcı özellikleri. Görsel: Yazar

Rastgele Ormanları Ne Zaman Kullanmalı (ve Ne Zaman Kullanmamalı)

Rastgele Ormanlar, kutudan çıktığı gibi iyi çalışan güçlü bir başlangıç modeli gerektiğinde harika bir seçimdir. Hem sayısal hem kategorik özellikleri işleyebilir, eksik değerlerle iyi başa çıkar ve tek karar ağaçlarına kıyasla aşırı uyuma daha az eğilimlidir.

Rastgele Ormanları şu durumlarda kullanın:

  • Tablo veriniz ve karışık özellik türleriniz varsa
  • Ağır özellik ölçekleme veya ön işlemeye gerek duymayan sağlam bir model istiyorsanız
  • Yorumlanabilirlik (özellik önemi aracılığıyla) uygulamanız için önemliyse

Ancak şu durumlarda Rastgele Ormanlar ideal olmayabilir:

  • Gerçek zamanlı tahminler gerekiyorsa; tek modellere göre daha yavaş olabilirler
  • Çok yüksek boyutlu verilerle (ör. metin veya görüntüler) uğraşıyorsanız
  • Yapısal veride en yüksek doğruluk seviyeleri hedefleniyorsa; gradyan artırmalı yöntemler olan XGBoost veya LightGBM genellikle daha iyi performans gösterir

Bir Sonraki Seviyeye Taşıyın

Python'da gözetimli makine öğrenimine başlamak için scikit-learn ile Gözetimli Öğrenme kursunu alın. Rastgele ormanlar ve diğer ağaç tabanlı makine öğrenimi modellerini kullanmayı öğrenmek için Python'da Ağaç Tabanlı Modellerle Makine Öğrenimi ve Python'da Topluluk Yöntemleri kurslarımıza göz atın.

Rastgele Orman SSS

Rastgele orman sınıflandırması nedir?

Rastgele orman sınıflandırması, verileri sınıflandırmak için birden çok karar ağacı kullanan topluluk bir makine öğrenimi algoritmasıdır. Çeşitli karar ağaçlarının tahminlerini bir araya getirerek aşırı uyumu azaltır ve doğruluğu artırır.

Rastgele orman aşırı uyumu nasıl önler?

Rastgele Orman, verilerin ve özelliklerin farklı alt kümelerini kullanarak birden çok karar ağacı oluşturup ardından tahminleri ortalayarak aşırı uyumu azaltır. Bu yaklaşım, modeli genellenebilir kılar ve eğitim verisindeki gürültüyü ezberleme olasılığını düşürür.

Rastgele orman sınıflandırmada ayarlanacak temel hiperparametreler nelerdir?

Rastgele orman için temel hiperparametreler arasında ağaç sayısı, her ağacın maksimum derinliği, bir düğümün bölünmesi için gereken minimum örnek sayısı ve her bölme için dikkate alınacak özellik sayısı bulunur.

Rastgele orman sınıflandırmasının avantajları nelerdir?

Rastgele orman sınıflandırması, aşırı uyuma karşı dayanıklıdır, büyük veri kümelerinde iyi performans gösterir, hem sayısal hem kategorik özellikleri işleyebilir ve sinir ağları gibi diğer algoritmalara kıyasla hiperparametre ayarına daha az hassastır.

Rastgele orman eksik verileri nasıl ele alır?

Rastgele orman, eksik değerleri ikame bölmelerle (surrogate splits) tahmin ederek ya da farklı karar ağaçları arasında sonuçları ortalayarak ele alabilir; bu da onu tekil karar ağaçlarına kıyasla eksik veri kümelerine karşı daha toleranslı kılar.

 

Rastgele orman sınıflandırması ile rastgele orman regresyonu arasındaki fark nedir?

Rastgele orman sınıflandırması, kategorik çıktıları (ör. etiketler veya sınıflar; "spam" ya da "spam değil" gibi) tahmin ederken; rastgele orman regresyonu, ev fiyatları veya sıcaklıklar gibi sürekli sayısal çıktıları tahmin eder.

Konular

Python Kursları

Kurs

Python’a Giriş

4 sa
6.8M
Python ile veri analizi temellerini sadece dört saatte öğrenin. Bu çevrimiçi kurs, Python arayüzünü tanıtacak ve popüler paketleri keşfedecektir.
Ayrıntıları Gör
Kursa Başla
Devamını Gör