CodeBlanks Logo Icon CodeBlanks

best_score_

best_score_ özelliği, en iyi cross-validation puanını verir.

best_score_ neden iyimserdir?

best_score_, en iyi kombinasyonun CV ortalamasıdır. Birçok kombinasyon arasından en yükseği seçildiği için şanslı bir sonuç olma eğilimindedir; denenen kombinasyon sayısı arttıkça iyimserlik de artar.

print(gs.best_score_)               # seçimin skoru: iyimser
print(gs.score(X_test, y_test))     # bağımsız skor: dürüst

Raporlanacak başarı test skoru ya da iç içe CV skorudur; best_score_ yalnızca adayları sıralamak içindir.

RandomizedSearchCV

Izgara büyüdükçe süre patlar. RandomizedSearchCV, dağılımlardan n_iter kadar rastgele kombinasyon dener; aynı bütçeyle çoğu zaman ızgara kadar iyi sonuç verir, çünkü önemli parametrenin daha çok farklı değerini görür:

from scipy.stats import loguniform
from sklearn.model_selection import RandomizedSearchCV
rs = RandomizedSearchCV(pipe, {"svc__C": loguniform(1e-2, 1e2), "svc__gamma": loguniform(1e-3, 1e0)},
                        n_iter=20, cv=5, random_state=0)
rs.fit(X_train, y_train)

loguniform logaritmik ölçekte düzgün örnekler üretir.

Uygulama Rastgele arama

pipe için loguniform(1e-2, 1e2) (C) ve loguniform(1e-3, 1e0) (gamma) dağılımlarıyla RandomizedSearchCV(..., n_iter=15, cv=5, random_state=0) çalıştır. best_score_ ve test skorunu round(..., 3) ile aynı satırda yazdır.

Başlangıç kodu

model.py
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC

X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0, stratify=y)
pipe = Pipeline([("olcek", StandardScaler()), ("svc", SVC())])
from scipy.stats import loguniform
from sklearn.model_selection import RandomizedSearchCV

# buraya yaz

Örnek çözüm

model.py
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC

X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0, stratify=y)
pipe = Pipeline([("olcek", StandardScaler()), ("svc", SVC())])
from scipy.stats import loguniform
from sklearn.model_selection import RandomizedSearchCV

rs = RandomizedSearchCV(pipe, {"svc__C": loguniform(1e-2, 1e2), "svc__gamma": loguniform(1e-3, 1e0)}, n_iter=15, cv=5, random_state=0)
rs.fit(X_train, y_train)
print(round(rs.best_score_, 3), round(rs.score(X_test, y_test), 3))

Beklenen çıktı

0.984 0.972

Soru ve cevaplar

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

1 Rastgele etiketli veride 1000 kombinasyonluk ızgaranın best_score_ değeri neden 0.5'in üstünde çıkabilir?

  • Çok deneme arasından şansla en yükseği seçildiği için Doğru cevap
  • Model gerçek bir desen bulduğu için
  • Hesaplama hatası
  • Çıkamaz

Açıklama: Her kombinasyonun skoru gürültülüdür; en büyüğünü seçmek yukarı yanlılık üretir.

2 30 rastgele kombinasyon dene.

Soru
rs = RandomizedSearchCV(pipe, dagilimlar, ____=30, cv=5, random_state=0)
Cevap
rs = RandomizedSearchCV(pipe, dagilimlar, n_iter=30, cv=5, random_state=0)

Açıklama: n_iter denenecek kombinasyon sayısıdır.

3 Kavramları eşleştir.

Kavram Anlamı
best_score_ İyimser seçim skoru
test skoru Dürüst ölçüm
RandomizedSearchCV Rastgele örnekleme
loguniform Log ölçekte dağılım

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