Hay varias razones diferentes por las cuales implementar algoritmos desde cero puede ser útil:
1. Puede ayudarnos a comprender el trabajo interno de un algoritmo.
2. podríamos intentar implementar un algoritmo de manera más eficiente
3. podemos agregar nuevas características a un algoritmo o experimentar con diferentes variaciones de la idea central
4. evitamos problemas de licencia (por ejemplo, Linux vs. Unix) o restricciones de plataforma
5. queremos inventar nuevos algoritmos o implementar algoritmos que nadie haya implementado / compartido aún
6. no estamos satisfechos con la API y / o queremos integrarla más “naturalmente” en una biblioteca de software existente
Limitemos un poco más la frase “implementar desde cero” en el contexto de los 6 puntos que mencioné anteriormente. Cuando hablamos de “implementar desde cero”, debemos reducir el alcance para que esta pregunta sea realmente tangible. Hablemos de un algoritmo particular, la regresión logística simple, para abordar los diferentes puntos utilizando ejemplos concretos. Yo diría que la regresión logística se ha implementado más de mil veces.
- ¿Cuál es su viaje completo de aprendizaje / aplicación en Machine Learning / Data Science / NLP?
- ¿Debería un aspirante a científico de aprendizaje automático / científico de datos practicar problemas de kaggle?
- En la era del aprendizaje automático, IA, big data, etc., ¿qué tan útil es estudiar campos ya maduros como CS teóricas y bases de datos relacionales a nivel de posgrado, y luego pasar a la industria del software?
- ¿Es Data Science un futuro mejor que Java?
- Cómo prepararse para una entrevista de ciencia de datos o aprendizaje automático en una gran empresa tecnológica
Una razón por la que aún quisiéramos implementar la regresión logística desde cero podría ser que no tenemos la impresión de que comprendemos completamente cómo funciona; Leímos un montón de artículos y entendimos el concepto central. Usando un lenguaje de programación para la creación de prototipos (por ejemplo, Pyhon, MATLAB, R, etc.), podríamos tomar las ideas del papel e intentar expresarlas en código, paso a paso. Una biblioteca establecida, como scikit-learn, puede ayudarnos a verificar dos veces los resultados y ver si nuestra implementación, nuestra idea de cómo se supone que funciona el algoritmo, es correcta. Aquí, realmente no nos importa la eficiencia; Aunque pasamos tanto tiempo para implementar el algoritmo, probablemente deseamos utilizar una biblioteca establecida si queremos realizar un análisis serio en nuestro laboratorio de investigación y / o empresa. Las bibliotecas establecidas suelen ser más confiables: han sido probadas en batalla por muchas personas, personas que pueden haber encontrado ciertos casos extremos y se han asegurado de que no haya sorpresas extrañas. Además, también es más probable que este código haya sido altamente optimizado para la eficiencia computacional a lo largo del tiempo. Aquí, la implementación desde cero simplemente sirve para la autoevaluación. Leer sobre un concepto es una cosa, pero ponerlo en práctica es un
otro nivel de comprensión, y poder explicarlo a los demás es la guinda del pastel.
Otra razón por la que queremos volver a implementar la regresión logística desde cero puede ser que no estamos satisfechos con las “características” de otras implementaciones. Asumamos ingenuamente que otras implementaciones no tienen parámetros de regularización, o que no admite configuraciones de varias clases (es decir, a través de One-vs-All, One-vs-One o softmax). O si la eficiencia computacional (o predictiva) es un problema, tal vez queramos implementarlo con otro solucionador (por ejemplo, Newton vs. Descenso de gradiente vs. Descenso de gradiente estocástico, etc.). Pero las mejoras relacionadas con la eficiencia computacional no necesariamente tienen que ser en términos de modificaciones de los algoritmos, pero podríamos usar lenguajes de programación de nivel inferior, por ejemplo, Scala en lugar de Python, o Fortran en lugar de Scala … esto puede reducirse a ensamblar o código de máquina, o diseñar un chip que esté optimizado para ejecutar este tipo de análisis. Sin embargo, si usted es un profesional o investigador de aprendizaje automático (o “ciencia de datos“), esto es probablemente algo que debería delegar al equipo de ingeniería de software.
Volviendo a la pregunta principal: diferentes personas implementan algoritmos desde cero por varias razones. Personalmente, cuando implemento algoritmos desde cero, lo hago debido a la experiencia de aprendizaje.