Python, Apprentissage automatique et Guerres de langage. Un point de vue hautement subjectif – Apprendre langue

Blog invité de Sebastian Raschka. Sebastian Raschka est l'auteur du best-seller «Python Machine Learning». En tant que doctorat. candidat à la Michigan State University, il développe de nouvelles méthodes informatiques dans le domaine de la biologie informatique. Sebastian a plusieurs années d’expérience dans le codage en Python et a animé plusieurs séminaires sur les applications pratiques de la science des données et de l’apprentissage automatique. Sebastian aime écrire et parler de la science des données, de l'apprentissage automatique et de Python. Il est vraiment motivé pour aider les gens à développer des solutions basées sur les données sans nécessiter nécessairement de formation en apprentissage automatique.

Oh mon dieu, un autre de ces manchettes de clics-appâts subjectifs et dignes d'opinion? Oui! Pourquoi ai-je pris la peine d'écrire cela? Eh bien, voici l’une des idées les plus triviales et pourtant majestueuses de mon ancien professeur, qui est devenue ma devise depuis: «Si vous devez effectuer cette tâche plus de 3 fois, écrivez simplement un script et automatisez-le.»

À ce jour, vous avez peut-être déjà commencé à vous interroger sur ce blog. Je n’ai rien écrit depuis plus de six mois! D'accord, rêveries sur les plateformes de réseaux sociaux de côté, ce n’est pas vrai: j’ai écrit quelque chose – environ 400 pages pour être précis. Cela a vraiment été un voyage pour moi ces derniers temps. Et concernant la question fréquemment posée «Pourquoi avez-vous choisi Python pour l’apprentissage automatique?», J’imagine qu’il est temps d’écrire. mon script.

Dans les paragraphes suivants, je ne veux vraiment pas vous dire pourquoi toi ou quelqu'un d'autre devrait utiliser Python. Pour être honnête, je déteste vraiment ce type de questions: «Quel est * le meilleur?» (* Insérer ici «langage de programmation, éditeur de texte, IDE, système d'exploitation, fabricant de l'ordinateur»). C'est vraiment une question absurde et une discussion. Parfois, cela peut être amusant et divertissant, mais je recommande de garder cette question dans notre café ou café après le travail occasionnel avec des amis et des collègues.

Table des matières

  • La réponse courte à une question complexe
  • Quels sont mes outils Python préférés?
  • Qu'est-ce que je pense de MATLAB?
  • Julia est géniale… sur le papier!
  • Il n'y a vraiment rien qui cloche avec R
  • Qu'est-il arrivé à Perl?
  • Autres options
  • Python est une langue en voie de disparition?
  • Conclusion

La réponse courte à une question complexe

Je devrais peut-être commencer par la réponse courte. Vous êtes invités à arrêter de lire cet article au-dessous de ce paragraphe, car il est vraiment simple à comprendre. Je suis un scientifique, j'aime faire mes affaires. J'aime avoir un environnement où je peux rapidement protoptyper et noter mes modèles et mes idées. J'ai besoin de résoudre des problèmes très particuliers. J'analyse des ensembles de données donnés pour tirer mes conclusions. C’est ce qui compte le plus pour moi: comment puis-je effectuer le travail le plus efficacement possible? Qu'est-ce que je veux dire par «productivement»? Eh bien, je lance généralement une analyse une seule fois (à part le test de différentes idées et le débogage de côté); Je n'ai pas besoin de lancer plusieurs fois un code particulier 24 heures sur 24, je ne développe pas d'applications logicielles ni d'applications Web pour les utilisateurs finaux. Quand je quantifier «Productivité», j’estime littéralement la somme de (1) le temps qu’il faut pour que l’idée soit écrite en code, (2) la déboguer, et (3) l’exécuter. Pour moi, «plus productivement» signifie «combien de temps faut-il pour obtenir les résultats?» Au fil des ans, j'ai pensé que Python était fait pour moi. Pas toujours, mais très souvent. Comme tout le reste de la vie, Python n’est pas une solution miracle, ce n’est pas la «meilleure» solution à tous les problèmes. Cependant, c’est assez proche si vous comparez les langages de programmation à l’éventail de tâches problématiques communes et moins communes »; Python est probablement le plus polyvalent et le plus polyvalent.

