¿Cuáles son las ventajas y desventajas de usar R vs. C ++ para el aprendizaje automático?

Como Jeremy Miles ha enumerado sucintamente todos los principales puntos de diferencia, daré una opinión más subjetiva.

C ++ : en general, los proyectos de C ++ tienen un costo de iniciación más alto en términos de código de base que debe implementarse antes de poder construir las partes interesantes de su proyecto. A menos que tenga la suerte de encontrar una biblioteca C ++ que brinde la funcionalidad que está buscando, se encontrará implementando cosas bastante básicas que están fácilmente disponibles a través de bibliotecas en otros lenguajes de “nivel superior” como R, Python, etc.

Pero hay una recompensa significativa en términos de eficiencia, mayor control sobre la gestión de la memoria, etc. en el C / C ++ de “nivel inferior” (Esto es cierto en general, no solo para proyectos relacionados con ML). Si planea escribir código que (i) se ejecutará en muchos datos y la eficiencia es crítica, o (ii) se implementará en muchas máquinas (por ejemplo, un clúster distribuido), entonces es mejor apagado con el uso de C ++. Diría que Java es más preferible que C ++ aquí debido a un ecosistema de biblioteca más rico (Weka, Mahout, Hadoop, etc.) pero bueno, quién quiere comenzar una guerra de llamas.

R, Python, etc .: estos lenguajes tienen muchas bibliotecas de soporte que hacen que los algoritmos ML populares como SVM, K-means, etc. se sientan como operaciones integradas, es decir, bloques de construcción que puede usar para hacer cosas más interesantes. Esto es extremadamente útil para la creación rápida de prototipos, trazar gráficos y obtener un código útil .

La conclusión es que si eres un pirata informático individual en algún conjunto de datos o estás probando el algoritmo que acabas de aprender en clase, R (o Python) es tu amigo. (En una nota relacionada, esta publicación de blog muestra las preferencias de los competidores en los concursos de minería de datos de Kaggle (compañía): cómo los competidores de Kaggle usan R).

Si tiene un equipo de desarrollo de programadores experimentados que trabajan en la próxima gran idea de red neuronal distribuida para identificar gatos en videos de YouTube (En una gran red de computadoras, evidencia de aprendizaje automático), probablemente esté mejor con C ++ / Java.

Por supuesto, no hay límite duro entre los dos.

C ++:

  • Será (mucho) más rápido.
  • Puede evitar las limitaciones de memoria (aunque puede ser complicado).

R:

  • Probablemente ya tenga las funciones que desea incorporar.
  • Probablemente sea más fácil.
  • Tiene más código portátil. (Es fácil dar el código a cualquiera para que lo ejecute, sin preocuparse por las bibliotecas, etc.).
  • Probablemente deba preocuparse menos por un error: usted mismo codificará menos.
  • Puede ejecutar código escrito en C ++ en R.
  • Los gráficos serán más fáciles de producir.

Jeremy Miles resumió casi todo lo que hay. También me gustaría agregar que hay un perfil más grande de bibliotecas para R dirigidas al aprendizaje automático que en C ++. En otras palabras, R ofrece una ventaja en términos del ecosistema cuando se trata del dominio en su pregunta.

Esto no responde a su pregunta, pero puede considerar usar Python. Ofrece lo mejor de ambos mundos. Puede trazar, obtener los beneficios de las bibliotecas y el ecosistema y también obtener rendimiento escribiendo las partes más lentas en C ++ e interactuando con Python.

C ++ gana si no planea escribir programas complejos que tendrán que adaptarse a los requisitos cambiantes. No es un lenguaje altamente productivo para la mayoría de las personas, pero puede obtener el mejor rendimiento de él.

R es bueno para los conjuntos de datos en memoria y ya tiene muchas baterías incluidas. Puede obtener resultados significativos en una tarde, sin tener que construir una gran cantidad de su propia infraestructura.

Por otra parte, usaría Clojure (con Java para las cosas que necesitan ser optimizadas).

Pros de R;

  • bien armado para una gran cantidad de trabajo diferente
  • bibliotecas avanzadas y en desarrollo
  • lenguaje realmente flexible
  • gran comunidad de usuarios

