Soy un R
programador de idiomas. También estoy en el grupo de personas que se consideran científicos de datos pero que provienen de disciplinas académicas distintas de la CS.
Sin embargo, esto funciona bien en mi papel como Científico de Datos, al comenzar mi carrera R
y tener solo conocimientos básicos de otros lenguajes de secuencias de comandos / web, me he sentido algo inadecuado en 2 áreas clave:
- Falta de un conocimiento sólido de la teoría de la programación.
- Falta de un nivel competitivo de habilidad en lenguajes más rápidos y de mayor uso como
C
,C++
yJava
, que podría utilizarse para aumentar la velocidad de la tubería y los cálculos de Big Data, así como para crear productos de DS / datos que pueden desarrollarse más rápidamente scripts de back-end o aplicaciones independientes.
La solución es simple, por supuesto: vaya a aprender sobre programación, que es lo que he estado haciendo al inscribirme en algunas clases (actualmente programación en C).
Sin embargo, ahora que estoy empezando a abordar los problemas # 1 y # 2 anteriores, me pregunto " ¿C
C++
Qué tan viables son los lenguajes y para Data Science? ".
Por ejemplo, puedo mover datos rápidamente e interactuar con los usuarios perfectamente, pero ¿qué pasa con la regresión avanzada, el aprendizaje automático, la minería de texto y otras operaciones estadísticas más avanzadas?
Asi que. puede C
hacer el trabajo: ¿qué herramientas están disponibles para estadísticas avanzadas, ML, AI y otras áreas de la ciencia de datos? ¿O debo perder la mayor parte de la eficiencia obtenida programando C
invocando R
scripts u otros lenguajes?
El mejor recurso que he encontrado hasta ahora en C es una biblioteca llamada tiburón , lo que da C
/ C++
la capacidad de utilizar las máquinas de vectores de soporte, la regresión lineal (no no lineal y otra de regresión probit multinomial avanzada como, etc) y una lista de otros (genial pero) funciones estadísticas.
Respuestas:
Haga lo contrario: aprenda C / C ++ para escribir extensiones R. Use C / C ++ solo para las secciones críticas de rendimiento de sus nuevos algoritmos, use R para construir su análisis, importar datos, hacer gráficos, etc.
Si quieres ir más allá de R, te recomiendo aprender Python. Hay muchas bibliotecas disponibles, como scikit-learn para algoritmos de aprendizaje automático o PyBrain para construir redes neuronales, etc. (y use pylab / matplotlib para trazar y cuadernos iPython para desarrollar sus análisis). Nuevamente, C / C ++ es útil para implementar algoritmos de tiempo crítico como extensiones de Python.
fuente
Como Andre Holzner ha dicho, extender R con la extensión C / C ++ es una muy buena manera de aprovechar lo mejor de ambos lados. También puede probar lo inverso, trabajando con C ++ y ocasionalmente llamando a la función de R con el paquete RInside o R. Aquí puede encontrar cómo
http://cran.r-project.org/web/packages/RInside/index.html http://dirk.eddelbuettel.com/code/rinside.html
Una vez que está trabajando en C ++, tiene muchas bibliotecas, muchas de ellas creadas para problemas específicos, otras más generales
http://www.shogun-toolbox.org/page/features/ http://image.diku.dk/shark/sphinx_pages/build/html/index.html
http://mlpack.org/
fuente
Estoy de acuerdo en que la tendencia actual es usar Python / R y vincularlo a algunas extensiones C / C ++ para tareas computacionalmente costosas.
Sin embargo, si desea permanecer en C / C ++, es posible que desee echar un vistazo a Dlib :
fuente
En mi opinión, idealmente, para ser un profesional más completo , sería bueno conocer al menos un lenguaje de programación para los paradigmas de programación más populares ( procesal , orientado a objetos , funcional ). Ciertamente, considero a R y Python como los dos lenguajes y entornos de programación más populares para la ciencia de datos y, por lo tanto, las principales herramientas de ciencia de datos.
Julia es impresionante en ciertos aspectos, pero trata de alcanzar a esos dos y establecerse como una importante herramienta de ciencia de datos. Sin embargo, no veo que esto suceda pronto, simplemente debido a la popularidad de R / Python , comunidades muy grandes , así como enormes ecosistemas de paquetes / bibliotecas existentes y recientemente desarrollados , que cubren una amplia gama de dominios / campos de estudiar.
Dicho esto, muchos paquetes y bibliotecas, enfocados en ciencia de datos, áreas de ML e IA, se implementan y / o proporcionan API en lenguajes diferentes a R o Python (para la prueba, vea esta lista curada y esta lista curada , ambos de los cuales son excelentes y dan una perspectiva sólida sobre la variedad en el campo). Esto es especialmente cierto para el software orientado al rendimiento o especializado . Para ese software, he visto proyectos con implementación y / o API principalmente en Java, C y C ++ (Java es especialmente popular en el segmento de big data de la ciencia de datos, debido a su cercanía con Hadoop y su ecosistema, y en la PNLsegmento), pero hay otras opciones disponibles, aunque en un grado mucho más limitado, basado en el dominio. Ninguno de estos idiomas es una pérdida de tiempo, sin embargo, debe priorizar el dominio de uno o todos con su situación laboral actual, proyectos e intereses. Entonces, para responder a su pregunta sobre la viabilidad de C / C ++ (y Java), diría que todos son viables , sin embargo, no como herramientas primarias de ciencia de datos, sino como secundarias .
Respondiendo a sus preguntas sobre 1) C como una herramienta potencial de ciencia de datos y 2) su eficiencia , diría que: 1) si bien es posible usar C para la ciencia de datos, recomendaría no hacerlo, porque tendría una muy buena dificultad para encontrar las bibliotecas correspondientes o, aún más, para tratar de implementar los algoritmos correspondientes usted mismo; 2) no debe preocuparse por la eficiencia, ya que muchos segmentos de código críticos para el rendimiento se implementan en lenguajes de bajo nivel como C, además, hay opciones para interconectar lenguajes de ciencia de datos populares con, por ejemplo, C (por ejemplo,
Rcpp
paquete para integración R con C / C ++: http://dirk.eddelbuettel.com/code/rcpp.html) Esto se suma a enfoques de rendimiento más simples, pero a menudo bastante efectivos, como el uso constante de la vectorización en R, así como el uso de varios marcos de programación paralela, paquetes y bibliotecas. Para ver ejemplos del ecosistema R, consulte Vista de tareas CRAN "Computación paralela y de alto rendimiento con R" .Hablando de ciencia de datos , creo que tiene mucho sentido mencionar la importancia del enfoque de investigación reproducible , así como la disponibilidad de varias herramientas que respaldan este concepto (para más detalles, vea mi respuesta relevante ). Espero que mi respuesta sea útil.
fuente
R es una de las herramientas clave para el científico de datos, lo que sea que hagas no dejes de usarlo.
Ahora hablando de C, C ++ o incluso Java. Son buenos idiomas populares. Si los necesita o los necesitará, dependerá del tipo de trabajo o proyectos que tenga. Por experiencia personal, existen tantas herramientas para los científicos de datos que siempre sentirá que necesita aprender constantemente.
Puede agregar Python o Matlab a cosas para aprender si lo desea y seguir agregando. La mejor manera de aprender es asumir un proyecto de trabajo utilizando otras herramientas con las que no se sienta cómodo. Si yo fuera tú, aprendería Python antes que C. Se usa más en la comunidad que C. Pero aprender C no es una pérdida de tiempo.
fuente
Como científico de datos, los otros lenguajes (C ++ / Java) son útiles cuando necesita incorporar el aprendizaje automático en un motor de producción existente.
Waffles es tanto una biblioteca de clase C ++ bien mantenida como un paquete de análisis de línea de comandos. Tiene aprendizaje supervisado y no supervisado, toneladas de herramientas de manipulación de datos, herramientas de datos dispersos y otras cosas como el procesamiento de audio. Como también es una biblioteca de clases, puede ampliarla según lo necesite. Incluso si usted no es el que desarrolla el motor C ++ (es probable que no lo sea), esto le permitirá crear prototipos, probar y entregar algo a los desarrolladores.
Lo más importante, creo que mi conocimiento de C ++ y Java realmente me ayuda a entender cómo funcionan Python y R. Cualquier lenguaje solo se usa correctamente cuando entiendes un poco lo que está sucediendo debajo. Al aprender las diferencias entre idiomas, puede aprender a explotar las fortalezas de su idioma principal.
Actualizar
Para aplicaciones comerciales con grandes conjuntos de datos, Apache Spark - MLLib es importante. Aquí puede usar Scala, Java o Python.
fuente
Me gustaría entender por qué necesitaría otro idioma (aparte de Python) si su objetivo es "pero qué pasa con la regresión avanzada, el aprendizaje automático, la minería de texto y otras operaciones estadísticas más avanzadas".
Para ese tipo de cosas, C es una pérdida de tiempo. Es una buena herramienta, pero en los ~ 20 años desde que salió Java, rara vez he codificado C.
Si prefiere el lado más funcional de programación de R, aprenda Scala antes de meterse en demasiados hábitos de procedimientos que codifican con C .
Por último aprenden a utilizar las bibliotecas de Hadley Wickham - que va a ahorrar un montón de tiempo haciendo la manipulación de datos.
fuente
Hay algunas herramientas de C ++ para estadísticas y ciencia de datos como ROOT https://root.cern.ch/drupal/ , BAT https://www.mppmu.mpg.de/bat/ , boost o OpenCV
fuente
No estoy seguro de si se ha mencionado todavía, pero también hay un wabbit vocal, pero podría ser específico solo para ciertos tipos de problemas.
fuente
Echa un vistazo a Intel DAAL que está en marcha. Está altamente optimizado para la arquitectura de CPU Intel y admite cálculos distribuidos.
fuente
Soluciones escalables de aprendizaje automático para Big Data:
Agregaré mis $ .02 porque hay un área clave que parece no haber sido abordada en todas las publicaciones anteriores: ¡ aprendizaje automático en big data !
Para Big Data, la escalabilidad es clave y R es insuficiente. Además, lenguajes como Python y R solo son útiles para interactuar con soluciones escalables que generalmente están escritas en otros idiomas. Hago esta distinción no porque quiera menospreciar a quienes los usan, sino solo porque es muy importante para los miembros de la comunidad de ciencia de datos comprender cómo son las soluciones de aprendizaje automático realmente escalables.
Hago la mayor parte de mi trabajo con big data en clústeres de memoria distribuida . Es decir, no solo uso una máquina de 16 núcleos (4 procesadores de cuatro núcleos en una sola placa base que comparte la memoria de esa placa base), utilizo un pequeño grupo de 64 máquinas de 16 núcleos. Los requisitos son muy diferentes para estos grupos de memoria distribuida que para entornos de memoria compartida y el aprendizaje automático de big data requiere soluciones escalables dentro de entornos de memoria distribuida en muchos casos.
También utilizamos C y C ++ en todas partes dentro de un producto de base de datos patentado. Todas nuestras cosas de alto nivel se manejan en C ++ y MPI, pero las cosas de bajo nivel que tocan los datos son todos largos y matrices de caracteres de estilo C para mantener el producto muy rápido. La conveniencia de las cadenas estándar simplemente no vale el costo computacional.
No hay muchas bibliotecas C ++ disponibles que ofrezcan capacidades distribuidas y escalables de aprendizaje automático: MLPACK .
Sin embargo, hay otras soluciones escalables con API:
Apache Spark tiene una biblioteca escalable de aprendizaje automático llamada MLib con la que puede interactuar.
También Tensorflow ahora tiene tensorflow distribuido y tiene una api C ++ .
¡Espero que esto ayude!
fuente