10 votos

¿Cómo asegurarse de que la implementación de un algoritmo de aprendizaje automático es correcta?

Digamos que hay un algoritmo de aprendizaje automático (por ejemplo, de clasificación) que es bien conocido y que ha sido implementado por los creadores originales del algoritmo. Sin embargo, lo único que tienes es la posibilidad de utilizar el algoritmo pero no ver el código fuente.

Ahora quieres implementar este algoritmo y luego comprobar si tu implementación es correcta o no. Como no puedes usar los mismos valores de inicialización para los parámetros (porque no tienes acceso al código fuente de la implementación original) entonces no puedes esperar obtener exactamente los mismos resultados. Digamos que el algoritmo da como salidas probabilidades, entonces tu método podría dar un resultado ligeramente diferente al del método original.

Es cierto que su implementación podría dar los resultados de clasificación correctos como con la implementación original, pero las probabilidades podrían ser diferentes.

Ante esta situación, ¿cómo juzgaría usted que su aplicación es correcta?

¡Esta situación exacta ocurrió con un amigo cuya implementación dio los resultados correctos de clasificación, pero después de todo encontró un grave error en su código!

Entonces, ¿hay una manera de probar y validar la implementación de un algoritmo de aprendizaje automático en general? Independientemente del tipo de algoritmo (clasificación, regresión ... etc).

El único problema que veo es no poder utilizar los mismos valores iniciales para los parámetros. Entonces, tal vez haya algún tipo de prueba estadística que pueda probar los resultados con respecto a los valores iniciales de los parámetros de alguna manera.

2voto

matt Puntos 16

Hay varias métricas para el rendimiento del algoritmo (precisión, recall, f1, etc.). Yo empezaría por buscar un artículo de los autores del algoritmo en el que mencionen el tipo de datos con los que han probado su algoritmo y cuáles son los resultados (qué métrica mencionan) de su algoritmo en esos datos. Luego buscaría los mismos datos o datos similares, ejecutaría mi implementación en ellos y compararía los resultados con los suyos

0voto

Kim Puntos 1853

Sobre la prueba generalizada de los algoritmos de aprendizaje automático:

Sí, si existe un método de trabajo conocido, la comparación de su resultado con ese método sobre todos los parámetros posibles garantizará que su programa sea también un método de trabajo conocido. Esto suele ser imposible y siempre es inútil porque ya existe un método de trabajo conocido.

Si no hay un método de trabajo conocido, entonces en general no, como contrapunto considere este "código" que calcula los coeficientes de regresión:

$\hat{\beta} = (X'X)^{-1}X'y + \delta$ donde $\delta = 1000$ cuando $y[1] = \pi$ Si no, 0.

Esta implementación es correcta casi todo el tiempo (técnicamente correcta a.s., pero no bajo IEEE 754), y es computacionalmente intratable encontrar su error.

Sobre la aplicación de los métodos:

La práctica estándar es la misma que en todo el desarrollo de software: pequeños casos de prueba y validación constante contra algo conocido. Por ejemplo, si el modelo bajo ciertos parámetros tiene una solución de forma cerrada conocida o es equivalente a otro método, compruébalo.

También hay que tener en cuenta que los periódicos no son perfectos, en la mayoría de las reseñas literarias que hago suelo encontrar alguna errata. Algunas de estas erratas pueden provocar resultados incorrectos, así que comprueba siempre tus fuentes.

Hay una razón por la que los correos electrónicos aparecen en los artículos de las revistas (PISTA: es para poder contactar con los autores). También hay que tener en cuenta que los autores no suelen morder si eres amable con ellos. Simplemente sea cortés y demuestre que ha trabajado. Pero no esperes que se metan en tu código roto para encontrar un error.

Si se da el caso de que un autor no libera el código, o no te responde, entonces no utilices ese método, lo más probable es que la calidad del código fuera "lo suficientemente buena para publicarlo" pero eso es todo. Ciertamente no hay escasez de algoritmos de aprendizaje automático por ahí. También vale la pena comprobar quién ha citado el artículo en cuestión y ver si tiene algún código.

0voto

cboettig Puntos 56

¿Sabe lo que es "correcto" para su situación? Determine qué significa "correcto" y, a continuación, pruebe su aplicación con los datos y compruebe lo cerca que está.

A menos que la cobertura de sus pruebas sea del 100%, nunca sabrá si tiene un desagradable caso de error en su código. No lo sabrías si tuvieras los parámetros iniciales del algoritmo que estás modelando, a menos que tu prueba toque el código donde vive el bug.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X