ColumnTransformer
Якщо розглядати наперед, при виклику методу .fit_transform(X) для об'єкта Pipeline, кожен трансформер застосовується до всього набору ознак у X. Однак така поведінка не завжди є бажаною.
Наприклад, може виникнути потреба не кодувати числові значення або застосовувати різні трансформери до окремих стовпців — наприклад, використовувати OrdinalEncoder для порядкових ознак і OneHotEncoder для номінативних ознак.
ColumnTransformer вирішує цю проблему, дозволяючи обробляти кожен стовпець окремо. Для створення ColumnTransformer можна скористатися функцією make_column_transformer з модуля sklearn.compose.
Функція приймає як аргументи кортежі з трансформером та списком стовпців, до яких цей трансформер має бути застосований.
Наприклад, можна створити ColumnTransformer, який застосовує OrdinalEncoder лише до стовпця 'education', а OneHotEncoder — лише до стовпця 'gender'.
ct = make_column_transformer(
(OrdinalEncoder(), ['education']),
(OneHotEncoder(), ['gender']), remainder='passthrough'
)
Аргумент remainder визначає дію щодо стовпців, які не згадані у make_column_transformer (у цьому випадку — стовпці, відмінні від 'gender' та 'education').
За замовчуванням він встановлений у 'drop', тобто всі незгадані стовпці будуть видалені з набору даних. Щоб залишити ці стовпці без змін у вихідних даних, встановіть remainder у 'passthrough'.
Наприклад, розглянемо файл exams.csv. Він містить кілька номінативних стовпців ('gender', 'race/ethnicity', 'lunch', 'test preparation course') та один порядковий стовпець — '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())
За допомогою ColumnTransformer номінативні дані можна трансформувати за допомогою OneHotEncoder, а порядкові — за допомогою OrdinalEncoder в один крок.
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))
ColumnTransformer сам є трансформером, тому надає стандартні методи .fit(), .fit_transform() та .transform().
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
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
ColumnTransformer
Свайпніть щоб показати меню
Якщо розглядати наперед, при виклику методу .fit_transform(X) для об'єкта Pipeline, кожен трансформер застосовується до всього набору ознак у X. Однак така поведінка не завжди є бажаною.
Наприклад, може виникнути потреба не кодувати числові значення або застосовувати різні трансформери до окремих стовпців — наприклад, використовувати OrdinalEncoder для порядкових ознак і OneHotEncoder для номінативних ознак.
ColumnTransformer вирішує цю проблему, дозволяючи обробляти кожен стовпець окремо. Для створення ColumnTransformer можна скористатися функцією make_column_transformer з модуля sklearn.compose.
Функція приймає як аргументи кортежі з трансформером та списком стовпців, до яких цей трансформер має бути застосований.
Наприклад, можна створити ColumnTransformer, який застосовує OrdinalEncoder лише до стовпця 'education', а OneHotEncoder — лише до стовпця 'gender'.
ct = make_column_transformer(
(OrdinalEncoder(), ['education']),
(OneHotEncoder(), ['gender']), remainder='passthrough'
)
Аргумент remainder визначає дію щодо стовпців, які не згадані у make_column_transformer (у цьому випадку — стовпці, відмінні від 'gender' та 'education').
За замовчуванням він встановлений у 'drop', тобто всі незгадані стовпці будуть видалені з набору даних. Щоб залишити ці стовпці без змін у вихідних даних, встановіть remainder у 'passthrough'.
Наприклад, розглянемо файл exams.csv. Він містить кілька номінативних стовпців ('gender', 'race/ethnicity', 'lunch', 'test preparation course') та один порядковий стовпець — '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())
За допомогою ColumnTransformer номінативні дані можна трансформувати за допомогою OneHotEncoder, а порядкові — за допомогою OrdinalEncoder в один крок.
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))
ColumnTransformer сам є трансформером, тому надає стандартні методи .fit(), .fit_transform() та .transform().
Дякуємо за ваш відгук!