Kuinka suorittaa yhden kategorian koodaus useille kategorioille muuttujille

Lähdesolmu: 841101

Tässä artikkelissa opimme kuinka voimme käsitellä monikategorisia muuttujia Feature Engineering -tekniikalla One Hot Encoding.

Mutta ennen kuin jatkamme eteenpäin, käydään lyhyt keskustelu ominaisuussuunnittelusta ja One Hot Encodingista.

Ominaisuuksien suunnittelu

Feature Engineering on siis prosessi, jossa ominaisuuksia poimitaan raakatiedoista käyttämällä ongelman verkkotuntia. Näitä ominaisuuksia voidaan käyttää parantamaan koneoppimisalgoritmien suorituskykyä ja jos suorituskyky kasvaa, se antaa parhaan tarkkuuden. Voimme myös sanoa, että ominaisuussuunnittelu on sama asia kuin sovellettu koneoppiminen. Ominaisuussuunnittelu on koneoppimisen tärkein taide, joka luo valtavan eron hyvän ja huonon mallin välillä. Tämä on kolmas askel minkä tahansa datatieteen projektin elinkaaressa.

Koneoppimismallien läpinäkyvyyden käsite on monimutkainen asia, sillä eri mallit vaativat usein erilaisia ​​lähestymistapoja erityyppisille tiedoille. Kuten:-

  • Jatkuva data
  • Luokkaominaisuudet
  • Puuttuvat arvot
  • normalisointi
  • Päivämäärät ja aika

Mutta tässä puhumme vain kategorisista ominaisuuksista. Kategoriset ominaisuudet ovat ominaisuuksia, joissa tietotyyppi on objektityyppi. Datapisteen arvo missään kategorisessa ominaisuudessa ei ole numeerisessa muodossa, vaan se oli objektimuodossa.

Kategoristen muuttujien käsittelyyn on monia tekniikoita, joista jotkut ovat:

  • Label Encoding tai Ordinaal Encoding
  • Yksi kuuma koodaus
  • Dummy koodaus
  • Tehosteen koodaus
  • Binaarikoodaus
  • Baselin koodaus
  • Hash-koodaus
  • Kohdekoodaus

Joten tässä käsittelemme One Hot Encodingin kategorisia ominaisuuksia, joten ensinnäkin keskustelemme One Hot Encodingista.

Yksi kuuma koodaus

Tiedämme, että kategorialliset muuttujat sisältävät tunnistearvot numeroarvojen sijaan. Mahdollisten arvojen määrä on usein rajoitettu kiinteään joukkoon. Kategorisia muuttujia kutsutaan usein nimellisiksi. Monet koneoppimisalgoritmit eivät voi toimia suoraan etikettidatan kanssa. Ne edellyttävät, että kaikki tulomuuttujat ja lähtömuuttujat ovat numeerisia.

Tämä tarkoittaa, että kategoriset tiedot on muutettava numeeriseen muotoon. Jos kategorinen muuttuja on tulosmuuttuja, saatat haluta myös muuntaa mallin ennusteet takaisin kategorialliseen muotoon esittääksesi ne tai käyttääksesi niitä jossain sovelluksessa.

esimerkiksi sukupuolta koskevat tiedot ovat muodossa 'Uros' ja 'Nainen'.

Mutta jos käytämme one-hot-koodausta, koodaus ja mallin salliminen luonnollisen järjestyksen luokkien välillä voi johtaa huonoon suorituskykyyn tai odottamattomiin tuloksiin.

One-hot-koodausta voidaan soveltaa kokonaislukuesitykseen. Tässä kokonaislukukoodattu muuttuja poistetaan ja uusi binäärimuuttuja lisätään jokaiselle yksilölliselle kokonaislukuarvolle.

Esimerkiksi koodaamme värimuuttujia,

Punainen väri  Sininen_väri
0 1
1 0
0 1

Nyt aloitamme matkamme. Ensimmäisessä vaiheessa otamme tietojoukon asuntojen hintaennusteista.

aineisto

Tässä käytetään tietojoukkoa house_price, jota käytetään asunnon hinnan ennustamiseen alueen koon mukaan.

Jos haluat ladata asunnon hintaennustetietojoukon, napsauta tätä.

Moduulien tuonti

Nyt meidän on tuotava tärkeät moduulit pythonista, joita käytetään one-hot-koodaukseen

