Это очень хороший вопрос; На самом деле эта проблема существует уже давно, и я пока не нашел идеального решения. Еще более чем рад поделиться своим опытом:
- Избегайте горячего кодирования, насколько это возможно (вопреки тому, что было предложено выше). Причина в том, что это не сработает. Модель с функциями горячего кодирования работает только тогда, когда все эти подуровни были в обучающих данных. Модель не сможет делать предсказания, если она не будет настроена вручную. Если вы выполните поиск, вы обнаружите, что многие люди столкнулись с этой проблемой при разделении своих данных на поезд / тест, и столкнулись с проблемой того, что некоторые подуровни определенной функции не присутствовали в обучающем разделении и впоследствии не смогли сделать прогноз на тесте. Кроме того, если у вас очень много основных характеристик (например, ваш город с, скажем, 200 названиями городов), это излишне увеличит размерность ваших данных! Если по каким-то причинам вам может понадобиться выполнить горячее кодирование, просто помните об этом.
Используйте другие методы кодирования . Может быть, попробуйте узнать больше о других методах, которые устойчивы к этой проблеме, по крайней мере в настоящее время, как целевое кодирование, хеширование (см. Некоторые ссылки ниже). Если вы используете Python, есть хороший пакет, предлагающий варианты кодирования mant. Вы можете быть удивлены, увидев, что другие простые методы часто работают просто отлично.
Восстанови свою модель . Теоретически, при обучении ваш поезд / набор должен был иметь такое же распределение (в основном это рассматривается как целевое распределение, но может быть верно и для переменных). Теперь, когда в игру вступают новые предметы, ваше тестовое (невидимое) распределение данных изменилось. Тогда лучше переучить модель еще раз, чтобы эти новые города были учтены.
Поместите недавно добавленные подкатегории (и наименее часто встречающиеся) в другие . Хотя более ранняя точка теоретически верна, весьма вероятно, что распределение тестов (этой конкретной категории) не изменится столь кардинально в большинстве случаев, например, очень немногие элементы входят в число категорий в обучающем наборе. Возможно, как и в вашем случае, у вас может быть 100 городов в черте города, и лишь немногие новые появляются со временем. Что я хотел бы рассмотреть, так это посмотреть на X-квантиль «давайте» этой конкретной категории и поместить наименее частые в подкатегорию « Другие» . Предполагая, что ваша недавно добавленная точка данных очень мала, она очень сильно уйдет в другиегруппа. Делая это, вы, безусловно, потеряете уровень детализации, но еще раз смысл обучения заключается в том, что не только ваша модель изучает обучающие данные, но, что наиболее важно, уметь очень хорошо обобщать невидимые данные и, если эти новые добавленные категории являются точками данных, группировка их в группу Других не повредит.
Другие недавние, но еще не зрелые решения, такие как Cat2Vec (заимствованный из Word2Vec от NLP) или Similarity Encoding . Это совсем недавно, проверьте документ для первого и его github и пример (на основе Word2Vec) в Kaggle, и этот документ для последнего и его реализации . Идея первого заключается в преобразовании категорий в векторы. Как бы я ни говорил, действительно имеет смысл работать, но у меня нет опыта его использования. Последний, так называемый dirty_cat , выглядит довольно перспективным и простым в использовании. Достоверно ли иметь невидимую кардинальную категорию в ваших данных испытаний, мне неясно!
PS: Я хотел бы добавить, что идея города с географическим местоположением, приведенная в первом комментарии, действительно хороша, и она на самом деле не сложна, поскольку они представляют собой множество API-интерфейсов Python, например, от Google или HERE, которые позволяют вам это делать. Но следует отметить, что это просто способ создания новых функций и, конечно же, их нельзя заменить самой городской функцией.
Интересные ссылки для проверки первого , второго , третьего , четвертого (без определенного порядка!)
Все вышеперечисленные пункты являются практическими решениями, достаточно конкретно теоретически правильными и, безусловно, подлежат дальнейшему обсуждению. И я более чем счастлив узнать больше.
city
в число на основе какой-либо функции? Какcity' = f(latitude, longitude)
таким образом, вы можете создать новое значение для любого города