• Yapay zeka soru ve sorunlarınızı uygun olan kategorilere açıp yanıt alabilirsiniz...

Scikit-learn ile rastgele orman nasıl eğitilir?

Garfield

YZF Admin
Yaş
40
Konum
YurtDışı
Katılım
27 Eki 2026
Konular
664
Mesajlar
689
AI Seviyesi
Yeni
Rastgele orman modeli, birden fazla karar ağacını birlikte kullanarak sınıflandırma veya regresyon yapan güçlü bir makine öğrenmesi yöntemidir. scikit-learn ile temel akış; veriyi özellik ve hedef olarak ayırmak, eğitim ve test kümelerine bölmek, uygun sınıfı seçmek, modeli eğitmek ve test verisindeki başarımı ölçmektir. Aşağıdaki örnekte çiçek verisiyle bir sınıflandırma modeli kurulur ve test doğruluğu hesaplanır.

Hangi rastgele orman sınıfı kullanılmalı?​


Hedef değişkenin türü, kullanacağınız sınıfı belirler. Kategorik bir sonucu tahmin ediyorsanız RandomForestClassifier, sayısal bir değeri tahmin ediyorsanız RandomForestRegressor kullanılır.
Tahmin türüscikit-learn sınıfıÖrnek hedefYaygın ölçüt
SınıflandırmaRandomForestClassifierSpam / normal, sınıf A / BDoğruluk, kesinlik, duyarlılık, F1
RegresyonRandomForestRegressorFiyat, sıcaklık, satış miktarıMAE, RMSE, R²
Sınıflandırmada model bir sınıf etiketi, isterseniz sınıflara ait olasılıkları üretir. Regresyonda ise sürekli bir sayısal tahmin döndürür. Modelin eğitim verisindeki başarısı tek başına yeterli değildir; asıl kontrol, eğitim sırasında kullanılmayan test verisiyle yapılmalıdır.

Sınıflandırma için en küçük çalışan örnek​


Ön koşul olarak Python ortamınızda scikit-learn ve numpy bulunmalıdır. Aşağıdaki örnek, scikit-learn içindeki Iris veri kümesini kullanır; X özellikleri, y ise tahmin edilecek sınıfları temsil eder.
  1. Gerekli sınıfları içe aktarın. Veri kümesini, eğitim-test ayırma işlevini, rastgele orman modelini ve doğruluk ölçütünü kullanacaksınız.
  2. Veriyi eğitim ve test kümelerine ayırın. test_size=0.2 verinin yüzde 20'sini test için ayırır. random_state aynı kodun tekrar çalıştırıldığında aynı bölmeyi kullanmasını sağlar.
  3. Rastgele orman sınıflandırıcısını oluşturun. n_estimators=200 modelin 200 karar ağacı kullanmasını sağlar. n_jobs=-1 kullanılabilen işlemci çekirdeklerinden yararlanır.
  4. Modeli eğitim verisiyle eğitin. fit(X_train, y_train) çağrısı, özelliklerle hedef sınıflar arasındaki örüntüleri öğrenir.
  5. Test verisi üzerinde tahmin üretin. predict(X_test) sonucu, test satırları için tahmin edilen sınıf etiketlerini verir.
  6. Başarımı ölçün. Doğruluk, doğru tahminlerin tüm test örneklerine oranıdır. Test sonucu beklenmedik biçimde düşükse veri biçimini, hedef etiketlerini ve sınıf dağılımını kontrol edin.
Python:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, classification_report

# Varsayımsal örnek veri kümesi
iris = load_iris()
X = iris.data
y = iris.target

X_train, X_test, y_train, y_test = train_test_split(
    X,
    y,
    test_size=0.2,
    random_state=42,
    stratify=y
)

model = RandomForestClassifier(
    n_estimators=200,
    random_state=42,
    n_jobs=-1
)

model.fit(X_train, y_train)
y_pred = model.predict(X_test)

print("Doğruluk:", accuracy_score(y_test, y_pred))
print(classification_report(y_test, y_pred, target_names=iris.target_names))

Kodda y = iris.target satırının başında boşluk bulunmamalıdır; doğru yazımı y = iris.target şeklindedir. Çalıştırıldığında ekranda 0 ile 1 arasında bir doğruluk değeri ve her sınıf için kesinlik, duyarlılık ve F1 ölçümleri görülür. Örneğin doğruluk 0,90 ise test örneklerinin yaklaşık yüzde 90'ının doğru sınıflandırıldığı anlaşılır; bu değer modelin her yeni veride kesin olarak yüzde 90 başarılı olacağını kanıtlamaz.

