logo

Eno vroče kodiranje v strojnem učenju

Večina naborov podatkov iz resničnega življenja, s katerimi se srečujemo med razvojem našega projekta podatkovne znanosti, ima stolpce mešanega tipa podatkov. Ti nabori podatkov so sestavljeni iz obeh kategorično kot tudi številčni stolpci. Vendar pa različni modeli strojnega učenja ne delujejo s kategoričnimi podatki in da bi te podatke prilagodili modelu strojnega učenja, jih je treba pretvoriti v numerične podatke. Denimo, da ima nabor podatkov a Spol stolpec s kategoričnimi elementi, kot je Moški in ženska . Te oznake nimajo posebnega prednostnega vrstnega reda in ker so podatki oznake nizov, so si modeli strojnega učenja napačno razlagali, da v njih obstaja nekakšna hierarhija.

Eden od pristopov za rešitev tega problema je lahko kodiranje oznak, kjer bomo na primer tem oznakam dodelili številčno vrednost moški in ženska preslikano na 0 in 1 . Toda to lahko našemu modelu doda pristranskost, saj bo začel dajati večjo prednost ženska parameter kot 1>0, vendar je v idealnem primeru obe oznaki enako pomembni v naboru podatkov. Za reševanje te težave bomo uporabili tehniko One Hot Encoding.

Eno vroče kodiranje

Eno vroče kodiranje je tehnika, ki jo uporabljamo za predstavitev kategoričnih spremenljivk kot številskih vrednosti v modelu strojnega učenja.



Prednosti uporabe enega vročega kodiranja vključujejo:

  1. Omogoča uporabo kategoričnih spremenljivk v modelih, ki zahtevajo numerični vnos.
  2. Zmogljivost modela lahko izboljša tako, da modelu zagotovi več informacij o kategorični spremenljivki.
  3. Lahko pomaga preprečiti problem ordinalnosti, ki se lahko pojavi, ko ima kategorična spremenljivka naraven vrstni red (npr. majhna, srednja, velika).

Slabosti uporabe enega vročega kodiranja vključujejo:

  1. Lahko povzroči povečano dimenzionalnost, saj se za vsako kategorijo v spremenljivki ustvari ločen stolpec. Zaradi tega je lahko model bolj zapleten in počasen za treniranje.
  2. To lahko privede do redkih podatkov, saj bo imela večina opazovanj vrednost 0 v večini enkratno kodiranih stolpcev.
  3. Lahko privede do prekomernega opremljanja, zlasti če je v spremenljivki veliko kategorij in je velikost vzorca razmeroma majhna.
  4. Enkratno kodiranje je zmogljiva tehnika za obdelavo kategoričnih podatkov, vendar lahko vodi do povečane dimenzionalnosti, redkosti in prekomernega prilagajanja. Pomembno je, da ga uporabljate previdno in razmislite o drugih metodah, kot sta ordinalno kodiranje ali binarno kodiranje.

Eden vročih primerov kodiranja

noter Eno vroče kodiranje , bodo kategorični parametri pripravili ločene stolpce za moške in ženske oznake. Torej, kjer koli je moški, bo vrednost 1 v stolpcu moški in 0 v stolpcu ženska in obratno. Razumejmo na primeru: Razmislite o podatkih, kjer so podani sadje, njihove ustrezne kategorične vrednosti in cene.

sadjeKategorična vrednost sadjaCena
jabolko15
mango210
jabolko1petnajst
oranžna3dvajset

Izhod po uporabi enkratnega kodiranja podatkov je podan na naslednji način:

jabolkomangooranžnacena
1005
01010
100petnajst
001dvajset

One-Hot kodiranje z uporabo Pythona

Ustvarjanje Dataframe

Ustvarjanje podatkovnega okvira za implementacijo enega vročega kodiranja iz datoteke CSV.

.naslednja java
Python3
# 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())>

Izhod:

Prvih pet vrstic Dataframe

Prvih pet vrstic Dataframe

Edinstveni elementi v kategoričnem stolpcu

lahko uporabimo edinstven() funkcijo od pande knjižnico za pridobitev edinstvenih elementov iz stolpca podatkovnega okvira.

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

Izhod:

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

Število elementov v stolpcu

Lahko uporabimo value_counts() funkcijo iz pand za pridobitev števila vsakega elementa v podatkovnem okviru.

Python3
data['Gender'].value_counts() data['Remarks'].value_counts()>

Izhod:

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

Na voljo imamo dve metodi za izvajanje enkratnega kodiranja v kategoričnem stolpcu.

Enkratno kodiranje kategoričnega stolpca z uporabo knjižnice Pandas

Lahko uporabimo pd.get_dummies() funkcijo od pand do one-hot kodirajo kategorične stolpce. Ta funkcija

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

Izhod:

One-Hot kodirani stolpci nabora podatkov

One-Hot kodirani stolpci nabora podatkov

Lahko opazimo, da imamo 3 Opombe in 2 Spol stolpcev v podatkih. Vendar pa lahko samo uporabite n-1 stolpce za definiranje parametrov, če jih ima n edinstvene etikete. Na primer, če obdržimo samo Spol_ženski stolpec in spustite Moški spol potem lahko posredujemo tudi celotno informacijo, saj ko je oznaka 1, pomeni ženska in ko je oznaka 0, pomeni moški. Na ta način lahko kodiramo kategorične podatke in zmanjšamo tudi število parametrov.

Eno vroče kodiranje z uporabo knjižnice Sci-kit Learn

Scikit-learn(sklearn) je priljubljena knjižnica za strojno učenje v Pythonu, ki ponuja številna orodja za predhodno obdelavo podatkov. Zagotavlja a OneHotEncoder funkcijo, ki jo uporabljamo za kodiranje kategoričnih in numeričnih spremenljivk v binarne vektorje.

Python3
#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}')>

Izhod

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>