Supongamos que quiero aprender un clasificador que toma un vector de números como entrada y le da una etiqueta de clase como salida. Mis datos de entrenamiento consisten en una gran cantidad de pares de entrada-salida.
Sin embargo, cuando vengo a probar algunos datos nuevos, estos datos generalmente solo están parcialmente completos. Por ejemplo, si el vector de entrada es de longitud 100, solo 30 de los elementos pueden tener valores, y el resto son "desconocidos".
Como ejemplo de esto, considere el reconocimiento de imágenes donde se sabe que parte de la imagen está ocluida. O considere la clasificación en un sentido general donde se sabe que parte de los datos está corrupta. En todos los casos, sé exactamente qué elementos en el vector de datos son las partes desconocidas.
Me pregunto cómo puedo aprender un clasificador que funcione para este tipo de datos. Simplemente podría establecer los elementos "desconocidos" en un número aleatorio, pero dado que a menudo hay más elementos desconocidos que conocidos, esto no parece una buena solución. O bien, podría cambiar aleatoriamente elementos en los datos de entrenamiento a "desconocidos" y entrenar con estos en lugar de los datos completos, pero esto podría requerir un muestreo exhaustivo de todas las combinaciones de elementos conocidos y desconocidos.
En particular, estoy pensando en las redes neuronales, pero estoy abierto a otros clasificadores.
¿Algunas ideas? ¡Gracias!
fuente
Respuestas:
Creo que hay una forma razonable de hacer que funcione con las redes neuronales.
Deje que su valor para desconocido sea 0. Ahora, en el entrenamiento, elige una entrada y pone aleatoriamente algunos de sus valores a 0 con probabilidad , donde p es su fracción esperada de entradas faltantes en el momento de la prueba. Tenga en cuenta que la misma entrada en diferentes iteraciones tendrá ceros en diferentes posiciones.p
No lo he visto antes, pero esto sería muy similar a hacer Dropout (un método de regularización bien conocido en Redes Neuronales) en las neuronas de entrada, en lugar de las neuronas ocultas. No creo que sea una buena idea hacerlo en general, pero si se ve obligado a hacerlo (como su caso), al menos está lo suficientemente teóricamente cerca de algo que se sabe que funciona.
fuente
Creo que hay algunas opciones que funcionan con cualquier clasificador:
Aparte de eso, podría usar clasificadores basados en árboles (por ejemplo, bosques aleatorios) y si un árbol necesita evaluar una división en una característica que falta, podría pasar los datos a ambos nodos secundarios.
Una tercera opción es usar un clasificador generativo que modele la distribución conjunta completa donde son sus entradas e la etiqueta de clasificación. Con eso, idealmente marginarías sobre las partes desconocidas de , es decir, probarías cualquier valor para las partes desconocidas de y promediarías los resultados ponderados por la probabilidad de esa imputación. Esto podría hacerse analíticamente en forma cerrada para algunos clasificadores, por ejemplo, un modelo de Análisis discriminante lineal, o aproximadamente mediante un muestreo de las incógnitas, por ejemplo, para una máquina de Boltzmann restringida o sus variantes profundas (que están relacionadas con las redes neuronales de avance).x y x xp(x,y) x y x x
fuente