Bilan: Scikit-learn brille pour un apprentissage automatique plus simple

Les scikits sont des boîtes à outils scientifiques basées sur Python construites autour de SciPy, la bibliothèque Python pour le calcul scientifique. Scikit-learn est un projet open source axé sur l'apprentissage automatique: classification, régression, clustering, réduction de dimensionnalité, sélection de modèle et prétraitement. C'est un projet assez conservateur qui fait très attention à éviter le fluage de la portée et à sauter sur des algorithmes non éprouvés, pour des raisons de maintenabilité et de ressources limitées pour les développeurs. D'un autre côté, il a une assez belle sélection d'algorithmes solides, et il utilise Cython (le compilateur Python-vers-C) pour les fonctions qui doivent être rapides, telles que les boucles internes.

Parmi les domaines que Scikit-learn ne couvre pas, il y a l'apprentissage en profondeur, l'apprentissage par renforcement, les modèles graphiques et la prédiction de séquence. Il est défini comme étant dans et pour Python, il n'a donc pas d'API pour d'autres langages. Scikit-learn ne prend pas en charge PyPy, l'implémentation rapide de Python de compilation juste à temps car ses dépendances NumPy et SciPy ne prennent pas entièrement en charge PyPy.

Scikit-learn ne prend pas en charge l'accélération GPU pour plusieurs raisons liées à la complexité et aux dépendances machine qu'elle introduirait. Là encore, mis à part les réseaux de neurones, Scikit-learn n'a guère besoin d'accélération GPU.

Fonctionnalités de Scikit-learn

Comme je l'ai mentionné, Scikit-learn propose une bonne sélection d'algorithmes pour la classification, la régression, le clustering, la réduction de dimensionnalité, la sélection de modèles et le prétraitement. Dans la zone de classification, qui consiste à identifier la catégorie à laquelle appartient un objet, et qui est appelée apprentissage supervisé, il implémente des machines vectorielles de support (SVM), des voisins les plus proches, une régression logistique, une forêt aléatoire, des arbres de décision, etc., jusqu'à un réseau de neurones à perceptron à plusieurs niveaux (MLP).

Cependant, l'implémentation de MLP par Scikit-learn n'est expressément pas destinée aux applications à grande échelle. Pour les implémentations à grande échelle basées sur GPU et pour l'apprentissage en profondeur, consultez les nombreux projets connexes de Scikit-learn, qui incluent des cadres de réseau de neurones profonds compatibles avec Python tels que Keras et Theano.

