logo

Una codificació calenta en aprenentatge automàtic

La majoria dels conjunts de dades de la vida real que trobem durant el desenvolupament del nostre projecte de ciència de dades tenen columnes de tipus de dades mixtes. Aquests conjunts de dades consisteixen en tots dos categòrica així com columnes numèriques. Tanmateix, diversos models d'aprenentatge automàtic no funcionen amb dades categòriques i per encaixar aquestes dades al model d'aprenentatge automàtic s'han de convertir en dades numèriques. Per exemple, suposem que un conjunt de dades té a Gènere columna amb elements categòrics com Mascle i Dona . Aquestes etiquetes no tenen un ordre específic de preferència i, a més, com que les dades són etiquetes de cadena, els models d'aprenentatge automàtic van malinterpretar que hi ha algun tipus de jerarquia.

Un enfocament per resoldre aquest problema pot ser la codificació d'etiquetes on assignarem un valor numèric a aquestes etiquetes, per exemple Mascle i Dona assignat a 0 i 1 . Però això pot afegir biaix al nostre model, ja que començarà a donar una major preferència al Dona paràmetre com 1>0, però idealment, ambdues etiquetes són igualment importants al conjunt de dades. Per tractar aquest problema utilitzarem la tècnica One Hot Encoding.

Una codificació calenta

Una codificació calenta és una tècnica que fem servir per representar variables categòriques com a valors numèrics en un model d'aprenentatge automàtic.



Els avantatges d'utilitzar una codificació calenta inclouen:

  1. Permet l'ús de variables categòriques en models que requereixen entrada numèrica.
  2. Pot millorar el rendiment del model proporcionant més informació al model sobre la variable categòrica.
  3. Pot ajudar a evitar el problema de l'ordinalitat, que es pot produir quan una variable categòrica té un ordre natural (per exemple, petita, mitjana, gran).

Els desavantatges d'utilitzar una codificació calenta inclouen:

  1. Pot augmentar la dimensionalitat, ja que es crea una columna separada per a cada categoria de la variable. Això pot fer que el model sigui més complex i lent d'entrenament.
  2. Pot donar lloc a dades escasses, ja que la majoria de les observacions tindran un valor de 0 a la majoria de les columnes codificades one-hot.
  3. Pot comportar un sobreajustament, sobretot si hi ha moltes categories a la variable i la mida de la mostra és relativament petita.
  4. La codificació en calent és una tècnica potent per tractar dades categòriques, però pot augmentar la dimensionalitat, la dispersió i el sobreajustament. És important utilitzar-lo amb precaució i considerar altres mètodes com la codificació ordinal o la codificació binària.

Un exemple de codificació popular

En Una codificació calenta , els paràmetres categòrics prepararan columnes separades per a les etiquetes Home i Female. Així, allà on hi hagi un Home, el valor serà 1 a la columna Home i 0 a la columna Dona, i viceversa. Entenem-ho amb un exemple: considereu les dades on es donen les fruites, els seus valors categòrics corresponents i els preus.

FruitaValor categòric de la fruitaPreu
poma15
mango210
poma115
taronja320

La sortida després d'aplicar una codificació en calent a les dades es dóna de la següent manera:

pomamangotaronjapreu
1005
01010
10015
00120

Codificació One-Hot amb Python

Creació de Dataframe

Creació d'un marc de dades per implementar una codificació activa a partir d'un fitxer CSV.

món Wumpus
Python 3
# Program for demonstration of one hot encoding # import libraries import numpy as np import pandas as pd # import the data required data = pd.read_csv('employee_data.csv') print(data.head())>

Sortida:

Les primeres cinc files de Dataframe

Les primeres cinc files de Dataframe

Elements únics a la columna categòrica

podem utilitzar el únic () funció des del pandes biblioteca per obtenir elements únics de la columna del marc de dades.

Python 3
print(data['Gender'].unique()) print(data['Remarks'].unique())>

Sortida:

