Technical
Convertir las clases en datos de entrada
Kelwin · 22 de septiembre de 2022
Seamos honrados: todos hemos trabajado en proyectos de Machine Learning donde necesitábamos predecir un número absurdamente elevado de clases. Lo suficientemente grande como para que el número de observaciones por clase resulte ser un subconjunto vergonzosamente pequeño. La mayoría de las personas modelan estas tareas como un problema de clasificación multiclase en el que, para cada observación de entrada, debemos predecir la clase más probable (o las probabilidades de la clase).
Ejemplos de tales tareas son predecir el modelo de un automóvil, la especie de un animal, la intención de un usuario en un chat, el código SIC/NAICS de una empresa y el producto en una imagen de un mercado, entre muchos otros.
Un número dinámico de clases también caracteriza estos ejemplos. Por ejemplo, supongamos que estamos entrenando un modelo de Computer Vision para reconocer el artículo en una foto para una tienda minorista autónoma. Cada día se lanzan nuevos productos al mercado. Si adoptas el enfoque tradicional, debes entrenar un nuevo modelo diariamente para mantener el catálogo actualizado.
Esto haría que el mantenimiento del modelo (y las operaciones) se vuelvan caóticas. No es algo que desees.
Nuestra receta para entrenar modelos grandes de clasificación multiclase
Nuestro truco para este tipo de modelo es convertir las clases en parte de la pregunta. Así, en lugar de entrenar un modelo de clasificación multiclase que prediga:
¿Cuál es la clase de la observación? – una pregunta categórica
hacemos la pregunta:
¿Pertenece esta observación a una categoría determinada? – una pregunta de sí o no.
Me gusta llamar a este truco "voltear el modelo", convirtiendo el resultado en parte de las entradas.
Técnicamente, transformamos nuestro modelo predictivo

en

Luego, para cualquier observación dada, solo necesitas preguntar por todas las clases y elegir la que tenga la probabilidad más alta.

¿Hay una clase nueva? No te preocupes; solo haz una pregunta adicional la próxima vez que necesites generar una predicción. No se requiere reentrenamiento. Me gusta llamar a este truco "voltear el modelo", convirtiendo el resultado en parte de las entradas.
Aclaración: siempre y cuando tu subconjunto inicial de clases sea lo suficientemente general. De lo contrario, reentrena de vez en cuando.
¿Cómo podemos codificar las clases como entrada? Clasificación multiclase como clasificación binaria
Supongamos que tienes características que describen las clases. Entonces, solo necesitas codificar la clase como el conjunto de características que la describen. Por ejemplo, en el ejemplo de reconocimiento de productos minoristas, puedes caracterizar el artículo por su categoría, marca, peso, tamaño, color, descripción, ingredientes, etc.

Sin embargo, no es tan común tener características que describan las clases. ¿Cómo describirías la intención de un usuario en un chat? ¿Cómo describirías un modelo de automóvil o un animal?
Sería posible hacerlo. Pero, mi apuesta es que no tendrás acceso a tales datos.
¿Qué hacer en tal situación?
Un recurso en la manga
Debes estar de acuerdo en que tienes las características de las entidades pertenecientes a esa clase, ¿verdad? En ese caso, puedes obtener características sobre la distribución de las observaciones en esa clase. Valores estadísticos como el promedio, mínimo, máximo y varianza de las características para las observaciones en esa clase. Ahora tienes características que describen la clase. De nada.
Oye Kelwin, pero sabes, ¿no son las características algo anticuado? Todos trabajamos con deep learning hoy en día y dejamos que el modelo aprenda sus propias características. Me alegra que preguntes, aprendiz.
¿Quieres profundizar en esta idea?
Agenda una reunión con Kelwin Fernandes
Conoce a Kelwin Más información
Puedes entrenar una red neuronal siamesa que responda la pregunta:
¿Pertenecen estas dos observaciones a la misma clase?
O, en un lenguaje más formal:

Ahora, puedes hacer la pregunta comparando tu nueva observación de prueba contra todos los puntos de datos de entrenamiento, agregar las probabilidades por clase (por ejemplo, máximo, promedio) y devolver la clase con la puntuación más alta. Básicamente, puedes transformar un problema multiclase en uno de aprendizaje de similitud.
¿Estás loco? Esto no escalará en absoluto. Bueno, sí escalará. En primer lugar, solo necesitas indexar todas las observaciones de entrenamiento. Así, siempre que llegue nueva entrada, ejecutas tu red neuronal en la instancia de entrada para obtener sus características latentes más una comparación simple de vecinos más cercanos contra todos los otros puntos de datos.
¿Aún así, puedes imaginarte haciendo eso sobre millones de observaciones? Por supuesto que no, pero siempre puedes elegir pivotes que representen tu clase adecuadamente utilizando cualquier técnica, como k-medoids en el espacio latente. Facilísimo.
Ahora tienes un modelo escalable que se adapta a nuevas clases sin necesidad de reentrenamiento.
Hemos utilizado este truco en varias industrias y casos de uso, y siempre se ha pagado solo.
Curso
The Machine Learning Spectrum
Aprende más trucos como este en nuestro curso de Machine Learning.
Ganas mucha eficiencia operativa, además de mitigar el problema de clases con baja frecuencia.
¿Ya no es relevante una clase? Retira sus observaciones de tu índice.
¿Hay una clase nueva? Añade nuevas observaciones a tu índice.
¡Así de fácil!
Hay un par de trucos adicionales que podemos enseñarte, pero tendrás que esperar a otro artículo. Tengo que irme. Pero tú no. Así que suscríbete ahora a nuestro boletín a continuación para mantenerte informado.
