Как получить оригинальное значение для двоичного кодирования, используя пакет category_encoder - PullRequest
3 голосов
/ 29 мая 2019

У меня есть набор данных, который включает в себя более 100 стран.Я хочу включить их в модель XGBoost, чтобы сделать классификационный прогноз.Я знаю, что One Hot Encoding является подходящим процессом для этого, но я бы предпочел сделать что-то, что не увеличит размерность так сильно и будет устойчивым к новым значениям, поэтому я пробую двоичную классификацию с использованием пакета category_encoders.http://contrib.scikit -learn.org / категорическое-кодирование / двоичное.html

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

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

Вот несколько примеров данных, взятых из: https://towardsdatascience.com/smarter-ways-to-encode-categorical-data-for-machine-learning-part-1-of-3-6dca2f71b159

import numpy as np
import pandas as pd
import category_encoders as ce

# make some data
df = pd.DataFrame({
 'color':["a", "c", "a", "a", "b", "b"], 
 'outcome':[1, 2, 3, 2, 2, 2]})

# split into X and y
X = df.drop('outcome', axis = 1)
y = df.drop('color', axis = 1)

# instantiate an encoder - here we use Binary()
ce_binary = ce.BinaryEncoder(cols = ['color'])

# fit and transform and presto, you've got encoded data
ce_binary.fit_transform(X, y)

output

Я хотел бы передать значения [0,0,1] или 1 в функцию и получить обратно a в качестве значения.

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

1 Ответ

1 голос
/ 07 июня 2019

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

Если вы решите использовать двоичный кодировщик, порядок кодирования цветов (или стран) будет влиять на вашу производительность. Например, предположим, что красный = 001, белый = 010 и синий = 011. Когда вы примените алгоритм ML, он увидит, что красный и синий имеют общую особенность (функция 3). Это, вероятно, не то, что вы хотите.

Что касается применения обратного преобразования, вам необходимо применить обратное преобразование к [0,0,1] в приведенном выше примере, а не к «1». «1» не имеет смысла без контекста. Вы должны иметь возможность применить обратное преобразование к одной записи (строке) в ваших данных, но не к одному столбцу. Обратный скейлер должен будет работать на объекте с выходным измерением трансформатора.

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