logo

Yksi kuuma koodaus koneoppimisessa

Useimmat tosielämän tietojoukot, joita kohtaamme datatieteen projektikehityksen aikana, sisältävät sekatyyppisiä sarakkeita. Nämä tietojoukot koostuvat molemmista kategorinen sekä numeeriset sarakkeet. Erilaiset koneoppimismallit eivät kuitenkaan toimi kategorisen datan kanssa, ja tämän datan sovittamiseksi koneoppimismalliin se on muunnettava numeerisiksi tiedoiksi. Oletetaan esimerkiksi, että tietojoukossa on a Sukupuoli sarake kategorisilla elementeillä, kuten Mies ja Nainen . Näillä tarroilla ei ole erityistä etusijajärjestystä, ja koska tiedot ovat merkkijonotunnisteita, koneoppimismallit tulkitsivat väärin, että niissä on jonkinlainen hierarkia.

Yksi tapa ratkaista tämä ongelma voi olla tarrakoodaus, jossa annamme näille tarroille numeerisen arvon esim. Uros ja Nainen kartoitettu 0 ja 1 . Mutta tämä voi lisätä malliamme harhaa, koska se alkaa antaa enemmän etusijaa Nainen parametrina 1>0, mutta ihannetapauksessa molemmat tunnisteet ovat yhtä tärkeitä tietojoukossa. Tämän ongelman ratkaisemiseksi käytämme One Hot Encoding -tekniikkaa.

Yksi kuuma koodaus

Yksi kuuma koodaus on tekniikka, jota käytämme kategoristen muuttujien esittämiseen numeerisina arvoina koneoppimismallissa.



Yhden kuuman koodauksen käytön etuja ovat:

  1. Se mahdollistaa kategoristen muuttujien käytön malleissa, jotka vaativat numeerista syöttöä.
  2. Se voi parantaa mallin suorituskykyä antamalla mallille enemmän tietoa kategorisesta muuttujasta.
  3. Se voi auttaa välttämään ordinaalisuusongelman, joka voi ilmetä, kun kategorisella muuttujalla on luonnollinen järjestys (esim. pieni, keskikokoinen, suuri).

Yhden kuuman koodauksen käytön haittoja ovat:

  1. Se voi johtaa lisääntyneeseen ulottuvuuteen, koska muuttujan kullekin kategorialle luodaan erillinen sarake. Tämä voi tehdä mallista monimutkaisemman ja hitaamman harjoittelevan.
  2. Se voi johtaa harvaan dataan, koska useimpien havaintojen arvo on 0 useimmissa one-hot-koodatuissa sarakkeissa.
  3. Se voi johtaa ylisovitukseen, varsinkin jos muuttujassa on useita luokkia ja otoskoko on suhteellisen pieni.
  4. One-hot-koodaus on tehokas tekniikka kategorisen datan käsittelemiseen, mutta se voi johtaa lisääntyneeseen ulottuvuuteen, harvuuteen ja ylisovitukseen. On tärkeää käyttää sitä varoen ja harkita muita menetelmiä, kuten järjestyskoodausta tai binäärikoodausta.

Yksi kuuma koodausesimerkkejä

Sisään Yksi kuuma koodaus , kategoriaparametrit luovat erilliset sarakkeet sekä Mies- että Nais-tunnisteille. Joten missä tahansa on mies, arvo on 1 Mies-sarakkeessa ja 0 Nainen-sarakkeessa ja päinvastoin. Ymmärrämme esimerkin avulla: Harkitse tietoja, joissa hedelmät, niitä vastaavat kategorialliset arvot ja hinnat on annettu.

HedelmäHedelmien kategorinen arvoHinta
omena15
mango210
omena1viisitoista
oranssi3kaksikymmentä

Tulos sen jälkeen, kun dataan on käytetty one-hot-koodausta, annetaan seuraavasti:

omenamangooranssihinta
1005
01010
100viisitoista
001kaksikymmentä

One-Hot-koodaus Pythonilla

Datakehyksen luominen

Luodaan datakehys yhden hot-koodauksen toteuttamiseksi CSV-tiedostosta.

kuinka päästä eroon aikasilmukasta java
Python 3
# 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())>

Lähtö:

Datakehyksen viisi ensimmäistä riviä

Datakehyksen viisi ensimmäistä riviä

Ainutlaatuiset elementit kategoriallisessa sarakkeessa

voimme käyttää ainutlaatuinen() toiminto alkaen pandat kirjasto saadaksesi ainutlaatuisia elementtejä tietokehyksen sarakkeesta.

Python 3
print(data['Gender'].unique()) print(data['Remarks'].unique())>

Lähtö:

array(['Male', 'Female'], dtype=object) array(['Nice', 'Good', 'Great'], dtype=object)>

Elementtien määrä sarakkeessa

Voimme käyttää arvo_määrät() funktio pandasta saadakseen tietokehyksen kunkin elementin määrän.

Python 3
data['Gender'].value_counts() data['Remarks'].value_counts()>

Lähtö:

Female 7 Male 5 Name: Gender, dtype: int64  Nice 5 Great 4 Good 3 Name: Remarks, dtype: int64>

Meillä on käytettävissämme kaksi tapaa suorittaa yhden kuuman koodauksen kategoriselle sarakkeelle.

Kategorisen sarakkeen One-Hot-koodaus Pandas-kirjaston avulla

Voimme käyttää pd.get_dummies() toiminto pandasta one-hot koodaa kategoriset sarakkeet. Tämä toiminto

Python 3
one_hot_encoded_data = pd.get_dummies(data, columns = ['Remarks', 'Gender']) print(one_hot_encoded_data)>

Lähtö:

Tietojoukon One-Hot-koodatut sarakkeet

Tietojoukon One-Hot-koodatut sarakkeet

Voimme havaita, että meillä on 3 Huomautuksia ja 2 Sukupuoli sarakkeita tiedoissa. Voit kuitenkin vain käyttää n-1 sarakkeita parametrien määrittämiseksi, jos sillä on n ainutlaatuisia etikettejä. Esimerkiksi, jos pidämme vain Sukupuoli Nainen sarake ja pudota Sukupuoli Mies sarakkeessa, niin voimme myös välittää koko tiedon, sillä kun etiketti on 1, se tarkoittaa naista ja kun etiketti on 0, se tarkoittaa miestä. Tällä tavalla voimme koodata kategorisen datan ja vähentää myös parametrien määrää.

Yksi kuuma koodaus Sci-kit Learn Libraryn avulla

Scikit-learn(sklearn) on suosittu koneoppimiskirjasto Pythonissa, joka tarjoaa lukuisia työkaluja tietojen esikäsittelyyn. Se tarjoaa a OneHotEncoder funktio, jota käytämme kategoristen ja numeeristen muuttujien koodaamiseen binäärivektoreiksi.

Python 3
#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}')>

Lähtö

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>