Makine Öğrenmesi
ColumnTransformer
ColumnTransformer, farklı sütunlara farklı dönüşümler uygular.
ColumnTransformer
Gerçek tablolarda sütunlar farklı işlem ister: sayılar ölçeklenir, kategoriler one-hot kodlanır. ColumnTransformer her sütun grubuna ayrı dönüştürücü uygular ve sonuçları yan yana birleştirir:
from sklearn.compose import ColumnTransformer
ct = ColumnTransformer([
("sayi", StandardScaler(), ["yas", "gelir"]),
("kat", OneHotEncoder(handle_unknown="ignore"), ["sehir"]),
])
Z = ct.fit_transform(df) # 2 ölçekli + şehir sayısı kadar 0/1 sütun
Sütunlar pandas adlarıyla ya da tam sayı konumlarıyla verilebilir.
Tam ön işleme hattı
Her sütun grubu kendi alt pipeline'ına sahip olabilir; tüm yapı modelle birlikte tek bir pipeline'da toplanır:
sayisal = make_pipeline(SimpleImputer(strategy="median"), StandardScaler())
kategorik = make_pipeline(SimpleImputer(strategy="most_frequent"),
OneHotEncoder(handle_unknown="ignore"))
ct = ColumnTransformer([("sayi", sayisal, sayi_sutunlar),
("kat", kategorik, kat_sutunlar)])
model = make_pipeline(ct, LogisticRegression())
get_feature_names_out(), dönüşümden sonra hangi sütunun neyi temsil ettiğini gösterir.
Uygulama Karışık tabloyu dönüştür
yas ve gelir sütunlarını StandardScaler, sehir sütununu OneHotEncoder ile işleyen bir ColumnTransformer kur. fit_transform sonucunun şeklini, ardından get_feature_names_out() listesini yazdır.
Örnek çözümü göster
import numpy as np
import pandas as pd
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
df = pd.DataFrame({
"yas": [25, 32, 47, 51],
"gelir": [3000, 4500, 8000, 6000],
"sehir": ["Ankara", "İzmir", "Ankara", "Bursa"],
})
ct = ColumnTransformer([("sayi", StandardScaler(), ["yas", "gelir"]), ("kat", OneHotEncoder(), ["sehir"])])
Z = ct.fit_transform(df)
print(Z.shape)
print(list(ct.get_feature_names_out()))
Kendini test et
-
Listede adı geçmeyen sütunlara ColumnTransformer varsayılan olarak ne yapar?
- Ölçekler
- Hata verir
- Atar (remainder="drop")
- Olduğu gibi geçirir
Cevabı göster
Atar (remainder="drop") — remainder="passthrough" ile korunabilirler.
-
Adı geçmeyen sütunları koru.
ct = ColumnTransformer([...], remainder=____)
Cevabı göster
ct = ColumnTransformer([...], remainder="passthrough")
-
Parçaları eşleştir.
- ("sayi", StandardScaler(), [...])
- Sayısal dönüşüm
- ("kat", OneHotEncoder(), [...])
- Kategorik dönüşüm
- remainder
- Kalan sütunlar
- get_feature_names_out
- Yeni sütun adları
Sıradaki ders: Özet - Pipeline