Es muy buena pregunta; De hecho, este problema ha existido por un tiempo y todavía no he encontrado la solución perfecta. Sin embargo, estoy más que feliz de compartir mi experiencia:
- Evite la codificación en caliente tanto como sea posible (al contrario de lo que se sugirió anteriormente). El razonamiento es que no funcionará. Un modelo con funciones de codificación en caliente solo funciona cuando todos esos subniveles habían existido en los datos de entrenamiento. El modelo no podrá hacer predicciones, a menos que de alguna manera se modifique manualmente. Si busca, encontrará que muchas personas se encontraron con este problema al dividir sus datos en entrenamiento / prueba, y enfrentaron el problema de que algunos subniveles de una característica particular no estaban presentes en la división de entrenamiento y posteriormente no pudieron hacer predicciones en la prueba. Dicho a un lado, si tiene características cardinales muy altas (tal vez como su ciudad con, digamos, 200 nombres de ciudades), ¡esto aumentará la dimensionalidad de sus datos innecesariamente! Si por alguna razón necesita hacer una codificación en caliente, solo tenga esto en cuenta.
Use otros métodos de codificación . Tal vez intente aprender más sobre otros métodos que son sólidos para este problema, al menos por el momento, como codificación basada en objetivos, hash (consulte algunas referencias a continuación). Si está con Python, hay un buen paquete que ofrece opciones de codificación mant. Es posible que se sorprenda al ver que otros métodos simples a menudo funcionan bien.
Vuelve a entrenar a tu modelo . Teóricamente, al aprender su tren / set debería haber tenido la misma distribución (principalmente esto se considera como distribución objetivo, pero también puede ser cierto respecto a las variables). Ahora que entran en juego nuevos elementos, su distribución de datos de prueba (invisible) ha cambiado. Entonces es mejor volver a capacitar al modelo para que esas nuevas ciudades sean contabilizadas.
Poner subcategorías recién agregadas (y las menos frecuentes) a otros . Si bien el punto anterior es cierto en teoría, es muy probable que la distribución de la prueba (de esa categoría en particular) no cambie drásticamente en la mayoría de los casos, por ejemplo, muy pocos ítems pasan a la parte superior de las categorías en el conjunto de entrenamiento. Quizás, como en su caso, puede tener 100 ciudades en la función de ciudad, y muy pocas nuevas aparecen con el tiempo. Lo que consideraría sería mirar el cuantil X-cuantil de esa categoría en particular, y poner los menos frecuentes en la subcategoría Otros . Asumiendo que su punto de datos recién agregado es solo pequeño, va mucho a los Otrosgrupo. Seguramente perderá un nivel de granularidad al hacer esto, pero una vez más, el punto de aprendizaje es que no solo su modelo aprende los datos de entrenamiento, sino lo más importante para poder generalizar muy bien los datos no vistos y si esas nuevas categorías agregadas son muy puntos de datos, agruparlos por completo en el grupo Otros no hará daño.
Otras soluciones recientes aún no maduras como Cat2Vec (tomado de Word2Vec de PNL) o Similarity Encoding . Estos son muy recientes, revise el documento para el primero y su github y un ejemplo (basado en Word2Vec) en Kaggle, y este documento para el segundo y su implementación . La idea del primero es convertir categorías a vectores. Por mucho que tenga que decir que realmente tiene sentido trabajar, pero no tengo experiencia en usarlo. Este último, llamado dirty_cat , parece bastante prometedor y fácil de usar. ¡No es claro si es robusto tener una categoría cardinal invisible en los datos de su prueba!
PD: Me gustaría agregar que la idea de ciudad a una ubicación geográfica dada en el primer comentario es realmente agradable y en realidad no es complicada, ya que son muchas API de Python, por ejemplo, de Google o AQUÍ que te permiten hacer eso. Pero se observa que esta es solo una forma de diseñar nuevas características y ciertamente no debe ser reemplazado por la característica de la ciudad en sí.
Referencias interesantes para verificar primero , segundo , tercero , cuarto (¡sin un orden en particular!)
Todos los puntos mencionados anteriormente son soluciones prácticas, concretamente teóricamente correctas, y seguramente están sujetas a más debates. Y estoy más que feliz de aprender más.
city
a un número basado en alguna función? Decity' = f(latitude, longitude)
esa manera, puede crear un nuevo valor para cualquier ciudad