Question

Je suis un programmeur de langue R. Je suis aussi dans le groupe de personnes qui sont considérés comme scientifiques de données, mais qui viennent de disciplines autres que CS.

fonctionne bien dans mon rôle en tant que scientifique des données, mais, en commençant ma carrière dans R et seulement avoir des connaissances de base d'autres langages de script / web, je me suis senti un peu insuffisant dans 2 domaines clés:

  1. Le manque d'une solide connaissance de la théorie de la programmation.
  2. Le manque d'un niveau concurrentiel de compétences dans plus rapide et plus largement les langues utilisées comme C, C++ et Java, qui pourrait être utilisé pour augmenter la vitesse du pipeline et des calculs Big Data, ainsi que pour créer DS / produits de données qui peuvent être plus facilement développé dans des scripts dorsaux rapides ou des applications autonomes.

La solution est simple bien sûr - vont en apprendre davantage sur la programmation, qui est ce que je fais en vous inscrivant dans certaines classes (actuellement de programmation C).

Cependant, maintenant que je commence à traiter les problèmes # 1 et # 2 ci-dessus, je reste à me demander « Juste comment sont viables comme langues C et C++ pour la science des données? ».

Par exemple, je peux déplacer des données très rapidement et d'interagir avec les utilisateurs très bien, mais qu'en est-régression avancé, apprentissage, text mining et d'autres opérations statistiques plus avancées?

Alors. peut C faire le travail - quels sont les outils disponibles pour les statistiques avancées, ML, AI, et d'autres domaines de la science des données Ou dois-je perdre la majeure partie de l'efficacité acquise par la programmation en C en appelant les scripts R ou d'autres? langues?

La meilleure ressource que j'ai trouvé jusqu'ici dans C est une bibliothèque appelée Shark , qui donne C / C++ la possibilité d'utiliser support Vector Machines, la régression linéaire (non non linéaire et d'autres régression avancées comme probit multinomial, etc.) et une liste d'autres (grands), mais les fonctions statistiques.

Était-ce utile?

La solution

  

Ou dois-je perdre la majeure partie de l'efficacité acquise par la programmation en C en faisant appel à des scripts R ou d'autres langues?

Faire le contraire: apprendre C / C ++ pour écrire des extensions de R. Utilisez C / C ++ uniquement pour les performances des sections critiques de vos nouveaux algorithmes, utilisez R pour construire votre analyse, les données d'importation, etc make parcelles.

