CodeBlanks Logo Icon CodeBlanks

Pipeline nedir?

Pipeline, veri ön işleme ve model adımlarını tek bir akışta birleştirir.

Pipeline neden gerekli?

Gerçek projelerde model öncesinde birçok adım vardır: eksik doldurma, ölçekleme, kodlama, özellik seçimi. Bunları elle yönetmek iki risk taşır: adımı test verisinde unutmak ya da yanlışlıkla test verisinde fit etmek.

from sklearn.pipeline import Pipeline
pipe = Pipeline([
    ("doldur", SimpleImputer(strategy="median")),
    ("olcek", StandardScaler()),
    ("model", LogisticRegression()),
])
pipe.fit(X_train, y_train)   # her adım sırayla öğrenir
pipe.predict(X_test)         # aynı dönüşümler sırayla uygulanır

Pipeline tek bir estimator gibi davranır; çapraz doğrulama ve ızgara aramasına doğrudan verilebilir.

Sızıntının etkisi

Ölçekleme gibi basit adımlarda sızıntının etkisi küçüktür; ama özellik seçimi gibi hedefe bakan adımlarda çok büyüktür. Rastgele gürültüde bile yüksek skor üretebilir:

X = rng.normal(size=(100, 1000)); y = rng.integers(0, 2, 100)   # tamamen rastgele
X_sec = SelectKBest(k=10).fit_transform(X, y)    # YANLIŞ: tüm veride seçim
print(cross_val_score(LogisticRegression(), X_sec, y, cv=5).mean())   # ~0.7+

Aynı seçim pipeline içinde yapılınca skor şans düzeyine yakın, gerçekçi bir değere düşer.

Uygulama Sızıntıyı ölç

Rastgele veride önce yanlış yolu dene: SelectKBest(k=10)'u tüm veride uygulayıp lojistik regresyonu 5 katla doğrula. Sonra aynı seçimi make_pipeline(SelectKBest(k=10), LogisticRegression()) içinde yap. İki ortalamayı round(..., 2) ile alt alta yazdır.

Başlangıç kodu

model.py
import numpy as np
from sklearn.feature_selection import SelectKBest
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_score
from sklearn.pipeline import make_pipeline

rng = np.random.default_rng(0)
X = rng.normal(size=(100, 1000))
y = rng.integers(0, 2, 100)

# buraya yaz

Örnek çözüm

model.py
import numpy as np
from sklearn.feature_selection import SelectKBest
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_score
from sklearn.pipeline import make_pipeline

rng = np.random.default_rng(0)
X = rng.normal(size=(100, 1000))
y = rng.integers(0, 2, 100)

X_sec = SelectKBest(k=10).fit_transform(X, y)
print(round(cross_val_score(LogisticRegression(), X_sec, y, cv=5).mean(), 2))
pipe = make_pipeline(SelectKBest(k=10), LogisticRegression())
print(round(cross_val_score(pipe, X, y, cv=5).mean(), 2))

Beklenen çıktı

0.78
0.62

Soru ve cevaplar

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

1 Pipeline kullanmadan çapraz doğrulama öncesi tüm veriyi ölçeklemek neye yol açar?

  • Hataya
  • Hiçbir şeye
  • Doğrulama katmanlarından eğitime sızıntıya Doğru cevap
  • Daha doğru skora

Açıklama: Her katmanda doğrulama verisinin istatistikleri ölçeğe karışmış olur.

2 Adlı adımlardan pipeline kur.

Soru
pipe = ____([("olcek", StandardScaler()), ("model", SVC())])
Cevap
pipe = Pipeline([("olcek", StandardScaler()), ("model", SVC())])

Açıklama: Pipeline (ad, nesne) ikililerinden oluşan bir liste alır.

3 Riskleri eşleştir.

Kavram Anlamı
Testte fit Sızıntı
Adımı unutmak Tutarsız tahmin
Hedefe bakan seçim Büyük sızıntı
Pipeline İkisini de önler

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