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

Scikit-learn train_test_split ile veri nasıl ayrılır?

Garfield

YZF Admin
Yaş
40
Konum
YurtDışı
Katılım
27 Eki 2026
Konular
664
Mesajlar
689
AI Seviyesi
Yeni
scikit-learn içinde train_test_split ile özellikleri ve hedefleri aynı çağrıda eğitim ve test bölümlerine ayırın. Böylece bir satırın özellikleri kendi etiketiyle birlikte taşınır. Bağımsız gözlemlerden oluşan bir sınıflandırma probleminde stratify=y sınıf oranlarını yaklaşık korur; sabit bir random_state ise aynı girdilerle aynı bölmeyi yeniden üretmenizi sağlar.

Amaç, modeli görmediği örneklerde değerlendirmektir. Daha iyi test skoru aramak için bölme tohumunu tekrar tekrar seçmeyin; test verisini ön işlemeyi öğrenmek için kullanmayın.

Özellik ve hedefleri birlikte ayıran örnek​


Örnek NumPy ve scikit-learn ile çalışır; veri indirmez. Yirmi sentetik satır ve iki sınıf hazırlanır. Satır kimlikleri yalnız eşleşmeyi izler; model özelliği değildir. Performans ölçümü yapılmaz.

Python:
import numpy as np
from sklearn.model_selection import train_test_split

X = np.arange(40, dtype=float).reshape(20, 2)
y = np.array([0] * 12 + [1] * 8)
row_ids = np.arange(len(y))

X_train, X_test, y_train, y_test, ids_train, ids_test = train_test_split(
    X, y, row_ids,
    test_size=0.25,
    random_state=42,
    shuffle=True,
    stratify=y,
)

print("Sekiller:", X_train.shape, X_test.shape)
print("Egitim sinif sayilari:", np.bincount(y_train))
print("Test sinif sayilari:", np.bincount(y_test))

# Ayni kaydin ozellikleri ve etiketi birlikte tasindi mi?
assert np.array_equal(X_train, X[ids_train])
assert np.array_equal(y_train, y[ids_train])
assert np.array_equal(X_test, X[ids_test])
assert np.array_equal(y_test, y[ids_test])
assert set(ids_train).isdisjoint(ids_test)

Eğitim özelliklerinin şekli (15, 2), test özelliklerinin şekli (5, 2) olur. Sınıf sayıları eğitimde [9, 6], testte [3, 2] çıkar. Böylece başlangıçtaki sınıf oranı bu küçük örnekte tam korunur. Her veri büyüklüğünde tam oran beklemeyin; örnek sayıları tam sayı olmak zorundadır.

Fonksiyon her girdi dizisi için önce eğitim, sonra test çıktısı döndürür. Burada üç dizi verdiğimiz için altı çıktı aldık. X ile y baştan aynı satır sırasını göstermelidir; fonksiyon önceden bozulmuş bir eşleşmeyi kendiliğinden onarmaz. Ayrı çağrılarda bağımsız karıştırma yapmak yerine ilişkili dizileri birlikte verin.

Temel ayarları nasıl seçmelisiniz?​

AyarÖrnekteki değerAnlamı
test_size0.25Satırların dörtte biri test bölümüne ayrılır.
train_sizeBelirtilmediEğitim büyüklüğü testin tamamlayıcısı olur.
random_state42Karıştırılan bölmenin tekrar üretilebilmesini sağlar.
shuffleTrueÖrneklerin sırası bölme sırasında karıştırılır.
stratifyySınıfların iki bölümde yaklaşık aynı oranlarda kalmasını hedefler.
test_size için tam sayı verirseniz oran yerine test örneği sayısını belirtirsiniz. Uygun oran veri miktarına ve değerlendirme ihtiyacına bağlıdır; yüzde 25 bütün problemler için zorunlu değildir. Sabit tohum bölmeyi tekrarlar, eğitim algoritmasının bütün rastgeleliğini yönetmez ve veri sırası değişirse aynı kayıtları seçme garantisi vermez. Modelin kendi rastgelelik ayarını da ayrıca belirleyin.

Ön işlemeyi ayırmadan sonra öğrenin​


Ölçekleme, eksik değer doldurma ve özellik seçimi gibi veriden kural öğrenen işlemler test bölümünden bilgi almamalıdır. Önce ayırın, ardından eğitimde fit veya fit_transform, testte yalnız transform kullanın. Yukarıdaki kodun ardından:

Python:
from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

assert np.allclose(scaler.mean_, X_train.mean(axis=0))
print(X_train_scaled.shape, X_test_scaled.shape)

Test verisinde yeniden fit_transform çağırmak, aynı özellikleri farklı bir ölçekle tanımlar. Tüm veride ölçekleme yapıp sonra bölmek ise test dağılımını eğitim aşamasına taşır. Model ve dönüşümleri bir Pipeline içine almak, özellikle çapraz doğrulamada her katın eğitim bölümünde öğrenilmelerini kolaylaştırır; yanlış veri bölmesini tek başına düzeltmez.

Doğrulama kümesi ne zaman gerekir?​


Model veya ayar seçimi için testten ayrı doğrulama kullanın. İlk test bölümüne dokunmadan ham eğitim bölümünü tekrar ayırın:

Python:
X_fit, X_valid, y_fit, y_valid = train_test_split(
    X_train, y_train,
    test_size=0.20,
    random_state=42,
    stratify=y_train,
)
print(len(X_fit), len(X_valid), len(X_test))

Bu örnekte eğitim, doğrulama ve son test sayıları sırasıyla 12, 3 ve 5 olur. Doğrulamayla ayar seçerken dönüşümleri yalnız X_fit üzerinde öğrenip doğrulamaya uygulayın. Seçim tamamlandığında aynı kurallarla modeli tüm geliştirme bölümünde yeniden eğitebilir, son testi en sonda değerlendirebilirsiniz. Üç satırlık doğrulama gerçek bir projede güvenilirlik göstergesi değildir; burada yalnız bölme mantığını anlatır.

Zaman ve grup bağımlılığında sınır​


Aynı kişiye veya cihaza ait birden fazla kayıt varsa rastgele satır bölmek aynı grubu iki tarafa taşıyabilir. Grup temelli tek ayırma için GroupShuffleSplit, grup temelli çapraz doğrulama için GroupKFold gibi yöntemleri değerlendirin. Zaman sıralı tahminlerde geçmişle eğitip gelecekle değerlendirin; TimeSeriesSplit uygun bir çapraz doğrulama başlangıcı olabilir. Özelliklerin tahmin anında gerçekten mevcut olması ayrıca gerekir.

Sık sorulan sorular​

stratify her hedefte kullanılmalı mı?​

Hayır. Sınıf etiketlerinde oranları korumak için kullanılır; sürekli regresyon hedefini doğrudan vermek genellikle uygun değildir. Çok az örnekli sınıflar veya sınıf sayısına göre çok küçük eğitim/test bölümleri hata üretebilir. Dağılımı kontrol edin; hatayı susturmak için sınıf kayıtlarını gelişigüzel çoğaltmayın.

shuffle=False ile stratify birlikte çalışır mı?​

Hayır; karıştırma kapalıyken stratify=None olmalıdır. Sıralı veride karıştırmayı kapatmak tek başına zaman sızıntısının tüm türlerini engellemez.

Resmî kaynaklar hangileri?​

train_test_split API belgesi parametreleri; veri sızıntısı rehberi ön işlemenin sınırını; çapraz doğrulama rehberi grup ve zaman temelli seçenekleri açıklar.
 

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