#pandas #scikit-learn #one-hot-encoding
Вопрос:
Мой фрейм данных содержит 3,8 миллиона строк и около 20 функций, многие из которых являются категориальными. После сокращения количества функций я могу «подставить» одну критическую колонку с 20 или около того категориями, и мой COLAB с (предположительно) работающим TPU не выйдет из строя.
Но есть еще один столбец, содержащий около 53 000 уникальных значений. Попытка «подставить» эту функцию завершает мой сеанс. Я не могу бросить эту колонку.
Я просмотрел целевую кодировку, но набор данных очень несбалансирован, и я обеспокоен утечкой целевой информации. Есть ли способ обойти это?
ПРАВКА: Моя целевая переменная-простая двоичная переменная.
Комментарии:
1. Адрес очень специфичен, и если он очень детализирован, т. Е. «XXX St. Apt.7B», вы, по сути, включаете индивидуальный эффект, поэтому ваш прогноз вне выборки будет мусором, так как вы потерпите ужасную неудачу по адресу, который вы еще не видели (очень вероятно, если конкретно). Также удачи в оценке 53 тыс. эффектов. Агрегируйте местоположение до более грубого уровня, например, районный квартал, переписной участок, почтовый индекс, округ, штат, в зависимости от ожидаемого уровня неоднородности.
2. @ALollz Адреса представляют собой полуанонимизированные блоки. «0000X E 100TH PL», например. Прямо сейчас я определяю тех, кто видел больше, чем среднее число зарегистрированных преступлений (35), и просто использую их. Это приводит меня к 29 900 и изменениям. Я предсказываю конкретное преступление, поэтому, по меньшей мере, было бы безответственно не указывать местоположение в формировании в моей модели RF или GBM. Это набор данных о преступлениях в Чикаго. Итак, много-много данных.
Ответ №1:
Не зная более подробной информации о проблеме/функции, нет очевидного способа сделать это. Это та часть науки о данных/машинного обучения, которая является искусством, а не наукой. Пара идей:
- Один горячий кодирует все, а затем использует алгоритм уменьшения размерности, чтобы удалить некоторые столбцы (PCA, SVD и т. Д.).
- Только одно горячее кодирование некоторых значений (скажем, ограничьте его 10 или 100 категориями, а не 53 000), затем для остальных используйте категорию «другое».
- Если возможно построить вложение для этих переменных (не всегда возможно), вы можете изучить это.
- Сгруппируйте/сгруппируйте значения в столбцах по какой-либо базовой функции. Т. Е. если функция похожа на что-то
days_since_X
, сгруппируйте ее на 100 или что-то в этом роде. Или, если это названия животных, сгруппируйте их по типу (млекопитающее, рептилия и т. Д.).
Комментарии:
1. В данный момент я иду с выбором 4. См.Выше комментарий к другому человеку, который ответил. Обычно это веселая и творческая часть работы, но не тогда, когда она прерывает вашу сессию.
2. @Ryan Imo вам также следует рассмотреть вариант 3). Вы могли бы, например, использовать word2vec из gensim для сжатия этой функции в n-мерный вектор (что аналогично варианту 1), но здесь вы позволяете нейронной сети выполнять работу).