De fleste datasæt fra det virkelige liv, vi støder på under vores udvikling af datavidenskabsprojekter, har kolonner med blandet datatype. Disse datasæt består af begge dele kategorisk samt numeriske kolonner. Forskellige Machine Learning-modeller fungerer dog ikke med kategoriske data, og for at passe disse data ind i maskinlæringsmodellen skal de konverteres til numeriske data. Antag for eksempel, at et datasæt har en Køn kolonne med kategoriske elementer som Mand og Kvinde . Disse etiketter har ingen specifik præferencerækkefølge, og da dataene er strengetiketter, misfortolkede maskinlæringsmodeller, at der er en form for hierarki i dem.
En tilgang til at løse dette problem kan være etiketkodning, hvor vi f.eks. vil tildele en numerisk værdi til disse etiketter Han og Kvinde kortlagt til 0 og 1 . Men dette kan tilføje bias i vores model, da det vil begynde at give højere præference til Kvinde parameter som 1>0, men ideelt set er begge etiketter lige vigtige i datasættet. For at håndtere dette problem vil vi bruge One Hot Encoding-teknikken.
En varm kodning
En varm kodning er en teknik, som vi bruger til at repræsentere kategoriske variable som numeriske værdier i en maskinlæringsmodel.
Fordelene ved at bruge én hot-encoding omfatter:
- Det tillader brugen af kategoriske variable i modeller, der kræver numerisk input.
- Det kan forbedre modellens ydeevne ved at give modellen mere information om den kategoriske variabel.
- Det kan hjælpe med at undgå problemet med ordinalitet, som kan opstå, når en kategorisk variabel har en naturlig rækkefølge (f.eks. lille, mellem, stor).
Ulemperne ved at bruge én varm kodning inkluderer:
- Det kan føre til øget dimensionalitet, da der oprettes en separat kolonne for hver kategori i variablen. Dette kan gøre modellen mere kompleks og langsommere at træne.
- Det kan føre til sparsomme data, da de fleste observationer vil have en værdi på 0 i de fleste af de one-hot-kodede kolonner.
- Det kan føre til overtilpasning, især hvis der er mange kategorier i variablen, og stikprøvestørrelsen er relativt lille.
- One-hot-encoding er en kraftfuld teknik til at behandle kategoriske data, men det kan føre til øget dimensionalitet, sparsomhed og overtilpasning. Det er vigtigt at bruge det forsigtigt og overveje andre metoder såsom ordinær kodning eller binær kodning.
One Hot Encoding Eksempler
I En varm kodning , vil de kategoriske parametre forberede separate kolonner for både mandlige og kvindelige etiketter. Så uanset hvor der er en Mand, vil værdien være 1 i Mand-kolonnen og 0 i Kvinde-kolonnen og omvendt. Lad os forstå med et eksempel: Overvej de data, hvor frugter, deres tilsvarende kategoriske værdier og priser er givet.
| Frugt | Kategorisk værdi af frugt | Pris |
|---|---|---|
| æble | 1 | 5 |
| mango | 2 | 10 |
| æble | 1 | femten |
| orange | 3 | tyve |
Outputtet efter anvendelse af one-hot-kodning på dataene er givet som følger,
| æble | mango | orange | pris |
|---|---|---|---|
| 1 | 0 | 0 | 5 |
| 0 | 1 | 0 | 10 |
| 1 | 0 | 0 | femten |
| 0 | 0 | 1 | tyve |
One-Hot-kodning ved hjælp af Python
Oprettelse af dataramme
Oprettelse af en dataramme for at implementere én hot-encoding fra CSV-fil.
anmærkninger i springstøvlePython3
# 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())> Produktion:

Første fem rækker af Dataframe
Unikke elementer i kategorisk kolonne
vi kan bruge enestående() funktion fra pandaer bibliotek for at få unikke elementer fra kolonnen i datarammen.
Python3 print(data['Gender'].unique()) print(data['Remarks'].unique())>
Produktion:
array(['Male', 'Female'], dtype=object) array(['Nice', 'Good', 'Great'], dtype=object)>
Optælling af elementer i kolonnen
Vi kan bruge værdi_antal() funktion fra pandaer for at få tællingerne af hvert element i datarammen.
Python3 data['Gender'].value_counts() data['Remarks'].value_counts()>
Produktion:
Female 7 Male 5 Name: Gender, dtype: int64 Nice 5 Great 4 Good 3 Name: Remarks, dtype: int64>
Vi har to tilgængelige metoder til at udføre one-hot-kodning på den kategoriske kolonne.
One-Hot-kodning af kategorisk kolonne ved hjælp af Pandas-bibliotek
Vi kan bruge pd.get_dummies() funktion fra pandaer til one-hot encode de kategoriske kolonner. Denne funktion
Python3 one_hot_encoded_data = pd.get_dummies(data, columns = ['Remarks', 'Gender']) print(one_hot_encoded_data)>
Produktion:

One-Hot-kodede kolonner i datasættet
Det kan vi konstatere, at vi har 3 Bemærkninger og 2 køn kolonner i dataene. Du kan dog bare bruge n-1 kolonner for at definere parametre, hvis det har n unikke etiketter. For eksempel, hvis vi kun beholder Køn kvinde kolonne og slip Køn_Mand kolonne, så kan vi også formidle hele informationen, som når etiketten er 1, betyder det kvinde, og når etiketten er 0 betyder det mand. På denne måde kan vi indkode de kategoriske data og også reducere antallet af parametre.
One Hot Encoding ved hjælp af Sci-kit Learn Library
Scikit-learn(sklearn) er et populært maskinlæringsbibliotek i Python, der giver adskillige værktøjer til dataforbehandling. Det giver en OneHotEncoder funktion, som vi bruger til at indkode kategoriske og numeriske variable til binære vektorer.
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}')> Produktion
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>