Garfield
YZF Admin
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.
Hedef değişkenin türü, kullanacağınız sınıfı belirler. Kategorik bir sonucu tahmin ediyorsanız
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.
Ön koşul olarak Python ortamınızda
Kodda
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.
Bu örnekte
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.
Model eğitildikten sonra özellik önemlerini inceleyebilirsiniz:
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.
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ı
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.
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 hedef | Yaygın ölçüt |
|---|---|---|---|
| Sınıflandırma | RandomForestClassifier | Spam / normal, sınıf A / B | Doğruluk, kesinlik, duyarlılık, F1 |
| Regresyon | RandomForestRegressor | Fiyat, sıcaklık, satış miktarı | MAE, RMSE, 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.- 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.
- Veriyi eğitim ve test kümelerine ayırın.
test_size=0.2verinin yüzde 20'sini test için ayırır.random_stateaynı kodun tekrar çalıştırıldığında aynı bölmeyi kullanmasını sağlar. - Rastgele orman sınıflandırıcısını oluşturun.
n_estimators=200modelin 200 karar ağacı kullanmasını sağlar.n_jobs=-1kullanılabilen işlemci çekirdeklerinden yararlanır. - 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. - Test verisi üzerinde tahmin üretin.
predict(X_test)sonucu, test satırları için tahmin edilen sınıf etiketlerini verir. - 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: