logo

Jedno horúce kódovanie v strojovom učení

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ú:

  1. Umožňuje použitie kategorických premenných v modeloch, ktoré vyžadujú numerický vstup.
  2. Môže zlepšiť výkon modelu tým, že poskytne modelu viac informácií o kategorickej premennej.
  3. 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ú:

  1. 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.
  2. 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.
  3. 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á.
  4. 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.

OvocieKategorická hodnota ovociacena
jablko15
mango210
jablko1pätnásť
oranžová3dvadsať

Výstup po použití jednorazového kódovania na dáta je daný nasledovne,

jablkomangooranžovácena
1005
01010
100pätnásť
001dvadsať

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 int
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())>

Výkon:

Prvých päť riadkov Dataframe

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

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>