Kolomtransformator
Vooruitkijkend, wanneer de .fit_transform(X)-methode op een Pipeline-object wordt aangeroepen, wordt elke transformer toegepast op de volledige set kenmerken in X. Dit gedrag is echter niet altijd wenselijk.
Zo is het mogelijk dat numerieke waarden niet gecodeerd hoeven te worden of dat verschillende transformers op specifieke kolommen moeten worden toegepast — bijvoorbeeld 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, kan de functie make_column_transformer uit de module sklearn.compose worden gebruikt.
De functie neemt als argumenten tuples met de transformer en de lijst van kolommen waarop deze transformer moet worden toegepast.
Bijvoorbeeld, er kan een ColumnTransformer worden gemaakt 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 alle 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 enkele 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.
Can you explain what the `remainder='passthrough'` argument does?
How do I specify custom order for ordinal categories in `OrdinalEncoder`?
What does the output of `ct.fit_transform(df)` look like?
Awesome!
Completion rate improved to 3.13
Kolomtransformator
Veeg om het menu te tonen
Vooruitkijkend, wanneer de .fit_transform(X)-methode op een Pipeline-object wordt aangeroepen, wordt elke transformer toegepast op de volledige set kenmerken in X. Dit gedrag is echter niet altijd wenselijk.
Zo is het mogelijk dat numerieke waarden niet gecodeerd hoeven te worden of dat verschillende transformers op specifieke kolommen moeten worden toegepast — bijvoorbeeld 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, kan de functie make_column_transformer uit de module sklearn.compose worden gebruikt.
De functie neemt als argumenten tuples met de transformer en de lijst van kolommen waarop deze transformer moet worden toegepast.
Bijvoorbeeld, er kan een ColumnTransformer worden gemaakt 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 alle 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 enkele 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!