Hal Daume a écrit plusieurs grands algorithmes d'apprentissage automatique pendant son doctorat (il est aujourd'hui professeur adjoint et étoile montante de la communauté de l'apprentissage automatique).
Sur sa page web, on trouve un SVM, un arbre de décision simple et une régression logistique, tous en OCaml. En lisant ces codes, vous pouvez vous faire une idée de la manière dont les modèles d'apprentissage automatique sont mis en œuvre en OCaml.
Un autre bon exemple d'écriture de modèles d'apprentissage automatique de base est le suivant Bibliothèque de la chouette pour les calculs scientifiques et numériques en OCaml.
J'aimerais également mentionner F#, un nouveau langage .Net similaire à OCaml. Voici un modèle de graphe factoriel écrit en F# et analysant des données de jeu d'échecs. Cette recherche a également fait l'objet d'une publication NIPS.
Alors que la FP convient à la mise en œuvre de modèles d'apprentissage automatique et d'exploration de données. Mais ce que vous pouvez obtenir le plus ici n'est PAS la performance. Il est vrai que la FP supporte mieux le calcul parallèle que les langages impératifs, comme C# ou Java. Mais la mise en œuvre d'un SVM ou d'un arbre de décision parallèle n'a pas grand-chose à voir avec le langage ! Le parallèle est le parallèle. Les optimisations numériques qui sous-tendent l'apprentissage automatique et l'exploration de données sont généralement impératives, les écrire de manière purement fonctionnelle est généralement difficile et moins efficace. Rendre ces algorithmes sophistiqués parallèles est une tâche très difficile au niveau de l'algorithme, pas au niveau du langage. Si vous voulez exécuter 100 SVM en parallèle, FP peut vous aider. Mais je ne vois pas la difficulté d'exécuter 100 libsvm en parallèle en C++, sans compter que le single thread libsvm est plus efficace qu'un paquet svm haskell non testé.
Alors que donnent les langages FP, comme F#, OCaml, Haskell ?
-
Facilité de test de votre code. Les langages FP ont généralement un interpréteur de haut niveau, vous pouvez tester vos fonctions à la volée.
-
Peu d'états mutables. Cela signifie qu'en passant le même paramètre à une fonction, cette fonction donne toujours le même résultat, donc le débogage est facile dans les FP.
-
Le code est succinct. Inférence de type, correspondance de motifs, fermetures, etc. Vous vous concentrez davantage sur la logique du domaine, et moins sur la partie langage. Ainsi, lorsque vous écrivez le code, votre esprit pense principalement à la logique de programmation elle-même.
-
Écrire du code en FP est amusant.
6 votes
Juste un commentaire pour dire que vous pouvez intégrer un programme C (ou même Fortran) dans R relativement facilement ; cela peut être une approche plus raisonnable que d'oublier complètement R :)
4 votes
Pour être complet, la question des langages de programmation pour l'apprentissage automatique fait l'objet d'une discussion intéressante. aquí .
1 votes
Vous devriez également consulter FACTORIE, un cadre d'apprentissage automatique en Scala.
0 votes
Je vous recommande scikit-learn avec python. Il n'y a pas beaucoup de différence entre R et scikit en matière de performance.
0 votes
"R est trop lent" les gens devraient vérifier
pqR
ysnow
/foreach
/doParallel
.