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

Исходный узел: 841101

В этой статье мы узнаем о том, как мы можем обрабатывать переменные с несколькими категориями, используя технику Feature Engineering One Hot Encoding.

Но прежде чем двигаться дальше, давайте кратко обсудим разработку функций и One Hot Encoding.

Техническая инженерия

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

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

  • Непрерывные данные
  • Категориальные особенности
  • Недостающие значения
  • Нормализация
  • Даты и время

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

Существует множество методов обработки категориальных переменных, некоторые из них:

  • Кодирование меток или порядковое кодирование
  • Одно горячее кодирование
  • Фиктивное кодирование
  • Кодирование эффекта
  • Двоичное кодирование
  • Базельское кодирование
  • Хэш-кодирование
  • Целевое кодирование

Итак, здесь мы обрабатываем категориальные функции с помощью One Hot Encoding, поэтому в первую очередь мы обсудим One Hot Encoding.

Одна горячая кодировка

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

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

например данные о поле представлены в виде 'мужчина' и 'женский'.

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

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

Например, мы кодируем переменную цвета,

Красный цвет  Синий цвет
0 1
1 0
0 1

Теперь мы начнем наше путешествие. На первом этапе мы берем набор данных для прогнозирования цен на жилье.

Dataset

Здесь мы будем использовать набор данных house_price, который используется для прогнозирования цены дома в зависимости от размера района.

Если вы хотите загрузить набор данных для прогнозирования цен на жилье, нажмите здесь.

Импорт модулей

Теперь нам нужно импортировать важные модули из python, которые будут использоваться для одноразового кодирования.

# импортируем pandas import pandas as pd # импортируем numpy import numpy as np # импортируем OneHotEncoder из sklearn.preprocessing import OneHotEncoder()

Здесь мы используем pandas, которые используются для анализа данных, NumPyused для n-мерных массивов, а из sklearn мы будем использовать один важный класс One Hot Encoder для категориального кодирования.

Теперь нам нужно прочитать эти данные с помощью Python.

Чтение набора данных

Как правило, набор данных имеет форму CSV, и набор данных, который мы используем, также имеет форму CSV. Для чтения файла CSV мы будем использовать функцию pandas read_csv(). увидеть ниже:

# чтение набора данных df = pd.read_csv('house_price.csv') df.head()

выход:-

Но мы должны использовать категориальные переменные только для одного горячего кодировщика, и мы попытаемся объяснить только категориальные переменные для простоты понимания.

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

Проверка категориальных значений

Для проверки значений мы используем функцию pandas select_dtypes, которая используется для выбора типов данных переменной.

# проверка функций cat = df.select_dtypes(include='O').keys() # отображение переменных cat

выход:-

 

Теперь нам нужно удалить эти числовые столбцы из набора данных, и мы будем использовать эту категориальную переменную для нашего использования. Мы используем только 3-4 категориальных столбца из набора данных для применения одноразового кодирования.

Создание нового фрейма данных

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

# создание новых df # установка столбцов, которые мы используем new_df = pd.read_csv('house_price.csv',usecols=['Район','Экстерьер 1-й», «Экстерьер 2-й']) new_df.head()

выход:-

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

Поиск уникальных значений

Для поиска уникальных значений мы будем использовать функцию pandas unique().

# уникальные значения в каждом столбце для x в new_df.columns: # печать уникальных значений print(x ,':', len(new_df[x].unique()))

выход:-

Район : 25
Внешний1-й : 15
Внешний2-й : 16

Теперь мы перейдем к нашей технике, чтобы применить однократное кодирование к многокатегориальным переменным.

Техника для многокатегориальных переменных

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

Наиболее частые переменные

Здесь мы выберем 20 наиболее часто встречающихся переменных.

Предположим, мы берем одну категориальную переменную Микрорайон.

# поиск 20 лучших категорий new_df.Neighborhood.value_counts().sort_values(ascending=False).head(20)

вывод:

