Kolomtransformator
Vooruitkijkend, wanneer je de methode .fit_transform(X)
aanroept op een Pipeline
-object, wordt elke transformer toegepast op de volledige set kenmerken in X
. Dit gedrag is echter niet altijd gewenst.
Zo wil je bijvoorbeeld numerieke waarden niet coderen of moet je verschillende transformers op specifieke kolommen toepassen — zoals het gebruik van OrdinalEncoder
voor ordinale kenmerken en OneHotEncoder
voor nominale kenmerken.
De ColumnTransformer
lost dit probleem op door elke kolom afzonderlijk te behandelen. Om een ColumnTransformer
te maken, kun je de functie make_column_transformer
uit de module sklearn.compose
gebruiken.
De functie neemt als argumenten tuples met de transformer en de lijst van kolommen waarop deze transformer moet worden toegepast.
Bijvoorbeeld, we kunnen een ColumnTransformer
maken die de OrdinalEncoder
alleen toepast op de kolom 'education'
en de OneHotEncoder
alleen op de kolom 'gender'
.
ct = make_column_transformer(
(OrdinalEncoder(), ['education']),
(OneHotEncoder(), ['gender']), remainder='passthrough'
)
Het argument remainder
specificeert de actie voor kolommen die niet genoemd zijn in make_column_transformer
(in dit geval, andere kolommen dan 'gender'
en 'education'
).
Standaard is deze ingesteld op 'drop'
, wat betekent dat niet-genoemde kolommen uit de dataset worden verwijderd. Om deze kolommen ongewijzigd in de uitvoer op te nemen, stel je remainder
in op 'passthrough'
.
Neem bijvoorbeeld het bestand exams.csv
. Het bevat verschillende nominale kolommen ('gender'
, 'race/ethnicity'
, 'lunch'
, 'test preparation course'
) en één ordinale kolom, 'parental level of education'
.
12345import pandas as pd df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/exams.csv') print(df.head())
Met behulp van ColumnTransformer
kan nominale data worden getransformeerd met OneHotEncoder
en ordinale data met OrdinalEncoder
in één stap.
123456789101112131415import pandas as pd from sklearn.compose import make_column_transformer from sklearn.preprocessing import OneHotEncoder, OrdinalEncoder df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/exams.csv') # Ordered categories of parental level of education for OrdinalEncoder edu_categories = ['high school', 'some high school', 'some college', "associate's degree", "bachelor's degree", "master's degree"] # Making a column transformer ct = make_column_transformer( (OrdinalEncoder(categories=[edu_categories]), ['parental level of education']), (OneHotEncoder(), ['gender', 'race/ethnicity', 'lunch', 'test preparation course']), remainder='passthrough' ) print(ct.fit_transform(df))
De ColumnTransformer
is zelf een transformer en biedt daarom de standaardmethoden .fit()
, .fit_transform()
en .transform()
aan.
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
Awesome!
Completion rate improved to 3.13
Kolomtransformator
Veeg om het menu te tonen
Vooruitkijkend, wanneer je de methode .fit_transform(X)
aanroept op een Pipeline
-object, wordt elke transformer toegepast op de volledige set kenmerken in X
. Dit gedrag is echter niet altijd gewenst.
Zo wil je bijvoorbeeld numerieke waarden niet coderen of moet je verschillende transformers op specifieke kolommen toepassen — zoals het gebruik van OrdinalEncoder
voor ordinale kenmerken en OneHotEncoder
voor nominale kenmerken.
De ColumnTransformer
lost dit probleem op door elke kolom afzonderlijk te behandelen. Om een ColumnTransformer
te maken, kun je de functie make_column_transformer
uit de module sklearn.compose
gebruiken.
De functie neemt als argumenten tuples met de transformer en de lijst van kolommen waarop deze transformer moet worden toegepast.
Bijvoorbeeld, we kunnen een ColumnTransformer
maken die de OrdinalEncoder
alleen toepast op de kolom 'education'
en de OneHotEncoder
alleen op de kolom 'gender'
.
ct = make_column_transformer(
(OrdinalEncoder(), ['education']),
(OneHotEncoder(), ['gender']), remainder='passthrough'
)
Het argument remainder
specificeert de actie voor kolommen die niet genoemd zijn in make_column_transformer
(in dit geval, andere kolommen dan 'gender'
en 'education'
).
Standaard is deze ingesteld op 'drop'
, wat betekent dat niet-genoemde kolommen uit de dataset worden verwijderd. Om deze kolommen ongewijzigd in de uitvoer op te nemen, stel je remainder
in op 'passthrough'
.
Neem bijvoorbeeld het bestand exams.csv
. Het bevat verschillende nominale kolommen ('gender'
, 'race/ethnicity'
, 'lunch'
, 'test preparation course'
) en één ordinale kolom, 'parental level of education'
.
12345import pandas as pd df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/exams.csv') print(df.head())
Met behulp van ColumnTransformer
kan nominale data worden getransformeerd met OneHotEncoder
en ordinale data met OrdinalEncoder
in één stap.
123456789101112131415import pandas as pd from sklearn.compose import make_column_transformer from sklearn.preprocessing import OneHotEncoder, OrdinalEncoder df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/exams.csv') # Ordered categories of parental level of education for OrdinalEncoder edu_categories = ['high school', 'some high school', 'some college', "associate's degree", "bachelor's degree", "master's degree"] # Making a column transformer ct = make_column_transformer( (OrdinalEncoder(categories=[edu_categories]), ['parental level of education']), (OneHotEncoder(), ['gender', 'race/ethnicity', 'lunch', 'test preparation course']), remainder='passthrough' ) print(ct.fit_transform(df))
De ColumnTransformer
is zelf een transformer en biedt daarom de standaardmethoden .fit()
, .fit_transform()
en .transform()
aan.
Bedankt voor je feedback!