Pipeline nedir?
- Makine Öğrenmesi kursu
- Orta seviye
- Ders 7/112
- 5 dk
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ırPipeline 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
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
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.
pipe = ____([("olcek", StandardScaler()), ("model", SVC())])
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 |