Estaba leyendo el informe de la solución ganadora de una competencia de Kaggle ( Clasificación de malware ). El informe se puede encontrar en esta publicación del foro . El problema era un problema de clasificación (nueve clases, la métrica era la pérdida logarítmica) con 10000 elementos en el conjunto de trenes, 10000 elementos en el conjunto de prueba.
Durante la competencia, los modelos fueron evaluados contra el 30% del conjunto de prueba. Otro elemento importante es que los modelos estaban funcionando muy bien (cerca del 100% de precisión)
Los autores utilizaron la siguiente técnica:
Otra técnica importante que presentamos es el aprendizaje semisupervisado. Primero generamos pseudo etiquetas del conjunto de pruebas eligiendo la probabilidad máxima de nuestro mejor modelo. Luego, pronosticamos el conjunto de prueba nuevamente de forma cruzada, tanto con los datos del tren como con los de la prueba. Por ejemplo, el conjunto de datos de prueba se divide en 4 partes A, B, C y D. Utilizamos todos los datos de entrenamiento, y los datos de prueba A, B, C con sus pseudo etiquetas, juntos como el nuevo conjunto de entrenamiento y predecimos la prueba. conjunto D.
El mismo método se usa para predecir A, B y C. Este enfoque, inventado por Xiaozhou, funciona sorprendentemente bien y reduce la pérdida de validación cruzada local, la pérdida de LB pública y la pérdida de LB privada. El mejor modelo de aprendizaje semisupervisado puede alcanzar 0.0023 en la pérdida de registro de LB privado, que es el mejor puntaje en todas nuestras soluciones.
Realmente no veo cómo puede mejorar los resultados. ¿Es porque el 30% del conjunto de prueba se "filtró" y era una forma de utilizar esta información?
¿O hay alguna razón teórica que explique por qué funciona?