Понимание фиктивных переменных Label Encoder, OneHot Encoder и Pandas с примерами

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

Это история о преобразовании меток, категорийных или текстовых значений в числа или числовые значения. Простыми словами,

Кодирование - это процесс преобразования слов в числа.

В Python OneHot Encoding и Lebel Encoding - это два метода кодирования категориальных столбцов в числовые столбцы. И они являются частью одной из наиболее часто используемых библиотек Python: Scikit-Learn

Но подождите, вы не хотите импортировать Scikit-Learn в свой блокнот ??

Нет проблем, ⚡️ Pandas приходит к вам на помощь.

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

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

Любой набор данных содержит несколько столбцов, содержащих как числовые, так и категориальные значения.

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

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

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

import pandas as pd
countries = ["Germany","India","UK","Egypt","Iran"]
continents = ["Europe","Asia","Europe","Africa","Asia"]
code = ["G","I","U","E","N"]
d={"country": countries, "continent":continents, "code":code}
df = pd.DataFrame(d)

Преобразование типа данных столбца «код» из объекта в категорию

df['code'] = df.code.astype('category')

На этом примере давайте разберемся в процессе кодирования.

Кодирование меток в Python

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

Кодировка метки: присвойте каждой метке уникальное целое число в алфавитном порядке.

Позвольте мне показать вам, как кодирование меток работает в Python на том же примере выше.

from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df["labeled_continent"] = le.fit_transform(df["continent"])
df

метки в столбце continent будут преобразованы в числа и сохранятся в новом столбце — labeled_continent

Выход будет,

Проще говоря, метки расположены в алфавитном порядке, и каждой метке , начиная с 0, присваивается уникальный индекс.

Все хорошо ?? Сработало хорошо ⁉️

Здесь возникает проблема с кодировкой меток. Он использует числа в последовательности, которая вводит сравнение между метками. В приведенном выше примере ярлыки в столбце continent не имеют порядка или ранга. Но после кодирования меток эти метки упорядочиваются в алфавитном порядке. из-за этих чисел модель машинного обучения может интерпретировать этот порядок как Europe > Asia > Africa

Чтобы решить эту проблему с упорядочением с помощью Label Encoding, на помощь приходит OneHot Encoding.

Кодирование OneHot в Python

В кодировке OneHot для каждой метки в столбце создается двоичный столбец. Здесь каждая метка преобразуется в новый столбец или новую функцию, и ей присваивается значение 1 (горячий) или 0 (холодный).

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

from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder()
df3 = pd.DataFrame(ohe.fit_transform(df[["continent"]]).toarray())
df_new=pd.concat([df,df3],axis=1)
df_new

В этом сценарии последние три столбца являются результатом кодирования OneHot. Ярлыки Африка, Азия и Европа были закодированы как 0, 1, 2 соответственно. Кодировка OneHot преобразует эти метки в столбцы. следовательно, глядя на последние 3 столбца, мы имеем 3 labels → 3 columns

Кодировка OneHot: в одной строке активна только одна метка.

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

Взгляните на эту статью, чтобы узнать больше о вариантах слияния 2 DataFrames.



pandas.get_dummies () в Python

Кодировку OneHot можно реализовать проще и без импорта Scikit-Learn.

⚡️ Да !! Панды здесь твой друг. Эта простая функция pandas.get_dummies() быстро преобразует все метки из указанного столбца в отдельные двоичные столбцы.

df2=pd.get_dummies(df[["continent"]])
df_new=pd.concat([df,df2],axis=1)
df_new

Последние 3 столбца вышеупомянутого DataFrame такие же, как при кодировании OneHot.

pandas.get_dummies () генерирует фиктивные переменные для каждой метки в столбце continent. Следовательно, континент_Африка, континент_Азия, и континент_Европа являются фиктивными двоичными переменными для ярлыков Африка, Азия и Европа соответственно.

Через мою историю

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

Вот несколько ресурсов, которые могут помочь вам в этой теме:

  1. Кодирование меток в Python
  2. Кодирование OneHot в Python
  3. Получить фиктивные переменные с помощью Pandas

Понравился мой способ повествования ??

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



Спасибо за уделенное время!

Я всегда открыт для предложений и новых возможностей. Не стесняйтесь оставлять свои отзывы и связываться со мной в LinkedIn.