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

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

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

Хватит объяснять проблему, давайте перейдем к делу и посмотрим, как ее решить!

Понимание проблемы —

Когда-либо сталкивались со следующей ошибкой: «ValueError: y содержит ранее невидимые метки» Это происходит из-за того, что в ваших данных присутствует более новая метка категории, о которой кодировщик меток не знает.

Почему так серьезно —

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

Стандартный код для применения кодировки метки приведен ниже.

from sklearn import preprocessing
# fit 
le={} 
for x in train.columns:
     le[x]=preprocessing.LabelEncoder()
     train[x]= le[x].fit_transform(train.astype(str).__getattr__(x))

# transform
for x in test.columns: 
     test[x]= le[x].transform(test.astype(str).__getattr__(x))

Решение —

Логика здесь в основном присваивает уровень (-1) новым категориям для устранения конкретного сбоя. Используя это, вы не столкнетесь с проблемой выше. ;)

from sklearn import preprocessing
# fit
le={} 
for x in train.columns:
    le[x]=preprocessing.LabelEncoder()
    le[x].fit(train[x].astype('str'))
    le_dict_loop = dict(zip(le[x].classes_,le[x].transform(le /
                   [x].classes_)))
    train[x] = (train[x].astype('str')).apply(lambda x: /
                le_dict_loop.get(x, -1))
    le[x] = dict(zip(le[x].classes_,le[x].transform(le[x]. /
            classes_)))

# transform
for x in colnamele:
    le_dict_loop = le[x]
    test[x] = (test[x].astype('str')).apply(lambda x:le_dict_loop. /
               get(x, -1))

Надеюсь, этот небольшой вклад поможет начинающему сообществу Data Science и ML.