Kuidas teostada mitme kategooria muutujate jaoks ühekordset kodeerimist

Allikasõlm: 841101

Sellest artiklist õpime, kuidas me saame käsitleda mitme kategooria muutujaid, kasutades funktsioonide projekteerimise tehnikat One Hot Encoding.

Kuid enne jätkamist arutleme lühidalt funktsioonide projekteerimise ja ühe kuuma kodeeringu üle.

Funktsioonitehnika

Seega on funktsioonide projekteerimine protsess, mille käigus eraldatakse toorandmetest funktsioonid, kasutades probleemi domeeniteadmisi. Neid funktsioone saab kasutada masinõppe algoritmide jõudluse parandamiseks ja kui jõudlus suureneb, annab see parima täpsuse. Võime ka öelda, et funktsioonide insener on sama mis rakenduslik masinõpe. Funktsioonide projekteerimine on masinõppe kõige olulisem kunst, mis loob suure erinevuse hea ja halva mudeli vahel. See on kolmas samm mis tahes andmeteaduse projekti elutsüklis.

Masinõppemudelite läbipaistvuse kontseptsioon on keeruline asi, kuna erinevad mudelid nõuavad sageli erinevat tüüpi andmete jaoks erinevat lähenemist. Nagu näiteks:-

  • Pidevad andmed
  • Kategoorilised omadused
  • Puuduvad väärtused
  • Normaliseerimine
  • Kuupäevad ja kellaaeg

Kuid siin käsitleme ainult kategoorilisi tunnuseid. Kategoorilised tunnused on need funktsioonid, mille andmetüüp on objektitüüp. Andmepunkti väärtus üheski kategoorilises tunnuses ei ole numbrilisel kujul, pigem oli see objekti kujul.

Kategooriliste muutujate käsitlemiseks on palju tehnikaid, mõned neist on järgmised:

  • Sildi kodeering või järjekorrakodeering
  • Üks kuum kodeering
  • Näiv kodeering
  • Efektide kodeerimine
  • Binaarne kodeerimine
  • Baseli kodeering
  • Räsikodeering
  • Sihtkodeering

Niisiis käsitleme siin One Hot Encodingu kategoorilisi funktsioone, seega käsitleme kõigepealt One Hot Encodingut.

Üks kuum kodeering

Teame, et kategoorilised muutujad sisaldavad pigem sildi väärtusi kui arvväärtusi. Võimalike väärtuste arv on sageli piiratud kindla hulgaga. Kategoorilisi muutujaid nimetatakse sageli nominaalseteks. Paljud masinõppe algoritmid ei saa sildiandmetega otse töötada. Need nõuavad, et kõik sisend- ja väljundmuutujad oleksid numbrilised.

See tähendab, et kategoorilised andmed tuleb teisendada arvkujule. Kui kategooriline muutuja on väljundmuutuja, võite soovida ka mudeli prognoosid uuesti kategooriliseks vormiks teisendada, et neid esitada või mõnes rakenduses kasutada.

näiteks andmed soo kohta on kujul "mees" ja 'naine'.

Kui aga kasutame ühekordset kodeeringut, võib kodeerimine ja mudelil loomuliku kategooriatevahelise järjestuse lubamine põhjustada kehva jõudluse või ootamatuid tulemusi.

Täisarvude esitusviisile saab rakendada ühekordset kodeeringut. See on koht, kus täisarvuga kodeeritud muutuja eemaldatakse ja iga kordumatu täisarvu väärtuse jaoks lisatakse uus binaarne muutuja.

Näiteks kodeerime värvimuutujaid,

Punane värv  Sinine_värv
0 1
1 0
0 1

Nüüd alustame oma teekonda. Esimeses etapis koostame majahinna prognoosimise andmestiku.

Andmebaas

Siin kasutame andmestikku house_price, mida kasutatakse majahinna ennustamiseks vastavalt pindala suurusele.

Kui soovite alla laadida majahinna prognooside andmestiku, klõpsake nuppu siin.

Moodulite importimine

Nüüd peame pythonist importima olulised moodulid, mida kasutatakse ühekuuma kodeeringu jaoks

# pandade importimine pd-vormingus pandade importimine # numpy import numpy np-na # OneHotEncoderi importimine sklearn.preprocessing import OneHotEncoder()

Siin kasutame pandasid, mida kasutatakse andmeanalüüsiks, NumPyused n-mõõtmeliste massiivide jaoks ja sklearnist kasutame kategooriliseks kodeerimiseks ühte olulist klassi One Hot Encoderit.

Nüüd peame neid andmeid Pythoni abil lugema.

Andmestiku lugemine

Üldiselt on andmestik CSV-vormingus ja meie kasutatav andmestik on samuti CSV-vormingus. CSV-faili lugemiseks kasutame funktsiooni pandas read_csv(). vaata allpool:

# andmestiku lugemine df = pd.read_csv('house_price.csv') df.head()

väljund: -

Kuid me peame kasutama ainult ühe kuuma kodeerija jaoks kategoorilisi muutujaid ja lihtsamaks mõistmiseks proovime seletada ainult kategooriliste muutujatega.

Kategooriliste muutujate andmetest jaotamiseks peame kontrollima, kui paljudel funktsioonidel on kategoorilised väärtused.

Kategooriliste väärtuste kontrollimine

Väärtuste kontrollimiseks kasutame funktsiooni pandas select_dtypes, mida kasutatakse muutuja andmetüüpide valimiseks.

# funktsioonide kontrollimine cat = df.select_dtypes(include='O').keys() # kuva muutujad cat

väljund: -

 

Nüüd peame need numbrilised veerud andmestikust välja jätma ja kasutame seda kategoorilist muutujat. Me kasutame andmestikust ainult 3–4 kategoorilist veergu ühe kuumuse kodeeringu rakendamiseks.

