Garfield
YZF Admin
Çapraz doğrulamayı scikit-learn’de en kolay
Aşağıdaki varsayımsal örnekte iris veri kümesiyle lojistik regresyon modeli değerlendirilir. Veriler beş parçaya ayrılır; model her turda dört parça ile eğitilir ve kalan parçayla sınanır.
Çalıştırıldığında
Veri türü, katlama yöntemini doğrudan etkiler. Seçim yaparken aşağıdaki ayrımlar işinize yarar.
Bu yöntemler birbirinin yerine gelişigüzel kullanılmamalıdır. Örneğin aynı kullanıcıya ait kayıtlar hem eğitim hem doğrulama katına dağılırsa skor, modelin yeni kullanıcılar üzerindeki performansını olduğundan iyi gösterebilir. Zaman serilerinde rastgele karıştırma da geleceğe ait bilginin geçmişe sızmasına yol açabilir.
Yüksek ortalama skor, modelin yeni verilerde kesin olarak aynı başarıyı göstereceğini kanıtlamaz. Çapraz doğrulama yalnızca kullanılan veri kümesi, seçilen skor ve bölme düzeni hakkında tahmin sağlar. Katlama skorları çok farklıysa veri azlığı, aykırı gruplar, dengesiz sınıflar veya modelin kararsızlığı araştırılmalıdır.
Birden fazla ayarı deniyorsanız, en iyi ayarı aynı skorlarla seçip sonucu yine aynı katlamalarda raporlamak iyimser bir değerlendirme oluşturabilir. Bu durumda
Önce bütün veri kümesine ölçekleme uygulayıp sonra çapraz doğrulama yapmak, doğrulama katının dağılım bilgisini eğitim aşamasına taşıyabilir. Güvenli yaklaşım, ölçekleyiciyi modelle birlikte
cross_val_score() veya daha ayrıntılı sonuçlar için cross_validate() ile uygulayabilirsiniz. Modeli veri üzerinde birkaç farklı eğitim-doğrulama bölümünde çalıştırıp her bölümün skorlarını ayrı alır, ardından ortalama ve dağılımı yorumlarsınız. Ön işleme adımlarını Pipeline içine koymak, doğrulama verisinden eğitim aşamasında yanlışlıkla bilgi sızmasını önler.En küçük çalışan örnek
Aşağıdaki varsayımsal örnekte iris veri kümesiyle lojistik regresyon modeli değerlendirilir. Veriler beş parçaya ayrılır; model her turda dört parça ile eğitilir ve kalan parçayla sınanır.
Python:
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import StratifiedKFold, cross_val_score
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
X, y = load_iris(return_X_y=True)
model = make_pipeline(
StandardScaler(),
LogisticRegression(max_iter=1000)
)
cv = StratifiedKFold(
n_splits=5,
shuffle=True,
random_state=42
)
scores = cross_val_score(
model,
X,
y,
cv=cv,
scoring="accuracy"
)
print("Katlama skorları:", scores)
print("Ortalama doğruluk:", scores.mean())
print("Standart sapma:", scores.std())
Çalıştırıldığında
scores dizisinde beş ayrı doğruluk skoru elde edilir. Örneğin skorlar birbirine yakınsa modelin bu veri bölmelerindeki performansı daha tutarlı görünür. mean() genel ortalamayı, std() ise katlamalar arasındaki değişkenliği gösterir. Bu sayılar örnek çalıştırmaya ait garanti edilmiş sonuçlar değildir; kullanılan scikit-learn sürümüne ve veri bölmelerine göre değişebilir.Uygulama adımları
- Özellikleri ve hedef değerleri ayırın.
Xmodelin kullanacağı girdileri,yise tahmin edilmek istenen sınıf veya sayısal hedefi içermelidir. - Modeli ve ön işlemeyi bir Pipeline içinde birleştirin. Ölçekleme, eksik değer doldurma veya özellik seçimi gibi işlemler her eğitim katında yalnızca o katın eğitim verisiyle öğrenilmelidir;
Pipelinebunu çapraz doğrulama sırasında otomatik olarak ayırır. - Uygun çapraz doğrulama düzenini seçin. Sınıflandırmada sınıf oranlarını koruyan
StratifiedKFold, sıradan regresyonda genellikleKFoldkullanılır. - Katlama sayısını ve karıştırma ayarını belirleyin.
n_splits=5beş katlama oluşturur.shuffle=Trueveriyi katlamadan önce karıştırır;random_stateaynı girdilerle tekrarlanabilir bölmeler sağlar. - Skoru hesaplayın.
cross_val_score(model, X, y, cv=cv, scoring="accuracy")her katlama için tek bir skor döndürür.scoringdeğerini probleme uygun seçin. - Ortalama ile dağılımı birlikte inceleyin. Yalnızca ortalamaya bakmayın; yüksek standart sapma, modelin veri bölmesine duyarlı olabileceğini gösterir.
- Seçilen modeli eğitim verisinde yeniden eğitip ayrı test kümesinde değerlendirin. Çapraz doğrulamayı model veya ayar seçmek için kullandıysanız, nihai tarafsız değerlendirme için baştan ayrılmış test kümesini en son bir kez kullanın.
Hangi çapraz doğrulama düzeni kullanılmalı?
Veri türü, katlama yöntemini doğrudan etkiler. Seçim yaparken aşağıdaki ayrımlar işinize yarar.
| Durum | Önerilen yöntem | Neden |
|---|---|---|
| Sınıflandırma | StratifiedKFold | Her katlamada sınıf oranlarını mümkün olduğunca korur. |
| Regresyon | KFold | Veriyi belirlenen kat sayısında eğitim ve doğrulama bölümlerine ayırır. |
| Gruplu veriler | GroupKFold | Aynı kişiye, cihaza veya başka bir gruba ait kayıtların eğitim ve doğrulama tarafına karışmasını önlemeye yardımcı olur. |
| Zaman sıralı veriler | TimeSeriesSplit | Gelecekteki kayıtların geçmişi tahmin etmek için eğitimde kullanılmasını önlemeye uygun bir sıra izler. |
Skor seçimi ve sonucun yorumu
accuracy dengeli sınıflarda anlaşılır bir başlangıç ölçüsüdür; ancak sınıflar dengesizse tek başına yeterli olmayabilir. İkili sınıflandırmada precision, recall, f1 veya roc_auc gibi ölçütler; regresyonda neg_mean_absolute_error ya da neg_root_mean_squared_error gibi ölçütler tercih edilebilir. scikit-learn bazı hata ölçütlerini, skor yükseldikçe daha iyi olacak biçimde negatif değer olarak döndürür; bu nedenle özellikle “neg_” ile başlayan skorların yorumunu ölçütün adına göre yapın.Yüksek ortalama skor, modelin yeni verilerde kesin olarak aynı başarıyı göstereceğini kanıtlamaz. Çapraz doğrulama yalnızca kullanılan veri kümesi, seçilen skor ve bölme düzeni hakkında tahmin sağlar. Katlama skorları çok farklıysa veri azlığı, aykırı gruplar, dengesiz sınıflar veya modelin kararsızlığı araştırılmalıdır.
Birden fazla ayarı deniyorsanız, en iyi ayarı aynı skorlarla seçip sonucu yine aynı katlamalarda raporlamak iyimser bir değerlendirme oluşturabilir. Bu durumda
GridSearchCV veya RandomizedSearchCV ile ayar seçebilir, mümkünse ayrı bir test kümesini nihai kontrol için saklayabilirsiniz.Dikkat edilmesi gereken yaygın hata
Önce bütün veri kümesine ölçekleme uygulayıp sonra çapraz doğrulama yapmak, doğrulama katının dağılım bilgisini eğitim aşamasına taşıyabilir. Güvenli yaklaşım, ölçekleyiciyi modelle birlikte
Pipeline içine almaktır. Aynı ilke özellik seçimi, eksik değer doldurma ve boyut indirgeme gibi veriden öğrenilen diğer işlemler için de geçerlidir.