One Hot Encoding: метод обработки категориальных данных в машинном обучении

Категориальные данные — это тип данных, состоящий из категорий, а не чисел. Это распространено во многих реальных наборах данных, таких как названия городов, типы продуктов питания и даже категории продуктов. Однако традиционные алгоритмы машинного обучения предназначены для работы с числовыми данными и поэтому не могут напрямую обрабатывать категориальные данные.

Одно горячее кодирование — это метод, используемый для преобразования категориальных данных в числовые данные, которые могут использоваться алгоритмами машинного обучения. Этот процесс включает создание нового двоичного столбца для каждой категории в исходных данных и кодирование каждой категории как 1 или 0 в соответствующем столбце.

Рассмотрим следующий набор данных о типах фруктов:

Мы можем преобразовать эти категориальные данные в числовые данные, используя одно горячее кодирование. Результирующий набор данных будет выглядеть следующим образом:

Каждый тип фруктов имеет свой собственный столбец, где 1 указывает, что тип фруктов присутствует, а 0 указывает, что его нет.

Одно горячее кодирование часто используется в сочетании с другими методами, такими как нормализация и масштабирование, для подготовки данных к использованию в алгоритмах машинного обучения.

Реализация One Hot Encoding в Python

В Python есть несколько библиотек, которые можно использовать для реализации одного горячего кодирования, включая Pandas и Scikit-learn.

Вот пример одного горячего кодирования с использованием библиотеки Pandas:

import pandas as pd

# Create a sample data set
data = {'Fruit Type': ['Apple', 'Banana', 'Apple', 'Kiwi', 'Banana']}
df = pd.DataFrame(data)

# Perform one hot encoding using Pandas get_dummies function
df_encoded = pd.get_dummies(df['Fruit Type'])

# Concatenate the encoded data with the original data
df = pd.concat([df, df_encoded], axis=1)

# Display the resulting data set
print(df)

Вывод приведенного выше кода будет таким:

Вот пример одного горячего кодирования с использованием библиотеки Scikit-learn:

from sklearn.preprocessing import OneHotEncoder

# Create a sample data set
data = [['Apple'], ['Banana'], ['Apple'], ['Kiwi'], ['Banana']]

# Perform one hot encoding using Scikit-learn OneHotEncoder
encoder = OneHotEncoder()
encoded_data = encoder.fit_transform(data)

# Display the resulting data set
print(encoded_data.toarray())

Вывод приведенного выше кода будет таким:

Как видите, библиотеки Pandas и Scikit-learn предоставляют простой способ выполнить одно горячее кодирование. В этом примере результирующий набор данных представляет собой разреженную матрицу, которая является эффективным способом хранения данных, когда большинство значений равны нулю.

Одно горячее кодирование также может выполняться для нескольких столбцов набора данных. В этом случае процесс повторяется для каждого столбца, а полученные наборы данных объединяются в один набор данных. Например, рассмотрим следующий набор данных, который включает в себя как тип, так и цвет фруктов:

Используя одно горячее кодирование, этот набор данных можно преобразовать в следующий:

Важно отметить, что одно горячее кодирование может привести к значительному увеличению количества признаков в наборе данных, что может замедлить время обучения алгоритмов машинного обучения. Чтобы смягчить эту проблему, можно использовать такие методы, как уменьшение размерности, чтобы уменьшить количество функций в наборе данных при сохранении соответствующей информации.

В заключение, одно горячее кодирование — это метод, используемый для обработки категориальных данных в машинном обучении. Он включает преобразование категорийных данных в числовые данные путем создания нового двоичного столбца для каждой категории в исходных данных и кодирования каждой категории как 1 или 0 в соответствующем столбце. Горячее кодирование — это мощный инструмент для подготовки данных для использования в алгоритмах машинного обучения, который поддерживается популярными библиотеками, такими как Pandas и Scikit-learn. Удачного кодирования!