logo

Viens karsts kodējums mašīnmācībā

Lielākajai daļai reālās dzīves datu kopu, ar kurām sastopamies mūsu datu zinātnes projektu izstrādes laikā, ir jaukta tipa datu kolonnas. Šīs datu kopas sastāv no abiem kategorisks kā arī skaitliskās kolonnas. Tomēr dažādi mašīnmācīšanās modeļi nedarbojas ar kategoriskiem datiem, un, lai šos datus iekļautu mašīnmācīšanās modelī, tie ir jāpārvērš skaitliskos datos. Piemēram, pieņemsim, ka datu kopā ir a Dzimums kolonna ar kategoriskiem elementiem, piemēram Vīrietis un Sieviete . Šīm etiķetēm nav noteiktas prioritāšu secības, un arī tā kā dati ir virkņu etiķetes, mašīnmācīšanās modeļi nepareizi interpretēja, ka tajos ir sava veida hierarhija.

Viena pieeja šīs problēmas risināšanai var būt etiķešu kodēšana, kur mēs piešķirsim šīm etiķetēm, piemēram, skaitlisku vērtību Vīrietis un Sieviete kartēts uz 0 un 1 . Bet tas var palielināt mūsu modeļa neobjektivitāti, jo tas sāks dot lielāku priekšroku Sieviete parametru kā 1>0, bet ideālā gadījumā abas etiķetes datu kopā ir vienlīdz svarīgas. Lai risinātu šo problēmu, mēs izmantosim One Hot Encoding tehniku.

Viens karsts kodējums

Viens karstais kodējums ir paņēmiens, ko mēs izmantojam, lai attēlotu kategoriskos mainīgos kā skaitliskas vērtības mašīnmācīšanās modelī.



Viena karstā kodējuma izmantošanas priekšrocības ietver:

  1. Tas ļauj izmantot kategoriskos mainīgos modeļos, kuriem nepieciešama skaitliska ievade.
  2. Tas var uzlabot modeļa veiktspēju, sniedzot modelim vairāk informācijas par kategorisko mainīgo.
  3. Tas var palīdzēt izvairīties no ordinalitātes problēmas, kas var rasties, ja kategoriskajam mainīgajam ir dabiska secība (piemēram, mazs, vidējs, liels).

Viena karstā kodējuma izmantošanas trūkumi ietver:

  1. Tas var palielināt izmēru, jo katrai mainīgā kategorijai tiek izveidota atsevišķa kolonna. Tas var padarīt modeli sarežģītāku un lēnāku apmācību.
  2. Tas var novest pie retiem datiem, jo ​​vairumam novērojumu vērtība būs 0 lielākajā daļā vienkāršā kodēto kolonnu.
  3. Tas var izraisīt pārmērību, it īpaši, ja mainīgajā ir daudz kategoriju un izlases lielums ir salīdzinoši mazs.
  4. Vienreizēja kodēšana ir jaudīgs paņēmiens kategorisku datu apstrādei, taču tas var izraisīt lielāku izmēru, retumu un pārmērīgu pielāgošanu. Ir svarīgi to lietot piesardzīgi un apsvērt citas metodes, piemēram, kārtas kodēšanu vai bināro kodējumu.

Viens karsts kodēšanas piemēri

In Viens karsts kodējums , kategoriskie parametri sagatavos atsevišķas kolonnas gan vīriešu, gan sieviešu etiķetēm. Tātad, visur, kur ir vīrietis, vērtība būs 1 kolonnā Vīrietis un 0 kolonnā Sieviete un otrādi. Sapratīsim ar piemēru: Apsveriet datus, kur norādīti augļi, to atbilstošās kategoriskās vērtības un cenas.

AugļiAugļu kategoriskā vērtībaCena
ābolu15
mango210
ābolu1piecpadsmit
apelsīns3divdesmit

Izvade pēc vienreizēja kodējuma piemērošanas datiem tiek sniegta šādi:

ābolumangoapelsīnscena
1005
01010
100piecpadsmit
001divdesmit

Viena karsta kodēšana, izmantojot Python

Datu rāmja izveide

Datu rāmja izveide, lai ieviestu vienu karsto kodējumu no CSV faila.

Linux resursdators
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())>

Izvade:

Pirmās piecas Dataframe rindas

Pirmās piecas Dataframe rindas

Unikālie elementi kategoriskā kolonnā

mēs varam izmantot unikāls () funkcija no pandas bibliotēku, lai iegūtu unikālus elementus no datu rāmja kolonnas.

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

Izvade:

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

Elementu skaits kolonnā

Varam izmantot value_counts() funkcija no pandas, lai iegūtu katra elementa skaitu datu kadrā.

Python3
data['Gender'].value_counts() data['Remarks'].value_counts()>

Izvade:

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

Mums ir pieejamas divas metodes, lai veiktu vienreizēju kodējumu kategoriskajā kolonnā.

Kategoriskās kolonnas vienkāršā kodēšana, izmantojot Pandas bibliotēku

Varam izmantot pd.get_dummies() funkcija no pandas uz one-hot kodēt kategoriskas kolonnas. Šī funkcija

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

Izvade:

One-Hot kodētas datu kopas kolonnas

One-Hot kodētas datu kopas kolonnas

Mēs varam novērot, ka mums ir 3 Piezīmes un 2 Dzimums kolonnas datos. Tomēr jūs varat vienkārši izmantot n-1 kolonnas, lai definētu parametrus, ja tādi ir n unikālas etiķetes. Piemēram, ja mēs paturam tikai Dzimums Sieviete kolonnu un nometiet Dzimums Vīrietis kolonnā, tad arī mēs varam nodot visu informāciju, piemēram, ja etiķete ir 1, tas nozīmē sievieti un, ja etiķete ir 0, tas nozīmē vīrieti. Tādā veidā mēs varam iekodēt kategoriskos datus un samazināt arī parametru skaitu.

Viens karsts kodējums, izmantojot Sci-kit Learn Library

Scikit-learn(sklearn) ir populāra Python mašīnmācības bibliotēka, kas nodrošina daudzus rīkus datu pirmapstrādei. Tas nodrošina a OneHotEncoder funkcija, ko izmantojam, lai kodētu kategoriskos un skaitliskos mainīgos bināros vektoros.

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}')>

Izvade

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>