Когда вы увидите это выходное изображение, вы заметите, что ИМЕНА метка повторяется 225 раз в столбцах Neighborhood, и мы спускаемся вниз, это число уменьшается.

Таким образом, мы взяли 10 лучших результатов сверху и преобразовали эти 10 лучших результатов в однократное кодирование, а левые метки превратились в ноль.

выход:-

 

Список наиболее частых категориальных переменных

# составить список из 10 лучших переменных top_10 = [x вместо x в new_df.Neighborhood.value_counts().sort_values(ascending=False).head(10).index] top_10

выход:-

['Имена',
'КоллгКр',
'Старый город',
'Эдвардс',
'Сомерст',
'Гилберт',
'НридгХт',
'Сойер',
'NWAmes',
'СойерW']

В столбце «Окрестности» есть 10 лучших категориальных меток.

Сделать двоичный

Теперь нам нужно создать 10 бинарных переменных меток top_10:

# делаем бинарники меток

для ярлыка в top_10:

новый_df = np.where(new_df['Окрестность']==метка,1,0)

new_df[['Окрестности']+top_10]


выход:-

ИМЕНА КоллгКр Старый город Эдвардс Сомерст Гилберт НридгХт пильщик NWAmes Сойер В.
0 КоллгКр 0 1 0 0 0 0 0 0 0 0
1 Винкер 0 0 0 0 0 0 0 0 0 0
2 КоллгКр 0 1 0 0 0 0 0 0 0 0
3 Кроуфор 0 0 0 0 0 0 0 0 0 0
4 НоРидж 0 0 0 0 0 0 0 0 0 0
5 Mitchel 0 0 0 0 0 0 0 0 0 0
6 Сомерст 0 0 0 0 1 0 0 0 0 0
7 NWAmes 0 0 0 0 0 0 0 0 1 0
8 Старый город 0 0 1 0 0 0 0 0 0 0
9 БркСайд 0 0 0 0 0 0 0 0 0 0
10 пильщик 0 0 0 0 0 0 0 1 0 0
11 НридгХт 0 0 0 0 0 0 1 0 0 0

Вы можете видеть, как метки top_10 теперь преобразуются в двоичный формат.

Возьмем пример, см. в таблице, где 1 индекс Винкер который не принадлежал к нашей метке категорий top_10, поэтому это приведет к 0 все колонки.

Теперь мы сделаем это для всех категориальных переменных, которые мы выбрали выше.

Все выбранные переменные в OneHotEncoding

# для всех категориальных переменных мы выбрали def top_x(df2,variable,top_x_labels): для метки в top_x_labels: df2[variable+'_'+label] = np.where(data[variable]==label,1,0) # читать снова данные data = pd.read_csv('D://xdatasets/train.csv',usecols = ['Neighborhood','Exterior1st','Exterior2nd']) #закодировать Nighborhood в 10 наиболее часто встречающихся категорий top_x(data, 'Окрестности',top_10) # отображаем данные data.head()

Выход:-

Теперь здесь мы применяем однократное кодирование ко всем мультикатегориальным переменным.

Теперь мы увидим преимущества и недостатки One Hot Encoding для нескольких переменных.

Преимущества

  • Простота реализации
  • Не требует много времени для исследования переменных
  • Не расширяет массово пространство функций.

Недостатки бонуса без депозита

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

Конец Примечания

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

Свяжитесь со мной в Linkedin: Профиль

Читайте другие мои статьи: https://www.analyticsvidhya.com/blog/author/mayurbadole2407/

Спасибо😎

Медиа, показанные в этой статье, не принадлежат Analytics Vidhya и используются по усмотрению автора.

Вы также можете прочитать эту статью на нашем мобильном приложении Получить его на Google Play

Статьи по теме

Источник: https://www.analyticsvidhya.com/blog/2021/05/how-to-perform-one-hot-encoding-for-multi-categorical-variables/

Отметка времени:

Больше от Аналитика Видхья