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().
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
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().
Дякуємо за ваш відгук!