ColumnTransformer
Guardando al futuro, quando si richiama il metodo .fit_transform(X) su un oggetto Pipeline, questo applica ogni trasformatore all'intero insieme di caratteristiche 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 le caratteristiche ordinali e OneHotEncoder per quelle 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, è possibile 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
ColumnTransformer
Scorri per mostrare il menu
Guardando al futuro, quando si richiama il metodo .fit_transform(X) su un oggetto Pipeline, questo applica ogni trasformatore all'intero insieme di caratteristiche 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 le caratteristiche ordinali e OneHotEncoder per quelle 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, è possibile 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!