Si vous voulez aller au-delà de R, je vous recommande de python d'apprentissage. Il existe de nombreuses bibliothèques disponibles telles que scikit-learn pour les algorithmes d'apprentissage machine ou PyBrain pour la construction de réseaux de neurones, etc. (et l'utilisation pylab / matplotlib pour tracer et iPython pour développer vos analyses). Encore une fois, C / C ++ est utile pour mettre en œuvre des algorithmes temps critiques comme des extensions python.

Autres conseils

Andre Holzner a dit, l'extension R avec l'extension C / C est un très bon moyen pour tirer parti du meilleur des deux côtés. vous pouvez aussi essayer l'inverse, travailler avec C ++ et appelant ocasionally fonction de R avec le package RInside o R. Ici vous pouvez trouver comment

http://cran.r-project.org/web/packages/RInside/index .html http://dirk.eddelbuettel.com/code/rinside.html

Une fois que vous travaillez en C ++, vous avez de nombreuses bibliothèques, beaucoup d'entre eux ont construit pour des problèmes spécifiques, d'autres plus générales

http://www.shogun-toolbox.org/page/features/ http://image.diku.dk/shark/sphinx_pages/build/html/index.html

http://mlpack.org/

Je suis d'accord que la tendance actuelle est d'utiliser Python / R et de le lier à des extensions C / C ++ pour les tâches informatiquement coûteuses.

Cependant, si vous voulez rester en C / C ++, vous voudrez peut-être jeter un oeil à Dlib :

  

Dlib est une bibliothèque multi-plateforme polyvalente C ++ conçu en utilisant la programmation des contrats et des techniques C ++ modernes. Il est un logiciel open source et sous licence du logiciel Boost.

 entrer image description ici

À mon avis, idéalement, être un plus bien arrondie professionnel, il serait bon de savoir au moins un langage de programmation pour les plus populaires paradigmes de programmation ( procédure , orientée objet , fonctionnel ). Certes, je considère R et Python comme les deux la plupart des langages de programmation populaires et environnements pour la science des données et, par conséquent, primaire outils scientifiques de données.

Julia est impressionnant dans certains aspects, mais il essaie de rattraper les deux et se positionner comme un outil scientifique important de données. Cependant, je ne vois pas ce qui se passe dans un proche avenir, tout simplement en raison de R / Python s popularité , très grand communautés , ainsi que énorme écosystèmes de existants et nouvellement développé packages / bibliothèques , couvrant une très large gamme de domaines / domaines d'études.

Cela dit, beaucoup de paquets et les bibliothèques, axées sur la science des données, les zones ML et AI, sont mis en œuvre et / ou fournir API dans les langues autres que R ou Python (pour la preuve, voir cette liste et commissaire de l'exposition http://dirk.eddelbuettel.com/code/rcpp. html ). Ceci est en plus simple, mais souvent assez efficace, les approches de la performance, telles que l'utilisation cohérente de vectorisation en R ainsi que l'utilisation de différents cadres de programmation parallèle, des packages et des bibliothèques. Pour des exemples de l'écosystème R, voir CRAN Tâche Voir « haute performance et calcul parallèle avec R « .

En parlant de la science des données , je pense que cela fait tout à fait beaucoup de sens pour souligner l'importance de recherche reproductible approche ainsi que la disponibilité de divers outils , en soutenant ce concept (pour plus de détails, s'il vous plaît voir ma réponse pertinente). J'espère que ma réponse est utile.

R est l'un de l'outil clé pour les scientifiques de données, ce que jamais vous ne ne vous arrêtez pas l'utiliser.

Maintenant parlons de C, C ++ ou même Java. Ils sont de bons langues populaires. Que vous avez besoin ou aurez besoin dépendent du type d'emploi ou de projets que vous avez. De son expérience personnelle, il y a tellement d'outils là-bas pour les scientifiques de données que vous vous sentirez toujours comme vous avez besoin en permanence à l'apprentissage.

Vous pouvez ajouter Python ou Matlab à des choses à apprendre si vous voulez et continuer à ajouter. La meilleure façon d'apprendre est de prendre un projet de travail en utilisant d'autres outils que vous n'êtes pas à l'aise avec. Si je devais vous, j'apprends Python avant C. Il est plus utilisé dans la communauté que C. Mais l'apprentissage C est pas une perte de temps.

En tant que scientifique de données autres langages (C ++ / Java) sont utiles lorsque vous avez besoin incorporez l'apprentissage de la machine dans un moteur de production existant.

Waffles est à la fois une bibliothèque de classes bien entretenue C ++ et package d'analyse de ligne de commande. Il est obtenu supervisé et l'apprentissage non supervisé, des tonnes d'outils de manipulation de données, des outils de données rares, et d'autres choses telles que le traitement audio. Comme il est aussi une bibliothèque de classes, vous pouvez l'étendre que vous avez besoin. Même si vous n'êtes pas un développement du moteur C ++ (les chances sont que vous ne serez pas), cela vous permettra de prototyper, tester, et quelque chose de la main sur les développeurs.

Plus important encore, je crois que ma connaissance de C ++ et Java vraiment aider moi à comprendre comment le travail Python et R. Toute langue est utilisé correctement lorsque vous comprenez un peu plus sur ce qui se passe en dessous. En apprenant les différences entre les langues que vous pouvez apprendre à exploiter les points forts de votre langue principale.

Mise à jour

Pour les applications commerciales avec de grands ensembles de données, Apache Spark - MLlib est important. Ici, vous pouvez utiliser Scala, Java ou Python.

Je serais désireux de comprendre pourquoi vous besoin d'une autre langue (formulaire en dehors Python) si votre objectif est « mais qu'en régression avancée, apprentissage, text mining et d'autres opérations statistiques plus avancées ».
Pour ce genre de chose, C est une perte de temps. Il est un bon outil pour avoir, mais dans les ~ 20 ans depuis Java est sorti, je l'ai rarement codé C.
Si vous préférez le côté plus fonctionnel programmation de R, apprendre Scala avant d'entrer dans trop de mauvaises habitudes de procédure de codage avec C.
Enfin apprendre à utiliser les bibliothèques de Hadley Wickham -. ils vous faire économiser beaucoup de temps à faire la manipulation de données

Il y a quelques outils C ++ pour les statistiques et la science des données comme ROOT https://root.cern.ch/drupal / , BAT https://www.mppmu.mpg.de/bat/, coup de pouce, ou OpenCV

Je ne sais pas si elle a été encore mentionné, mais il y a aussi vowpal Wabbit mais il pourrait être spécifique à certains seuls types de problème.

Jetez un oeil à Intel DAAL qui est en cours. Il est fortement optimisé pour l'architecture du processeur Intel et supports distribués calculs.

Scalable Machine Learning Solutions pour Big Data:

Je vais ajouter mon .02 $ parce qu'il ya une zone clé qui ne semble pas avoir été abordée dans tous les postes précédents - L'apprentissage de la machine sur les grandes données

Pour les grandes données, l'évolutivité est la clé, et R est insuffisante. De plus, des langages comme Python et R ne sont utiles que pour l'interfaçage avec des solutions évolutives qui sont généralement écrites dans d'autres langues. Je fais cette distinction non pas parce que je veux dénigrer ceux qui les utilisent, mais seulement parce que son si important pour les membres de la communauté scientifique des données pour comprendre ce que les solutions d'apprentissage machine vraiment évolutives ressemblent.

Je fais la plupart de mon travail avec données importantes sur les clusters de mémoire distribués . C'est, je ne pas simplement utiliser une 16 machine à noyau (4 processeurs quad core sur une seule carte mère partageant la mémoire de cette carte mère), j'utilise un petit groupe de 64 16 machines de base. Les exigences sont très différentes pour ces groupes de mémoire distribués que pour les environnements de mémoire partagée et grand apprentissage machine de données nécessite des solutions évolutives dans des environnements de mémoire distribués dans de nombreux cas.

Nous utilisons également C et C ++ partout dans un produit de base de données propriétaire. Toutes nos affaires de haut niveau est géré en C ++ et MPI, mais les choses de bas niveau qui touche les données sont tous languit et des tableaux de caractères de style C pour garder le produit très très rapide. La commodité des chaînes std sont tout simplement ne vaut pas le coût de calcul.

Il a pas beaucoup de bibliothèques C ++ disponibles qui offrent distribués, les capacités d'apprentissage de la machine évolutive - MLPACK .

Cependant, il existe d'autres solutions évolutives avec des API:

Apache Spark dispose d'une bibliothèque d'apprentissage machine évolutive appelée Mlib que vous peut interfacer avec.

tensorflow a maintenant distribué tensorflow et a un C ++ api .

Hope this helps!

Licencié sous: CC-BY-SA avec attribution
scroll top