Siendo un experto en ciencia de datos, ¿es necesario implementar todo desde cero?

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.

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.

La mejor manera de aprender (cualquier) algoritmo es implementarlo. Dicho esto, Machine Learning (ML) es un área enorme con toneladas de algoritmos. Mi recomendación sería elegir un área de interés y profundizar en ella.

Lo que debe implementar depende de su definición de “chico de ciencia de datos”.

Si su definición gira en torno a la extracción de características, seleccione su dominio y lea qué características explican mejor el proceso subyacente. Implemente algoritmos de extracción de características. En el reconocimiento de voz, puede intentar implementar MFCC o PNCC. Para aplicaciones de procesamiento de imágenes, intente implementar SIFT y SURF.

Si su definición gira en torno a la teoría de Estadística y Optimización, implemente métodos de optimización tales como descenso de gradiente, programación lineal, minimización de rango y norma, de lo contrario, elija cajas de herramientas estándar como la caja de herramientas de optimización convexa de Stanford. Para implementar esto, es posible que deba usar cajas de herramientas de álgebra lineal como BLAS o Eigen o LAPACK. Si tiene aventuras, también puede ir y construir su propia caja de herramientas de álgebra lineal (¡NO RECOMENDADO!).

Si su definición gira en torno a algoritmos de ML, comience con la implementación de regresión lineal y logística, árboles de decisión y bosques aleatorios. Puede seguir probando modelos de mezcla gaussiana, SVM y redes neuronales a medida que avanza. Estos algoritmos eventualmente generan una función de costo que requiere el kit de herramientas de optimización mencionado anteriormente para optimizar.

Gracias por el A2A.

Aquí hay algunas respuestas muy buenas. Sebastian Raschka, Ricardo Vladimiro y Quora User presentan buenos casos de por qué querrías hacerlo, y cada respuesta hasta ahora es un buen caso para cuando no lo harías.

Pensaré desde mi perspectiva (es decir, cuando lo haga y cuando no), para poner las cosas en un nivel más personal. Si haces o no alguno de estos depende de tu objetivo.

  1. Aprender cómo funciona un nuevo algoritmo (para mí) (ya mencionado, pero importante). Esto podría ser una reimplementación completa, o el uso de una biblioteca existente (por ejemplo, Theano) para algo que conozco, pero no del todo, cómo encajan entre sí. Realmente no entiendes algo hasta que hayas trabajado con él, y me gusta trabajar con cosas tanto en matemáticas como en código.
  2. Adaptar un algoritmo a un nuevo propósito o a un tipo diferente de datos. He hecho esto mucho, en términos de, por ejemplo, hacer que los algoritmos de ML que funcionan con datos iid funcionen con datos autocorrelacionados de alguna manera “mejor”.
  3. Vuelva a implementar el algoritmo en, por ejemplo, Haskell para comprender mejor las matemáticas detrás de él.
  4. Una versión “barata” de 2: al pronosticar, cambiar la forma en que los datos se envían a cualquier biblioteca que esté usando, de modo que para varios pasos más adelante construyamos el paso 2 sobre los pronósticos del paso 1 y así sucesivamente. (No es realmente sobre lo que pregunta la pregunta, pero es algo que siempre debe considerar al pronosticar).
  5. Al hacer 4: cambiar el algoritmo (por ejemplo, si estamos prediciendo intervalos en lugar de la media) para ajustar el hecho, existe una incertidumbre adicional de los pronósticos.

La lista no es completa, pero espero que te dé algunas ideas.

Si es posible. Pero preguntas importantes es ¿por qué harías eso?
Como científico de datos, preferiría concentrarse en los problemas de datos que en la tecnología / algoritmo subyacente. Una cierta comprensión de los algoritmos subyacentes definitivamente ayudará, pero más allá de eso habrá una exageración.
Echa un vistazo a este blog en Kaggle: prácticas de ingeniería en ciencia de datos
Para citar a Vik P, uno de los principales competidores de Kaggle:
“El factor más importante relacionado con los datos (para mí) es cómo prepara los datos y qué características diseña. La selección de algoritmos es importante, pero mucho menos”.
Puede leer más sobre esto aquí: ¿En qué se centran los principales competidores de Kaggle?
En resumen, se trata más de comprender sus datos y menos de algoritmos. Espero que esto ayude.

