Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen ColumnTransformer | Pipelines
ML-Einführung Mit Scikit-Learn

bookColumnTransformer

Ein Blick voraus: Wenn Sie die Methode .fit_transform(X) auf einem Pipeline-Objekt aufrufen, wird jeder Transformer auf den gesamten Merkmalsraum in X angewendet. Dieses Verhalten ist jedoch nicht immer erwünscht.

Beispielsweise möchten Sie numerische Werte möglicherweise nicht kodieren oder Sie müssen verschiedene Transformer auf bestimmte Spalten anwenden – etwa den OrdinalEncoder für ordinale Merkmale und den OneHotEncoder für nominale Merkmale.

Der ColumnTransformer löst dieses Problem, indem jede Spalte separat behandelt werden kann. Einen ColumnTransformer erstellen Sie mit der Funktion make_column_transformer aus dem Modul sklearn.compose.

Die Funktion erhält als Argumente Tupel mit dem Transformer und der Liste der Spalten, auf die dieser Transformer angewendet werden soll.

Beispielsweise kann ein ColumnTransformer erstellt werden, der den OrdinalEncoder nur auf die Spalte 'education' und den OneHotEncoder nur auf die Spalte 'gender' anwendet.

ct = make_column_transformer(
   (OrdinalEncoder(), ['education']),
   (OneHotEncoder(), ['gender']), remainder='passthrough'
)
Note
Hinweis

Das Argument remainder legt fest, wie mit Spalten umgegangen wird, die in make_column_transformer nicht erwähnt werden (in diesem Fall alle Spalten außer 'gender' und 'education').

Standardmäßig ist es auf 'drop' gesetzt, d.h. alle nicht genannten Spalten werden aus dem Datensatz entfernt. Um diese Spalten unverändert im Output zu behalten, setzen Sie remainder auf 'passthrough'.

Zum Beispiel enthält die Datei exams.csv mehrere nominale Spalten ('gender', 'race/ethnicity', 'lunch', 'test preparation course') und eine ordinale Spalte, 'parental level of education'.

12345
import 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())
copy

Mit dem ColumnTransformer können nominale Daten mit dem OneHotEncoder und ordinale Daten mit dem OrdinalEncoder in einem einzigen Schritt transformiert werden.

123456789101112131415
import 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))
copy

Der ColumnTransformer ist selbst ein Transformer und stellt daher die Standardmethoden .fit(), .fit_transform() und .transform() bereit.

question mark

Angenommen, Sie haben einen Datensatz mit den Merkmalen 'education', 'income', 'job'. Was passiert mit der Spalte 'income', nachdem Sie den folgenden Code ausgeführt haben? (Beachten Sie, dass das Argument remainder nicht angegeben ist)

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 2

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Suggested prompts:

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

bookColumnTransformer

Swipe um das Menü anzuzeigen

Ein Blick voraus: Wenn Sie die Methode .fit_transform(X) auf einem Pipeline-Objekt aufrufen, wird jeder Transformer auf den gesamten Merkmalsraum in X angewendet. Dieses Verhalten ist jedoch nicht immer erwünscht.

Beispielsweise möchten Sie numerische Werte möglicherweise nicht kodieren oder Sie müssen verschiedene Transformer auf bestimmte Spalten anwenden – etwa den OrdinalEncoder für ordinale Merkmale und den OneHotEncoder für nominale Merkmale.

Der ColumnTransformer löst dieses Problem, indem jede Spalte separat behandelt werden kann. Einen ColumnTransformer erstellen Sie mit der Funktion make_column_transformer aus dem Modul sklearn.compose.

Die Funktion erhält als Argumente Tupel mit dem Transformer und der Liste der Spalten, auf die dieser Transformer angewendet werden soll.

Beispielsweise kann ein ColumnTransformer erstellt werden, der den OrdinalEncoder nur auf die Spalte 'education' und den OneHotEncoder nur auf die Spalte 'gender' anwendet.

ct = make_column_transformer(
   (OrdinalEncoder(), ['education']),
   (OneHotEncoder(), ['gender']), remainder='passthrough'
)
Note
Hinweis

Das Argument remainder legt fest, wie mit Spalten umgegangen wird, die in make_column_transformer nicht erwähnt werden (in diesem Fall alle Spalten außer 'gender' und 'education').

Standardmäßig ist es auf 'drop' gesetzt, d.h. alle nicht genannten Spalten werden aus dem Datensatz entfernt. Um diese Spalten unverändert im Output zu behalten, setzen Sie remainder auf 'passthrough'.

Zum Beispiel enthält die Datei exams.csv mehrere nominale Spalten ('gender', 'race/ethnicity', 'lunch', 'test preparation course') und eine ordinale Spalte, 'parental level of education'.

12345
import 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())
copy

Mit dem ColumnTransformer können nominale Daten mit dem OneHotEncoder und ordinale Daten mit dem OrdinalEncoder in einem einzigen Schritt transformiert werden.

123456789101112131415
import 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))
copy

Der ColumnTransformer ist selbst ein Transformer und stellt daher die Standardmethoden .fit(), .fit_transform() und .transform() bereit.

question mark

Angenommen, Sie haben einen Datensatz mit den Merkmalen 'education', 'income', 'job'. Was passiert mit der Spalte 'income', nachdem Sie den folgenden Code ausgeführt haben? (Beachten Sie, dass das Argument remainder nicht angegeben ist)

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 2
some-alt