"Машинное обучение"
Различные подходы к работе с категориальными ценностями
Функциональная инженерия, часть II
Машинное обучение - это искусство заставить компьютер учиться самостоятельно. В ML мы изучаем различные типы алгоритмов, которые автоматически улучшаются по мере накопления опыта. В каждой задаче машинного обучения у нас есть некоторые данные, затем мы применяем алгоритм машинного обучения и создаем модель, которая может предсказывать новые предстоящие данные. Во всем этом процессе данные являются одной из наиболее важных частей жизненного цикла модели машинного обучения. Данные могут быть любого количества форм, и есть более высокая вероятность, что наши данные также не подготовлены для подачи в алгоритмы машинного обучения, для этого нам нужно выполнить некоторую разработку функций и исследование данных. В моем предыдущем блоге я объяснил различные подходы к обработке отсутствующих значений в данных.
В этом блоге мы увидим различные подходы к обработке категориальных данных в машинном обучении.
Что такое категориальные данные?
Категориальные данные - это своего рода переменные, которые содержат значения меток, а не числовые значения. Их часто называют номинальными. Некоторые примеры
- первый, второй, третий
- мужской, женский
Зачем обращаться?
Это один из самых распространенных вопросов, который приходит нам в голову: почему нам нужно обрабатывать категориальные значения, если машинное обучение настолько мощно, то почему мы должны тратить много времени на разработку функций. Ответ прост: каждая модель машинного обучения основана на какой-то математической модели, которой требуются числовые данные для выполнения любых вычислений.
Мы собираемся использовать титанический набор данных, доступный на Kaggle. Мы уже предварительно обработали данные и обрабатываем все нулевые значения в предыдущем блоге, поэтому используемые нами данные не содержат нулевых значений.
Код: Github
Типы кодирования
- Номинальное кодирование: когда данные не имеют внутреннего порядка
1.1 Одно горячее кодирование
1.2 Одно горячее кодирование с множеством функций
1.3 Среднее кодирование - Порядковое кодирование: когда данные имеют внутренний порядок
2.1 Кодирование метки
2.2 Целевое управляемое кодирование - Кодировка счетчика
1.1- Одно горячее кодирование
В одном горячем кодировании мы конвертируем все точки данных в 0 и 1 в соответствии с их категориями. Он используется в таких столбцах, как пол, пол, состояние и т. Д. В python мы используем pandas.get_dummies()
для преобразования в горячую кодировку
Пример:
SEX One Hot Representation Male 1 1 Female 0 0 Female 0 1 Male 1 0 COUNTRY One Hot Representation India 1 0 0 0 USA 0 1 0 0 UK 0 0 1 0 China 0 0 0 1 USA 0 1 0 0
Преимущества
1) Быстрее, чем другие методы кодирования.
2) Очень быстрая обработка данных.
Недостатки
1) Увеличивает размерность для большего количества категорий, что вызывает проблему "Проклятие размерности".
КОД
pd.get_dummies(df['Sex']).head() ## It will return two columns(female,male) pd.get_dummies(df['Sex'],drop_first=True).head() ##It will only return on column(male, which saves us from linear dependency
1.2- Одно горячее кодирование со многими категориальными функциями
По мере увеличения количества функций количество столбцов также увеличивается, что приводит нас к проблеме размерности. Чтобы избежать этого, мы используем только 10 или 20 лучших функций и применяем к ним быстрое кодирование. Этот метод используется в пин-кодах, номерах комнат, номерах кают и т. Д.
### STEP:1- Find the top 20 most frequent features top20=[x for x in df['Cabin'].value_counts().sort_values(ascending=False).head(20).index] print(top20) ### STEP:2- Use Top 20 and apply on the data import numpy as np for label in top20: df[label]=np.where(df['Cabin']==label,1,0) df = df.drop("Cabin",axis=1)
1.3- Среднее кодирование
В этом типе кодирования мы заменяем все категориальные значения на среднее их количество. Среднее кодирование представляет собой вероятность целевой переменной, обусловленную каждым значением признака.
### STEP:1- Counting Each Feature value respect to length of column temp=df['Cabin'].value_counts()/len(df['Cabin']) ### STEP:2- Converting all the data into a dict mean_encoding=temp.to_dict() ### STEP:3- Finding the most common 5 or 10 mean values from collections import Counter Counter(mean_encoding).most_common(5) ### STEP:4- Mapping the most common values with the dataframe df['mean_encoding']=df['Cabin'].map(mean_encoding) df[['Cabin','mean_encoding']].head()
2.1- Кодирование меток
В этом типе кодирования мы даем разные - разные ярлыки для каждого типа категории в зависимости от их важности и веса.
Weekday Encoding 0 Sunday 7 1 Saturday 6 2 Friday 5 3 Thursday 4 4 Wednesday 3 5 Tuesday 2 6 Monday 1 7 Sunday 7 8 Saturday 6
Для этого мы сначала создаем словарь кодирования, а затем с помощью map () сопоставляем словарь с набором данных.
### STEP:1- Creating a dictionary of encoding dict_map = {'male':1,"female":0} ### STEP:2- Mapping dictionary with the columns df["Sex_num"] = df['Sex'].map(dict_map) df.head()
2.2 Целевое ориентированное порядковое кодирование
Это почти то же самое, что и среднее кодирование, главное отличие в том, что в нем мы вычисляем счетчик по целевому столбцу.
### STEP:1- Counting Each Feature value respect to the target column temp=df.groupby(['Cabin'])['Survived'].mean() ### STEP:2- Converting all the data into a dict encoding=temp.to_dict() ### STEP:3- Finding the most common 5 or 10 mean values from collections import Counter Counter(encoding).most_common(10) ### STEP:4- Mapping the most common values with the dataframe df['encoded_cabin']=df['Cabin'].map(encoding) df[['Cabin','encoded_cabin']].head()
3) Кодировка подсчета
При этом мы заменяем категориальные значения их количеством. Основное преимущество этого заключается в том, что он не создает никаких дополнительных функций, и один главный недостаток в том, что он обеспечивает одинаковый вес при одинаковых частотах.
#### STEP:1- Find the count of features count = df["Cabin"].value_counts().to_dict() #### STEP:2- Replace Featues with the count df["cabin_count"]=df["Cabin"].map(count) df.head()
об авторе
Я Абхай Парашар, студент-информатик, интересующийся наукой о данных и искусственным интеллектом. Я пишу статьи, связанные с наукой о данных, машинным обучением и искусственным интеллектом. Если хотите, можете связаться со мной в Linkedin.
Ссылки
[1] https://www.youtube.com/user/krishnaik06