Makine Öğrenmesi
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).
Örnek çözümü göster
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))
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.
Örnek çözümü göster
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))
Kendini test et
-
İç içe CV'de iç döngünün görevi nedir?
- Test kümesini bölmek
- Hiperparametre seçmek
- Son skoru ölçmek
- Veriyi ölçeklemek
Cevabı göster
Hiperparametre seçmek — İç döngü seçer, dış döngü seçimin genelleme başarısını ölçer.
-
İç arayıcıyı dışta değerlendir.
dis = ____(ic, X, y, cv=5)
Cevabı göster
dis = cross_val_score(ic, X, y, cv=5)
-
Parçaları eşleştir.
- iç CV
- Ayar seçimi
- dış CV
- Dürüst ölçüm
- dis.std()
- Belirsizlik
- cv=3 iç
- Daha ucuz arama
Sıradaki ders: Meydan okuma 3