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

Вопрос или проблема

Мой набор данных содержит около 29 признаков с 3 метками классов в качестве результата. Среди этих 29 признаков около 24 признаков являются категориальными, я не могу преобразовать каждую категорию в числа, так как в некоторых признаках их более 30.

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

from sklearn import preprocessing
le = preprocessing.LabelEncoder()

data=data.apply(le.fit_transform)

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

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

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

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

  • Во-первых, измерьте корреляцию каждого признака с целевой переменной. Если корреляция близка к нулю, признак можно удалить.
  • Каждый оставшийся категориальный признак желательно закодировать методом one-hot. Но редкие значения сначала следует удалить (например, если $n\leq 3$), потому что эти случаи могут вызвать переобучение и вряд ли помогут в определении целевой переменной. – Общий способ удалить редкие значения для признака заключается в том, чтобы присвоить специальное значение unknown вместо оригинального значения. Это имеет преимущество в том, что его также можно использовать при применении модели к любому значению признака, которое было неизвестно во время обучения.

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

Ответ или решение

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

Проблема кодирования категориальных данных

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

Всеобъемлющий подход к предсказанию

1. Сохранение соответствия меток и категорий

При использовании LabelEncoder важно сохранить мapping (соответствие) между категориальными значениями и закодированными числами. Это можно сделать, храня в словаре каждую категорию и ее соответствующее значение. Например:

from sklearn import preprocessing

le = preprocessing.LabelEncoder()
data['column_name'] = le.fit_transform(data['column_name'])
mapping = dict(zip(le.classes_, le.transform(le.classes_)))
# Сохраните mapping для дальнейшего использования

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

2. Обработка неизвестных категорий

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

  • Присвоение категории "неизвестно": Если категория введена, но не существует в обучающей выборке, вы можете назначить ее значение -1 или как категорию "unknown". Это позволит модели распознавать новые значения, обеспечивая в то же время остановку возникновения ошибок.

  • Фильтрация редких классов: Лучше всего заранее удалять из данных редкие классы. Если количество наблюдений в категории меньше определенного числа (например, меньше 3), вы можете заменить их на категорию "unknown". Этот подход поможет уменьшить избыточность и улучшить общую стабильность модели.

3. Использование техник кодирования

С учётом особенностей вашего набора данных, следует рассмотреть альтернативные методы кодирования:

  • One-Hot Encoding: Этот метод часто более предпочтителен для категориальных данных, поскольку он не вводит порядковость. Однако учтите, что он может резко увеличить размерность данных, если количество категорий велико.

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

4. Взаимосвязь признаков и целевой переменной

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

Заключение

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

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

Капча загружается...