Väčšina množín údajov, s ktorými sa stretávame počas vývoja nášho projektu vedy o údajoch, má stĺpce zmiešaného typu údajov. Tieto súbory údajov pozostávajú z oboch kategorický ako aj číselné stĺpce. Rôzne modely strojového učenia však nepracujú s kategorickými údajmi a aby sa tieto údaje zmestili do modelu strojového učenia, je potrebné ich previesť na číselné údaje. Predpokladajme napríklad, že množina údajov má a rod stĺpec s kategorickými prvkami ako Muž a Žena . Tieto označenia nemajú žiadne konkrétne poradie preferencií a keďže údaje sú reťazcové označenia, modely strojového učenia nesprávne interpretovali, že v nich existuje určitá hierarchia.
Jedným z prístupov na vyriešenie tohto problému môže byť kódovanie štítkov, kde týmto štítkom priradíme napríklad číselnú hodnotu Muž a Žena mapované na 0 a 1 . To však môže pridať zaujatosť v našom modeli, pretože začne dávať vyššie preferencie Žena parameter ako 1>0, ale v ideálnom prípade sú obe označenia v množine údajov rovnako dôležité. Na riešenie tohto problému použijeme techniku One Hot Encoding.
Jedno horúce kódovanie
Jedno horúce kódovanie je technika, ktorú používame na reprezentáciu kategorických premenných ako číselných hodnôt v modeli strojového učenia.
Výhody použitia jedného horúceho kódovania zahŕňajú:
- Umožňuje použitie kategorických premenných v modeloch, ktoré vyžadujú numerický vstup.
- Môže zlepšiť výkon modelu tým, že poskytne modelu viac informácií o kategorickej premennej.
- Môže pomôcť vyhnúť sa problému ordinality, ktorý môže nastať, keď má kategorická premenná prirodzené usporiadanie (napr. malá, stredná, veľká).
Nevýhody použitia jedného horúceho kódovania zahŕňajú:
- Môže to viesť k zvýšeniu rozmerovosti, pretože pre každú kategóriu v premennej je vytvorený samostatný stĺpec. To môže urobiť model zložitejším a pomalším na trénovanie.
- Môže to viesť k riedkym údajom, pretože väčšina pozorovaní bude mať hodnotu 0 vo väčšine rýchlo zakódovaných stĺpcov.
- Môže to viesť k nadmernému vybaveniu, najmä ak je v premennej veľa kategórií a veľkosť vzorky je relatívne malá.
- One-hot-encoding je výkonná technika na spracovanie kategorických údajov, ale môže viesť k zvýšeniu rozmerov, vzácnosti a nadmernému prispôsobeniu. Je dôležité používať ho opatrne a zvážiť iné metódy, ako je ordinálne kódovanie alebo binárne kódovanie.
Príklady jedného horúceho kódovania
In Jedno horúce kódovanie , kategorické parametre pripravia samostatné stĺpce pre mužské aj ženské štítky. Takže kdekoľvek je muž, hodnota bude 1 v stĺpci Muž a 0 v stĺpci Žena a naopak. Pochopme to na príklade: Zvážte údaje, kde sú uvedené ovocie, ich zodpovedajúce kategorické hodnoty a ceny.
| Ovocie | Kategorická hodnota ovocia | cena |
|---|---|---|
| jablko | 1 | 5 |
| mango | 2 | 10 |
| jablko | 1 | pätnásť |
| oranžová | 3 | dvadsať |
Výstup po použití jednorazového kódovania na dáta je daný nasledovne,
| jablko | mango | oranžová | cena |
|---|---|---|---|
| 1 | 0 | 0 | 5 |
| 0 | 1 | 0 | 10 |
| 1 | 0 | 0 | pätnásť |
| 0 | 0 | 1 | dvadsať |
One-Hot kódovanie pomocou Pythonu
Vytváranie dátového rámca
Vytvorenie dátového rámca na implementáciu jedného horúceho kódovania zo súboru CSV.
ako previesť str na intPython3
# 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())> Výkon:

Prvých päť riadkov Dataframe
Jedinečné prvky v kategorickom stĺpci
môžeme použiť jedinečný() funkcia z pandy knižnica na získanie jedinečných prvkov zo stĺpca dátového rámca.
Python3 print(data['Gender'].unique()) print(data['Remarks'].unique())>
Výkon:
array(['Male', 'Female'], dtype=object) array(['Nice', 'Good', 'Great'], dtype=object)>
Počet prvkov v stĺpci
Môžeme použiť value_counts() funkcia z pandy na získanie počtov každého prvku v dátovom rámci.
Python3 data['Gender'].value_counts() data['Remarks'].value_counts()>
Výkon:
Female 7 Male 5 Name: Gender, dtype: int64 Nice 5 Great 4 Good 3 Name: Remarks, dtype: int64>
Máme k dispozícii dve metódy na vykonanie jednorazového kódovania v kategorickom stĺpci.
Jednorazové kódovanie kategorického stĺpca pomocou knižnice Pandas
Môžeme použiť pd.get_dummies() funkcie od pandy až po jednorazové zakódovanie kategorických stĺpcov. Táto funkcia
Python3 one_hot_encoded_data = pd.get_dummies(data, columns = ['Remarks', 'Gender']) print(one_hot_encoded_data)>
Výkon:

One-Hot kódované stĺpce množiny údajov
Môžeme pozorovať, že máme 3 Poznámky a 2 Pohlavie stĺpcov v údajoch. Môžete však len použiť n-1 stĺpcov na definovanie parametrov, ak má n jedinečné štítky. Napríklad, ak ponecháme iba Pohlavie žena stĺpec a pustite Pohlavie Muž Potom tiež môžeme sprostredkovať celú informáciu, ako keď je označenie 1, znamená to žena a keď je označenie 0, znamená to muž. Týmto spôsobom môžeme zakódovať kategorické údaje a znížiť počet parametrov.
One Hot Encoding pomocou Sci-kit Learn Library
Scikit-learn(sklearn) je populárna knižnica strojového učenia v Pythone, ktorá poskytuje množstvo nástrojov na predspracovanie údajov. Poskytuje a OneHotEncoder funkciu, ktorú používame na kódovanie kategorických a číselných premenných do binárnych vektorov.
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}')> Výkon
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>