Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Columntrasformatore | Pipelines
Introduzione al ML con Scikit-Learn

bookColumntrasformatore

Guardando al futuro, quando si invoca il metodo .fit_transform(X) su un oggetto Pipeline, esso applica ogni trasformatore all'intero insieme di feature in X. Tuttavia, questo comportamento potrebbe non essere sempre desiderato.

Ad esempio, potresti non voler codificare valori numerici oppure potresti aver bisogno di applicare trasformatori diversi a colonne specifiche — come utilizzare OrdinalEncoder per feature ordinali e OneHotEncoder per feature nominali.

Il ColumnTransformer risolve questo problema consentendo di trattare ogni colonna separatamente. Per creare un ColumnTransformer, è possibile utilizzare la funzione make_column_transformer dal modulo sklearn.compose.

La funzione accetta come argomenti delle tuple con il trasformatore e la lista delle colonne a cui applicare tale trasformatore.

Ad esempio, possiamo creare un ColumnTransformer che applica l'OrdinalEncoder solo alla colonna 'education' e l'OneHotEncoder solo alla colonna 'gender'.

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

L'argomento remainder specifica l'azione da intraprendere con le colonne non menzionate in make_column_transformer (in questo caso, colonne diverse da 'gender' ed 'education').

Per impostazione predefinita, è impostato su 'drop', il che significa che tutte le colonne non menzionate verranno eliminate dal dataset. Per includere queste colonne inalterate nell'output, impostare remainder su 'passthrough'.

Ad esempio, considera il file exams.csv. Contiene diverse colonne nominali ('gender', 'race/ethnicity', 'lunch', 'test preparation course') e una colonna ordinale, '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

Utilizzando ColumnTransformer, i dati nominali possono essere trasformati con OneHotEncoder e i dati ordinali con OrdinalEncoder in un solo passaggio.

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

Il ColumnTransformer è esso stesso un trasformatore, quindi fornisce i metodi standard .fit(), .fit_transform() e .transform().

question mark

Supponi di avere un dataset con le feature 'education', 'income', 'job'. Cosa succederà alla colonna 'income' dopo aver eseguito il seguente codice? (Nota che l'argomento remainder non è specificato)

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 2

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

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

bookColumntrasformatore

Scorri per mostrare il menu

Guardando al futuro, quando si invoca il metodo .fit_transform(X) su un oggetto Pipeline, esso applica ogni trasformatore all'intero insieme di feature in X. Tuttavia, questo comportamento potrebbe non essere sempre desiderato.

Ad esempio, potresti non voler codificare valori numerici oppure potresti aver bisogno di applicare trasformatori diversi a colonne specifiche — come utilizzare OrdinalEncoder per feature ordinali e OneHotEncoder per feature nominali.

Il ColumnTransformer risolve questo problema consentendo di trattare ogni colonna separatamente. Per creare un ColumnTransformer, è possibile utilizzare la funzione make_column_transformer dal modulo sklearn.compose.

La funzione accetta come argomenti delle tuple con il trasformatore e la lista delle colonne a cui applicare tale trasformatore.

Ad esempio, possiamo creare un ColumnTransformer che applica l'OrdinalEncoder solo alla colonna 'education' e l'OneHotEncoder solo alla colonna 'gender'.

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

L'argomento remainder specifica l'azione da intraprendere con le colonne non menzionate in make_column_transformer (in questo caso, colonne diverse da 'gender' ed 'education').

Per impostazione predefinita, è impostato su 'drop', il che significa che tutte le colonne non menzionate verranno eliminate dal dataset. Per includere queste colonne inalterate nell'output, impostare remainder su 'passthrough'.

Ad esempio, considera il file exams.csv. Contiene diverse colonne nominali ('gender', 'race/ethnicity', 'lunch', 'test preparation course') e una colonna ordinale, '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

Utilizzando ColumnTransformer, i dati nominali possono essere trasformati con OneHotEncoder e i dati ordinali con OrdinalEncoder in un solo passaggio.

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

Il ColumnTransformer è esso stesso un trasformatore, quindi fornisce i metodi standard .fit(), .fit_transform() e .transform().

question mark

Supponi di avere un dataset con le feature 'education', 'income', 'job'. Cosa succederà alla colonna 'income' dopo aver eseguito il seguente codice? (Nota che l'argomento remainder non è specificato)

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 2
some-alt