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?
No es excesivo el ajuste (según la definición). Se conserva la información del objetivo del conjunto de prueba. Los semi-supervisados permiten generar un conjunto de datos sintéticos adicionales para entrenar el modelo. En el enfoque descrito, los datos de entrenamiento originales se mezclan sin ponderar con sintéticos en una proporción de 4: 3. Por lo tanto, si la calidad de los datos sintéticos es deficiente, el enfoque resultaría desastroso. Supongo que para cualquier problema donde las predicciones sean inciertas, el conjunto de datos sintéticos sería de baja precisión. Supongo que si la estructura subyacente es muy compleja y el sistema tiene poco ruido, puede ayudar a generar datos sintéticos. Creo que el aprendizaje semi-supervisado es bastante importante dentro del aprendizaje profundo (no es mi experiencia), donde también se debe aprender la representación característica.
He intentado reproducir una mayor precisión con entrenamiento semi supervisado en varios conjuntos de datos con rf y xgboost sin ningún resultado positivo. [Siéntase libre de editar mi código.] Noté que la mejora real de la precisión usando semi-supervisado es bastante modesta en el informe de kaggle, ¿tal vez al azar?
fuente
Según esta definición: "El sobreajuste ocurre cuando un modelo estadístico describe un error aleatorio o ruido en lugar de la relación subyacente" (wikipedia), la solución no es sobreajustar.
Pero en esta situación:
- Los datos de prueba son una secuencia de elementos y no un conjunto fijo de elementos.
O
- El proceso de predicción no debe contener una fase de aprendizaje (por ejemplo, debido a problemas de rendimiento).
La solución mencionada es demasiado adecuada. Porque la precisión del modelado es más que situaciones reales.
fuente