(Source: https://xkcd.com/974/)

Rappelez-vous: «L’optimisation prématurée est la racine de tout mal» (Donald Knuth). Si vous faites partie de l'équipe d'ingénierie logicielle qui souhaite optimiser le prochain modèle de trading haute fréquence de votre division d'apprentissage automatique et de science des données, Python n'est probablement pas pour vous (mais c'était peut-être le langage de choix de la science des données. l’équipe, il peut donc être utile d’apprendre à le lire). Mon petit conseil est donc d’évaluer vos tâches et vos problèmes quotidiens lorsque vous choisissez une langue. "Si tout ce que vous avez est un marteau, tout commence à ressembler à un clou" – vous êtes trop intelligent pour tomber dans ce piège! Cependant, gardez à l'esprit qu'il existe un équilibre. Il y a des cas où le marteau peut être le meilleur choix, même si un tournevis serait probablement la solution la plus «agréable». Encore une fois, il en va de la productivité.

Permettez-moi de vous donner un exemple d'expérience personnelle. J'avais besoin de développer une série de nouveaux algorithmes pour «cribler» 15 millions de petits composés chimiques en fonction d'une hypothèse très spécifique à un problème. Je suis un gars entièrement computationnel, mais je collabore avec des biologistes qui font des expériences non informatiques (nous les appelons des expériences de «laboratoire humide»). L'objectif était de réduire la liste à une liste de 100 composés potentiels qu'ils pourraient tester en laboratoire. La mise en garde était qu'ils avaient besoin des résultats rapidement, car ils n'avaient que peu de temps pour mener les expériences. Croyez-moi, le temps était vraiment «limité»: nous venions de faire accepter notre demande de subvention et de financer une recherche quelques semaines avant la collecte des résultats (nos collaborateurs faisaient des expériences sur les larves d'une certaine espèce de poisson qui ne fraient qu'au printemps). Alors, j'ai commencé à penser: «Comment puis-je obtenir ces résultats le plus rapidement possible?» Eh bien, je connais le C ++ et le Fortran, et si j'implémente ces algorithmes dans les langages respectifs, l'exécution de la «sélection» peut être plus rapide que Implémentation Python. C’était plutôt une supposition éclairée, je ne sais pas vraiment si cela aurait été beaucoup plus rapide. Mais il y avait une chose que je savais avec certitude: si je commençais à développer le code en Python, je pourrais le faire fonctionner dans quelques jours – cela prendrait peut-être une semaine pour coder les versions respectives de C ++. Je m'inquiéterais d'une mise en œuvre plus efficace plus tard. À ce moment-là, il était important de transmettre ces résultats à mes collaborateurs: «L'optimisation prématurée est la racine de tous les maux.» Sur un nœud latéral: le même courant de pensée s'applique aux solutions de stockage de données. Ici, je suis juste allé avec SQLite. Le CSV n’avait pas vraiment de sens car je devais annoter et récupérer certaines molécules à plusieurs reprises. Je n’ai sûrement pas envie de scanner ou de réécrire un CSV du début à la fin à chaque fois que je voulais rechercher une molécule ou en manipuler l’entrée, à part la gestion des capacités de mémoire. Peut-être que MySQL aurait été encore mieux, mais pour les raisons mentionnées ci-dessus, je voulais faire le travail rapidement et installer un serveur SQL supplémentaire… nous n'avions pas le temps, SQLite était parfait pour faire le travail.

Le verdict: Choisissez la langue qui satisfait votre Besoins! Cependant, il y a une fois une petite mise en garde ici! Comment un programmeur débutant peut-il connaître les avantages et les inconvénients d’une langue avant de l’apprendre et comment le programmeur devrait-il savoir si cette langue lui sera utile? Voici ce que je ferais: Il suffit de rechercher des applications et des solutions particulières en rapport avec vos problèmes les plus courants sur Google et GitHub. Vous n'avez pas besoin de lire et de comprendre le code. Il suffit de regarder le produit final. Aussi, n’hésitez pas à demander aux gens. Ne vous contentez pas de demander quel est le «meilleur» langage de programmation en général, mais soyez précis, décrivez vos objectifs et pourquoi vous souhaitez apprendre à programmer. Si vous souhaitez développer des applications pour MacOS X, vous voudrez probablement consulter Objective C et Swift. Si vous souhaitez développer sur Android, vous êtes probablement plus intéressé par l’apprentissage de Java, etc.

Quels sont mes outils Python préférés?

Si vous êtes intéressé, ce sont mes «outils» Python préférés et le plus souvent que j’utilise le plus souvent.

  • NumPy: Ma bibliothèque préférée pour travailler avec des structures de tableaux et pour vectoriser des équations à l'aide d'algèbre linéaire. augmenté par SciPy.
  • Theano: Implémentation d'algorithmes d'apprentissage automatique pour les calculs lourds et la distribution à travers des cœurs de mes GPU.
  • scikit-learn: l'API la plus pratique pour les tâches quotidiennes d'apprentissage machine, plus élémentaires.
  • matplotlib: Ma bibliothèque de choix en matière de traçage. Parfois, j'utilise également Seaborn pour certaines parcelles, par exemple, les cartes thermiques sont particulièrement intéressantes!
    (Source: http: //stanford.edu/~mwaskom/software/seaborn/examples/structured_h …)
  • Flask (Django): Rarement, je veux transformer une idée en application Web. Ici, Flask est très utile!
  • SymPy: Pour les mathématiques symboliques, il a remplacé WolframAlpha pour moi.
  • pandas: Travailler avec des ensembles de données relativement petits, principalement à partir de fichiers CSV.
  • sqlite3: annotation et interrogation de jeux de données «de taille moyenne».
  • Bloc-notes IPython: Que puis-je dire, 90% de mes recherches ont lieu dans des blocs-notes IPython. Tout est réuni au même endroit: idées, codes, commentaires, équations LaTeX, illustrations, graphiques, sorties,…

Notez que le projet IPython a récemment évolué pour devenir le projet Jupyter. Maintenant, vous pouvez utiliser l'environnement Jupyter pour ordinateur portable non seulement pour Python mais aussi pour R, Julia et bien d'autres.

Qu'est-ce que je pense de MATLAB?

J'ai beaucoup utilisé MATLAB (/ Octave) il y a quelques années; la plupart des cours d'informatique et de données ont été enseignés à MATLAB. Je pense vraiment que ce n’est pas un mauvais environnement pour le prototypage! Depuis qu'il a été construit avec l'algèbre linéaire à l'esprit (MATLAB pour MATrix LABoratory), MATLAB se sent un peu plus «naturel» lorsqu'il s'agit de mettre en œuvre des algorithmes d'apprentissage automatique par rapport à Python / NumPy – bon, pour être juste, les langages de programmation à indexation unique peuvent semble un peu bizarre pour nous les programmeurs. Cependant, gardez à l'esprit que MATLAB a un prix élevé, et je pense qu'il disparaît peu à peu du monde universitaire et de l'industrie. De plus, je suis un grand fan de type open-source après tout;). En outre, sa performance n’est pas aussi convaincante que celle d’autres langages «productifs» qui se basent sur les critères suivants:

(Source: http://julialang.org/benchmarks/)

Cependant, il ne faut pas oublier qu'il existe aussi cette bibliothèque Theano pour Python. En 2010, les développeurs de Theano affichaient des performances 1,8 fois plus rapides que NumPy lorsque le code était exécuté sur le processeur. Si Theano ciblait le processeur graphique, il était même 11 fois plus rapide que NumPy (J. Bergstra, O. Breuleux, F. Bastien , P. Lamblin, R. Pascanu, G. Desjardins, J. Turian, D. Warde-Farley et Y. Bengio, Theano: Un compilateur mathématique CPU et GPU en Python, dans Proc 9th Python in Science Conf, pages 1 –7, 2010.). Maintenant, gardez à l'esprit que cette référence Theano date de 2010 et que Theano s'est considérablement améliorée au fil des ans, de même que les capacités des cartes graphiques modernes.

PS: si vous n’aimez pas la méthode de NumPy, restez à l’écoute pour la prochaine version de Python 3.5 – nous aurons un opérateur infixe pour la multiplication de matrice, yay!

Multiplication matricielle-matricielle «à la main» (je veux dire sans l'aide de NumPy et BLAS ou LAPACK semble fastidieux et plutôt inefficace).

Qui veut implémenter cette expression en utilisant des boucles for imbriquées si nous avons l'algèbre linéaire et des bibliothèques optimisées pour s'en occuper!?

Maintenant, si ce produit ne vous intéresse pas, voici à quoi cela ressemblera dans Python 3.5:

Pour être honnête, je dois admettre que je ne suis pas nécessairement un grand fan du symbole «@» en tant qu'opérateur de matrice. Cependant, j’y ai vraiment longuement réfléchi et je n’ai trouvé aucun meilleur symbole «non utilisé» à cette fin. Si vous avez une meilleure idée, s'il vous plaît faites le moi savoir, je suis vraiment curieux!

Julia est géniale… sur le papier!

Je pense que Julia est une excellente langue et je voudrais la recommander à quelqu'un qui se lance dans la programmation et l’apprentissage automatique. Je ne sais pas si je devrais vraiment le faire. Pourquoi? Il y a ce triste paradoxe de s'engager dans des langages de programmation. Avec Julia, nous ne pouvons pas dire si cela deviendra assez "populaire" dans les prochaines années. Attendez, qu'est-ce que la «popularité» a à voir avec la qualité et l'utilité d'un langage de programmation? Laisse moi te dire. Le dilemme est que les langues les plus utiles ne sont pas nécessairement celles qui sont bien conçues, mais celles qui sont populaires. Pourquoi?

  1. Il existe déjà de nombreuses bibliothèques (pour la plupart gratuites) afin que vous puissiez utiliser au mieux votre temps et ne pas avoir à réinventer la roue.
  2. Il est beaucoup plus facile de trouver de l'aide, des tutoriels et des exemples en ligne.
  3. La langue s'améliore, est mise à jour et les correctifs sont appliqués plus fréquemment pour la rendre «encore meilleure».
  4. Il est préférable de collaborer et de travailler plus facilement en équipe.
  5. Plus de personnes bénéficieront de votre code (par exemple, si vous décidez de le partager sur GitHub).

Personnellement, j'aime Julia pour ce qu'elle est. Cela correspond parfaitement à ma niche d’intérêt. J'utilise Python cependant; principalement parce qu'il y a tellement de choses formidables qui le rendent particulièrement pratique. La communauté Python est tout simplement géniale et je pense qu’elle prospérera dans les 5 à 10 prochaines années au moins. Avec Julia, je n'en suis pas si sûre. J'aime le design, je pense que c’est génial. Mais si ce n’est pas populaire, je ne saurais dire s’il est «à l’avenir». Et si le développement s’arrête dans quelques années? J'aurais investi dans quelque chose qui sera «mort» à ce moment-là. Cependant, si tout le monde pensait comme cela, aucune nouvelle langue n'aurait jamais une chance.

Il n'y a vraiment rien qui cloche avec R

Eh bien, je suppose que ce n’est pas un secret pour moi que j’ai déjà été un gars R. J'ai même écrit un livre à ce sujet (d'accord, il s'agissait en fait de cartes de chaleur dans R, pour être précis. Notez que c'était il y a des années, c'était déjà une chose. Il n'y a aucune raison impérieuse de le vérifier – je parle du livre. Mais si vous ne pouvez pas résister, voici la version courte gratuite de 5 minutes de lecture). Je suis d'accord, c'est un peu une digression. Revenons donc à la discussion: qu’est-ce qui ne va pas avec R? Je pense qu'il n'y a rien de mal à ça du tout. Je veux dire, c’est un langage assez puissant, capable et «populaire» pour la «science des données» après tout! Il n'y a pas si longtemps, même Microsoft était vraiment intéressé: Microsoft fait l'acquisition de Revolution Analytics, un fournisseur commercial de s ….

Alors, comment puis-je résumer mes sentiments à propos de R? Je ne sais pas exactement d'où vient cette citation – je l'ai tirée de quelqu'un il y a quelque temps -, mais c'est très utile pour expliquer la différence entre R et Python: «R est un langage de programmation développé par des statisticiens pour des statisticiens; Python a été développé par un informaticien et il peut être utilisé par les programmeurs pour appliquer des techniques statistiques. »Le message tient en partie au fait que R et Python sont tous deux capables de manière similaire pour des tâches de« science des données ». Cependant, la syntaxe Python semble tout simplement plus naturelle. pour moi – c'est un goût personnel.

Je voulais juste faire de Theano et de l’informatique sur GPU un atout majeur pour Python, mais j’ai vu que R est aussi très capable: la programmation parallèle avec GPU et R. Je savais que vous demanderiez ensuite: «Bon, qu’en est-il de transformer mon modèle? dans une belle et brillant application Web? Je parie que c’est quelque chose que vous ne pouvez pas faire dans R! »Désolé, mais vous perdez ce pari, jetez un œil à Shiny by RStudio Un cadre d’application Web pour R. Vous voyez où je veux en venir? Il n'y a pas de gagnant ici. Il n'y aura probablement jamais,

Sortir l’une de mes citations préférées de Python de son contexte original: «Nous sommes tous des adultes ici», ne perdons pas notre temps avec les guerres de la langue. Choisissez l'outil qui «clique» pour vous. En ce qui concerne les perspectives sur le marché du travail: il n’ya ni bon ni mauvais ici. Je ne pense pas qu'une entreprise qui souhaite vous embaucher en tant que «scientifique des données» se préoccupe vraiment de votre boîte à outils préférée – les langages de programmation ne sont que des «outils», après tout. La compétence la plus importante est de penser comme un «informaticien», de poser les bonnes questions, de résoudre un problème. La partie difficile est la théorie des mathématiques et de l’apprentissage automatique, un nouveau langage de programmation peut facilement être appris. Mais si vous êtes toujours intéressé, regardez l'indice Tiobe par exemple, un mesure de la popularité des langages de programmation:

(Source: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html)

Toutefois, si nous examinons les dix principaux langages de programmation 2015 de Spectre IEEE, le langage R progresse rapidement (colonne de gauche: 2015, colonne de droite: 2014).

(Source: http: //spectrum.ieee.org/computing/software/the–2015-top-ten-progra …)

Je pense que vous avez l'idée. Python et R, il n’ya plus vraiment de grande différence. Et vous ne devez pas vous inquiéter des possibilités d’emploi lorsque vous choisissez une langue plutôt que l’autre.

Qu'est-il arrivé à Perl?

Perl a été la première langue que j'ai choisie au début de ma carrière (à part le basique, le Pascal et le Delphi au lycée bien sûr). Il a fallu une classe de programmation Perl quand j'étais encore étudiant en Allemagne. A cette époque, j’aimais vraiment ça, mais, hé, je n’avais vraiment rien pour le comparer à ce stade non plus. Personnellement, je ne connais qu'une poignée de personnes qui utilisent activement Perl pour écrire des scripts au quotidien. Je pense cependant que cela reste assez courant dans le domaine de la bioinformatique !? Quoi qu’il en soit, gardons cette partie courte pour qu’elle repose en paix: "" Perl est mort. Longue vie à Perl. "

Autres options

Il existe de nombreux autres langages pouvant être utilisés pour le Machine Learning, par exemple, Ruby (Approche réfléchie du machine: une approche pilotée par les tests), Java (Java-ML), Lua (Torch), etc. Cependant, à l'exception d'un cours de Java auquel j'ai assisté il y a plusieurs années, je n'ai vraiment pas beaucoup d'expérience avec ces langages et je ne saurais pas quoi dire.

Python est une langue en voie de disparition?

C'est une question légitime, elle a été soulevée récemment sur Quora, et si vous souhaitez entendre de nombreuses autres opinions intéressantes à ce sujet, consultez le fil de la question. Cependant, si vous voulez entendre mon opinion, je dirais non, ce n'est pas le cas. Pourquoi? D'accord, Python est un langage «relativement» ancien – la première version date du début des années 90 (on peut compter à partir de 1991), et comme dans tout langage de programmation, certains choix et compromis ont dû être faits. Chaque langage de programmation a ses bizarreries et les langues plus modernes ont tendance à tirer les leçons des erreurs du passé, ce qui est une bonne chose (R a été publié peu de temps après Python, en passant: 1995). Python est loin d'être «parfait» et, comme toutes les autres langues, il a ses verrues. En tant qu’utilisateur principal de Python, je dois dire que le GIL (Global Interpreter Lock) est ce qui m’agace le plus – mais notons qu’il existe des modules de multitraitement et de multithreading, et que ce n’est pas vraiment une limitation, mais plutôt un petit «inconvénient» dans certains contextes.

Aucune métrique ne peut quantifier «la qualité» d'un langage de programmation et cela dépend vraiment de ce que vous recherchez. La question que vous voudriez poser est la suivante: «Qu'est-ce que je veux réaliser et quel est le meilleur outil pour y parvenir» – «si vous n'avez qu'un marteau, tout ressemble à un clou». En parlant de marteaux et de clous Encore une fois, Python est extrêmement polyvalent, la plus grande partie de mes recherches quotidiennes se fait via Python à l'aide de la grande bibliothèque d'apprentissage automatique scikit-learn, de pandas pour la collecte de données, de matplotlib / seaborn pour la visualisation et de carnets de notes IPython pour assurer le suivi de tous ces choses.

Conclusion

Eh bien, c’est une réponse assez longue à une question apparemment très simple. Croyez-moi, je peux continuer pendant des heures et des jours. Mais pourquoi compliquer les choses? Mettons fin aux pourparlers:

(Source: https://xkcd.com/353/)

Principales ressources DSC

Suivez-nous sur Twitter: @DataScienceCtrl | @AnalyticBridge

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *