Columntrasformatore
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'
)
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'
.
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())
Utilizzando ColumnTransformer
, i dati nominali possono essere trasformati con OneHotEncoder
e i dati ordinali con OrdinalEncoder
in un solo passaggio.
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))
Il ColumnTransformer
è esso stesso un trasformatore, quindi fornisce i metodi standard .fit()
, .fit_transform()
e .transform()
.
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Awesome!
Completion rate improved to 3.13
Columntrasformatore
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'
)
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'
.
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())
Utilizzando ColumnTransformer
, i dati nominali possono essere trasformati con OneHotEncoder
e i dati ordinali con OrdinalEncoder
in un solo passaggio.
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))
Il ColumnTransformer
è esso stesso un trasformatore, quindi fornisce i metodi standard .fit()
, .fit_transform()
e .transform()
.
Grazie per i tuoi commenti!