Uue andmeraami loomine

Nüüd loome kategooriliste muutujate kasutamiseks uue andmeraami valitud kategooria veergudest.

# uue df-i loomine # seadete veerge kasutame new_df = pd.read_csv('house_price.csv',usecols=['Naabruskond','Exterior1st', 'Exterior2nd']) new_df.head()

väljund: -

Nüüd peame välja selgitama, kui palju unikaalseid kategooriaid on igas kategooria veerus.

Unikaalsete väärtuste leidmine

Unikaalsete väärtuste leidmiseks kasutame funktsiooni pandas unikaalne().

# kordumatud väärtused x igas veerus failis new_df.columns: #prinfting unikaalsed väärtused print(x ,':', len(new_df[x].unique()))

väljund: -

Naabruskond: 25
Välispind 1: 15
Välimine 2.: 16

Nüüd käsitleme oma tehnikat, et rakendada mitme kategooria muutujatele ühekordset kodeeringut.

Mitme kategooria muutujate tehnika

Tehnika seisneb selles, et me piirame ühekuulise kodeerimise muutuja 10 kõige sagedasema sildiga. See tähendab, et teeme ühe binaarmuutuja ainult iga 10 kõige sagedasema sildi jaoks, mis võrdub kõigi teiste siltide grupeerimisega uude kategooriasse, mis sel juhul välja jäetakse. Seega näitavad 10 uut näivat muutujat, kas üks kümnest kõige sagedamini esinevast märgisest on olemas 1 või siis mitte 0 konkreetse vaatluse jaoks.

Kõige sagedasemad muutujad

Siin valime 20 kõige sagedamini esinevat muutujat.

Oletame, et võtame ühe kategoorilise muutuja Naabrus.

# 20 parima kategooria leidmine new_df.Neighborhood.value_counts().sort_values(ascending=False).head(20)

väljund:

Kui näete seda väljundpilti, märkate, et NIMED silt kordub naabruskonna veergudes 225 korda ja me läheme alla, see arv väheneb.

Nii et võtsime 10 parimat tulemust ülaosast ja teisendasime selle 10 parima tulemuse ühekordseks kodeeringuks ja vasakpoolsed sildid muutuvad nulliks.

väljund: -

 

Kõige sagedamini esinevate kategooriliste muutujate loend

# koosta loend 10 populaarseima muutujaga top_10 = [x jaoks x in new_df.Neighborhood.value_counts().sort_values(ascending=False).head(10).index] top_10

väljund: -

["NIMED",
"CollgCr",
'Vanalinn',
"Edwards",
"Somerst",
"Gilbert",
"NridgHt",
"Sawyer",
'NWAmes',
"SawyerW"]

Naabruskonna veerus on 10 parimat kategoorilist silti.

Tee binaarne

Nüüd peame tegema top_10 siltide 10 binaarset muutujat:

# tee siltidest binaarfail

sildi jaoks top_10:

uus_df = np.where(new_df['Neighborhood']==silt,1,0)

new_df[['Neighborhood']+top_10]


väljund: -

NIMED CollgCr Vanalinn Edwards Somerst Gilbert NridgHt Saemees 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 Vanalinn 0 0 1 0 0 0 0 0 0 0
9 BrkSide 0 0 0 0 0 0 0 0 0 0
10 Saemees 0 0 0 0 0 0 0 1 0 0
11 NridgHt 0 0 0 0 0 0 1 0 0 0

Näete, kuidas top_10 sildid nüüd binaarvormingusse teisendatakse.

Võtame näite, vaata tabelist, kus 1 indeks Veenker mis ei kuulunud meie top_10 kategooria sildile, nii et selle tulemuseks on 0 kõik veerud.

Nüüd teeme seda kõigi ülaltoodud kategooria muutujate puhul.

Kõik valitud muutujad rakenduses OneHotEncoding

# valisime kõigi kategooria muutujate jaoks def top_x(df2,muutuja,top_x_sildid): sildi jaoks top_x_labels: df2[muutuja+'_'+silt] = np.where(data[muutuja]==silt,1,0) # loe the data again data = pd.read_csv('D://xdatasets/train.csv',usecols = ['Neighborhood','Exterior1st','Exterior2nd']) #encode Neighborhood 10 sagedasemasse kategooriasse top_x(data, 'Neighborhood',top_10) # kuva andmed data.head()

Väljund:-

Nüüd rakendame siin kõikidele mitme kategooria muutujatele ühekordset kodeeringut.

Nüüd näeme One Hot Encodingi eeliseid ja puudusi mitme muutuja jaoks.

Eelised

  • Lihtne rakendada
  • Ei nõua muutuja uurimiseks palju aega
  • Ei laienda funktsiooniruumi massiliselt.

Puudused

  • Ei lisa teavet, mis võib muuta muutuja ennustavamaks
  • Ärge hoidke ignoreeritud muutujate teavet.

Lõpeta märkused

Kokkuvõte on see, et me õpime, kuidas käsitleda mitme kategooria muutujaid. Kui selle probleemiga kokku puutute, on see väga keeruline ülesanne. Nii et tänan teid selle artikli lugemise eest.

Ühendage minuga Linkedinis: profiil

Lugege minu teisi artikleid: https://www.analyticsvidhya.com/blog/author/mayurbadole2407/

Aitäh 😎

Selles artiklis näidatud meediumid ei kuulu Analytics Vidhyale ja neid kasutatakse autori äranägemisel.

Seda artiklit saate lugeda ka meie mobiilirakenduses Hankige see teenuses Google Play

seotud artiklid

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

Ajatempel:

Veel alates Analüütika Vidhya