ColumnTransformer
- Makine Öğrenmesi kursu
- Orta seviye
- Ders 11/112
- 5 dk
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ütunSü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.
Başlangıç kodu
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"],
})
# buraya yazÖrnek çözüm
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()))Beklenen çıktı
(4, 5) ['sayi__yas', 'sayi__gelir', 'kat__sehir_Ankara', 'kat__sehir_Bursa', 'kat__sehir_İzmir']
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Listede adı geçmeyen sütunlara ColumnTransformer varsayılan olarak ne yapar?
- Ölçekler
- Hata verir
- Atar (remainder="drop") Doğru cevap
- Olduğu gibi geçirir
Açıklama: remainder="passthrough" ile korunabilirler.
2 Adı geçmeyen sütunları koru.
ct = ColumnTransformer([...], remainder=____)
ct = ColumnTransformer([...], remainder="passthrough")
Açıklama: Varsayılan "drop"tur; "passthrough" sütunları değiştirmeden ekler.
3 Parçaları eşleştir.
| Kavram | Anlamı |
|---|---|
("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ı |