CodeBlanks Logo Icon CodeBlanks

Adımlar

Pipeline adımları (scaler, model) sırayla çalışır.

Adımlar ve adlar

Bir pipeline'ın son adımı herhangi bir estimator olabilir; ondan önceki tüm adımlar dönüştürücü (fit + transform) olmalıdır. Adımlara üç yolla erişilir:

pipe.named_steps["olcek"]   # adla
pipe["olcek"]               # kısa yazım
pipe[0]                     # konumla
pipe[:-1]                   # son adım hariç alt pipeline

pipe[:-1].transform(X), modelin gördüğü dönüştürülmüş veriyi incelemenin pratik yoludur.

Adımı kapatmak ve değiştirmek

Bir adım "passthrough" ile devre dışı bırakılabilir ya da set_params ile başka bir nesneyle değiştirilebilir. Izgara aramasında "ölçekleme olsun mu?" sorusu böyle sorulur:

pipe.set_params(olcek="passthrough")      # ölçeklemeyi kapat
pipe.set_params(model=SVC(C=10))           # modeli değiştir
izgara = {"olcek": [StandardScaler(), "passthrough"]}

Adımlar da birer hiperparametre gibi davranır.

Uygulama Ölçekleme etkisini sına

Pipeline([("olcek", StandardScaler()), ("model", SVC())]) kur. Önce olduğu gibi, sonra set_params(olcek="passthrough") ile eğitip test doğruluğunu round(..., 3) ile alt alta yazdır.

Başlangıç kodu

model.py
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split

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)
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC

# buraya yaz

Örnek çözüm

model.py
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split

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)
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC

pipe = Pipeline([("olcek", StandardScaler()), ("model", SVC())])
print(round(pipe.fit(X_train, y_train).score(X_test, y_test), 3))
pipe.set_params(olcek="passthrough")
print(round(pipe.fit(X_train, y_train).score(X_test, y_test), 3))

Beklenen çıktı

0.958
0.916

Soru ve cevaplar

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

1 Pipeline'ın ortasına <code>LogisticRegression()</code> konursa ne olur?

  • Son adıma taşınır
  • Hata: ara adımlar transform sunmalıdır Doğru cevap
  • Sorunsuz çalışır
  • Otomatik atlanır

Açıklama: Ara adımların çıktısı sonraki adımın girdisidir; transform olmadan zincir kurulamaz.

2 Ölçekleme adımını devre dışı bırak.

Soru
pipe.set_params(olcek=____)
Cevap
pipe.set_params(olcek="passthrough")

Açıklama: "passthrough" adımı veri değişmeden geçecek biçimde kapatır.

3 Erişimleri eşleştir.

Kavram Anlamı
pipe["olcek"] Adla adım
pipe[0] İlk adım
pipe[:-1] Modelsiz alt zincir
"passthrough" Adımı kapatır

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