Je suis un R
programmeur de langue. Je fais également partie du groupe de personnes considérées comme des scientifiques du traitement des données, mais qui appartiennent à des disciplines universitaires autres que la CS.
Cela fonctionne bien dans mon rôle de Data Scientist. Cependant, en commençant ma carrière dans R
les autres langages de script / Web et ne possédant que des connaissances de base, je me suis senti quelque peu insuffisant dans deux domaines clés:
- Manque de connaissance solide de la théorie de la programmation.
- Manque de niveau de compétence concurrentiel dans des langages plus rapides et plus largement utilisés tels que
C
,C++
etJava
qui pourraient être utilisés pour augmenter la vitesse des calculs de pipeline et de Big Data, ainsi que pour créer des produits DS / data pouvant être plus facilement développés en rapide des scripts back-end ou des applications autonomes.
La solution est simple bien sûr: allez apprendre la programmation. C’est ce que j’ai fait en s’inscrivant à certains cours (actuellement, la programmation en C).
Cependant, maintenant que je commence à aborder les problèmes n ° 1 et n ° 2 ci-dessus, je me demande à quel point les langues sont-elles viables C
et C++
pour Data Science? ".
Par exemple, je peux très bien déplacer les données et interagir avec les utilisateurs, mais qu'en est-il de la régression avancée, de l'apprentissage automatique, de l'exploration de texte et d'autres opérations statistiques plus avancées?
Alors. peut C
faire le travail - quels outils sont disponibles pour les statistiques avancées, le ML, l'IA et d'autres domaines de la science des données? Ou dois-je perdre l'essentiel de l'efficacité obtenue par la programmation en C
faisant appel à des R
scripts ou à d'autres langages?
La meilleure ressource que j’ai trouvée jusqu’à présent en C est une bibliothèque appelée Shark , qui donne C
/ C++
la possibilité d’utiliser des machines à vecteurs de support, une régression linéaire (non régressive et d’autres régressions avancées telles que le probit multinomial, etc.) et une liste restreinte d’autres logiciels. (super mais) fonctions statistiques.
Réponses:
Faites le contraire: apprenez le C / C ++ pour écrire des extensions R. Utilisez C / C ++ uniquement pour les sections critiques de performance de vos nouveaux algorithmes, utilisez R pour construire votre analyse, importer des données, créer des tracés, etc.
Si vous voulez aller au-delà de R, je vous conseillerais d'apprendre python. Il existe de nombreuses bibliothèques disponibles, telles que scikit-learn pour les algorithmes d'apprentissage automatique ou PyBrain pour la construction de réseaux neuronaux, etc. (et utilisez pylab / matplotlib pour le traçage et les cahiers iPython pour développer vos analyses). Encore une fois, C / C ++ est utile pour implémenter des algorithmes critiques en temps comme des extensions python.
la source
Comme Andre Holzner l’a dit, étendre R avec une extension C / C ++ est un très bon moyen de tirer parti du meilleur des deux côtés. Vous pouvez aussi essayer l’inverse, en travaillant avec C ++ et en appelant occasionnellement la fonction de R avec le paquetage RInside o R. Vous pouvez trouver ici 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 plusieurs bibliothèques, beaucoup d’entre elles étant conçues 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/
la source
Je conviens que la tendance actuelle consiste à utiliser Python / R et à le lier à certaines extensions C / C ++ pour des tâches coûteuses en calcul.
Toutefois, si vous souhaitez rester en C / C ++, vous pouvez jeter un œil à Dlib :
la source
À mon avis, idéalement, pour être un professionnel plus abouti , il serait bon de connaître au moins un langage de programmation pour les paradigmes de programmation les plus populaires ( procédural , orienté objet , fonctionnel ). Certes, je considère R et Python comme les deux langages et environnements de programmation les plus populaires pour la science des données et, par conséquent, comme outils de base pour la science des données.
Julia est impressionnante à certains égards, mais elle tente de rattraper ces deux problèmes et de s’imposer comme un outil majeur de la science des données. Cependant, je ne le vois pas de sitôt, simplement en raison de la popularité de R / Python , de ses très grandes communautés et de ses énormes écosystèmes, composés de bibliothèques / paquets existants ou nouvellement développés , couvrant un très large éventail de domaines / domaines de logiciels. étude.
Cela dit, de nombreux packages et bibliothèques, axés sur la science des données, les zones ML et AI, sont implémentés et / ou fournissent des API dans des langages autres que R ou Python (pour obtenir la preuve, voir cette liste et cette liste , qui sont toutes deux sont excellents et donnent une perspective solide de la variété sur le terrain). Cela est particulièrement vrai pour les logiciels spécialisés ou orientés vers la performance . Pour ce logiciel, j'ai vu des projets avec des implémentations et / ou des API principalement en Java, C et C ++ (Java est particulièrement populaire dans le segment Big Data de la science des données - en raison de sa proximité avec Hadoop et son écosystème - et dans le PNLsegment), mais d’autres options sont disponibles, bien que dans une mesure beaucoup plus limitée, en fonction du domaine. Aucune de ces langues n’est une perte de temps, mais vous devez donner la priorité à leur maîtrise en totalité, en fonction de votre situation professionnelle actuelle, de vos projets et de vos intérêts. Donc, pour répondre à votre question sur la viabilité de C / C ++ (et de Java), je dirais qu'ils sont tous viables , mais pas en tant qu'outils de science des données primaires , mais en tant que outils secondaires .
En répondant à vos questions sur 1) le C en tant qu’outil potentiel de science des données et 2) son efficacité , je dirais que: 1) bien qu’il soit possible d’utiliser le C pour la science des données, je vous déconseille de le faire, car vous auriez un difficulté à trouver les bibliothèques correspondantes ou, plus encore, à essayer de mettre en oeuvre les algorithmes correspondants par vous-même; 2) vous ne devriez pas vous soucier de l' efficacité, autant de segments de code performances critiques sont mises en œuvre dans les langages de bas niveau comme C, plus, il existe des options pour des langues d' interface des sciences de données populaires avec, par exemple, C (par exemple,
Rcpp
forfait pour intégration R avec C / C ++: http://dirk.eddelbuettel.com/code/rcpp.html). Cela s’ajoute à des approches plus simples, mais souvent plutôt efficaces, de la performance, telles que l’utilisation cohérente de la vectorisation dans R ainsi que l’utilisation de divers cadres, progiciels et bibliothèques de programmation en parallèle. Pour des exemples d'écosystème R, voir la vue des tâches CRAN "Calcul parallèle à haute performance avec R" .En parlant de science des données , je pense qu’il est très logique de mentionner l’importance d’une approche de recherche reproductible ainsi que de la disponibilité de divers outils appuyant ce concept (pour plus de détails, voir ma réponse pertinente ). J'espère que ma réponse est utile.
la source
R est l’un des outils clés du data scientist, quoi que vous fassiez, vous n’arrêtez pas de l’utiliser.
Parlons maintenant de C, C ++ ou même de Java. Ce sont de bonnes langues populaires. Que vous en ayez besoin ou que vous en ayez besoin dépend du type de travail ou de projet que vous avez. D'après mon expérience personnelle, il existe tellement d'outils pour les informaticiens que vous aurez toujours l'impression que vous devez constamment apprendre.
Vous pouvez ajouter Python ou Matlab aux choses à apprendre si vous voulez et continuez à les ajouter. La meilleure façon d'apprendre consiste à entreprendre un projet en utilisant d'autres outils avec lesquels vous n'êtes pas à l'aise. Si j'étais vous, j'apprendrais le python avant le c. Il est plus utilisé dans la communauté que le c. Mais apprendre le c n'est pas une perte de temps.
la source
En tant que informaticien, les autres langages (C ++ / Java) sont pratiques lorsque vous devez incorporer l'apprentissage automatique dans un moteur de production existant.
Waffles est à la fois une bibliothèque de classes C ++ bien maintenue et un package d’analyse en ligne de commande. Il comprend un apprentissage supervisé et non supervisé, des tonnes d'outils de manipulation de données, des outils de données fragmentés et d'autres éléments tels que le traitement audio. Puisqu'il s'agit également d'une bibliothèque de classes, vous pouvez l'étendre selon vos besoins. Même si vous n'êtes pas celui qui développe le moteur C ++ (il est probable que vous ne le ferez pas), cela vous permettra de créer un prototype, de tester et de remettre quelque chose aux développeurs.
Plus important encore, je pense que ma connaissance de C ++ et de Java m'aide vraiment à comprendre le fonctionnement de Python et de R. Toute langue n’est utilisée correctement que lorsque vous comprenez un peu ce qui se passe en dessous. En apprenant les différences entre les langues, vous pouvez apprendre à exploiter les atouts de votre langue principale.
Mise à jour
Apache Spark - MLLib est important pour les applications commerciales comportant de grands ensembles de données. Ici, vous pouvez utiliser Scala, Java ou Python.
la source
Je souhaiterais comprendre pourquoi vous auriez besoin d'une autre langue (hormis Python) si votre objectif est "mais qu'en est-il de la régression avancée, de l'apprentissage automatique, de l'exploration de texte et d'autres opérations statistiques plus avancées".
Pour ce genre de chose, C est une perte de temps. C’est un bon outil, mais depuis environ 20 ans que Java est disponible, j’ai rarement codé C.
Si vous préférez le côté plus fonctionnel de la programmation de R, apprenez Scala avant de vous lancer dans trop de mauvaises procédures procédurales codant avec C .
apprendre enfin à utiliser les bibliothèques de Hadley Wickham - ils vous faire économiser beaucoup de temps à faire la manipulation des données.
la source
Il existe des outils C ++ pour les statistiques et la science des données, tels que ROOT https://root.cern.ch/drupal/ , BAT https://www.mppmu.mpg.de/bat/ , boost ou OpenCV.
la source
Je ne sais pas si cela a déjà été mentionné, mais il y a aussi le wabbit virtuel, mais cela pourrait être spécifique à certains types de problèmes seulement.
la source
Jetez un coup d'œil à Intel DAAL qui est en cours. Il est hautement optimisé pour l'architecture de processeur Intel et prend en charge les calculs distribués.
la source
Solutions d'apprentissage machine évolutives pour Big Data:
J'ajouterai ma somme de 0,02 $, car il y a un domaine clé qui semble ne pas avoir été abordé dans tous les messages précédents: l'apprentissage automatique sur Big Data !
Pour le Big Data, l'évolutivité est la clé et R est insuffisant. En outre, les langages tels que Python et R ne sont utiles que pour l’interfaçage avec des solutions évolutives qui sont généralement écrites dans d’autres langages. Je fais cette distinction non pas parce que je veux dénigrer ceux qui les utilisent, mais uniquement parce que c'est tellement important pour les membres de la communauté des données informatiques de comprendre à quoi ressemble une solution véritablement évolutive d'apprentissage automatique.
Je fais l'essentiel de mon travail avec des données volumineuses sur des clusters de mémoire distribuée . En d’autres termes, je n’utilise pas seulement une machine 16 cœurs (4 processeurs quad-core sur une seule carte mère partageant la mémoire de cette carte mère), j’utilise un petit cluster de 64 machines 16 cœurs. La configuration requise pour ces clusters de mémoire distribuée est très différente de celle requise pour les environnements de mémoire partagée et l'apprentissage big machine de données nécessite souvent des solutions évolutives au sein d'environnements de mémoire distribuée.
Nous utilisons également C et C ++ partout dans un produit de base de données propriétaire. Tous nos éléments de haut niveau sont gérés en C ++ et MPI, mais les éléments de bas niveau qui touchent les données sont tous longs et contiennent des tableaux de caractères de style C pour maintenir le produit très rapidement. La commodité des chaînes std ne vaut tout simplement pas le coût de calcul.
Il n'y a pas beaucoup de bibliothèques C ++ disponibles offrant des capacités d'apprentissage machine distribuées et évolutives - MLPACK .
Cependant, il existe d'autres solutions évolutives avec des API:
Apache Spark possède une bibliothèque d’apprentissage machine évolutive appelée MLib avec laquelle vous pouvez vous connecter .
De plus, Tensorflow dispose maintenant de tensorflow distribué et d’une API C ++ .
J'espère que cela t'aides!
la source