Makine Öğrenmesi
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.
Örnek çözümü göster
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))
Kendini test et
-
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
- Daha doğru skora
Cevabı göster
Doğrulama katmanlarından eğitime sızıntıya — Her katmanda doğrulama verisinin istatistikleri ölçeğe karışmış olur.
-
Adlı adımlardan pipeline kur.
pipe = ____([("olcek", StandardScaler()), ("model", SVC())])
Cevabı göster
pipe = Pipeline([("olcek", StandardScaler()), ("model", SVC())])
-
Riskleri eşleştir.
- 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
Sıradaki ders: Adımlar