Что такое one hot vector
Наука о данных за 5 минут: что такое One Hot Encoding?
Если вы работаете в области науки о данных, вы, вероятно, слышали термин «одно горячее кодирование». Даже документация Sklearn говорит вам «кодировать категориальные целочисленные функции, используя горячую схему». Но что такое горячее кодирование и почему мы его используем?
Большинство руководств и инструментов по машинному обучению требуют, чтобы вы подготовили данные, прежде чем их можно будет подогнать под конкретную модель машинного обучения. Одно горячее кодирование — это процесс преобразования категориальных переменных данных, чтобы их можно было передать алгоритмам машинного обучения для улучшения прогнозов. Одно горячее кодирование является важной частью разработки функций для машинного обучения.
В этом руководстве мы познакомим вас с одной горячей кодировкой и покажем, когда её использовать в ваших моделях машинного обучения. Мы предоставим несколько реальных примеров со Sklearn и Pandas.
Как преобразовать категориальные данные в числовые данные
Преобразование наших данных в числовые значения вручную включает два основных шага:
- Целочисленное кодирование.
- Одно горячее кодирование.
На первом этапе нам нужно присвоить каждому значению категории целочисленное или числовое значение. Если бы у нас были значения красный, жёлтый и синий, мы могли бы присвоить им 1, 2 и 3 соответственно.
Имея дело с категориальными переменными, которые не имеют порядка или взаимосвязи, нам нужно сделать ещё один шаг вперёд. Шаг второй включает применение однократного кодирования к только что присвоенным целым числам. Для этого мы удаляем целочисленную переменную и добавляем двоичную переменную для каждой уникальной переменной.
Выше у нас было три категории или цвета, поэтому мы используем три бинарные переменные. Мы помещаем значение 1 в качестве двоичной переменной для каждого цвета и значение 0 для двух других цветов.
Примечание. Во многих других полях двоичные переменные называются фиктивными переменными.
Softmax Regression: мультиклассовая классификация с точностью 91%
В этой статье мы рассмотрим регрессию Softmax, которая используется для задач классификации нескольких классов, и реализуем ее в наборе данных рукописного распознавания цифр MNIST.
Сначала мы будем опираться на логистическую регрессию , чтобы понять функцию Softmax , затем мы рассмотрим Cross-entropy loss, one-hot encoding (однократное кодирование) и закодируем их вместе. Наконец, мы закодируем обучающую функцию (fit), увидим нашу точность и построим наши прогнозы.
В работе нам потребуются NumPy и Matplotlib. Мы увидим, как с помощью Softmax добиться точности в 91% для данных обучения и тестовой выборки.
Что такое горячее кодирование?
Категориальные данные относятся к переменным, которые состоят из значений меток, например, переменная «цвет» может иметь значения «красный», «синий» и «зелёный». Думайте о ценностях как о разных категориях, которые иногда имеют естественный порядок.
Некоторые алгоритмы машинного обучения могут работать напрямую с категориальными данными в зависимости от реализации, например, с деревом решений, но для большинства требуется, чтобы любые входные или выходные переменные были числовыми или числовыми по значению. Это означает, что любые категориальные данные должны быть сопоставлены с целыми числами.
Одно горячее кодирование — это один из методов преобразования данных для подготовки их к алгоритму и получения лучшего прогноза. С помощью one-hot мы конвертируем каждое категориальное значение в новый категориальный столбец и присваиваем этим столбцам двоичное значение 1 или 0. Каждое целочисленное значение представлено как двоичный вектор. Все значения равны нулю, а индекс отмечен цифрой 1.
Взгляните на эту диаграмму, чтобы лучше понять:
Применим это к примеру. Скажем, у нас есть значения красный и синий. При использовании one-hot мы бы присвоили красному цвету числовое значение 0 и синему — числовому значению 1.
Крайне важно быть последовательными, когда мы используем эти ценности. Это позволяет позже инвертировать нашу кодировку, чтобы вернуть исходную категоричность.
После присвоения числовых значений мы создаём двоичный вектор, представляющий наши числовые значения. В этом случае длина нашего вектора будет равна 2, поскольку у нас есть 2 значения. Таким образом, redзначение может быть представлено двоичным вектором [1,0], а blueзначение будет представлено как [0,1].
Зачем использовать одно горячее кодирование?
Одно горячее кодирование полезно для данных, не связанных друг с другом. Алгоритмы машинного обучения рассматривают порядок чисел как атрибут значимости. Другими словами, они будут считать большее число лучше или более важным, чем меньшее число.
Хотя это полезно для некоторых порядковых ситуаций, некоторые входные данные не имеют ранжирования для значений категорий, и это может привести к проблемам с прогнозами и низкой производительности. Вот когда одно горячее кодирование спасает положение.
Одно горячее кодирование делает наши обучающие данные более полезными и выразительными, и их можно легко масштабировать. Используя числовые значения, нам легче определить вероятность наших значений. В частности, для наших выходных значений используется одна горячая кодировка, поскольку она обеспечивает более детализированные прогнозы, чем отдельные метки.
1. Что такое One-Hot
Одно-горячее кодирование, также известное как одноразовое эффективное кодирование. Метод заключается в использовании N-битных регистров состояния для кодирования N состояний, каждое состояние имеет свой собственный независимый бит регистра, и в любой момент только один из них действителен. Процесс преобразования категориальных переменных в форму, удобную для использования алгоритмами машинного обучения. Этот вектор представлен как вектор признаков атрибута, то есть одновременно существует только одна точка активации (не 0), и этот вектор имеет только одну особенность. Если это 0, все остальные равны 0, что особенно редко. Практически самый ранний метод извлечения текстовых объектов.
Горячее кодирование
Чтобы решить вышеупомянутые проблемы, одним из возможных решений является использование однократного кодирования (One-Hot Encoding). Горячее кодирование - это горячее кодирование, также известное как однобитное эффективное кодирование. Метод заключается в использовании N-битных регистров состояния для кодирования состояний N. Каждое состояние имеет свой собственный независимый бит регистра. Один действительный.
Таким образом, можно понять, что для каждого признака, если он имеет m возможных значений, то после однократного кодирования он становится m двоичными признаками (например, признак ранга хороший, средний, а разница становится равной одному). 100, 010, 001). Кроме того, эти функции являются взаимоисключающими, только с одной активацией за раз. Поэтому данные становятся редкими.
Основными преимуществами этого являются:
Решить проблему, заключающуюся в том, что классификатору нелегко иметь дело с данными атрибутов
В определенной степени это также играет роль в расширении возможностей
Метод реализации 1: метод get_dummies для панд
Этот метод может использоваться для преобразования категориальных переменных во вновь добавленные виртуальные переменные / указывающие переменные.
Способ второй: склеарн
Вывод: массив ([[1., 0., 0., 1., 0., 0., 0., 0., 1.]])
Матрица данных имеет размер 4 * 3, то есть 4 элемента данных и 3 размерных элемента.
0 0 3 Обратите внимание на матрицу данных слева, первый столбец - это первое измерение элемента, есть два значения 0 \ 1. Таким образом, соответствующий метод кодирования - 10, 01
1 1 0 Таким же образом, второй столбец - это измерение второго признака, есть три значения 0 \ 1 \ 2, поэтому соответствующий метод кодирования - 100, 010, 001.
0 2 1 Таким же образом третий столбец является третьим измерением признаков, а значение 4 равно 0 \ 1 \ 2 \ 3, поэтому соответствующий метод кодирования - 1000, 0100, 0010, 0001.
Давайте посмотрим на параметры, которые должны быть закодированы [0, 1, 3], 0, поскольку первый код объекта равен 10, 1, как второй код объекта 010, 3, как третий код объекта 0001. Таким образом, результат кодирования равен 1 0 0 1 0 0 0 0 1
3. Почему горячее кодирование?
Как упомянуто выше, горячее кодирование (фиктивная переменная) происходит потому, что большинство алгоритмовВекторное пространство на основеДля того, чтобы значение переменной в отношении не частичного порядка не имело частичного порядка, оно равноудалено от точки. Используя горячее кодирование, значение дискретного признака распространяется на евклидово пространство, а значение дискретного признака соответствует точке в евклидовом пространстве. Горячее кодирование отдельных функций сделает функции междуРасчет расстояния более разумный, После горячего кодирования дискретных признаков, закодированные признаки, фактически, характеристики каждого измерения можно рассматривать какНепрерывная функция, Вы можете следить за непрерывными функциямиНормализацииТаким же образом нормализуйте каждый элемент измерения. Например, нормализовано до [-1,1] или нормализовано до 0 и дисперсии 1.
Почему векторные векторы отображаются в евклидово пространство?
Дискретные признаки отображаются в евклидово пространство посредством однократного кодирования, потому что вычисление расстояния между объектами или вычисление подобия очень важно в алгоритмах машинного обучения, таких как регрессия, классификация, кластеризация и т. Д., И расстояние, которое мы обычно используем Или вычисления подобия - все вычисления подобия в евклидовом пространстве, и вычисление косинусного подобия основано на евклидовом пространстве.
4. Преимущества и недостатки горячего кодирования
- Преимущества: горячее кодирование решает проблему, заключающуюся в том, что классификатор не силен в обработке данных атрибутов, а также играет определенную рольРасширенные возможностиРоль. Его значения только 0 и 1, а разные типы хранятся в вертикальном пространстве.
- Недостатки: когда количество категорий велико,Особенность пространстваСтанет очень большим. В этом случае обычно можно использовать PCAУменьшить размерность, И комбинация одного горячего кодирования + PCA также очень полезна на практике.
5. При каких обстоятельствах (не) использовать одно горячее кодирование?
- Использование: одна горячая кодировка используется для решенияКатегориальные данныеПроблема дискретного значения
- Нет: горячая кодировка отдельных функций предназначена дляСделайте расчет расстояния более разумным, Но если функции являются дискретными и расстояние может быть разумно рассчитано без однократного кодирования, тогда нет необходимости выполнять однократное кодирование. Некоторые основаны наАлгоритм дереваПри работе с переменными он не основан наВекторное пространствоИзмерение, значение является просто символом категории, то есть нет отношения частичного порядка, поэтому нет необходимости выполнять однократное кодирование. Древовидная модель не требует одноразового кодирования: для деревьев решений сущность одноразового кодированияУвеличьте глубину дерева。
Как правило, если число категорий горячего кодирования не слишком много, рекомендуется отдавать приоритет.
6. При каких обстоятельствах (не) нужно нормализовать?
- Необходимость: модель на основе параметров или модель на основе расстояния предназначена для нормализации характеристик.
- Не требуется: на основеДерево подходНет необходимости нормализовать функции, такие как случайный лес, мешки и бустинг.
Два, преимущества и недостатки One-Hot
преимущество:
1. Решена проблема, что классификатор не справляется с обработкой дискретных данных.
2. В некоторой степени это служит расширению возможностей. Например, пол сам по себе является характеристикой. После одного горячего кодирования он становится мужским или женским. Дискретные характеристики отображаются в евклидовом пространстве с помощью горячего кодирования. В алгоритмах машинного обучения, таких как регрессия, классификация и кластеризация Расчет расстояния между объектами или вычисление подобия очень важны.
3. Использование «горячего» кодирования для дискретных объектов может сделать расчет расстояния между объектами более разумным.
Недостатки:
1. Порядок между словами не учитывается.
2. Словарный пробел. То есть по умолчанию предполагается, что нет никакой связи между словами и словами, и это, очевидно, не показано.
3. Пространственная катастрофа. Для объекта с особенно большим количеством значений признаков вектор признаков будет очень большим и очень разреженным. То есть каждое слово - единственная единица в стопке нулей.
Кратко про логистическую регрессию
В модели логистической регрессии мы берем вектор x (который представляет только один пример из m) размера n(функций), берем скалярное произведение с весами и добавляем смещение. Мы назовем это z(линейная часть), которая есть w.X + b . После этого мы применяем функцию активации, которая является сигмоидной для расчета логистической регрессии y_hat .
Каждое ребро, идущее от X к линейной части, представляет собой вес, а каждая окружность линейной части имеет точку .
Логистическая регрессия используется для двоичной классификации. Это означает, что существует 2 класса ( 0 или 1 ), и из-за сигмоидной функции мы получаем результат (y_hat) между 0 и 1. Мы интерпретируем этот результат ( y_hat) логистической модели как вероятность того, что y = 1. Тогда вероятность того, что y = 0, становится (1-y_hat).
3. При каких обстоятельствах можно использовать One-Hot
1. Нет значимости между значениями дискретных функций, таких как цвет: [красный, синий], тогда используйте одноразовое кодирование.
2. Значение дискретного элемента имеет значение размера, например размер: [X, XL, XXL], затем используйте числовое сопоставление
Softmax Regression
Softmax Regression - это форма логистической регрессии, которая нормализует входное значение в вектор значений, который следует распределению вероятности, общая сумма которого равна 1.
Выходные значения находятся в диапазоне [0,1], что хорошо, потому что мы можем чтобы избежать двоичной классификации и учесть как можно больше классов или измерений в нашей модели нейронной сети. Вот почему softmax иногда называют полиномиальной логистической регрессией.
Кроме того, другое название для Softmax Regression - Классификатор максимальной энтропии (MaxEnt).
Давайте для наглядности поставим конкретную цель. Например, научить модель определять цифру на изображении.
Возьмем для этого рукописный набор данных MNIST и используем его в Softmax Regression. Набор имеет 10 классов, каждый из которых представляет собой цифру от 0 до 9 . Давайте сначала посмотрим на датасет.
В-четвертых, применение One-Hot для извлечения текстовых функций.
Сказав так много, это все еще очень абстрактно, и я не могу понять процесс. Следующие два примера используются для подробного объяснения.
1. Предположим, в корпусе есть два предложения:
Большая рыба ест мелкую, а также сушеных креветок Рыбки едят сушеные креветки
Нам нужно закодировать его через One-Hot:
Первый сегмент и номер:
Большая рыба: 1; мелкая рыба: 2; креветки: 3; съесть: 4; также: 5
(На самом деле, «также» на самом деле является стоп-словом, которое можно удалить, но его удаление здесь не имеет большого значения)
Затем используйте One-Hot для извлечения векторов признаков для каждого абзаца:
Таким образом, фраза «большая рыба ест мелкую рыбу и креветки, а мелкая рыба ест креветки» в корпусе переносится на векторы признаков:
1. Происхождение проблемы
Во многомМашинное обучениеВ задачах функции не всегда являются непрерывными значениями, но могут быть категориальными значениями.
Кодирование дискретных элементов делится на два случая:
1. Нет значения размера между значениями отдельных объектов, таких как цвет: [красный, синий], затем используйте однократное кодирование
2. Значение дискретных объектов имеет значение размера, например размер: [X, XL, XXL], затем используйте числовое отображение
Используйте панд, чтобы легко выполнить горячее кодирование отдельных функций
Например, рассмотрим три характеристики:
Если вышеуказанные характеристики представлены числами, эффективность будет намного выше. Например:
Однако даже после преобразования в цифровое представление вышеуказанные данные нельзя напрямую использовать в нашем классификаторе. Потому что классификатор по умолчанию часто использует непрерывные данные (можете ли вы рассчитать расстояние?) И упорядочен (а приведенный выше 0 не означает, что он является более продвинутым, чем 1). Однако, согласно нашему приведенному выше утверждению, числа не упорядочены, а назначены случайным образом.
Одно горячее кодирование с помощью Pandas
Нам не нужно вручную выполнять горячее кодирование. Многие инструменты для анализа данных предлагают простые способы кодирования ваших данных. Библиотека Python Pandas предоставляет функцию, вызываемую get_dummiesдля включения быстрого кодирования.
Пять, реализовать One-Hot через sklearn
Затем реализуйте этот процесс через sklearn:
Следует отметить, что по умолчанию token_pattern='(?u)\\b\\w\\w+\\b' , Который по умолчанию содержит более двух символов, поэтому даже stop_words=None Все равно удалит а также с участием есть Эти два вектора. Если вы не хотите его удалять, на один token_pattern меньше \\w Вот и все.
При сравнении мы видим, что это согласуется с нашим собственным результатом кодирования One-Hot.
7. Почему одно горячее кодирование может решить проблему дискретных значений категориальных данных
Прежде всего, горячее кодирование - это способ кодирования N-битных регистров состояния для N состояний.
например: высокий, средний и низкий неразделимы, → после кодирования с тремя цифрами 0 0 0 становится отделимым и становится независимым событием
Подобно SVM, изначально линейная неразделимая особенность становится отделимой после выполнения проекта в высоком измерении
GBDT не работает хорошо при обработке разреженных матриц большого размера, даже разреженные матрицы низкого размера не обязательно лучше, чем SVM
Восемь, Tree Model не требует одноразового кодирования
Для деревьев решений сущность one-hot - это увеличение глубины дерева
Древовидная модель - это механизм, который генерирует аналогичное One-Hot + Feature Crossing в динамическом процессе.
1. Элемент или несколько объектов в конечном итоге преобразуются в конечный узел в виде кода, который можно понимать как три независимых события.
2. В дереве решений нет понятия размера объекта, а только понятие, какой частью объекта является его распространение.
one-hot может решить проблему линейного разделения, но не так хорошо, как поиск метки
однократные недостатки после уменьшения размерности:
Предварительная обработка данных: One-Hot Encoding и LabelEncoder
Читайте также: