
Il existe aujourd'hui un grand nombre d'outils logiciels pour créer des modèles Machine Learning. Les premiers outils de ce type ont été formés parmi les scientifiques et les statisticiens, où les langages R et Python sont des écosystèmes populaires et historiquement développés pour le traitement, l'analyse et la visualisation des données dans ces langages, bien qu'il existe certaines bibliothèques d'apprentissage automatique pour Java, Lua, C ++. Dans le même temps, les langages de programmation interprétés sont beaucoup plus lents que ceux compilés; par conséquent, la préparation des données et la structure du modèle sont décrites dans un langage interprété, et les principaux calculs sont effectués dans un langage compilé.
Dans cet article, nous parlerons principalement des bibliothèques qui ont une implémentation Python, car ce langage a un grand nombre de packages pour l'intégration dans divers services et systèmes, ainsi que pour l'écriture de divers systèmes d'information. Le matériel contient une description générale des bibliothèques bien connues et sera utile principalement à ceux qui commencent à étudier le domaine du ML et veulent comprendre à peu près où chercher les implémentations de certaines méthodes.
Lorsque vous choisissez des packages spécifiques pour résoudre des problèmes, la première chose à décider est de savoir s'ils disposent d'un mécanisme pour résoudre vos problèmes. Ainsi, par exemple, pour l'analyse d'images, vous devrez probablement traiter avec des réseaux de neurones, et pour travailler avec du texte - avec des réseaux récurrents, avec une petite quantité de données, les réseaux de neurones devront probablement être abandonnés.
Bibliothèques à usage général en Python
Tous les packages décrits dans cette section sont en quelque sorte utilisés pour résoudre presque toutes les tâches d'apprentissage automatique. Souvent, ils suffisent pour construire l'ensemble du modèle, du moins en première approximation.
Numpy
Une bibliothèque open source pour effectuer des opérations d'algèbre linéaire et des transformations numériques. En règle générale, de telles opérations sont nécessaires pour convertir des ensembles de données, qui peuvent être représentés comme une matrice. La bibliothèque a mis en œuvre un grand nombre d'opérations pour travailler avec des tableaux multidimensionnels, des transformées de Fourier et des générateurs de nombres aléatoires. Les formats de stockage Numpy sont la norme de facto pour le stockage de données numériques dans de nombreuses autres bibliothèques (par exemple Pandas, Scikit-learn, SciPy).
Site Web :
www.numpy.orgPandas
Bibliothèque pour le traitement des données. Avec son aide, vous pouvez télécharger des données de presque n'importe quelle source (intégration avec les principaux formats de stockage de données pour l'apprentissage automatique), calculer diverses fonctions et créer de nouveaux paramètres, créer des requêtes de données à l'aide de fonctions d'agrégation similaires à celles implémentées dans SQL. En outre, il existe une variété de fonctions de transformation matricielle, une méthode de fenêtre coulissante et d'autres méthodes pour obtenir des informations à partir de données.
Site Web :
pandas.pydata.orgScikit-learn
Une bibliothèque de logiciels avec plus d'une décennie d'histoire contient des implémentations de presque toutes les transformations possibles, et souvent elle suffit à elle seule pour implémenter pleinement le modèle. En règle générale, lors de la programmation de presque tous les modèles en Python, certaines transformations utilisant cette bibliothèque sont toujours présentes.
Scikit-learn contient des méthodes pour diviser un ensemble de données en test et en formation, calculer des métriques de base sur des ensembles de données et effectuer une validation croisée. La bibliothèque possède également les algorithmes de base pour l'apprentissage automatique: régression linéaire (et ses modifications de Lasso, régression de crête), vecteurs de support, arbres de décision et forêts, etc. Il existe également des implémentations des principales méthodes de clustering. De plus, la bibliothèque contient des méthodes constamment utilisées par les chercheurs pour travailler avec des paramètres (caractéristiques): par exemple, réduire la dimension en utilisant la méthode du composant principal. La bibliothèque imblearn fait partie du package, vous permettant de travailler avec des échantillons déséquilibrés et de générer de nouvelles valeurs.
Site Web :
www.scikit-learn.orgScipy
Une bibliothèque assez vaste conçue pour la recherche. Il comprend un large éventail de fonctions issues de l'analyse mathématique, dont le calcul des intégrales, la recherche du maximum et du minimum, des fonctions de traitement des signaux et des images. À bien des égards, cette bibliothèque peut être considérée comme un analogue du package MATLAB pour les développeurs en langage Python. Avec son aide, vous pouvez résoudre des systèmes d'équations, utiliser des algorithmes génétiques et effectuer de nombreuses tâches d'optimisation.
Site Web :
www.scipy.orgBibliothèques spécifiques
Dans cette section, les bibliothèques ayant un domaine d'application spécifique ou populaires auprès d'un nombre limité d'utilisateurs sont considérées.
Tensorflow
Une bibliothèque développée par Google pour travailler avec des tenseurs est utilisée pour construire des réseaux de neurones. La prise en charge de l'informatique sur les cartes graphiques a une version pour le langage C ++. Sur la base de cette bibliothèque, des bibliothèques de niveau supérieur sont conçues pour travailler avec des réseaux de neurones au niveau de couches entières. Ainsi, il y a quelque temps, la bibliothèque Keras populaire a commencé à utiliser Tensorflow comme backend principal pour les calculs au lieu de la bibliothèque Theano similaire. La bibliothèque cuDNN est utilisée pour travailler sur les cartes graphiques NVIDIA. Si vous travaillez avec des images (avec des réseaux de neurones convolutifs), vous devrez très probablement utiliser cette bibliothèque.
Site Web :
www.tensorflow.orgKeras
Une bibliothèque pour la construction de réseaux de neurones qui prend en charge les principaux types de couches et d'éléments structurels. Il prend en charge les réseaux de neurones récurrents et convolutionnels, intègre la mise en œuvre d'architectures de réseaux de neurones bien connues (par exemple, VGG16). Il y a quelque temps, les couches de cette bibliothèque sont devenues disponibles dans la bibliothèque Tensorflow. Il existe des fonctions prêtes à l'emploi pour travailler avec des images et du texte (intégration de mots, etc.). Intégré dans Apache Spark en utilisant la distribution dist-keras.
Site Web :
www.keras.ioCaffe
Un cadre pour la formation des réseaux de neurones de l'Université de Berkeley. Comme TensorFlow, il utilise cuDNN pour fonctionner avec les cartes graphiques NVIDIA. Il contient l'implémentation de réseaux de neurones plus connus, l'un des premiers frameworks intégrés à Apache Spark (CaffeOnSpark).
Site Web :
cafee.berkeleyvision.orgpyTorch
Vous permet de porter la bibliothèque Torch pour le langage Lua vers le langage Python. Il contient des implémentations d'algorithmes pour travailler avec des images, des opérations statistiques et des outils pour travailler avec des réseaux de neurones. Séparément, vous pouvez créer un ensemble d'outils pour les algorithmes d'optimisation (en particulier la descente de gradient stochastique).
Site Web :
www.torch.chImplémentations de Gradient Boost sur les arbres de décision
De tels algorithmes suscitent invariablement un intérêt accru, car ils montrent souvent de meilleurs résultats que les réseaux de neurones. Cela est particulièrement vrai si vous ne disposez pas de très grands ensembles de données (une estimation très approximative: des milliers et des dizaines de milliers, mais pas des dizaines de millions). Parmi les modèles gagnants sur la plate-forme compétitive kaggle, les algorithmes de renforcement du gradient sur les arbres de décision sont assez courants.
En règle générale, les implémentations de ces algorithmes se trouvent dans des bibliothèques d'apprentissage machine à large base (par exemple, dans Scikit-learn). Cependant, il existe des implémentations spéciales de cet algorithme, qui peuvent souvent être trouvées parmi les gagnants de diverses compétitions. Il convient de souligner les éléments suivants.
Xgboost
L'implémentation la plus courante du boost de gradient. Apparue en 2014, elle avait déjà gagné en popularité en 2016. Le tri et les modèles basés sur l'analyse d'histogramme sont utilisés pour sélectionner la partition.
Site Web :
github.com/dmlc/xgboostLightgbm
Option d'amélioration du gradient de Microsoft, publiée en 2017. L'échantillonnage unilatéral basé sur un gradient (GOSS) est utilisé pour sélectionner le critère de partitionnement. Il existe des méthodes pour travailler avec des attributs catégoriels, c'est-à-dire avec des signes qui ne sont pas explicitement exprimés par un numéro (par exemple, le nom de l'auteur ou de la marque de la voiture). Il fait partie du projet Microsoft DMTK dédié à la mise en œuvre d'approches d'apprentissage machine pour .Net.
Site Web :
www.dmtk.ioCatboost
Le développement de Yandex, qui, comme LightGBM, a été lancé en 2017, met en œuvre une approche spéciale pour le traitement des fonctionnalités catégorielles (basée sur le codage cible, c'est-à-dire en remplaçant les fonctionnalités catégorielles par des statistiques basées sur la valeur prédite). De plus, l'algorithme contient une approche spéciale de la construction de l'arbre, qui a donné les meilleurs résultats. Notre comparaison a montré que cet algorithme fonctionne mieux que d'autres directement hors de la boîte, c'est-à-dire sans définir de paramètres.
Site Web :
catboost.yandexBoîte à outils cognitive Microsoft (CNTK)
Le cadre de Microsoft Corporation a une interface C ++. Fournit la mise en œuvre de diverses architectures de réseaux de neurones. Cela peut être une intégration intéressante avec .Net.
Site Web :
www.microsoft.com/en-us/cognitive-toolkitAutres ressources de développement
Comme l'apprentissage automatique est devenu plus populaire, les projets sont apparus à plusieurs reprises pour simplifier le développement et le mettre sous forme graphique avec un accès en ligne. Dans ce domaine, plusieurs peuvent être notés.
Azure ML
Service d'apprentissage automatique sur la plate-forme Microsoft Azure, dans lequel vous pouvez créer un traitement de données sous forme de graphiques et effectuer des calculs sur des serveurs distants, avec la possibilité d'inclure du code Python et d'autres.
Site Web: azure.microsoft.com/ru-ru/services/machine-learning-studio
Expérience IBM DataScience (IBM DSX)
Un service pour travailler dans l'environnement Jupyter Notebook avec la possibilité d'effectuer des calculs en Python et autres. Prend en charge l'intégration avec des ensembles de données bien connus et Spark, un projet IBM Watson.
Site Web :
ibm.com/cloud/watson-studioForfaits en sciences sociales
Parmi eux, IBM Statistical Package for the Social Sciences (SPSS), un produit logiciel IBM pour le traitement des statistiques en sciences sociales, qui prend en charge une interface graphique pour définir le processus de traitement des données. Il y a quelque temps, il est devenu possible d'intégrer des algorithmes d'apprentissage automatique dans la structure d'exécution globale. En général, la prise en charge limitée des algorithmes d'apprentissage automatique devient populaire parmi les packages de statisticien qui incluent déjà des fonctions statistiques et des méthodes de visualisation (par exemple Tableau et SAS).
Conclusion
Le choix du progiciel sur la base duquel la tâche sera résolue est généralement déterminé par les conditions suivantes.
- L'environnement dans lequel le modèle sera utilisé: si le support Spark est nécessaire, quels services doivent être intégrés.
- Caractéristiques des données. Quelles sont les données: image, texte ou s'agit-il d'un ensemble de chiffres, de quel type de traitement ont-ils besoin?
- La prédisposition des modèles à ce type de tâche. Les données des images sont généralement traitées par des réseaux de neurones convolutifs et des algorithmes basés sur des arbres de décision sont utilisés pour les petits ensembles de données.
- Limitations de la puissance de calcul, à la fois en formation et en utilisation.
En règle générale, lors du développement en Python, l'utilisation de bibliothèques à usage général (Pandas, Scikit-learn, numPy) ne peut pas être évitée. Cela a conduit au fait que leur interface prend en charge la plupart des bibliothèques spécialisées, mais si ce n'est pas le cas, vous devez comprendre que vous devrez écrire vous-même les connecteurs ou choisir une autre bibliothèque.
Vous pouvez créer le premier modèle en utilisant un nombre relativement petit de bibliothèques, puis vous devrez décider sur quoi consacrer du temps: développer des paramètres (ingénierie des fonctionnalités) ou choisir la bibliothèque et l'algorithme optimaux, ou effectuer ces tâches en parallèle.
Maintenant, un peu sur les recommandations de choix. Si vous avez besoin d'un algorithme qui fonctionne le mieux dès la sortie de l'emballage, c'est Catboost. Si vous avez l'intention de travailler avec des images, vous pouvez utiliser Keras et Tensorflow ou Caffe. Lorsque vous travaillez avec du texte, vous devez décider si vous avez l'intention de construire un réseau de neurones et prendre en compte le contexte. Si oui, même souhait que pour les images, si un «sac de mots» (caractéristiques fréquentielles de l'occurrence de chaque mot) suffit, des algorithmes de boosting de gradient conviennent. Avec de petits ensembles de données, vous pouvez utiliser les algorithmes pour générer de nouvelles données à partir de Scikit-learn et des méthodes linéaires implémentées dans la même bibliothèque.
En règle générale, les bibliothèques décrites sont suffisantes pour résoudre la plupart des problèmes, même pour gagner des concours. Le domaine de l'apprentissage automatique se développe très rapidement - nous sommes sûrs que de nouveaux cadres sont déjà apparus au moment de la rédaction de cet article.
Nikolay Knyazev, responsable du groupe d'apprentissage automatique Jet Infosystems