Введение:

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

Основная цель этой тетради — понять

  • Что такое категориальные данные и зачем кодировать данные
  • Различные методы кодирования данных
  • Как реализовать.

Что такое Категориальные данные?

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

Есть два типа категориальных данных -

Порядковые данные

Номинальные данные

Вот несколько примеров категориальных переменных:

Места: Дели, Мумбаи, Ахмадабад, Бангалор и т. д.

Отделы: финансовый, кадровый, ИТ, производственный.

Оценки: A, A-, B+, B, B- и т. д.

Порядковые данные:

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

Например, переменная «высшая степень человека» является порядковой переменной. Категории (средняя школа, диплом, бакалавр, магистр, доктор философии) могут быть ранжированы в порядке достигнутого уровня образования.

Номинальные данные:

Категории номинальных данных не имеют внутреннего порядка. Это означает, что категории нельзя ранжировать или упорядочивать.

Например, переменная «город, в котором живет человек» является номинальной переменной. Категории (Дели, Мумбаи, Ахмедабад, Бангалор и т. д.) не могут быть ранжированы или упорядочены.

Что такое кодирование данных?

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

Почему это важно?

• Большинство алгоритмов машинного обучения работают только с числовыми данными, поэтому категориальные переменные (например, текстовые метки) должны быть преобразованы в числовые значения.

• Это позволяет модели идентифицировать закономерности в данных и делать прогнозы на основе этих закономерностей.

• Кодирование также помогает предотвратить систематическую ошибку в модели, гарантируя, что все функции имеют одинаковый вес.

• Выбор метода кодирования может существенно повлиять на производительность модели, поэтому важно выбрать подходящий метод кодирования, исходя из характера данных и конкретных требований модели.

Существует несколько методов кодирования категориальных переменных, в том числе

1. Горячее кодирование

2. Фиктивное кодирование

3.Порядковое кодирование

4. Двоичное кодирование

5. Кодировка счетчика

6. Целевое кодирование

Рассмотрим подробнее каждый из этих методов.

Горячее кодирование:

• Горячее кодирование — это наиболее распространенный метод кодирования категориальных переменных.

Двоичный столбец создается для каждой уникальной категории в переменной.

• Если в образце присутствует категория, в соответствующем столбце устанавливается значение 1, а во всех остальных столбцах устанавливается значение 0.

• Например, если переменная имеет три категории «A», «B» и «C», будут созданы три столбца, а выборка с категорией «B» будет иметь значение [0,1,0].

# One-Hot Encoding: 
# create a sample dataframe with a categorical variable
df = pd.DataFrame({'color': ['red', 'green', 'blue', 'red']})

# perform one-hot encoding on the 'color' column
one_hot = pd.get_dummies(df['color'])

# concatenate the one-hot encoding with the original dataframe
df1 = pd.concat([df, one_hot], axis=1)

# drop the original 'color' column
df1 = df1.drop('color', axis=1)

Фиктивное кодирование

• Схема фиктивного кодирования аналогична горячему кодированию.

• Этот метод кодирования категориальных данных преобразует категориальную переменную в набор двоичных переменных [0/1].

• В случае горячего кодирования для N категорий в переменной используются N двоичных переменных.

• Фиктивное кодирование представляет собой небольшое улучшение по сравнению с горячим кодированием. Фиктивная кодировка использует функции N-1 для представления N меток/категорий.

Горячее кодирование против фиктивного кодирования:

Горячее кодирование — N категорий в переменной, N бинарных переменных.

Фиктивное кодирование — N категорий в переменной, N-1 бинарных переменных.

# Create a sample dataframe with categorical variable
data = {'Color': ['Red', 'Green', 'Blue', 'Red', 'Blue']}
df = pd.DataFrame(data)

# Use get_dummies() function for dummy encoding
dummy_df = pd.get_dummies(df['Color'], drop_first=True, prefix='Color')