Kendi verinizle modeli eğitme​


Kendi tablonuzda her satır bir gözlem, her özellik sütunu bir girdi ve hedef sütun tahmin edilmek istenen sonuç olmalıdır. Hedef sütununu özelliklerin içine bırakırsanız model doğru cevabı dolaylı olarak görür ve gerçekte olduğundan daha başarılı görünebilir.

Python:
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report

veri = pd.read_csv("veri.csv")

X = veri.drop(columns="hedef")
y = veri["hedef"]

X_train, X_test, y_train, y_test = train_test_split(
    X,
    y,
    test_size=0.2,
    random_state=42,
    stratify=y
)

model = RandomForestClassifier(
    n_estimators=300,
    random_state=42,
    class_weight="balanced"
)

model.fit(X_train, y_train)
y_pred = model.predict(X_test)

print(classification_report(y_test, y_pred))

Bu örnekte veri.csv içinde hedef adlı bir sütun olduğu varsayılmıştır. Özellik sütunlarında metin kategorileri varsa bunları doğrudan sayısal olmayan değerler olarak vermek yerine uygun bir kodlama yöntemi kullanmanız gerekir. Eğitim ve test verisini ayırdıktan sonra dönüşümü yalnızca eğitim verisinden öğrenmek, test bilgisinin modele sızmasını önler.

Önemli ayarlar ve sonuçların yorumu​


n_estimators ağaç sayısını belirler. Daha fazla ağaç tahminleri genellikle daha kararlı hâle getirir ancak eğitim ve tahmin süresini artırabilir. max_depth ağaçların büyüyebileceği derinliği sınırlar; çok derin ağaçlar eğitim verisini aşırı öğrenebilir. min_samples_leaf bir yaprakta bulunması gereken en az örnek sayısını artırarak daha temkinli bölünmeler sağlayabilir.

Sınıflar dengesizse yalnızca doğruluğa bakmayın. Az görülen sınıfın duyarlılık ve F1 değerlerini de inceleyin. class_weight="balanced" bazı sınıflara daha fazla ağırlık vermeyi deneyebilir; ancak bu ayar sorunun çözüldüğünü kanıtlamaz. Özellikle maliyeti yüksek yanlış negatif veya yanlış pozitif durumlarında karar eşiğini ve karmaşıklık matrisini ayrıca değerlendirin.

Model eğitildikten sonra özellik önemlerini inceleyebilirsiniz:

Python:
for ad, onem in sorted(
    zip(X.columns, model.feature_importances_),
    key=lambda item: item[1],
    reverse=True
):
    print(f"{ad}: {onem:.4f}")

Bu değerler, ağaçların bölünmelerinde özelliklerin göreli katkısını gösterir; bir özelliğin nedensel olarak en önemli etken olduğunu kanıtlamaz. Özellikler birbiriyle güçlü biçimde ilişkiliyse önem payları aralarında bölünebilir.

Regresyon modeli kurma​


Sayısal bir hedef tahmin ediyorsanız sınıflandırıcı yerine regresyon sınıfını kullanın. Tahmin edilen değerlerin anlamlılığını mean_absolute_error veya root_mean_squared_error gibi ölçütlerle kontrol edin.

Python:
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error, r2_score

veri = pd.read_csv("fiyat_verisi.csv")

X = veri.drop(columns="fiyat")
y = veri["fiyat"]

X_train, X_test, y_train, y_test = train_test_split(
    X,
    y,
    test_size=0.2,
    random_state=42
)

model = RandomForestRegressor(
    n_estimators=300,
    random_state=42,
    n_jobs=-1
)

model.fit(X_train, y_train)
y_pred = model.predict(X_test)

print("Ortalama mutlak hata:", mean_absolute_error(y_test, y_pred))
print("R²:", r2_score(y_test, y_pred))

Ortalama mutlak hata 2500 ise tahminlerin ortalama mutlak sapması yaklaşık 2500 hedef birimidir; bu değerin iyi veya kötü olduğuna hedefin ölçeğine ve kullanım amacına bakarak karar verilir. R² değeri modelin test verisindeki açıklama gücü hakkında fikir verir, fakat farklı veri kümeleri veya zaman dönemleri arasında tek başına kalite garantisi değildir. Test başarımı yetersizse özellikleri, veri sızıntısını, eksik değerleri, sınıf dengesini ve model ayarlarını ayrı ayrı kontrol edin; ardından modeli yalnızca aynı test kümesine tekrar tekrar göre ayarlamak yerine çapraz doğrulama kullanın.
 
Son düzenleme:

Sen de şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Geri
Üst