No. Recomendaría implementar uno o dos algoritmos simples como k-means (sin supervisión) y árboles de decisión (supervisados). Aunque no es necesario, te daría una buena comprensión.

Como mencionó primero PNL, recomendaría estudiar acerca de los enfoques computacionales de PNL y codificar las API (NLTK, Spacy, etc.). Primero comience con los ejemplos mencionados y luego continúe probando nuevos datos de texto. Obtenga datos de twitter, facebook, noticias.

Hay un conjunto de repositorios que pueden resultarle útiles:

1. UCI ML Repository (UCI Machine Learning Repository): este es un repositorio muy famoso de 350 conjuntos de datos utilizados a menudo para la evaluación comparativa en los documentos

2. Conjuntos de datos de Kaggle (Conjuntos de datos | Kaggle): Kaggle ha compilado una lista de conjuntos de datos que utiliza para sus competencias para probar diferentes algoritmos. Contiene reseñas de Amazon, conjuntos de datos de Twitter, etc.

Además, no estoy seguro de lo que quieres decir al combinar todos estos enfoques. La mayoría de los productos comerciales son incrementales y utilizan muchas de estas bibliotecas de código abierto.

Pregunta bastante difícil de responder, esta.

¿Es posible implementar? Sí. Si no está seguro, incluso puede comenzar con el código abierto y agregar sus propias capas de innovación a los códigos y plataformas.

¿Deberías hacerlo? Lo más inteligente, como diría la mayoría, es reutilizar lo que ya está disponible. Sin embargo, no tengo muy claro tu objetivo para construir esto desde cero.

Si está construyendo un producto y tiene miedo de cómo el “producto / tecnología” subyacente puede retenerlo en una etapa posterior, tal vez sea el enfoque correcto para construir cosas desde cero. Pero si eso no es una preocupación, probablemente el mayor beneficio de construir desde cero (y tal vez el único), es que te enseñará las mismas cosas que ninguna otra pedagogía.

En la mayoría de los casos, sin embargo, yo diría que comprendan / re-diseñen, en lugar de construir todo desde cero.

Tu pregunta es bastante compleja. Si al implementar desde cero quiere decir elegir los algoritmos y luego construir productos de datos a partir de ellos, entonces sí, casi todo el trabajo se realiza desde cero.

Si, por otro lado, lo que quiere decir es reescribir algoritmos cada vez que los usa, entonces no, no es necesario implementarlo desde cero para un científico de datos, aunque es muy probable que sea útil para un investigador o experto en ML.

Tengo mucho respeto por los investigadores y expertos en ML. Hacen posible mi trabajo con mucho menos esfuerzo y mejores resultados. Si bien puedo entrar en el proceso de desarrollar mis propios algoritmos, haré un trabajo mucho peor que ellos. Mis algoritmos serán más lentos, más débiles y la peor parte: no comprobados. Podría reescribir algo que ya existe, pero considero que eso no tiene sentido para el trabajo diario. ¡Sin embargo, sería un proyecto paralelo divertido y perspicaz! Si ese es tu punto, ¡adelante!

Por otro lado, mi tiempo es mucho más valioso para la organización dado mi conocimiento de dominio que se espera que sea mucho mejor que los investigadores técnicos y expertos. Además, la ciencia de datos no se limita a la implementación de algoritmos ML.

Lo mismo se aplica a las tecnologías de big data. No podría construir mis propios productos de Big Data y, aunque podría construir mis propios canales de datos, tengo ingenieros de datos que, como la gente de ML, hacen un trabajo mucho mejor que yo.

Para resumir, realmente depende de lo que quiera decir al implementar desde cero, pero tenga en cuenta que a medida que el área se expanda, las personas inevitablemente se volverán cada vez más especializadas. Esto ya está sucediendo. Es el grupo de personas que juntos construyen los sistemas y los dan vida a la ciencia de los datos, no una persona solitaria que quiera hacer todo por sí mismo.

¡La mejor de las suertes!

En su mayor parte, es bueno ir si sabe cómo usar los paquetes existentes para hacer las cosas. Solo cuando decida escribir su propio algoritmo, necesitará conocer muchas cosas en profundidad.

Pero al menos, le recomendaría que realice el curso del profesor Andrew Ng sobre aprendizaje automático. Le da una buena idea de cómo se implementan los algoritmos. Es decir, podrá comprender que ML se trata de traducir datos en funciones …