iToverDose/Yazılım· 4 MAYIS 2026 · 20:06

Model Kandırmasını Önleyin: ML Doğruluğu için Train-Test Bölme En İyi Uygulamaları

Model Kandırmasını Önleyin: ML Doğruluğu için Train-Test Bölme En İyi Uygulamaları

DEV Community2 dk okuma0 Yorumlar

Makine öğrenimi, verilerden kalıplar öğrenen ve görülmeyen örneklerde doğru tahminler yapan modeller vaat ediyor. Ancak başlangıçta olanlar, genellikle kendi çalışmalarını bilmeyerek modelleri eğitim için kullandıkları aynı verilerle değerlendirirler. Sonuç? Gerçek dünya girişine karşı model karşılaştığında çöken, aldatıcı bir şekilde yüksek puan. Bu yaygın hata, basit ancak kritik bir ihmalden kaynaklanıyor: eğitim başlamadan önce test verilerini ayırmayı unutmak.

Model Test Etme中的 Gizli Tuzağı

Bir modeli aynı veri kümesiyle hem eğittiğiniz hem de test ettiğinizde, genelleme öğrenmez - sadece ezberler. Aynı testi çalıştırdıkları öğrencilere vermek gibi düşünün: mükemmel bir şekilde puan alacaklar, ancak aslında materyali hakim olmamışlardır. Benzer şekilde, aynı verilerle eğitilen ve değerlendirilen bir model, test sırasında kusursuz görünür, ancak dağıtıldığında felaketle sonuçlanır.

Çözüm basittir: verilerinizi ayrı eğitim ve test kümelerine ayırın. Eğitim kümesi modeli öğretir; test kümesi onu adil bir şekilde değerlendirir. Test kümesini, model nihai hale getirildikten sonra sadece bir kez açılan kapalı bir sınav zarfı olarak düşünün.

from sklearn.model_selection import train_test_split
import numpy as np

# Örnek veri kümesi: 5 özellikli 1000 örnek
X = np.random.rand(1000, 5)
y = np.random.randint(0, 2, 1000)

# %80 eğitim, %20 test olarak bölün
X_train, X_test, y_train, y_test = train_test_split(
    X, y, 
    test_size=0.2,
    random_state=42  # Üretken bölünmeleri sağlar
)

print(f"Eğitim boyutu: {X_train.shape[0]}")  # Çıktı: 800
print(f"Test boyutu: {X_test.shape[0]}")    # Çıktı: 200

random_state=42 parametresi, bölünmelerin her çalıştırıldığında tutarlı olmasını sağlar ve bu da hata ayıklama veya karşılaştırma sırasında sonuçların karmaşıklaşmasını önler.

Doğru Bölme Oranını Seçme

Eğitim ve test kümeleri arasındaki ideal oran, veri kümesinin boyutuna bağlıdır:

  • Küçük veri kümeleri (1000'den az örnek): Modelin yeterli eğitim örneklerine sahip olmasını sağlamak ve anlamlı bir test havuzunu korumak için 70/30 veya 60/40 bölünmesini kullanın.
  • Büyük veri kümeleri (100.000'den fazla örnek): 90/10 veya 95/5 bölünmesi genellikle yeterlidir, çünkü verilerin %10'u bile yeterli test kapsamını sağlar.
# Küçük veri kümesi örneği (70/30 bölünme)
X_train_small, X_test_small, y_train_small, y_test_small = train_test_split(
    X, y, 
    test_size=0.3,
    random_state=42
)

# Büyük veri kümesi örneği (90/10 bölünme)
X_train_large, X_test_large, y_train_large, y_test_large = train_test_split(
    X, y, 
    test_size=0.1,
    random_state=42
)

Büyük veri kümeleri için 50/50 gibi aşırı bölünmelerden kaçının, çünkü azaltılmış eğitim verileri model performansını düşürebilir. Buna karşılık, çok küçük test kümeleri (örneğin, %5) güvenilmez doğruluk tahmini verir.

Sessiz Öldürücü: Veri Kaçaklığı

Veri kaçaklığı, test kümesinden bilgi kasıtlı olarak eğitim sürecini etkilediğinde ortaya çıkar. Bu ince hata, performans ölçütlerini şişirir ve modelin dayanıklılığı hakkında yanlış bir izlenim verir. İki temel kaçak türü vardır:

1. Tüm veri üzerinde doğrudan eğitim Aynı veri kümesiyle hem eğitim hem de test yapmak, en açık kaçak türüdür. Yapay olarak yüksek puanlar üretir, ancak bunlar gerçek dünya dağıtımı için anlamsızdır.

# YANLIŞ: Tüm veri üzerinde eğitim ve test
model.fit(X, y)
test_score = model.score(X, y)  # Puan mükemmel görünür, ancak anlamsızdır

# DOĞRU: Ayrı eğitim ve test kümeleri
model.fit(X_train, y_train)
gerçek_score = model.score(X_test, y_test)  # Doğru değerlendirme

2. Bölünmeden önce ön işleme Verileri bölünmeden önce ölçekleme, normalize etme veya eksik verileri doldurmak, test kümesinden eğitim sürecine bilgi sızdırır. Örneğin, tüm veri kümesinden ortalama ve standart sapmayı hesaplayarak ölçekleme, test kümesini kirletir.

from sklearn.preprocessing import StandardScaler

# YANLIŞ: Bölünmeden önce ölçekleme
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)  # Tüm veri kümelerini, test örneklerini de kullanır
X_train, X_test, y_train, y_test = train_test

Yapay zeka özeti

Train and test your ML model on the same data? You’re sabotaging accuracy. Learn train-test splits, cross-validation, and data leakage prevention to build models that truly generalize.

Yorumlar

00
YORUM BIRAK
ID #XJBGCK

0 / 1200 KARAKTER

İnsan doğrulaması

6 + 3 = ?

Editör onayı sonrası yayına girer

Moderasyon · Spam koruması aktif

Henüz onaylı yorum yok. İlk yorumu sen bırak.