Garfield
YZF Admin
Pipeline nasıl çalışır?
scikit-learn
Pipeline, veri hazırlama adımlarını ve makine öğrenmesi modelini tek bir işlem zincirinde birleştirir. Böylece eksik değer doldurma, ölçekleme veya kategorik verileri dönüştürme gibi işlemler eğitim ve tahmin sırasında aynı sırayla uygulanır. Sonuç olarak veri sızıntısı riski azalır, kod sadeleşir ve model tek bir nesne gibi eğitilip kullanılabilir.Bir Pipeline tek bir adımdan da oluşabilir: Son adım dışındaki adımlar birer dönüştürücü olmalı ve
fit ile transform yöntemlerini sağlamalıdır. Son adım ise genellikle fit ve predict yöntemlerine sahip bir tahmin modelidir.En küçük çalışan örnek
Aşağıdaki varsayımsal örnekte sayısal veriler önce ölçeklenir, ardından lojistik regresyon modeli eğitilir.
X özellikleri, y ise sınıf etiketlerini temsil eder.
Python:
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
# Örnek veri kümesini yükle
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
model = Pipeline([
("olcekle", StandardScaler()),
("siniflandir", LogisticRegression(max_iter=1000))
])
model.fit(X_train, y_train)
print(model.score(X_test, y_test))
print(model.predict(X_test[:3]))
Bu kodda
fit çağrısı önce StandardScaler nesnesini yalnızca eğitim verisiyle öğrenir, sonra ölçeklenmiş veriyi lojistik regresyona gönderir. predict çağrısında test verisi aynı ölçekleme işleminden otomatik olarak geçirilir ve ardından sınıf tahmini üretilir. score çıktısı sınıflandırma doğruluğunu gösterir; ancak tek başına modelin her veri grubunda iyi çalıştığını kanıtlamaz.Pipeline içindeki adımlara erişme
Adımlar isimleriyle tanımlandığı için modelin parçalarına
named_steps üzerinden erişebilirsiniz:
Python:
print(model.named_steps["olcekle"])
print(model.named_steps["siniflandir"])
Bir adımın parametresini değiştirmek için ad adı ve parametre adı çift alt çizgiyle birleştirilir. Örneğin lojistik regresyonun düzenlileştirme parametresi şöyle ayarlanabilir:
Python:
model.set_params(siniflandir__C=0.5)
model.fit(X_train, y_train)
Buradaki
siniflandir__C ifadesi, C parametresinin Pipeline içindeki siniflandir adlı adıma ait olduğunu belirtir.Pipeline neden veri sızıntısını azaltır?
Ölçekleme, eksik değer doldurma veya özellik seçimi gibi işlemler tüm veri kümesi üzerinde eğitimden önce yapılırsa test verisinin bilgisi dolaylı olarak modele karışabilir. Bu durum ölçülen başarıyı gerçekte olduğundan yüksek gösterebilir.
Pipeline kullanıldığında dönüştürücülerin
fit işlemi eğitim verisiyle sınırlı kalır. train_test_split veya çapraz doğrulama kullandığınızda, her eğitim bölümünde dönüşüm yeniden öğrenilir. Bu nedenle ön işleme adımlarını modelden ayrı ve tüm veri üzerinde önceden çalıştırmak yerine Pipeline içine koymak daha güvenlidir.Pipeline ile ColumnTransformer farkı
Pipeline adımları sırayla, aynı veri akışı üzerinde çalıştırır. ColumnTransformer ise farklı sütun gruplarına farklı dönüşümler uygulamak için kullanılır. Örneğin sayısal sütunları ölçekleyip metin kategorilerini One-Hot Encoding ile dönüştürmek istediğinizde genellikle ColumnTransformer Pipeline içindeki bir adım olarak kullanılır.
Python:
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
on_isleme = ColumnTransformer([
("sayisal", StandardScaler(), [0, 1]),
("kategori", OneHotEncoder(handle_unknown="ignore"), [2])
])
model = Pipeline([
("on_isleme", on_isleme),
("siniflandir", LogisticRegression(max_iter=1000))
])
Bu yapıda ilk iki sütun sayısal, üçüncü sütun kategorik kabul edilmiştir. Gerçek verinizde sütun konumlarını veya adlarını veri kümenize göre değiştirmelisiniz.
handle_unknown="ignore" seçeneği, tahmin sırasında eğitimde görülmemiş bir kategoriyle karşılaşıldığında dönüşümün hata vermemesine yardımcı olur; bu seçenek verinin anlamsız hâle gelmesini veya modelin doğru tahmin yapmasını garanti etmez.Ne zaman Pipeline kullanmalısınız?
Birden fazla ön işleme adımı ile modeliniz birlikte çalışıyorsa, özellikle çapraz doğrulama, hiperparametre araması veya üretimde tekrar tekrar tahmin yapma durumlarında Pipeline kullanın. Yalnızca tek bir dönüşüm yapıyorsanız da kullanılabilir; temel faydası, eğitim ve tahmin akışını tek ve tekrarlanabilir bir nesnede tutmasıdır.
Pipeline, kötü özellik seçimini, dengesiz veriyi veya yanlış model tercihini kendiliğinden düzeltmez. Başarı ölçümünü uygun bir doğrulama yöntemiyle yapmalı, dönüşümleri yalnızca eğitim akışında öğrenmeli ve kaydedilen modeli kullanırken yeni veriye aynı sütun yapısını sağlamalısınız.
Son düzenleme: