one hot кодирование это

Наука о данных за 5 минут: что такое One Hot Encoding?

one hot кодирование это. Смотреть фото one hot кодирование это. Смотреть картинку one hot кодирование это. Картинка про one hot кодирование это. Фото one hot кодирование это

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

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

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

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

Категориальные данные относятся к переменным, которые состоят из значений меток, например, переменная «цвет» может иметь значения «красный», «синий» и «зелёный». Думайте о ценностях как о разных категориях, которые иногда имеют естественный порядок.

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

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

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

one hot кодирование это. Смотреть фото one hot кодирование это. Смотреть картинку one hot кодирование это. Картинка про one hot кодирование это. Фото one hot кодирование это

Применим это к примеру. Скажем, у нас есть значения красный и синий. При использовании one-hot мы бы присвоили красному цвету числовое значение 0 и синему — числовому значению 1.

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

После присвоения числовых значений мы создаём двоичный вектор, представляющий наши числовые значения. В этом случае длина нашего вектора будет равна 2, поскольку у нас есть 2 значения. Таким образом, redзначение может быть представлено двоичным вектором [1,0], а blueзначение будет представлено как [0,1].

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

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

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

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

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

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

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

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

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

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

Одно горячее кодирование с помощью Pandas

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

Источник

Отличия LabelEncoder и OneHotEncoder в SciKit Learn

Если вы недавно начали свой путь в машинном обучении, вы можете запутаться между LabelEncoder и OneHotEncoder. Оба кодировщика — часть библиотеки SciKit Learn в Python и оба используются для преобразования категориальных или текстовых данных в числа, которые наши предсказательные модели понимают лучше. Давайте выясним отличия между кодировщиками на простеньком примере.

Кодирование признаков

Прежде всего, документацию SciKit Learn для LabelEncoder можно найти здесь. Теперь рассмотрим такие данные:

one hot кодирование это. Смотреть фото one hot кодирование это. Смотреть картинку one hot кодирование это. Картинка про one hot кодирование это. Фото one hot кодирование это

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

И для преобразования подобных категорий в понятные модели числовые данные мы и используем класс LabelEncoder. Таким образом, всё что нам нужно сделать, чтобы получить признак для первого столбца, это импортировать класс из библиотеки sklearn, обработать колонку функцией fit_transform и заменить существующие текстовые данные новыми закодированными. Давайте посмотрим код.

Предполагается, что данные находятся в переменной x. После запуска кода выше, если вы проверите значение x, то увидите, что три страны в первом столбце были заменены числами 0, 1 и 2.

one hot кодирование это. Смотреть фото one hot кодирование это. Смотреть картинку one hot кодирование это. Картинка про one hot кодирование это. Фото one hot кодирование это

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

Проблема здесь в том, что, поскольку разные числа в одном столбце, модель неправильно подумает, что данные находятся в каком-то особом порядке — 0

OneHotEncoder

Если вам интересно почитать документацию, найти её можно здесь. Теперь, как мы уже обсуждали, в зависимости от имеющихся у нас данных мы можем столкнуться с ситуацией, когда после кодирования признаков наша модель запутается, ложно предположив, что данные связаны порядком или иерархией, которого на самом деле нет. Чтобы этого избежать мы воспользуемся OneHotEncoder.

Этот кодировщик берёт столбец с категориальными данными, который был предварительно закодирован в признак, и создаёт для него несколько новых столбцов. Числа заменяются на единицы и нули, в зависимости от того, какому столбцу какое значение присуще. В нашем примере мы получим три новых столбца, по одному для каждой страны — Франции, Германии и Испании.

Для строк, у которых первый столбец — Франция, столбец «Франция» будет установлен в «1», а два других столбца в «0». Аналогично для строк, у которых первый столбец — Германия, столбец «Германия» будет иметь «1», а два других столбца будут иметь «0».

Делается это весьма просто:

В конструкторе мы указываем, какой столбец должен быть обработан OneHotEncoder, в нашем случае — [0]. Затем преобразуем массив x с помощью функции fit_transform объекта кодировщика, который только что создали. Вот и всё, теперь у нас три новых столбца в наборе данных:

one hot кодирование это. Смотреть фото one hot кодирование это. Смотреть картинку one hot кодирование это. Картинка про one hot кодирование это. Фото one hot кодирование это

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

В этом и есть отличие от LabelEncoder и OneHotEncoder.

Источник

Одна горячая кодировка в Python – реализация с использованием Sklearn

Одно- горячая кодировка – это методика представления категориальных данных в виде двоичных векторов. Это общий шаг в обработке последовательных данных

Одностороннее кодирование – это методика представления категориальных данных в виде двоичных векторов Отказ Это общий шаг в обработке последовательных данных перед выполнением Классификация Отказ

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

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

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

Давайте начнем с примера.

Работа одно горячего кодирования в Python

Рассмотрим следующую последовательность слов.

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

Категории в данных выше следующие:

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

Одно- горячая кодировка имеет два шагового процесса.

1. Преобразование категорий в целые числа

Превратим три категории в наш пример к целым числам.

C ++0
Ява1
Питон2

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

Вы можете прочитать эти данные с таблицей преобразования выше.

Давайте перейдем на второй шаг сейчас.

2. Преобразование целых чисел в двоичные векторы

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

Посмотрим, что мы подразумеваем под этим:

C ++0[1, 0, 0]
Ява1[0, 1, 0]
Питон2[0, 0, 1]

Мы можем представлять данные в нашем примере как:

Наши оригинальные данные последовательности теперь в форме 2-D матрицы. Это облегчает его машину понять ее.

Код Python для реализации одностороннего кодирования с помощью Sklearn

Давайте перейдем к части реализации одно горячего кодирования. Мы собираемся использовать Sklearn для реализации того же.

Мы будем следовать тому же двухэтапному подходу при реализации.

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

1. Использование LabetEncoder для преобразования категорий в целые числа

Сначала мы будем использовать LabelenCoder на данные. Давайте импортируем его из Sklearn, а затем использовать его на данных.

Код для того же следующий следующим образом:

2. Используя OneHoteNCoder для преобразования целочисленного кодирования в одно горячее кодирование

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

OneHoteNCoder работает только на данных, которые находится в формате столбца. Чтобы использовать целочисленное кодирование из LabelEncoder, нам придется изменить вывод, прежде чем предоставлять его в качестве входа в OneHoteNCoder.

Это можно сделать со следующими строками кода:

Теперь мы можем использовать эти данные, чтобы сделать односторонние векторы.

Полный код

Вот полный код для этого руководства:

Заключение

Этот учебник был о односторонней кодировке в Python. Мы поняли, как он работает и использовал Skelarn для реализации кодировки на этикетке и одно горячее кодирование.

Источник

One-Hot Encoding in Python with Pandas and Scikit-Learn

Однократное кодирование-это фундаментальная и распространенная схема кодирования, используемая в машинном обучении и науке о данных. В этой статье мы рассмотрим одноразовое кодирование с помощью Pandas и Scikit-Learn в Python.

Вступление

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

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

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

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

Однострочное кодирование-это тип векторного представления, в котором все элементы в векторе равны 0, за исключением одного, который имеет значение 1, где 1 представляет собой логическое определение категории элемента.

Это очень отличается от других схем кодирования, которые все позволяют нескольким битам иметь значение 1. Ниже приведена таблица, в которой сравнивается представление чисел от 0 до 7 в двоичном коде, коде Грея и единице-hot:

0000
1111
1021011
11310010
10041000110
101510000111
1106100000101
11171000000100

Это номер 1? Это номер 2? … Это номер 7?

Каждый “0” является “ложным”, и как только мы попадаем в “1” в векторе, ответ на вопрос будет “истинным”.

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

Например, некоторые векторы могут быть оптимальными для регрессии (аппроксимирующие функции, основанные на прежних возвращаемых значениях), а некоторые могут быть оптимальными для классификации (категоризация в фиксированные наборы/классы, обычно двоичные):

1Клубника
2Яблоко
3Арбуз
4Лимон
5Персик
6Оранжевый

Здесь мы имеем шесть выборочных входных данных категориальных данных. Тип кодировки, используемый здесь, называется “label encoding” – и это очень просто: мы просто присваиваем идентификатор категориальному значению.

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

Было бы бессмысленно говорить, что наша категория “Клубника” больше или меньше, чем “Яблоки”, или что добавление категории “Лимон” к “Персику” даст нам категорию “Апельсин”, поскольку эти значения не являются порядковыми.

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

1000010
2100000
3000001
4010000
5001000
6000100

Реализация

Панды

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

Мы создадим очень простой набор данных – список стран и их детей:

Столбец Страны содержит категориальные значения. Мы можем преобразовать значения в столбце Страны в однократно закодированные векторы с помощью функции get_dummies() :

Запуск этого кода дает:

Scikit-Учись