array(['Male', 'Female'], dtype=object) array(['Nice', 'Good', 'Great'], dtype=object)>

Recompte d'elements a la columna

Podem utilitzar value_counts() funció de pandas per obtenir els recomptes de cada element del marc de dades.

Python 3
data['Gender'].value_counts() data['Remarks'].value_counts()>

Sortida:

Female 7 Male 5 Name: Gender, dtype: int64  Nice 5 Great 4 Good 3 Name: Remarks, dtype: int64>

Tenim dos mètodes disponibles per realitzar una codificació en calent a la columna categòrica.

Codificació única de la columna categòrica mitjançant la biblioteca Pandas

Podem utilitzar pd.get_dummies() funció de pandas a one-hot codificar les columnes categòriques. Aquesta Funció

Python 3
one_hot_encoded_data = pd.get_dummies(data, columns = ['Remarks', 'Gender']) print(one_hot_encoded_data)>

Sortida:

Columnes codificades One-Hot del conjunt de dades

Columnes codificades One-Hot del conjunt de dades

Podem observar que tenim 3 Observacions i 2 Gènere columnes a les dades. Tanmateix, només podeu utilitzar n-1 columnes per definir paràmetres si en té n etiquetes úniques. Per exemple, si només conservem el Gènere femení columna i deixeu anar la Gènere masculí columna, també podem transmetre tota la informació ja que quan l'etiqueta és 1, vol dir dona i quan l'etiqueta és 0 significa home. D'aquesta manera podem codificar les dades categòriques i reduir també el nombre de paràmetres.

Una codificació calenta utilitzant la biblioteca d'aprenentatge de Sci-kit

Scikit-learn(sklearn) és una popular biblioteca d'aprenentatge automàtic a Python que ofereix nombroses eines per al preprocessament de dades. Proporciona a OneHotEncoder funció que fem servir per codificar variables numèriques i categòriques en vectors binaris.

Python 3
#one hot encoding using OneHotEncoder of Scikit-Learn import pandas as pd from sklearn.preprocessing import OneHotEncoder #Building a dummy employee dataset for example data = {'Employee id': [10, 20, 15, 25, 30], 'Gender': ['M', 'F', 'F', 'M', 'F'], 'Remarks': ['Good', 'Nice', 'Good', 'Great', 'Nice'], } #Converting into a Pandas dataframe df = pd.DataFrame(data) #Print the dataframe: print(f'Employee data : 
{df}') #Extract categorical columns from the dataframe #Here we extract the columns with object datatype as they are the categorical columns categorical_columns = df.select_dtypes(include=['object']).columns.tolist() #Initialize OneHotEncoder encoder = OneHotEncoder(sparse_output=False) # Apply one-hot encoding to the categorical columns one_hot_encoded = encoder.fit_transform(df[categorical_columns]) #Create a DataFrame with the one-hot encoded columns #We use get_feature_names_out() to get the column names for the encoded data one_hot_df = pd.DataFrame(one_hot_encoded, columns=encoder.get_feature_names_out(categorical_columns)) # Concatenate the one-hot encoded dataframe with the original dataframe df_encoded = pd.concat([df, one_hot_df], axis=1) # Drop the original categorical columns df_encoded = df_encoded.drop(categorical_columns, axis=1) # Display the resulting dataframe print(f'Encoded Employee data : 
{df_encoded}')>

Sortida

Employee data :   Employee id Gender Remarks 0 10 M Good 1 20 F Nice 2 15 F Good 3 25 M Great 4 30 F Nice Encoded Employee data :   Employee id Gender_F Gender_M Remarks_Good Remarks_Great Remarks_Nice 0 10 0.0 1.0 1.0 0.0 0.0 1 20 1.0 0.0 0.0 0.0 1.0 2 15 1.0 0.0 1.0 0.0 0.0 3 25 0.0 1.0 0.0 1.0 0.0 4 30 1.0 0.0 0.0 0.0 1.0>