# tuo pandat tuonti pandat pd-muodossa # tuonti numpy tuonti numpy np-muodossa # OneHotEncoderin tuonti sklearn.preprocessing import OneHotEncoder()

Tässä käytämme pandoja, joita käytetään tietojen analysointiin, NumPyused n-ulotteisille taulukoille, ja sklearnistä käytämme yhtä tärkeää luokkaa One Hot Encoder kategoriseen koodaukseen.

Nyt meidän on luettava nämä tiedot Pythonilla.

Tietojoukon lukeminen

Yleensä tietojoukko on CSV-muodossa, ja käyttämämme tietojoukko on myös CSV-muodossa. CSV-tiedoston lukemiseen käytämme pandas read_csv() -funktiota. Katso alempaa:

# lukee tietojoukkoa df = pd.read_csv('house_price.csv') df.head()

lähtö: -

Mutta meidän on käytettävä vain kategorisia muuttujia yhdelle kuumalle enkooderille, ja yritämme selittää vain kategorisilla muuttujilla ymmärtämisen helpottamiseksi.

Kategoristen muuttujien osiointia varten tiedoista meidän on tarkistettava, kuinka monella ominaisuudella on kategorisia arvoja.

Kategoristen arvojen tarkistaminen

Arvojen tarkistamiseen käytämme pandas select_dtypes -funktiota, jota käytetään muuttujan tietotyyppien valintaan.

# ominaisuuksien tarkistus cat = df.select_dtypes(include='O').keys() # näyttömuuttujat cat

lähtö: -

 

Nyt meidän on pudotettava nuo numeeriset sarakkeet tietojoukosta ja käytämme tätä kategorista muuttujaa omaan käyttöön. Käytämme vain 3–4 kategorista saraketta tietojoukosta one-hot-koodauksen soveltamiseen.

Uuden datakehyksen luominen

Luomme nyt kategoristen muuttujien käyttöä varten uuden tietokehyksen valituista kategorisista sarakkeista.

# luomalla uusia df # asetussarakkeita käytämme new_df = pd.read_csv('house_price.csv',usecols=['Neighborhood','Exterior1st', 'Exterior2nd']) new_df.head()

lähtö: -

Nyt meidän on selvitettävä, kuinka monta yksilöllistä luokkaa on jokaisessa kategorisessa sarakkeessa.

Ainutlaatuisten arvojen löytäminen

Yksilöllisten arvojen löytämiseen käytämme pandas unique()-funktiota.

# yksilöllisiä arvoja kussakin sarakkeessa x:lle new_df.columnsissa: #yksilöllisten arvojen tulostaminen print(x ,':', len(new_df[x].unique()))

lähtö: -

Naapurusto: 25
Ulkopuoli 1.: 15
Ulkopuoli 2: 16

Nyt siirrymme tekniikkaamme soveltamaan yhden kuuman koodausta useille kategorisille muuttujille.

Tekniikka monikategorisille muuttujille

Tekniikka on, että rajoitamme one-hot-koodauksen muuttujan 10 yleisimpään nimikkeeseen. Tämä tarkoittaa, että tekisimme yhden binäärimuuttujan jokaiselle 10 yleisimmälle tunnisteelle. Tämä vastaa kaikkien muiden tunnisteiden ryhmittelyä uuteen kategoriaan, joka tässä tapauksessa jätetään pois. Siten 10 uutta valemuuttujaa osoittavat, onko jokin 10 yleisimmästä tunnisteesta olemassa 1 tai sitten ei 0 tiettyä havaintoa varten.

Yleisimmät muuttujat

Tässä valitsemme 20 yleisintä muuttujaa.

Oletetaan, että otamme yhden kategorisen muuttujan naapuruus.

# 20 parhaan luokan löytäminen new_df.Neighborhood.value_counts().sort_values(ascending=False).head(20)

lähtö:

Kun näet tässä tulostekuvassa, huomaat, että NIMET etiketti toistuu 225 kertaa Neighborhood-sarakkeissa ja alaspäin tämä luku on laskemassa.

Joten otimme 10 parasta tulosta ylhäältä ja muunnamme tämän top 10 -tuloksen one-hot-koodaukseksi ja vasemmanpuoleiset otsikot muuttuvat nollaan.

lähtö: -

 

Luettelo yleisimmistä kategorisista muuttujista

