Привет всем, поскольку мы все знаем, что сбор данных считается одной из самых важных задач в машинном обучении.
Кодирование данных в основном происходит непосредственно перед тем, как данные могут быть переданы в алгоритм машинного обучения. Для этого уже известны и широко используются различные методы кодирования, такие как 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.