Понимание фиктивных переменных 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.
Вот несколько ресурсов, которые могут помочь вам в этой теме:
Понравился мой способ повествования ??
Вот интересное развлечение и обучение, которое поможет вам создать свой собственный набор данных. Взгляни.
Спасибо за уделенное время!
Я всегда открыт для предложений и новых возможностей. Не стесняйтесь оставлять свои отзывы и связываться со мной в LinkedIn.