CodeBlanks Logo Icon CodeBlanks

Grid search nedir?

Grid search, tüm hiperparametre kombinasyonlarını deneyerek en iyi olanı bulur.

Hiperparametre araması

Bir modelin başarısı hiperparametrelerine çok bağlıdır: SVM'de C ve gamma, ağaçta max_depth. Elle denemek hem yavaş hem de sızıntıya açıktır. Sistematik arama, her ayar kombinasyonunu CV ile ölçüp en iyisini seçer.

for C in [0.1, 1, 10]:
    s = cross_val_score(SVC(C=C), X, y, cv=5).mean()
    print(C, round(s, 3))
# GridSearchCV bu döngüyü (ve fazlasını) tek satırda yapar

Arama yalnızca eğitim kümesinde yapılır; test kümesi en sonda tek bir ölçüm içindir.

Logaritmik ızgara

C, alpha, gamma, öğrenme oranı gibi parametrelerin etkisi büyüklük mertebesiyle değişir. Bu yüzden ızgara doğrusal değil logaritmik kurulur:

import numpy as np
print(np.logspace(-2, 2, 5))   # [  0.01   0.1    1.    10.   100.  ]
# kötü: [1, 2, 3, 4, 5]  -> hepsi aynı mertebede

Önce geniş bir logaritmik ızgarayla doğru bölge bulunur, sonra o bölgede daha sık bir ızgarayla ince ayar yapılır.

Uygulama Elle arama

np.logspace(-2, 2, 5) değerleriyle C'yi dene: her biri için ölçekli SVC'nin 5 katlı CV ortalamasını hesapla. En iyi C'yi ve skorunu round(..., 3) ile aynı satırda yazdır.

Başlangıç kodu

model.py
import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import cross_val_score
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC

X, y = load_breast_cancer(return_X_y=True)

# buraya yaz

Örnek çözüm

model.py
import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import cross_val_score
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC

X, y = load_breast_cancer(return_X_y=True)

skor = {}
for C in np.logspace(-2, 2, 5):
    skor[C] = cross_val_score(make_pipeline(StandardScaler(), SVC(C=C)), X, y, cv=5).mean()
en_iyi = max(skor, key=skor.get)
print(en_iyi, round(skor[en_iyi], 3))

Beklenen çıktı

10.0 0.977

Soru ve cevaplar

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

1 Arama için hangi veri kullanılmalıdır?

  • Yalnızca eğitim kümesi (içinde CV) Doğru cevap
  • Test kümesi
  • Tüm veri
  • Doğrulama gerekmez

Açıklama: Test kümesi aramaya karışırsa son ölçüm bağımsız olmaz.

2 10⁻³ ile 10³ arasında 7 logaritmik değer üret.

Soru
C_degerleri = np.____(-3, 3, 7)
Cevap
C_degerleri = np.logspace(-3, 3, 7)

Açıklama: logspace üsleri alır: 10^-3 ... 10^3.

3 Kavramları eşleştir.

Kavram Anlamı
hiperparametre Önceden seçilen ayar
logspace Mertebe ızgarası
geniş ızgara Bölgeyi bulur
ince ızgara İnce ayar

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