CodeBlanks Logo Icon CodeBlanks

best_params_

best_params_ özelliği, en iyi hiperparametre kombinasyonunu verir.

best_params_ ve best_estimator_

Arama bitince en iyi kombinasyon best_params_'ta, yeniden eğitilmiş model best_estimator_'da durur. best_estimator_ sıradan bir pipeline'dır; adımlarına erişilebilir ve kaydedilebilir:

print(gs.best_params_)
en_iyi = gs.best_estimator_
print(en_iyi.named_steps["svc"].C)
print(en_iyi.named_steps["svc"].n_support_)   # sınıf başına destek vektörü

gs.predict ile gs.best_estimator_.predict aynı sonucu verir.

cv_results_

cv_results_, her kombinasyon için ortalama ve standart sapma skorlarını, süreleri ve sıralamayı içeren bir sözlüktür:

r = gs.cv_results_
for p, o, s in zip(r["params"], r["mean_test_score"], r["std_test_score"]):
    print(p, round(o, 3), round(s, 3))
print(r["rank_test_score"])

En iyi skorla neredeyse aynı skoru veren daha basit bir kombinasyon varsa (daha küçük C gibi) o tercih edilebilir.

Uygulama Sonuçları sırala

Hazır gs aramasının cv_results_ sözlüğünden sıralaması 1 olan kombinasyonu ve ortalama skorunu bul. params'ı ve round(..., 3) ile skoru alt alta yazdır; ardından bunun best_params_ ile aynı olduğunu 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())])
gs = GridSearchCV(pipe, {"svc__C": [0.1, 1, 10], "svc__gamma": [0.01, 0.1]}, cv=5).fit(X_train, y_train)

# 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())])
gs = GridSearchCV(pipe, {"svc__C": [0.1, 1, 10], "svc__gamma": [0.01, 0.1]}, cv=5).fit(X_train, y_train)

r = gs.cv_results_
i = list(r["rank_test_score"]).index(1)
print(r["params"][i])
print(round(r["mean_test_score"][i], 3))
print(r["params"][i] == gs.best_params_)

Beklenen çıktı

{'svc__C': 10, 'svc__gamma': 0.01}
0.981
True

Soru ve cevaplar

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

1 En iyi değer ızgaranın kenarındaysa (ör. C=100, ızgara en fazla 100) ne yapılmalıdır?

  • Test kümesine bakmak
  • Izgarayı o yönde genişletip yeniden aramak Doğru cevap
  • Sonucu kabul etmek
  • Izgarayı daraltmak

Açıklama: Kenardaki optimum, gerçek en iyinin ızgaranın dışında olabileceğini gösterir.

2 Yeniden eğitilmiş en iyi modeli al.

Soru
model = gs.____
Cevap
model = gs.best_estimator_

Açıklama: best_estimator_ yalnızca refit=True iken vardır.

3 Öznitelikleri eşleştir.

Kavram Anlamı
best_params_ Kazanan ayarlar
best_estimator_ Eğitilmiş model
cv_results_ Tüm sonuçlar
rank_test_score Sıralama

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