Pour la régression, qui consiste à prédire un attribut à valeur continue associé à un objet (tel que le prix d'une action), Scikit-learn prend en charge la régression vectorielle (SVR), la régression de crête, Lasso, Elastic Net, la régression du moindre angle (LARS ), La régression bayésienne, divers types de régression robuste, etc. C'est en fait une plus grande sélection d'algorithmes de régression que la plupart des analystes pourraient souhaiter, mais il existe de bons cas d'utilisation pour chacun d'entre eux.

Pour le clustering, une technique d'apprentissage non supervisée dans laquelle des objets similaires sont automatiquement regroupés en ensembles, Scikit-learn a k-means, clustering spectral, moyenne-shift, clustering hiérarchique, DBSCAN et quelques autres algorithmes. Encore une fois, la gamme d'algorithmes conservateurs a été incluse.

La réduction de dimensionnalité consiste à diminuer le nombre de variables aléatoires à prendre en compte, en utilisant des techniques de décomposition telles que l'analyse en composantes principales (ACP) et la factorisation matricielle non négative (NMF), ou des techniques de sélection de caractéristiques. La sélection de modèles consiste à comparer, valider et choisir des paramètres et des modèles, et elle utilise des algorithmes tels que la recherche de grille, la validation croisée et les fonctions métriques. Pour les deux domaines, Scikit-learn inclut tous les algorithmes et méthodes éprouvés, dans des API facilement accessibles.

Le prétraitement, qui implique l'extraction et la normalisation de caractéristiques, est l'une des premières et des plus importantes parties du processus d'apprentissage automatique. La normalisation transforme les entités en nouvelles variables, souvent avec une moyenne et une variance unitaire nulles, mais parfois entre une valeur minimale et une valeur maximale donnée, souvent 0 et 1. L'extraction de caractéristiques transforme le texte ou les images en nombres utilisables pour l'apprentissage automatique. Là encore, Scikit-learn sert tous les plats classiques savoureux que vous attendez de ce smorgasbord. Vous êtes libre de collecter ceux qui vous plaisent.

Notez que l' extraction d' entités est assez différente de la sélection d' entités , mentionnée précédemment sous réduction de dimensionnalité. La sélection de caractéristiques est un moyen d'améliorer l'apprentissage en supprimant des caractéristiques non variables, covariantes ou autrement statistiquement sans importance.

En bref, Scikit-learn comprend un ensemble complet d'algorithmes et de méthodes pour la réduction de la dimensionnalité, la sélection de modèles, l'extraction de caractéristiques et la normalisation, bien qu'il ne dispose d'aucun type de flux de travail guidé pour accomplir ces derniers, à l'exception d'une bonne collection d'exemples et d'une bonne documentation.

Installer et exécuter Scikit-learn

Mon installation de Scikit-learn a peut-être été l'installation la plus simple de ma structure d'apprentissage automatique. Comme j'avais déjà tous les prérequis installés et suffisamment à jour (Python, Numpy et Scipy), il a fallu une seule commande:

 $ sudo pip install -U scikit-learn

OK, il m'a fallu deux commandes, car la première fois, j'ai oublié sudo.

Cela m'a permis de Scikit-learn 0.18.1. Pour faire bonne mesure, j'ai également vérifié le référentiel GitHub, installé le framework de test nez et construit la version de développement de Scikit-learn à partir des sources, ce qui était aussi simple que de passer à la racine du référentiel et de taper make. Il a fallu un certain temps pour compiler le Python, générer et compiler tous les fichiers C, lier l'assemblage et exécuter tous les tests, mais n'a nécessité aucune intervention.

L'exécution de mon premier exemple Scikit-learn était également très facile. À partir de la page des exemples généraux, j'ai cliqué sur l'exemple pour tracer des prédictions à validation croisée, lu le bloc-notes, téléchargé le code source Python et le bloc-notes Jupyter, et les ai exécutés. La source Python a bougé pendant quelques secondes, a généré des messages d'avertissement et a fait apparaître un graphique. Le notebook Jupyter a fait essentiellement la même chose lorsque je l'ai exécuté de manière interactive, comme vous pouvez le voir dans la figure ci-dessous.

Scikit-learn obtient les notes les plus élevées pour la facilité de développement parmi tous les frameworks d'apprentissage automatique que j'ai testés, principalement parce que les algorithmes fonctionnent comme annoncé et documenté, les API sont cohérentes et bien conçues et il y a peu de «discordances d'impédance» entre structures de données. C'est un plaisir de travailler avec une bibliothèque dans laquelle les fonctionnalités ont été complètement étoffées et les bogues complètement éliminés.

Apprendre Scikit-learn

La documentation Scikit-learn est bonne et les exemples sont nombreux - environ 200 au total. La plupart des exemples incluent au moins un graphique produit à partir des données analysées à l'aide de Matplotlib. Tout cela contribue à la facilité de développement de la bibliothèque et à sa facilité d'apprentissage.

Il existe un long didacticiel, «Un didacticiel sur l'apprentissage statistique pour le traitement des données scientifiques», qui comprend cinq sections et une annexe sur la recherche d'aide. Le didacticiel est assez bon, à la fois pour couvrir les concepts de base et montrer des exemples utilisant des données, du code et des graphiques réels. Il appelle également des exemples liés au texte - par exemple, la comparaison de quatre classificateurs SVM différents illustrés dans la figure ci-dessous.

Les exemples sur lesquels j'ai travaillé étaient tous assez clairs sur leurs pages Web. Dans de nombreux cas, lorsque j'ai téléchargé et exécuté les exemples, ils lançaient des avertissements non affichés sur la page Web, mais produisaient toujours les mêmes résultats. La première figure ci-dessus, montrant la sortie de mon notebook Jupyter pour tracer des prédictions à validation croisée, est un bon exemple.

J'attribue la plupart des avertissements aux défauts du framework Apple vecLib et à l'évolution des bibliothèques Python. Certains semblent être des avertissements dans Python 2.7.10 qui n'étaient pas présents dans la version utilisée pour la page Web. La figure ci-dessous a un tel avertissement; la page Web correspondante ne le fait pas.

En tant que bibliothèque Python pour l'apprentissage automatique, avec une portée délibérément limitée, Scikit-learn est très bon. Il dispose d'un large assortiment d'algorithmes bien établis, avec des graphiques intégrés. Il est relativement facile à installer, à apprendre et à utiliser, et il contient de bons exemples et tutoriels.

D'autre part, Scikit-learn ne couvre pas l'apprentissage en profondeur ou l'apprentissage par renforcement, ce qui laisse de côté les problèmes difficiles mais importants actuels, tels que la classification précise des images et l'analyse et la traduction fiables en temps réel de la langue. De plus, il n'inclut pas de modèles graphiques ou de prédiction de séquence, il ne peut pas vraiment être utilisé à partir de langages autres que Python, et il ne prend pas en charge PyPy ou GPU.

Sur la griffe de préhension, les performances obtenues par Scikit-learn pour l'apprentissage automatique autres que les réseaux de neurones sont plutôt bonnes, même sans l'accélération de PyPy ou des GPU. Python est souvent plus rapide que ce que les gens attendent d'un interpréteur, et l'utilisation de Cython pour générer du code C pour les boucles internes élimine la plupart des goulots d'étranglement dans Scikit-learn.

De toute évidence, si vous êtes intéressé par l'apprentissage en profondeur, vous devriez chercher ailleurs. Néanmoins, il existe de nombreux problèmes - allant de la création d'une fonction de prédiction reliant différentes observations à la classification des observations en passant par l'apprentissage de la structure dans un ensemble de données non étiqueté - qui se prêtent à un apprentissage automatique à l'ancienne sans avoir besoin de dizaines de couches de neurones, et pour ces domaines Scikit -learn est très bon.

Si vous êtes un fan de Python, Scikit-learn pourrait bien être la meilleure option parmi les bibliothèques d'apprentissage automatique simples. Si vous préférez Scala, Spark ML pourrait être un meilleur choix. Et si vous aimez concevoir vos pipelines d'apprentissage en dessinant des diagrammes et en écrivant occasionnellement un extrait de Python ou R, alors la suite Microsoft Cortana Analytics - en particulier Azure Machine Learning Studio - pourrait bien correspondre à vos préférences.

---

Coût: open source gratuit. Plate-forme: nécessite Python, NumPy, SciPy et Matplotlib. Les versions sont disponibles pour MacOS, Linux et Windows.

fiche d'évaluation Modèles et algorithmes (25%) Facilité de développement (25%) Documentation (20%) Performance (20%) Facilité de déploiement (10%) Note globale (100%)
Scikit-learn 0.18.1 9 9 9 8 9 8,8