Во-первых, давайте начнем с импорта LabelBinarizer :

А затем, используя тот же фрейм данных, что и раньше, давайте создадим экземпляр LabelBinarizer и поместим его:

Хотя это далеко не так красиво, как подход Панд.

А затем давайте заполним список и поместим его в кодер:

Запуск этого даст результат:

Применение одногорячего кодирования

Одногорячее кодирование получило наибольшее применение в области машинного обучения и проектирования цифровых схем.

Машинное обучение

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

Большинство методов и моделей машинного обучения работают с очень ограниченным набором данных (обычно двоичным). Нейронные сети потребляют данные и выдают результаты в диапазоне 0..1 и редко когда мы выходим за эти рамки.

Короче говоря, подавляющее большинство алгоритмов машинного обучения получают выборочные данные (” обучающие данные “), из которых извлекаются функции. На основе этих особенностей создается математическая модель, которая затем используется для прогнозирования или принятия решений без явного программирования для выполнения этих задач.

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

Проектирование Цифровых схем

Многие базовые цифровые схемы используют одноступенчатую нотацию для представления своих значений ввода-вывода.

Первый триггер в этом счетчике представляет первое состояние, второй-второе состояние и так далее. В начале все триггеры в машине установлены на “0”, за исключением первого, который установлен на “1”.

Следующий тактовый край, приходящий к триггерам, продвигает один “горячий” бит ко второму триггеру. “Горячий” бит продвигается таким образом до последнего состояния, после чего машина возвращается в первое состояние.

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

Это полная противоположность и берет один горячий вход и преобразует его в двоичный или серый:

Преимущества и недостатки одногорячего кодирования

Как и любой другой тип кодирования, one-hot имеет много хороших моментов, а также проблемных аспектов.

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

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

Еще одна замечательная вещь в one-hot encoding-это простота реализации. Цифровые схемы, выполненные в этой нотации, очень легко проектировать и модифицировать. Нелегальные состояния в конечной машине также легко обнаружить.

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

Недостатки

Одним из главных недостатков одногорячего кодирования является упомянутый выше факт, что оно не может представлять много значений (для n состояний нам понадобятся n цифры – или триггеры). Вот почему, если бы мы хотели реализовать, например, одноразовый кольцевой счетчик с 15 состояниями, нам понадобилось бы 15 триггеров, тогда как двоичной реализации потребовалось бы только три триггера.

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

Другая проблема с этим типом кодирования заключается в том, что многие состояния в конечной машине были бы незаконными-для каждого n допустимого состояния существует ( 2 n – n) незаконные. Хорошо, что эти незаконные состояния, как уже было сказано, действительно легко обнаружить (достаточно было бы одного XOR-гейта), так что позаботиться о них не очень сложно.

Вывод

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

Источник

Почему One-Hot кодирует данные в машинном обучении?

Дата публикации 2017-07-28

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

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

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

one hot кодирование это. Смотреть фото one hot кодирование это. Смотреть картинку one hot кодирование это. Картинка про one hot кодирование это. Фото one hot кодирование это

Что такое категориальные данные?

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

Количество возможных значений часто ограничено фиксированным набором.

Категориальные переменные часто называютноминальный,

Вот некоторые примеры:

Каждое значение представляет отдельную категорию.

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

«местоПеременная выше имеет естественный порядок значений. Этот тип категориальной переменной называется порядковой переменной.

В чем проблема с категориальными данными?

Некоторые алгоритмы могут работать с категориальными данными напрямую.

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

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

В целом, это в основном ограничение эффективной реализации алгоритмов машинного обучения, а не жесткие ограничения самих алгоритмов.

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

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

Это включает в себя два этапа:

1. Целочисленное кодирование

На первом этапе каждому уникальному значению категории присваивается целочисленное значение.

Это называется кодировкой метки или целочисленной кодировкой и легко обратимо.

Для некоторых переменных этого может быть достаточно.

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

Например, порядковые переменные, такие как пример «место» выше, были бы хорошим примером, где было бы достаточно кодирования метки.

2. Горячее кодирование

Для категориальных переменных, где таких порядковых отношений не существует, целочисленное кодирование недостаточно.

Фактически, использование этого кодирования и разрешение модели принимать естественное упорядочение между категориями может привести к низкой производительности или неожиданным результатам (предсказания на полпути между категориями).

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

Бинарные переменные часто называют «фиктивными переменными» в других областях, таких как статистика.

Дальнейшее чтение

Резюме

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

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *