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:
- Omogoča uporabo kategoričnih spremenljivk v modelih, ki zahtevajo numerični vnos.
- Zmogljivost modela lahko izboljša tako, da modelu zagotovi več informacij o kategorični spremenljivki.
- 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:
- 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.
- To lahko privede do redkih podatkov, saj bo imela večina opazovanj vrednost 0 v večini enkratno kodiranih stolpcev.
- Lahko privede do prekomernega opremljanja, zlasti če je v spremenljivki veliko kategorij in je velikost vzorca razmeroma majhna.
- 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.
| sadje | Kategorična vrednost sadja | Cena |
|---|---|---|
| jabolko | 1 | 5 |
| mango | 2 | 10 |
| jabolko | 1 | petnajst |
| oranžna | 3 | dvajset |
Izhod po uporabi enkratnega kodiranja podatkov je podan na naslednji način:
| jabolko | mango | oranžna | cena |
|---|---|---|---|
| 1 | 0 | 0 | 5 |
| 0 | 1 | 0 | 10 |
| 1 | 0 | 0 | petnajst |
| 0 | 0 | 1 | dvajset |
One-Hot kodiranje z uporabo Pythona
Ustvarjanje Dataframe
Ustvarjanje podatkovnega okvira za implementacijo enega vročega kodiranja iz datoteke CSV.
.naslednja javaPython3
# 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
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
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>