C ++

  • por supuesto más rápido con el uso adecuado
  • código difícil de manejar si estás centrado en las estadísticas.
  • necesita más código para ser escrito
  • si eres codificador es más sensato para ti.
  • conveniente para usar en un producto desplegable

R es un proyecto de código abierto mantenido por el estadístico y el matemático. Además, cuenta con la mecánica elegante y ágil de la sintaxis y la interfaz abierta para el desarrollo secundario. Pero R carece de la excelente interfaz de usuario. Se requiere una sólida formación técnica y una buena experiencia para utilizar R bien. esProc es mucho mejor ya que es más fácil de usar con sintaxis ágil. Es similar a R. Pero puedes usarlo bien aunque no tengas una sólida formación técnica.

Machine Learning es una solución de recuadro negro, incluso si escribe todo el código usted mismo.
Conoce los datos y los resultados, pero no puede verificar el funcionamiento interno a mano.
La informática no es el problema, es tener los datos correctos, el modelo correcto y analizarlos correctamente.
Pasará la mayor parte de su tiempo comprobando los resultados y pensando en cómo podría mejorarse el modelo.
Si estuviera escribiendo una novela en un procesador de palabras, nunca pensaría “si mi procesador de textos fuera solo unos segundos más rápido, sería una novela mejor o se publicaría un minuto antes”.
Si usa paquetes en R o Python, estos serán desarrollados por expertos muy por encima de las habilidades de un codificador normal. Los paquetes habrán sido probados por miles de usuarios y las fallas corregidas. Si desarrolla su propio paquete en C ++, eventualmente obtendrá resultados basura dispersos unos segundos más rápido después de varios meses de tediosa programación.
Es una lectura cansada sobre cómo Python, R, etc. son lentos cuando lento no está definido. Ambos son muy rápidos en términos de su necesidad de ser rápidos y Python se basa en C y puede ejecutar código en C, etc.

Si bien no he usado R, me gustaría señalar esta discusión sobre los beneficios de C ++ para el aprendizaje automático:

  • puede mapear el proceso de aprendizaje automático en un hardware diferente como GPU, FPGA y dispositivo de red
  • puedes construir la estructura y algoritmos
  • puede apuntar a dispositivos como teléfonos inteligentes y servidores en la nube con el mismo código

R es un lenguaje de programación de código abierto y un entorno de software para computación estadística y gráficos. El lenguaje R es ampliamente utilizado entre los estadísticos para desarrollar software estadístico y análisis de datos. No es C ++, y no es algo que incluso deba considerar usar para Machine Learning, solo use Lisp, Python o ProLog

More Interesting

¿Cómo comenzaría con el cambio de funciones o el desarrollo de indicadores de funciones en mi empresa? Actualmente utilizamos ramificaciones.

¿Cuáles son las diferentes técnicas de minería de texto?

¿Los departamentos de policía en los EE. UU. Usan el aprendizaje automático para encontrar patrones en los datos delictivos?

¿Cómo tratan SVM y ANN los valores atípicos?

¿Cómo se pueden engañar los modelos de clasificación existentes?

¿Por qué Intel Xeon Phi no se usa mucho para acelerar el entrenamiento de aprendizaje profundo?

¿Cuándo necesitamos tener un mayor número de unidades ocultas que el número de unidades de entrada y viceversa?

¿El submuestreo de un entrenamiento desequilibrado es una buena idea cuando los datos del mundo real, usaré mi clasificador, también estarán desequilibrados?

¿Qué algoritmos son los mejores para el filtrado de spam? ¿Cómo deberían implementarse?

OpenCV: ¿Cómo creo un conjunto de datos de descriptores de imagen con SIFT?

Cómo etiquetar objetivamente objetos con etiquetas que son subjetivas, en sistemas expertos

¿Cuál es la relación entre los modelos gráficos probabilísticos y las redes neuronales (aprendizaje profundo)?

¿Cuáles son las preguntas más importantes en el aprendizaje automático?

¿Cuáles son algunos de los problemas de aprendizaje automático (nivel introductorio) que un estudiante de economía puede modelar con los datos disponibles para una tesis de licenciatura?

¿Qué sugerencias le daría Roman Trusov a una persona que acaba de ingresar a ML?