Рубрики
Без рубрики

Наука данных за 5 минут: что такое горячая кодировка?

Если вы находитесь в области науки о данных, вы, вероятно, слышали термин «одно горячее кодирование». Даже S … Помечено наукой о данных, машинном обучении, пандах, питоном.

Если вы находитесь в области науки о данных, вы, вероятно, слышали термин «одно горячее кодирование». Даже документация Sklearn говорит вам «кодировать категориальные целочисленные функции, используя схему с одной горячими». Но что такое горячая кодировка и почему мы его используем?

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

В этом руководстве мы познакомим вас с одной горячей кодировкой и покажем вам, когда использовать его в ваших моделях ML. Мы предоставим несколько реальных примеров с Sklearn и Pandas.

Этот учебник с первого взгляда:

  • Что такое горячая кодировка?
  • Как преобразовать категориальные данные в числовые данные
  • Одна горячая кодировка с пандами
  • Одна горячая кодировка с Sklearn
  • Следующие шаги для вашего обучения

Что такое горячая кодировка?

Категориальные данные относятся к переменным, которые состоят из Значения метки Например, переменная «цвета» может иметь значения «красный», «синий и” зеленый “. Подумайте о ценностях, таких как разные категории Это иногда имеет естественный заказ для них.

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

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

Взгляните на этот график, чтобы лучше понять:

Давайте применим это к примеру. Скажем, у нас есть значения красный и синий Анкет При одном, мы бы назначали красный с числовым значением 0 и синим цветом с числовым значением 1.

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

Как только мы назначаем числовые значения, мы создаем Бинарный вектор Это представляет наши численные значения. В этом случае наш вектор будет иметь 2 в качестве своей длины, так как у нас есть 2 значения. Таким образом, красный Значение может быть представлено с помощью двоичного вектора [1,0] и синий Значение будет представлено как [0,1] Анкет

Зачем использовать одну горячую кодировку?

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

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

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

Как преобразовать категориальные данные в числовые данные

Вручную преобразование наших данных в числовые значения включает в себя Два основных шага :

  • Целочисленное кодирование
  • Одна горячая кодировка

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

При работе с категориальными переменными, которые не иметь порядка или отношений Нам нужно сделать еще один шаг вперед. Шаг второй включает в себя применение однопользового кодирования к целым числам, которые мы только что назначили. Для этого мы удаляем целочисленную кодируемую переменную и Добавьте двоичную переменную Для каждой уникальной переменной.

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

red,    yellow,  blue
1,      0,      0
0,      1,      0
0,      0,      1

Примечание: Во многих других областях двоичные переменные называются фиктивные переменные Анкет

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

Нам не нужно одно горячее кодирование вручную. Многие инструменты для науки о данных предлагают простые способы кодирования ваших данных. Библиотека Python Панды предоставляет функцию с именем get_dummies Чтобы включить однократное кодирование.

df_new = pd.get_dummies(df, columns=["col1"], prefix="Planet")

Посмотрим на это в действии.

import pandas as pd 

df = pd.DataFrame({"col1": ["Sun", "Sun", "Moon", "Earth", "Moon", "Venus"]})
print("The original data")
print(df)
print("*" * 30)
df_new = pd.get_dummies(df, columns=["col1"], prefix="Planet")
print("The transform data using get_dummies")
print(df_new)
  • Строка 7 показывает, что мы используем get_dummies сделать один горячий кодирование для Pandas DataFrame объект. Параметр Префикс Указывает префикс имени нового столбца.
  • Строка 9 показывает нам наш выход.

Давайте применим это к практическому примеру. Скажем, у нас есть следующий набор данных.

import pandas as pd

ids = [11, 22, 33, 44, 55, 66, 77]
countries = ['Seattle', 'London', 'Lahore', 'Berlin', 'Abuja']

df = pd.DataFrame(list(zip(ids, countries)),
                  columns=['Ids', 'Cities'])

Здесь у нас есть DataFrame Pandas под названием df С двумя списками: IDS и Города Анкет Назовем Head () Чтобы получить этот результат:

11 Сиэтл 0
22 Лондон 1
33 Лахор 2
44 Берлин 3
55 Абуджа 4

Здесь мы видим, что Города Столбец содержит наши категориальные значения: имена наших городов. Мы должны преобразовать их в нашем новом столбце Города используя get_dummies () Функция мы обсуждали выше.

y = pd.get_dummies(df.Countries, prefix='City')
print(y.head())

Здесь мы передаем значение Город для Префикс Атрибут метода get_dummies () Анкет Если мы запустим код сейчас, мы напечатаем наши закодированные значения:

import pandas as pd 

df = pd.DataFrame({"col1": ["Seattle", "London", "Lahore", "Berlin", "Abuja"]})
print("The original data")
print(df)
print("*" * 30)
df_new = pd.get_dummies(df, columns=["col1"], prefix="Cities")
print("The transform data using get_dummies")
print(df_new)

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

Мы можем реализовать аналогичную функциональность с Sklearn , который обеспечивает объект/функцию для однопокрывающего кодирования в Предварительная обработка модуль.

import sklearn.preprocessing as preprocessing
import numpy as np
import pandas as pd

targets = np.array(["red", "green", "blue", "yellow", "pink",
                    "white"])
labelEnc = preprocessing.LabelEncoder()
new_target = labelEnc.fit_transform(targets)
onehotEnc = preprocessing.OneHotEncoder()
onehotEnc.fit(new_target.reshape(-1, 1))
targets_trans = onehotEnc.transform(new_target.reshape(-1, 1))
print("The original data")
print(targets)
print("The transform data using OneHotEncoder")
print(targets_trans.toarray())
  • Мы используем Метка Чтобы преобразовать строку в Int в строке 7 и строке 8.
  • Строка 9 создает наш Onehotencoder объект.
  • Строка 10 соответствует исходной функции, используя fit () Анкет
  • Строка 11 преобразует исходную функцию в новую функцию, используя однократную кодировку.
  • Вы можете увидеть новые данные из вывода строки 15.

Примечание: В более новой версии Sklearn , вам не нужно конвертировать строку в int, как Onehotencoder Это автоматически.

Посмотрим Onehotencoder класс в действии с другим примером. Во -первых, вот как импортировать класс.

from sklearn.preprocessing import OneHotEncoder 

Как и раньше, мы сначала заполняем наш список уникальных значений для энкодера.

x = [[11, "Seattle"], [22, "London"], [33, "Lahore"], [44, "Berlin"], [55, "Abuja"]]
y = OneHotEncoder().fit_transform(x).toarray()
print(y)

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

[[1. 0. 0. 0. 0. 0. 0. 1.]
 [0. 1. 0. 0. 0. 1. 0. 0.]
 [0. 0. 1. 0. 0. 0. 0. 1.]
 [0. 0. 0. 1. 0. 0. 1. 0.]
 [0. 0. 0. 0. 1. 1. 0. 0.]]

Следующие шаги для вашего обучения

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

  • Один горячий с numpy
  • Считайте кодирование
  • Среднее кодирование
  • Кодирование ярлыка
  • Вес доказательств, кодирующих

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

Счастливого обучения!

Продолжить чтение об искусственном интеллекте

Оригинал: “https://dev.to/educative/data-science-in-5-minutes-what-is-one-hot-encoding-4m9a”