Введение:
Кодирование данных — важный этап предварительной обработки в машинном обучении. Это относится к процессу преобразования категориальных или текстовых данных в числовой формат, чтобы их можно было использовать в качестве входных данных для обработки алгоритмов. Причина кодирования в том, что большинство алгоритмов машинного обучения работают с числами, а не с текстом или категориальными переменными.
Основная цель этой тетради — понять
- Что такое категориальные данные и зачем кодировать данные
- Различные методы кодирования данных
- Как реализовать.
Что такое Категориальные данные?
Когда мы собираем данные, мы часто сталкиваемся с различными типами переменных. Одним из таких типов являются категориальные переменные. Категориальные переменные обычно представляются как «строки» или «категории» и имеют конечное число.
Есть два типа категориальных данных -
• Порядковые данные
• Номинальные данные
Вот несколько примеров категориальных переменных:
• Места: Дели, Мумбаи, Ахмадабад, Бангалор и т. д.
• Отделы: финансовый, кадровый, ИТ, производственный.
• Оценки: 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}")
Вывод:
Кодирование данных — важный этап предварительной обработки данных для алгоритмов машинного обучения. Выбор метода кодирования зависит от типа данных и решаемой задачи. Горячее кодирование является наиболее часто используемым методом, но в определенных ситуациях могут использоваться и другие методы, такие как порядковое кодирование, двоичное кодирование и кодирование подсчета.