Garfield
YZF Admin
scikit-learn içinde
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.
Ö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.
Eğitim özelliklerinin şekli
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.
Ö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
Test verisinde yeniden
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:
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
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
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ğer | Anlamı |
|---|---|---|
test_size | 0.25 | Satırların dörtte biri test bölümüne ayrılır. |
train_size | Belirtilmedi | Eğitim büyüklüğü testin tamamlayıcısı olur. |
random_state | 42 | Karıştırılan bölmenin tekrar üretilebilmesini sağlar. |
shuffle | True | Örneklerin sırası bölme sırasında karıştırılır. |
stratify | y | Sı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.