OOP and ML using sklearn
Reading time10 minEn bref
Résumé de l’article
Cet article explique comment la bibliothèque sklearn utilise la programmation orientée objet pour définir des classes bien adaptées à l’apprentissage automatique.
Points clés
-
Sklearn implémente une classe estimator, qui est utilisée comme classe parente pour définir deux autres classes : predictors et transformers.
-
La classe predictor de sklearn est principalement utilisée pour l’apprentissage supervisé.
-
La classe transformer de sklearn est principalement utilisée pour l’apprentissage non supervisé.
Contenu de l’article
1 — Introduction
Comment pourrions-nous implémenter des algorithmes d’apprentissage automatique de manière flexible et efficace en utilisant la programmation orientée objet ? Nous devons réfléchir aux différentes étapes prises lors de l’utilisation du ML.
Comme nous l’avons étudié dans la session sur les algorithmes standards pour le ML, il existe deux principaux types d’approches en apprentissage automatique : l’apprentissage supervisé et l’apprentissage non supervisé. Bien que ces deux types utilisent des données en entrée pour l’entraînement, l’apprentissage non supervisé n’a pas besoin d’étiquettes en entrée. De plus, après l’entraînement, un modèle d’apprentissage supervisé peut générer des prédictions d’étiquettes, tandis qu’une méthode de clustering attribuera des clusters. Cependant, une technique de décomposition telle que l’Analyse en Composantes Principales transformera les données d’entrée en un nouveau système de coordonnées.
Par conséquent, nous avons besoin d’une API qui puisse idéalement gérer tous ces cas.
2 — Estimators, predictors and transformers
Le choix fait par la bibliothèque sklearn est de considérer que tous les modèles ML sont des estimators. Un estimator possède une phase d’entraînement qui est implémentée dans une méthode .fit(). Ensuite, selon le type d’approche ML, une autre classe héritant de la classe estimator sera utilisée, définissant une méthode .fit() avec un prototype différent :
- pour l’apprentissage supervisé, une classe predictor implémente .fit(X,y) pour utiliser les données et les étiquettes.
- pour l’apprentissage non supervisé, une classe transformer implémente .fit(X) pour utiliser uniquement les données.
- Dans les apprentissages supervisé et non supervisé, la méthode .fit() doit être appelée pour entraîner le modèle avant de pouvoir l’utiliser.
Après l’entraînement, le modèle peut être utilisé. Là encore, c’est légèrement différent selon le type d’approche ML :
- pour l’apprentissage supervisé, la classe predictor implémente une méthode .predict(X) pour générer des prédictions d’étiquettes à partir des données.
- pour l’apprentissage non supervisé, la classe transformer implémente .transform(X) pour projeter les données dans un nouvel espace (par exemple, distances aux clusters, ou un nouveau système de coordonnées). Dans le cas spécifique des techniques de clustering, une classe transformer peut aussi implémenter une méthode .predict(X) pour attribuer des étiquettes de clusters aux données d’entrée.
Dans le pratique, nous implémenterons une classe predictor générique pour l’apprentissage supervisé, que nous nommerons GenericClassifier, puis nous utiliserons le code KNN développé précédemment pour implémenter l’algorithme KNN en utilisant cette classe.
Pour aller plus loin
3 — Exemples de classes dans sklearn
Ici, nous avons présenté une version simplifiée de l’OO appliquée à l’apprentissage automatique. Une explication plus détaillée des cas d’usage possibles, en particulier dans sklearn, est décrite en détail dans cette page. Des exemples d’implémentations de nouvelles classes suivant ces conventions sont ici. Nous vous encourageons à prendre le temps de lire ces pages.
Pour aller encore plus loin
On dirait que cette section est vide !
Y a-t-il quelque chose que vous auriez aimé voir ici ? Faites-le nous savoir sur le serveur Discord ! Peut-être pouvons-nous l’ajouter rapidement. Sinon, cela nous aidera à améliorer le cours pour l’année prochaine !