Meydan okuma 2
- Makine Öğrenmesi kursu
- Orta seviye
- Ders 110/112
- 8 dk
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 skorDış 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
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
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
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
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.
dis = ____(ic, X, y, cv=5)
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 |