# Concatenate the dummy dataframe with the original dataframe
df = pd.concat([df, dummy_df], axis=1)

Кодировка ярлыка:

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

from sklearn.preprocessing import LabelEncoder

# Create a sample dataframe with categorical data
df = pd.DataFrame({'color': ['red', 'green', 'blue', 'red', 'green']})

print(f"Before Encoding the Data:\n\n{df}\n")

# Create a LabelEncoder object
le = LabelEncoder()

# Fit and transform the categorical data
df['color_label'] = le.fit_transform(df['color'])

Порядковое кодирование:

• Порядковое кодирование используется, когда категории в переменной имеют естественный порядок.

• В этом методе категориям присваивается числовое значение в зависимости от их порядка, например 1, 2, 3 и т. д.

Например, если у переменной есть категории "Низкий", "Средний" и "Высокий", им могут быть присвоены значения 1, 2 и 3 соответственно.

# Ordinal Encoding:
# create a sample dataframe with a categorical variable
df = pd.DataFrame({'quality': ['low', 'medium', 'high', 'medium']})
print(f"Before Encoding the Data:\n\n{df}\n")

# specify the order of the categories
quality_map = {'low': 0, 'medium': 1, 'high': 2}

# perform ordinal encoding on the 'quality' column
df['quality_map'] = df['quality'].map(quality_map)

Двоичное кодирование:

• Двоичное кодирование похоже на горячее кодирование, но вместо создания отдельного столбца для каждой категории категории представлены как >двоичные цифры.

  • Например, если переменная имеет четыре категории «A», «B», «C» и «D», они могут быть представлены как 0001, 0010, 0100 и 1000 соответственно.

# Binary Encoding:

import pandas as pd

# create a sample dataframe with a categorical variable
df = pd.DataFrame({'animal': ['cat', 'dog', 'bird', 'cat']})
print(f"Before Encoding the Data:\n\n{df}\n")

# perform binary encoding on the 'animal' column
animal_map = {'cat': 0, 'dog': 1, 'bird': 2}
df['animal'] = df['animal'].map(animal_map)
df['animal'] = df['animal'].apply(lambda x: format(x, 'b'))

# print the resulting dataframe
print(f"After Encoding the Data:\n\n{df}\n")

Кодировка счета:

• Кодирование подсчета — это метод кодирования категориальных переменных путем подсчета количества раз, когда категория появляется в наборе данных.

  • Например, если переменная имеет категории «A», «B» и «C», а категория «A» встречается в наборе данных 10 раз, ей будет присвоено значение 10.

# Count Encoding:
# create a sample dataframe with a categorical variable
df = pd.DataFrame({'fruit': ['apple', 'banana', 'apple', 'banana']})
print(f"Before Encoding the Data:\n\n{df}\n")

# perform count encoding on the 'fruit' column
counts = df['fruit'].value_counts()
df['fruit'] = df['fruit'].map(counts)

# print the resulting dataframe
print(f"After Encoding the Data:\n\n{df}\n")

Целевая кодировка:

• Это более продвинутый метод кодирования, используемый для работы с категориальными объектами с высокой кардинальностью, т. е. объектами со многими уникальными категориями.

• Рассчитывается среднее целевое значение для каждой категории, и это среднее значение используется для замены категориального признака.

  • Это имеет преимущество, заключающееся в учете взаимосвязи между целью и категориальным признаком, но также может привести к переоснащению, если не использовать его с осторожностью.

# Create a sample dataframe with categorical data and target
df = pd.DataFrame({'color': ['red', 'green', 'blue', 'red', 'green'],
                   'target': [0, 1, 0, 1, 0]})
print(f"Before Encoding the Data:\n\n{df}\n")

# Calculate the mean target value for each category
target_mean = df.groupby('color')['target'].mean()

# Replace the categorical data with the mean target value
df['color_label'] = df['color'].map(target_mean)


print(f"After Encoding the Data:\n\n{df}")

Вывод:

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