logo

En het kodning i maskininlärning

De flesta datauppsättningar i verkligheten som vi stöter på under utvecklingen av vårt datavetenskapliga projekt har kolumner med blandad datatyp. Dessa datauppsättningar består av båda kategorisk samt numeriska kolumner. Olika maskininlärningsmodeller fungerar dock inte med kategorisk data och för att passa in denna data i maskininlärningsmodellen måste den omvandlas till numerisk data. Anta till exempel att en datauppsättning har en Kön kolumn med kategoriska element som Manlig och Kvinna . Dessa etiketter har ingen specifik preferensordning och eftersom data är strängetiketter, misstolkade maskininlärningsmodeller att det finns någon sorts hierarki i dem.

Ett sätt att lösa detta problem kan vara etikettkodning där vi tilldelar dessa etiketter ett numeriskt värde till exempel Manlig och Kvinna mappad till 0 och 1 . Men detta kan lägga till partiskhet i vår modell eftersom det kommer att börja ge högre preferens till Kvinna parameter som 1>0 men idealiskt sett är båda etiketterna lika viktiga i datamängden. För att hantera detta problem kommer vi att använda One Hot Encoding-tekniken.

One Hot Encoding

En het kodning är en teknik som vi använder för att representera kategoriska variabler som numeriska värden i en maskininlärningsmodell.



Fördelarna med att använda en varmkodning inkluderar:

  1. Det tillåter användning av kategoriska variabler i modeller som kräver numerisk inmatning.
  2. Det kan förbättra modellens prestanda genom att ge mer information till modellen om den kategoriska variabeln.
  3. Det kan hjälpa till att undvika problemet med ordinalitet, som kan uppstå när en kategorisk variabel har en naturlig ordning (t.ex. liten, medelstor, stor).

Nackdelarna med att använda en varm kodning inkluderar:

  1. Det kan leda till ökad dimensionalitet, eftersom en separat kolumn skapas för varje kategori i variabeln. Detta kan göra modellen mer komplex och långsam att träna.
  2. Det kan leda till sparsam data, eftersom de flesta observationer kommer att ha ett värde på 0 i de flesta av de en-heta kodade kolumnerna.
  3. Det kan leda till överanpassning, särskilt om det finns många kategorier i variabeln och urvalsstorleken är relativt liten.
  4. One-hot-encoding är en kraftfull teknik för att behandla kategoriska data, men det kan leda till ökad dimensionalitet, gleshet och överanpassning. Det är viktigt att använda det försiktigt och överväga andra metoder som ordinär kodning eller binär kodning.

One Hot Encoding Exempel

I One Hot Encoding , kommer de kategoriska parametrarna att förbereda separata kolumner för både manliga och kvinnliga etiketter. Så varhelst det finns en hane kommer värdet att vara 1 i kolumnen Man och 0 i kolumnen hona och vice versa. Låt oss förstå med ett exempel: Tänk på data där frukter, deras motsvarande kategorivärden och priser anges.

FruktKategoriskt värde av fruktPris
äpple15
mango210
äpple1femton
orange3tjugo

Utdata efter applicering av en varm kodning på data ges enligt följande,

äpplemangoorangepris
1005
01010
100femton
001tjugo

One-Hot-kodning med Python

Skapar dataram

Skapa en dataram för att implementera en varmkodning från CSV-fil.

ansluta till en databas java
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())>

Produktion:

De första fem raderna av Dataframe

De första fem raderna av Dataframe

Unika element i kategorisk kolumn

vi kan använda unik() funktion från pandor bibliotek för att få unika element från kolumnen i dataramen.

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

Produktion:

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

Antal element i kolumnen

Vi kan använda värde_antal() funktion från pandor för att få räkningarna för varje element i dataramen.

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

Produktion:

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

Vi har två tillgängliga metoder för att utföra en-hot-kodning på den kategoriska kolumnen.

One-Hot-kodning av kategorisk kolumn med Pandas bibliotek

Vi kan använda pd.get_dummies() funktion från pandor till one-hot koda de kategoriska kolumnerna. Denna funktion

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

Produktion:

One-Hot-kodade kolumner i datamängden

One-Hot-kodade kolumner i datamängden

Det kan vi konstatera att vi har 3 Anmärkningar och 2 Kön kolumner i datan. Du kan dock bara använda n-1 kolumner för att definiera parametrar om den har n unika etiketter. Till exempel, om vi bara behåller Kön kvinna kolumnen och släpp Kön man kolumn, då kan vi också förmedla hela informationen som när etiketten är 1, betyder det kvinna och när etiketten är 0 betyder det man. På så sätt kan vi koda den kategoriska datan och minska antalet parametrar också.

One Hot Encoding med hjälp av Sci-kit Learn Library

Scikit-learn(sklearn) är ett populärt maskininlärningsbibliotek i Python som tillhandahåller många verktyg för dataförbehandling. Det ger en OneHotEncoder funktion som vi använder för att koda kategoriska och numeriska variabler till binära vektorer.

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

Produktion

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>