Выбор ответа Junior Признаки и интерпретация спрашивают часто обновлено

Кодирование категории с тысячами значений

Вопрос

Признак «город» имеет 5 000 уникальных значений. Чем плох one-hot для линейной модели и что можно сделать?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: 5 000 разреженных столбцов, у редких городов шумные веса; помогают target encoding с регуляризацией, объединение редких, хеширование. One-hot технически работает (разреженные матрицы), но у редких категорий мало данных, и их веса переобучаются.

Варианты ответа

  1. One-hot для линейной модели не работает при числе значений больше ~100: матрица становится вырожденной, и решатель не сходится
  2. One-hot даёт утечку целевой переменной: каждый столбец города запоминает метки своих объектов, поэтому нужен только target encoding без сглаживания
  3. Проблемы нет: L2-регуляризация сама выровняет веса 5 000 столбцов, а редкие города просто получат нулевые веса, так что one-hot оптимален
  4. 5 000 разреженных столбцов, у редких городов шумные веса; помогают target encoding с регуляризацией, объединение редких, хешированиеправильный ответ

Разбор

One-hot технически работает (разреженные матрицы), но у редких категорий мало данных, и их веса переобучаются. Варианты: объединить редкие в «другое», target encoding со сглаживанием и расчётом вне фолда, частотное кодирование, hashing trick, обучаемые эмбеддинги в нейросетях. CatBoost кодирует категории сам.

  • Жёсткого ограничения нет: разреженные матрицы и решатели liblinear/saga спокойно работают с тысячами столбцов.
  • Утечку даёт неправильный target encoding, а не one-hot.
  • Регуляризация не обнуляет веса редких городов, а лишь сжимает их; при высокой кардинальности one-hot далеко не лучший выбор.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.