Выбор ответа Junior Признаки и интерпретация спрашивают часто обновлено
Кодирование категории с тысячами значений
Вопрос
Признак «город» имеет 5 000 уникальных значений. Чем плох one-hot для линейной модели и что можно сделать?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: 5 000 разреженных столбцов, у редких городов шумные веса; помогают target encoding с регуляризацией, объединение редких, хеширование. One-hot технически работает (разреженные матрицы), но у редких категорий мало данных, и их веса переобучаются.
Варианты ответа
- One-hot для линейной модели не работает при числе значений больше ~100: матрица становится вырожденной, и решатель не сходится
- One-hot даёт утечку целевой переменной: каждый столбец города запоминает метки своих объектов, поэтому нужен только target encoding без сглаживания
- Проблемы нет: L2-регуляризация сама выровняет веса 5 000 столбцов, а редкие города просто получат нулевые веса, так что one-hot оптимален
- 5 000 разреженных столбцов, у редких городов шумные веса; помогают target encoding с регуляризацией, объединение редких, хешированиеправильный ответ
Разбор
One-hot технически работает (разреженные матрицы), но у редких категорий мало данных, и их веса переобучаются. Варианты: объединить редкие в «другое», target encoding со сглаживанием и расчётом вне фолда, частотное кодирование, hashing trick, обучаемые эмбеддинги в нейросетях. CatBoost кодирует категории сам.
- Жёсткого ограничения нет: разреженные матрицы и решатели liblinear/saga спокойно работают с тысячами столбцов.
- Утечку даёт неправильный target encoding, а не one-hot.
- Регуляризация не обнуляет веса редких городов, а лишь сжимает их; при высокой кардинальности one-hot далеко не лучший выбор.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.