# tee luettelo, jossa on 10 suosituinta muuttujaa top_10 = [x for x in new_df.Neighborhood.value_counts().sort_values(ascending=False).head(10).index] top_10

lähtö: -

['NAMEs',
"CollgCr",
'Vanha kaupunki',
"Edwards",
"Somerst",
"Gilbert",
'NridgHt',
"Sawyer",
'NWAmes',
"SawyerW"]

Neighborhood-sarakkeessa on 10 parasta kategorista otsikkoa.

Tee binaari

Nyt meidän on tehtävä top_10 -tunnisteen 10 binaarimuuttujaa:

# tee binaari tunnisteista

otsikko top_10:ssä:

uusi_df = np.where(new_df['Neighborhood']==tunniste,1,0)

new_df[['Neighborhood']+top_10]


lähtö: -

NIMET CollgCr Vanha kaupunki Edwards Somerst Gilbert NridgHt Sahuri NWAmes SawyerW
0 CollgCr 0 1 0 0 0 0 0 0 0 0
1 Veenker 0 0 0 0 0 0 0 0 0 0
2 CollgCr 0 1 0 0 0 0 0 0 0 0
3 Crawfor 0 0 0 0 0 0 0 0 0 0
4 NoRidge 0 0 0 0 0 0 0 0 0 0
5 mitchel 0 0 0 0 0 0 0 0 0 0
6 Somerst 0 0 0 0 1 0 0 0 0 0
7 NWAmes 0 0 0 0 0 0 0 0 1 0
8 Vanha kaupunki 0 0 1 0 0 0 0 0 0 0
9 BrkSide 0 0 0 0 0 0 0 0 0 0
10 Sahuri 0 0 0 0 0 0 0 1 0 0
11 NridgHt 0 0 0 0 0 0 1 0 0 0

Voit nähdä, kuinka top_10-tunnisteet muunnetaan nyt binäärimuotoon.

Otetaan esimerkki, katso taulukosta missä 1 indeksi Veenker joka ei kuulunut top_10-kategorioihimme, joten se johtaa 0 kaikki sarakkeet.

Nyt teemme sen kaikille edellä valitsemillemme kategorisille muuttujille.

Kaikki valitut muuttujat OneHotEncodingissa

# valitsimme kaikille kategorisille muuttujille def top_x(df2,muuttuja,top_x_labels): otsikolle top_x_labels: df2[muuttuja+'_'+label] = np.where(data[muuttuja]==tunniste,1,0) # read tiedot uudelleen data = pd.read_csv('D://xdatasets/train.csv',usecols = ['Naapuri','Ulkopuoli','Ulkopuolinen','Ulkopuolinen']) #encode Neighborhood 1 yleisimpään luokkaan top_x(data, 'Neighborhood',top_2) # näytä tiedot data.head()

Lähtö: -

Nyt tässä käytämme one-hot-koodausta kaikkiin monikategorisisiin muuttujiin.

Nyt näemme One Hot Encodingin edut ja haitat useille muuttujille.

edut

  • Yksinkertainen toteuttaa
  • Ei vaadi paljon aikaa muuttuvien tutkimiseen
  • Ei laajenna ominaisuustilaa massiivisesti.

Haitat

  • Ei lisää tietoja, jotka voivat tehdä muuttujasta ennustavamman
  • Älä säilytä ohitettujen muuttujien tietoja.

Lopeta huomautukset

Yhteenveto tästä on, että opimme käsittelemään monikategorisia muuttujia. Jos kohtaat tämän ongelman, tämä on erittäin vaikea tehtävä. Joten kiitos, että luit tämän artikkelin.

Ota yhteyttä minuun Linkedinissä: Profiili

Lue muut artikkelini: https://www.analyticsvidhya.com/blog/author/mayurbadole2407/

Kiitos 😎

Tässä artikkelissa esitetyt tiedotusvälineet eivät ole Analytics Vidhyan omistuksessa ja niitä käytetään tekijän harkinnan mukaan.

Voit myös lukea tämän artikkelin mobiilisovelluksessamme Lataa Google Play

Aiheeseen liittyvät artikkelit

Lähde: https://www.analyticsvidhya.com/blog/2021/05/how-to-perform-one-hot-encoding-for-multi-categorical-variables/

Aikaleima:

Lisää aiheesta Analyysi Vidhya