Cele mai multe seturi de date din viața reală pe care le întâlnim în timpul dezvoltării proiectului nostru de știință a datelor au coloane de tip de date mixte. Aceste seturi de date constau din ambele categoric precum și coloane numerice. Cu toate acestea, diverse modele de învățare automată nu funcționează cu date categorice și pentru a încadra aceste date în modelul de învățare automată, acestea trebuie convertite în date numerice. De exemplu, să presupunem că un set de date are un Gen coloană cu elemente categorice ca Bărbat și Femeie . Aceste etichete nu au o ordine specifică de preferință și, de asemenea, deoarece datele sunt etichete de șir, modelele de învățare automată au interpretat greșit că există un fel de ierarhie în ele.
O abordare pentru a rezolva această problemă poate fi codificarea etichetelor, unde vom atribui o valoare numerică acestor etichete, de exemplu Masculin și Femeie mapat la 0 și 1 . Dar acest lucru poate adăuga părtinire în modelul nostru, deoarece va începe să acorde o preferință mai mare modelului Femeie parametrul ca 1>0, dar în mod ideal, ambele etichete sunt la fel de importante în setul de date. Pentru a rezolva această problemă vom folosi tehnica One Hot Encoding.
O codificare fierbinte
O codificare fierbinte este o tehnică pe care o folosim pentru a reprezenta variabilele categoriale ca valori numerice într-un model de învățare automată.
Avantajele utilizării unei singure codări fierbinți includ:
- Permite utilizarea variabilelor categoriale în modelele care necesită introducere numerică.
- Poate îmbunătăți performanța modelului prin furnizarea de mai multe informații modelului despre variabila categorială.
- Poate ajuta la evitarea problemei ordinalității, care poate apărea atunci când o variabilă categorială are o ordonare naturală (de exemplu, mică, medie, mare).
Dezavantajele utilizării unei singure codări fierbinți includ:
- Poate duce la creșterea dimensionalității, deoarece este creată o coloană separată pentru fiecare categorie din variabilă. Acest lucru poate face modelul mai complex și mai lent de antrenat.
- Poate duce la date rare, deoarece majoritatea observațiilor vor avea o valoare de 0 în majoritatea coloanelor codificate one-hot.
- Poate duce la supraadaptare, mai ales dacă există multe categorii în variabilă și dimensiunea eșantionului este relativ mică.
- One-hot-encoding este o tehnică puternică de tratare a datelor categorice, dar poate duce la creșterea dimensionalității, dispersității și supraajustării. Este important să-l folosiți cu precauție și să luați în considerare alte metode, cum ar fi codificarea ordinală sau codarea binară.
Un exemplu fierbinte de codificare
În O codificare fierbinte , parametrii categoriali vor pregăti coloane separate atât pentru etichetele Masculin, cât și pentru Femei. Deci, oriunde există un bărbat, valoarea va fi 1 în coloana Masculin și 0 în coloana Femeie și invers. Să înțelegem cu un exemplu: luați în considerare datele în care sunt date fructele, valorile lor categoriale corespunzătoare și prețurile.
| Fructe | Valoarea categorică a fructelor | Preț |
|---|---|---|
| măr | 1 | 5 |
| mango | 2 | 10 |
| măr | 1 | cincisprezece |
| portocale | 3 | douăzeci |
Ieșirea după aplicarea codării one-hot asupra datelor este dată după cum urmează:
| măr | mango | portocale | Preț |
|---|---|---|---|
| 1 | 0 | 0 | 5 |
| 0 | 1 | 0 | 10 |
| 1 | 0 | 0 | cincisprezece |
| 0 | 0 | 1 | douăzeci |
Codificare One-Hot folosind Python
Crearea unui cadru de date
Crearea unui cadru de date pentru a implementa o codificare fierbinte din fișierul CSV.
include programarea cPython3
# 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())> Ieșire:

Primele cinci rânduri de Dataframe
Elemente unice în coloana categorică
putem folosi unic() funcția de la panda bibliotecă pentru a obține elemente unice din coloana cadrului de date.
Python3 print(data['Gender'].unique()) print(data['Remarks'].unique())>
Ieșire:
array(['Male', 'Female'], dtype=object) array(['Nice', 'Good', 'Great'], dtype=object)>
Numărul de elemente din coloană
Putem folosi value_counts() funcția de la panda pentru a obține numărul fiecărui element din cadrul de date.
Python3 data['Gender'].value_counts() data['Remarks'].value_counts()>
Ieșire:
Female 7 Male 5 Name: Gender, dtype: int64 Nice 5 Great 4 Good 3 Name: Remarks, dtype: int64>
Avem la dispoziție două metode pentru a realiza codificarea one-hot pe coloana categorică.
Codificarea One-Hot a coloanei categorice folosind biblioteca Pandas
Putem folosi pd.get_dummies() funcția de la panda la codificarea one-hot a coloanelor categorice. Această funcție
Python3 one_hot_encoded_data = pd.get_dummies(data, columns = ['Remarks', 'Gender']) print(one_hot_encoded_data)>
Ieșire:

Coloane One-Hot codificate ale setului de date
Putem observa că avem 3 Observații și 2 Gen coloane din date. Cu toate acestea, puteți doar să utilizați n-1 coloane pentru a defini parametrii dacă are n etichete unice. De exemplu, dacă păstrăm doar Genul feminin coloană și aruncați Genul masculin coloană, atunci, de asemenea, putem transmite întreaga informație, deoarece atunci când eticheta este 1, înseamnă femeie, iar când eticheta este 0 înseamnă bărbat. Astfel putem codifica datele categorice și putem reduce și numărul de parametri.
O codificare fierbinte folosind biblioteca Sci-kit Learn
Scikit-learn(sklearn) este o bibliotecă populară de învățare automată în Python, care oferă numeroase instrumente pentru preprocesarea datelor. Acesta oferă o OneHotEncoder funcție pe care o folosim pentru codificarea variabilelor categoriale și numerice în vectori binari.
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}')> Ieșire
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>