CodeBlanks Logo Icon CodeBlanks

Meydan okuma 2

Cross-validation ile model değerlendirirsin.

Meydan okuma 2: dürüst değerlendirme

Bir model seçme sürecinin dürüst skoru iç içe CV ile ölçülür. Bu meydan okumada üç model ailesini (lojistik, random forest, gradient boosting) her biri kendi küçük ızgarasıyla iç CV'de ayarlanacak biçimde dış CV'de karşılaştıracaksın:

ic = GridSearchCV(RandomForestClassifier(random_state=0),
                  {"max_depth": [None, 6]}, cv=3)
dis = cross_val_score(ic, X, y, cv=5)   # seçim dahil dürüst skor

Dış skorların ortalaması ve standart sapması raporlanır; tek bir sayı yerine dağılım.

Uygulama İç içe karşılaştırma

Meme kanseri verisinde üç iç arayıcı kur: ölçekli lojistik ({"logisticregression__C": [0.1, 1, 10]}), random forest ({"max_depth": [None, 6]}), histogram boosting ({"learning_rate": [0.05, 0.2]}), hepsi cv=3. Her birini cross_val_score(..., cv=5) ile dışta değerlendir; her satırda adı ve ortalamayı round(..., 3) ile yazdır (sırayla lr, rf, hgb).

Başlangıç kodu

model.py
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import GridSearchCV, cross_val_score
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier, HistGradientBoostingClassifier

X, y = load_breast_cancer(return_X_y=True)

# buraya yaz

Örnek çözüm

model.py
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import GridSearchCV, cross_val_score
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier, HistGradientBoostingClassifier

X, y = load_breast_cancer(return_X_y=True)

aday = {
    "lr": GridSearchCV(make_pipeline(StandardScaler(), LogisticRegression()), {"logisticregression__C": [0.1, 1, 10]}, cv=3),
    "rf": GridSearchCV(RandomForestClassifier(random_state=0), {"max_depth": [None, 6]}, cv=3),
    "hgb": GridSearchCV(HistGradientBoostingClassifier(random_state=0), {"learning_rate": [0.05, 0.2]}, cv=3),
}
for ad, ic in aday.items():
    print(ad, round(cross_val_score(ic, X, y, cv=5).mean(), 3))

Beklenen çıktı

lr 0.975
rf 0.963
hgb 0.968

Uygulama Kazananı eğit

İç içe CV'de kazanan lojistik arayıcıyı tüm veride eğit; seçilen C değerini yazdır. Ardından meme kanseri verisinin rastgele bölünmüş (test_size=0.25, random_state=0, stratify=y) test kümesinde, eğitim kısmında eğitilmiş aynı arayıcının doğruluğunu round(..., 3) ile yazdır.

Başlangıç kodu

model.py
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import GridSearchCV, train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression

X, y = load_breast_cancer(return_X_y=True)
ic = GridSearchCV(make_pipeline(StandardScaler(), LogisticRegression()), {"logisticregression__C": [0.1, 1, 10]}, cv=3)

# buraya yaz

Örnek çözüm

model.py
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import GridSearchCV, train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression

X, y = load_breast_cancer(return_X_y=True)
ic = GridSearchCV(make_pipeline(StandardScaler(), LogisticRegression()), {"logisticregression__C": [0.1, 1, 10]}, cv=3)

print(ic.fit(X, y).best_params_["logisticregression__C"])
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0, stratify=y)
print(round(ic.fit(X_train, y_train).score(X_test, y_test), 3))

Beklenen çıktı

1
0.958

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 İç içe CV'de iç döngünün görevi nedir?

  • Test kümesini bölmek
  • Hiperparametre seçmek Doğru cevap
  • Son skoru ölçmek
  • Veriyi ölçeklemek

Açıklama: İç döngü seçer, dış döngü seçimin genelleme başarısını ölçer.

2 İç arayıcıyı dışta değerlendir.

Soru
dis = ____(ic, X, y, cv=5)
Cevap
dis = cross_val_score(ic, X, y, cv=5)

Açıklama: GridSearchCV de bir estimator olduğu için cross_val_score'a verilebilir.

3 Parçaları eşleştir.

Kavram Anlamı
iç CV Ayar seçimi
dış CV Dürüst ölçüm
dis.std() Belirsizlik
cv=3 iç Daha ucuz arama

Orta seviye bölümündeki tüm dersler