¿Cómo eligen Kagglers el algoritmo de aprendizaje automático de mejor rendimiento para un conjunto de datos dado?

Algoritmos

Hay algunos algoritmos de ML para algunos tipos de conjuntos de datos.

Por ejemplo, CNN para la clasificación de imágenes y FTRL / FFM para la predicción de CTR.

Aparte de esos, es común probar muchos algoritmos, ver cuáles funcionan mejor y seleccionarlos y / o combinarlos.

Por lo general, pruebo la máquina de aumento de gradiente, redes neuronales, máquinas de factorización, bosques aleatorios, árboles extra aleatorios, FTRL, regresión logística y KNN. Luego uso conjuntos de apilamiento con predicciones de modelos individuales.

Validación

Para comparar los rendimientos de diferentes modelos, se utiliza la validación cruzada n veces para conjuntos de datos invariables en el tiempo y la validación fuera de tiempo para conjuntos de datos con variantes temporales.

Hay una frase en Kaggle que dice “en CV confiamos”, que enfatiza la importancia de la validación cruzada. Al seleccionar las presentaciones finales, es mejor confiar en sus puntajes internos de CV que en los puntajes de la tabla de clasificación pública.

Implementación

Cualquier implementación que funcione bien y sea fácil de usar. Estoy usando:

  • XGBoost, LightGBM para GBM
  • Keras para NN
  • Vowpal Wabbit para FTRL, Regresión logística, retroalimentación NN
  • Scikit-Learn para regresión logística, bosques aleatorios, árboles extra aleatorizados, KNN
  • LibFM, LibFFM para máquinas factorizadas
  • Kaggler para clasificación binaria en línea con conjuntos de datos dispersos.

Si bien algunos otros profesionales de ML más experimentados pueden darle una breve guía práctica de CÓMO, quiero hacer un comentario acerca de “probar muchos algos”

Suponga que ya sabe sobre la división de trenes de prueba y la validación cruzada simple. Divide su conjunto de datos y evalúa el aumento, NN y el modelo lineal simple con hiperparámetros predeterminados, y ve que, por ejemplo, aumenta las ganancias. En este punto, volverá a tomar todo el conjunto de datos e intentará encontrar los mejores parámetros para aumentar y evaluar su algoritmo en los conjuntos de prueba. ¿Que esta mal aquí? ¡Está esencialmente usando los mismos datos varias veces y, por lo tanto, ya está sobreajustando! Entonces, para hacer una estimación imparcial de lo que es mejor algo / hiperparámetros, necesita tener una capa de datos que estaba completamente fuera de la muestra EN ESTE PUNTO DE ESTIMACIÓN. Por ejemplo, si desea elegir el mejor modelo iterativo y luego los hiperparámetros, ya necesita dividir los datos en 3 partes, luego, en la primera parte, haga k-fold para algo, luego en la siguiente parte k-fold para hiperparámetros, etc. si también agrega variables selección necesita 4 validación cruzada dividida anidada.

Incluso si solo está mirando las distribuciones de datos, ¡ya te está sesgando teóricamente hacia algo!

También mire el teorema de No hay almuerzo gratis – Wikipedia. Teniendo esto en cuenta, teóricamente no sabes de antemano qué funcionaría mejor con el tipo de datos presentado (aunque, por supuesto, los chicos con experiencia podrían identificar mejor algo, como NN para datos de texto / imagen y omitir uno de los pasos anidados). Por lo tanto, para tener el mejor rendimiento esperado (promediado en muchas competiciones / conjuntos de datos), debe realizar una estimación muy cuidadosa del error de prueba imparcial.