Більшість реальних наборів даних, з якими ми стикаємося під час розробки наших проектів із науки про дані, мають стовпці змішаного типу даних. Ці набори даних складаються з обох категоричний а також числові стовпці. Однак різні моделі машинного навчання не працюють з категоріальними даними, і щоб вписати ці дані в модель машинного навчання, їх потрібно перетворити на числові дані. Наприклад, припустимо, що набір даних має a Стать колонка з категоріальними елементами, такими як Чоловік і Жінка . Ці мітки не мають певного порядку переваг, а також, оскільки дані є мітками рядків, моделі машинного навчання неправильно витлумачили, що в них існує якась ієрархія.
Одним із підходів до вирішення цієї проблеми може бути кодування міток, де ми, наприклад, призначатимемо числове значення цим міткам Чоловік і Жінка зіставлено з 0 і 1 . Але це може додати упередженості в нашу модель, оскільки вона почне надавати більшу перевагу Жінка параметр як 1>0, але в ідеалі обидві мітки однаково важливі в наборі даних. Щоб вирішити цю проблему, ми скористаємося технікою One Hot Encoding.
Одне гаряче кодування
Одне гаряче кодування — це техніка, яку ми використовуємо для представлення категоріальних змінних як числових значень у моделі машинного навчання.
Переваги використання одного гарячого кодування включають:
- Це дозволяє використовувати категоріальні змінні в моделях, які потребують числового введення.
- Він може покращити продуктивність моделі, надаючи моделі більше інформації про категоріальну змінну.
- Це може допомогти уникнути проблеми ординальності, яка може виникнути, коли категоріальна змінна має природний порядок (наприклад, мала, середня, велика).
До недоліків використання одного гарячого кодування можна віднести:
- Це може призвести до збільшення розмірності, оскільки для кожної категорії у змінній створюється окремий стовпець. Це може зробити модель більш складною та повільною для навчання.
- Це може призвести до розрідженості даних, оскільки більшість спостережень матиме значення 0 у більшості стовпців з одноразовим кодуванням.
- Це може призвести до переобладнання, особливо якщо є багато категорій у змінній і розмір вибірки є відносно малим.
- Одночасне кодування є потужною технікою для обробки категоріальних даних, але воно може призвести до збільшення розмірності, розрідженості та переобладнання. Важливо використовувати його обережно та розглянути інші методи, такі як порядкове кодування або двійкове кодування.
Один гарячий приклад кодування
в Одне гаряче кодування , категориальні параметри підготують окремі стовпці для чоловічих і жіночих міток. Отже, усюди, де є чоловік, значення буде 1 у стовпчику чоловіка та 0 у стовпчику жінки, і навпаки. Давайте розберемося на прикладі: розглянемо дані, де вказані фрукти, їх відповідні категоричні цінності та ціни.
| фрукти | Категоріальне значення плодів | Ціна |
|---|---|---|
| яблуко | 1 | 5 |
| манго | 2 | 10 |
| яблуко | 1 | п'ятнадцять |
| помаранчевий | 3 | двадцять |
Вихідні дані після застосування одноразового кодування до даних надаються таким чином:
| яблуко | манго | помаранчевий | ціна |
|---|---|---|---|
| 1 | 0 | 0 | 5 |
| 0 | 1 | 0 | 10 |
| 1 | 0 | 0 | п'ятнадцять |
| 0 | 0 | 1 | двадцять |
One-Hot кодування за допомогою Python
Створення Dataframe
Створення фрейму даних для реалізації одного гарячого кодування з файлу CSV.
тип змінних javaPython3
# 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())> Вихід:

Перші п'ять рядків Dataframe
Унікальні елементи в категорійному стовпці
ми можемо використовувати унікальний() функція від панди бібліотека для отримання унікальних елементів зі стовпця фрейму даних.
Python3 print(data['Gender'].unique()) print(data['Remarks'].unique())>
Вихід:
array(['Male', 'Female'], dtype=object) array(['Nice', 'Good', 'Great'], dtype=object)>
Кількість елементів у стовпці
Ми можемо використовувати value_counts() функція з pandas, щоб отримати кількість кожного елемента у кадрі даних.
Python3 data['Gender'].value_counts() data['Remarks'].value_counts()>
Вихід:
Female 7 Male 5 Name: Gender, dtype: int64 Nice 5 Great 4 Good 3 Name: Remarks, dtype: int64>
У нас є два методи, доступні для виконання одноразового кодування категорійного стовпця.
Одночасне кодування категорійного стовпця з використанням бібліотеки Pandas
Ми можемо використовувати pd.get_dummies() функція від pandas до one-hot кодування категорійних стовпців. Ця функція
Python3 one_hot_encoded_data = pd.get_dummies(data, columns = ['Remarks', 'Gender']) print(one_hot_encoded_data)>
Вихід:

One-Hot закодовані стовпці набору даних
Ми можемо спостерігати, що маємо 3 Зауваження і 2 Стать стовпці в даних. Однак можна просто використовувати n-1 стовпці для визначення параметрів, якщо вони є п унікальні етикетки. Наприклад, якщо ми лише збережемо Стать Жіноча і опустіть Стать Чоловіча тоді ми також можемо передати всю інформацію, коли мітка 1 означає жіночу, а коли мітка 0 означає чоловічу. Таким чином ми можемо закодувати категоричні дані та зменшити кількість параметрів.
One Hot Encoding з використанням Sci-kit Learn Library
Scikit-learn(sklearn) — популярна бібліотека машинного навчання на Python, яка надає численні інструменти для попередньої обробки даних. Він забезпечує a OneHotEncoder яку ми використовуємо для кодування категоріальних і числових змінних у двійкові вектори.
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}')> Вихід
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>