Les véhicules autonomes, la prédiction des prix, la détection de fraudes, la reconnaissance vocale, le diagnostic médical sont autant de domaine dans lesquels la modélisation prédictive apporte une grande valeur. Avec la disponibilité du volume de données apportée par la révolution du Big Data,  il est aujourd’hui possible de construire des modèles prédictifs très performants.

Python n’est pas un langage bon juste dans l’ingénierie des données. En dehors des bibliothèques comme Panda, ou NumPy, il intègre également une bibliothèque incontournable pour la data science : Scikit-Learn. 

Scikit-Learn est une bibliothèque Python spécialisée dans dans les travaux de Data Science. C’est une bibliothèque facilement accessible, et puissante,  qui s’intègre naturellement dans l’écosystème plus large des outils de science des données basés sur Python.

Dans cet article, nous allons vous montrer tout ce dont vous avez besoin pour démarrer avec scikit-learn.

Définition de Scikit-Learn

Scikit-learn, encore appelé sklearn, est la bibliothèque la plus puissante et la plus robuste pour le machine learning en Python. Elle fournit une sélection d’outils efficaces pour l’apprentissage automatique et la modélisation statistique, notamment la classification, la régression et le clustering via une interface cohérente en Python. Cette bibliothèque, qui est en grande partie écrite en Python, s’appuie sur NumPy, SciPy et Matplotlib.

Scikit-learn a été initialement développé par David Cournapeau dans le cadre du projet Google summer of code en 2007. Plus tard, Matthieu Brucher a rejoint le projet et a commencé à l’utiliser dans le cadre de son travail de thèse. En 2010, l’INRIA s’est impliqué et la première version publique (v0.1 beta) a été publiée fin janvier 2010.

Le projet compte maintenant plus de 30 contributeurs actifs et a bénéficié du soutien financier de l’INRIA, de Google, de Tinyclues et de la Python Software Foundation.

Pourquoi utiliser Scikit-learn ?

Il n’y a pas beaucoup de pages sur Internet où l’on peut réellement trouver les raisons pour lesquelles Scikit-learn est devenu populaire parmi les scientifiques des données, mais après des recherches avancées, nous avons compris pourquoi il est si populaire. Les principales forçes de Scikit learn sont :

Licence BSD : Scikit-learn possède une licence BSD ; par conséquent, il existe une restriction minimale sur l’utilisation et la distribution du logiciel, ce qui le rend libre d’utilisation pour tous.

Facile à utiliser : la popularité de Scikit-learn est due à la facilité d’utilisation qu’il offre.

Documentation détaillée : Il propose également une documentation détaillée de l’API à laquelle les utilisateurs peuvent accéder à tout moment sur le site Web, ce qui les aide à intégrer l’apprentissage automatique dans leurs propres plateformes.

Utilisation intensive dans l’industrie : Scikit-learn est largement utilisé par diverses organisations pour prédire le comportement des consommateurs, identifier les activités suspectes, et bien plus encore.

Algorithmes d’apprentissage automatique : Scikit-learn couvre la plupart des algorithmes d’apprentissage automatique via un énorme soutien communautaire : la possibilité d’effectuer des tâches d’apprentissage automatique à l’aide de Python a été l’une des principales raisons de la popularité de Scikit-learn, car Python est facile à apprendre et à utiliser (Apprenez Python ici) et dispose déjà d’une vaste communauté d’utilisateurs qui peuvent désormais effectuer de l’apprentissage automatique sur une plateforme avec laquelle ils sont à l’aise.

Organigramme des algorithmes : Contrairement à d’autres langages de programmation où les utilisateurs sont généralement confrontés au problème de devoir choisir entre plusieurs implémentations concurrentes des mêmes algorithmes, Scikit-learn dispose d’une antisèche ou d’un organigramme des algorithmes pour aider les utilisateurs.

Qui utilise Scikit-learn ?

Sckit-learn est utilisé dans de nombreux secteurs comme outil principale pour la mise en place de modèles prédictives. Je détaille dans cette partie comment certaines des entreprises les plus connues l’utilisent comme outil phare dans leurs systèmes de recommandations et de prédictions des risques :

Spotify : Scikit-learn est beaucoup utilisé pour les recommandations musicales chez Spotify.

Inria : à l’INRIA, scikit-learn est utilisé pour soutenir la recherche fondamentale de pointe dans de nombreuses équipes : Parietal pour la neuro-imagerie, Lear pour la vision par ordinateur, Visages pour l’analyse d’images médicales, Privatics pour la sécurité.

Booking.com : Booking.com utilisent des algorithmes d’apprentissage automatique pour de nombreuses applications différentes, telles que la recommandation d’hôtels et de destinations à leurs clients, la détection de réservations frauduleuses ou la programmation de leurs agents du service clientèle. Scikit-learn est l’un des outils qu’ils utilisent pour mettre en œuvre des algorithmes standard pour les tâches de prédiction.

BNP Paribas Cardif : BNP Paribas Cardif utilise scikit-learn pour plusieurs de ses modèles d’apprentissage automatique en production. Leur communauté interne de développeurs et de data scientists utilise scikit-learn depuis 2015, pour plusieurs raisons : la qualité des développements, de la documentation et de la gouvernance des contributions, et la taille même de la communauté de contributeurs. Ils utilisent des pipelines de scikit-learn dans leur gouvernance interne du risque de modèle comme l’une de leurs bonnes pratiques pour diminuer les risques opérationnels et le risque d’overfitting.

Démarrer avec Scikit-learn?

Dans cette partie, nous verrons comment  installer Scikit-learn et nous ferons le Hello World classique de la Data Science : l’étude des plantes d’iris.

Pour une meilleure maîtrise de cette librairie vous devez avoir une connaissance de base sur le langage de programmation python et une connaissance de l’architecture Apache Spark. Notre article sur la programmation Python pour la data vous donnera toutes les bases nécessaires pour mieux appréhender cet article.

Installer Scikit-learn

La façon la plus simple d’installer non seulement Scikit-learn, mais aussi Python et ses paquets les plus populaires (IPython, SciPy NumPy, Matplotlib) est d’utiliser Anaconda, une distribution Python multiplateforme (Linux, macOS, Windows) pour l’analyse de données et le calcul scientifique.

Les instructions d’installation pour Anaconda sont disponibles ici.

Après l’installation d’Anaconda, les commandes suivantes vous permettront  d’acquérir tout l’environnement nécessaire pour travailler avec Scikit-learn.

Installation de NumPy

  •  NumPy est une librairie fondamentale ou une bibliothèque pour Python qui permet d’effectuer des calculs numériques.
  •  Pour acquérir NumPy tapez la commande suivante :
conda install -c anaconda numpy

Installation de SciPy

  • SciPy est une bibliothèque open-source pour Python permettant d’effectuer des calculs scientifiques et techniques.
  •  Pour acquérir NumPy tapez la commande suivante :
conda install -c anaconda scipy

Installation de Scikit-learn

conda install -c anaconda scikit-learn

Étude de cas : classification des plantes d’iris

Nous allons utiliser le jeu de données des plantes d’iris. Cet ensemble de données se compose de quatre champs, à savoir la longueur du sépale, la largeur du sépale, la longueur du pétale et la largeur du pétale. Il contient également une super classe qui contient trois classes différentes, Iris setosa, Iris versicolor et Iris virginica. Il s’agit essentiellement des espèces de plantes Iris, et les données de notre ensemble de données, c’est-à-dire les plantes Iris, sont divisées en trois classes.

Nous allons montrer comment importer cet ensemble de données et ensuite exécuter des algorithmes d’apprentissage automatique sur celui-ci.

 Importation du jeu de données

Comme nous l’avons mentionné précédemment, l’ensemble de données que nous allons utiliser dans cette étude de cas est l’ensemble de données des plantes d’iris. Scikit learn Python est livré avec cet ensemble de données, nous n’avons donc pas besoin de le télécharger depuis une autre source. Nous allons importer l’ensemble de données directement, mais avant cela, nous devons importer Scikit learn et Pandas à l’aide des commandes suivantes :

import sklearn
import pandas as pd

Après avoir importé sklearn, nous pouvons facilement importer l’ensemble de données à partir de celui-ci, en utilisant la commande suivante :

from sklearn.datasets import load_iris

Nous avons importé avec succès l’ensemble de données des plantes Iris de sklearn. Nous devons maintenant importer Pandas, car nous allons charger les données importées dans un DataFrame Pandas et utiliser les fonctions head() et tail() de Python Pandas pour afficher le contenu du DataFrame. Voyons comment convertir cet ensemble de données en un DataFrame Pandas.

plantes_iris = load_iris()
df_plantes_iris = pd.DataFrame(plantes_iris.data, columns=plantes_iriss.feature_names)

Exploration des données

Nous avons maintenant un DataFrame nommé df_plantes_iris  qui contient l’ensemble de données des plantes d’iris importé de Scikit-learn sous forme de tableau. Nous allons effectuer toutes les opérations de Machine Learning sur ce DataFrame.

Affichons les enregistrements de ce DataFrame en utilisant la fonction head() :

df_plantes_iris.head()

La fonction head(), lorsqu’elle est utilisée sans argument, affiche les cinq premières lignes du DataFrame. Cependant, nous pouvons passer n’importe quel argument entier pour afficher le même nombre de lignes du DataFrame. L’affichage de la commande ci-dessus est le s{« type »: »inserter », »blocks »:[{« clientId »: »f073e589-5d4d-4b27-930f-7f79f8a555bf », »name »: »core/image », »isValid »:true, »attributes »:{« alt »: » »}, »innerBlocks »:[]}]}uivant :

tableau iris scikit learn

Maintenant, voyons comment afficher les enregistrements du DataFrame, en utilisant la fonction tail() :

df_plantes_iris.tail()

La fonction tail(), lorsqu’elle est utilisée sans aucun argument, affiche les cinq dernières lignes du DataFrame. Comme pour la fonction head(), nous pouvons passer n’importe quel nombre entier comme argument pour afficher le même nombre d’enregistrements depuis la fin. L’affichage de la commande ci-dessus est le suivant :

tableau sklearn iris 2

Comme la fonction tail() affiche les derniers enregistrements du DataFrame, nous pouvons voir que le numéro d’index de la dernière ligne est 149. En revanche, lorsque nous utilisons la fonction head(), le numéro d’index de la première ligne est 0, c’est-à-dire que le nombre total d’entrées est de 150 ou qu’un total de 150 enregistrements est présent dans l’ensemble de données des plantes d’iris.

Maintenant, voyons comment nous pouvons vérifier les types de données des champs présents dans le DataFrame.

df_plantes_iris.dtypes

output :

sepal length (cm)    float64
sepal width (cm)     float64
petal length (cm)    float64
petal width (cm)     float64
dtype: object

Ainsi, en utilisant dtypes, nous pouvons lister les différentes colonnes du DataFrame, ainsi que leurs types de données Python respectifs.

Visualisation des données

Après avoir effectué l’exploration de nos données, nous allons maintenant créer des graphiques pour représenter visuellement les données de notre ensemble de données, ce qui nous aidera à découvrir d’autres informations cachées.

Python dispose de nombreuses bibliothèques qui fournissent des fonctions permettant de réaliser des visualisations de données sur des ensembles de données. Nous pouvons utiliser l’extension .plot de Pandas pour créer un nuage de points des caractéristiques ou des champs de notre ensemble de données les uns par rapport aux autres, et nous devons également importer python matplotlib qui fournit une API orientée objet pour intégrer les graphiques dans les applications.

Entrée :

from pandas.plotting import scatter_matrix
import matplotlib.pyplot as plt
scatter_matrix(df_plantes_iris,figsize=(10,10))
plt.show()

sortie:

matplob lib panda data visualisation

Nous pouvons également utiliser la bibliothèque Seaborn pour créer des diagrammes de paires de toutes les caractéristiques de l’ensemble de données les unes par rapport aux autres. Pour utiliser Seaborn, nous devons d’abord importer la bibliothèque Seaborn. Voyons comment procéder et comment créer un diagramme de paires Seaborn.

Entrée :

import seaborn as sns
sns.set(style="ticks", color_codes=True)
df_plantes_iris = sns.load_dataset("iris")
sns.pairplot(df_plantes_iris, hue="species")

Sortie :

seaborn data visualisation avec python

Apprentissage et prédiction

Le nuage de points que nous avons créé n’est utile que dans une certaine mesure. Il est évident qu’il existe un regroupement des espèces de plantes Iris en différentes classes, et il montre également qu’il existe certaines relations entre les champs ou les caractéristiques. Mais il est difficile d’indiquer quelle classe représente quel type et quel point de données représente quelle espèce de fleur dans le nuage de points, en raison de la monotonie de la distribution des couleurs dans les points de données.

Heureusement, nous pouvons rectifier et surmonter ce problème en utilisant le module Seaborn pour la visualisation de données en Python. C’est exactement ce que nous avons fait en créant un diagramme en paires de l’ensemble de données donné à l’aide de Seaborn. Nous pouvons nous référer à ce diagramme pour tirer les conclusions et les prédictions.  Pour effectuer des prédictions sur cet ensemble de donnés la première étape est :

  1. Sélection des champs

Maintenant que nous sommes à l’aise avec les données et que nous avons réalisé des visualisations de données, nous allons décider quelles caractéristiques ou quels champs de l’ensemble de données nous allons utiliser pour mettre en œuvre l’apprentissage automatique et faire des prédictions. Nous devons sélectionner les caractéristiques qui ont le plus de sens pour le modèle d’apprentissage automatique.

Mais pourquoi sélectionner des caractéristiques ? Nous pourrions penser raisonnablement pourquoi nous ne pouvons pas simplement utiliser toutes les caractéristiques pour notre modèle d’apprentissage automatique et laisser le modèle faire le travail pour nous en déterminant quelle caractéristique est la plus pertinente ? La réponse à cette question est que toutes les caractéristiques ne servent pas d’information. L’ajout de fonctionnalités dans le seul but d’avoir des données dans le modèle rendra ce dernier inutilement lent et moins efficace. Le modèle s’embrouillera dans l’abondance de données inutiles et essaiera de les intégrer à lui-même, ce qui n’est qu’un ennui inutile.

C’est pourquoi nous devons sélectionner les caractéristiques qui seront utilisées dans le modèle d’apprentissage automatique.

Dans le diagramme de paires que nous avons créé à l’aide du module Seaborn, nous pouvons remarquer que les caractéristiques length (cm) et petal width (cm) sont regroupées en groupes assez bien définis.

On remarque également que la frontière entre Iris versicolor et Iris virginica semble floue, ce qui pourrait poser problème à certains classificateurs. Nous devrons garder cela à l’esprit. Mais ces caractéristiques donnent toujours le regroupement le plus visible entre les espèces ; nous utiliserons donc ces deux caractéristiques plus loin dans notre tutoriel pour notre modèle d’apprentissage automatique.

2. Préparation des données

Pour l’instant, nous avons les données dans un DataFrame Pandas. Avant de commencer avec le modèle d’apprentissage automatique, nous devons convertir les données en tableaux NumPy, car sklearn fonctionne bien avec les données sous forme de tableaux NumPy. Il ne fonctionne pas avec les DataFrame de Pandas.

Ceci peut être fait en utilisant la commande suivante :

import numpy as np
labels = np.asarray(df_plantes_iris.species)

Sklearn est livré avec un outil, LabelEncoder(), qui peut encoder les chaînes d’étiquettes en représentations numériques. Il parcourt l’étiquette et convertit la première chaîne unique en 0, puis la suivante en 1, et ainsi de suite. Voyons comment l’utiliser :

from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
le.fit(labels)
labels = le.transform(labels)

Maintenant, nous allons supprimer tous les éléments dont nous n’avons pas besoin de notre DataFrame en utilisant la méthode drop() :

df_selected1 = df_plantes_iris.drop(['sepal_length', 'sepal_width', "species"], axis=1)

Après cela, les seules caractéristiques qui nous restent sont la longueur et la largeur des pétales.

df_features = df_selected1.to_dict(orient='records')
from sklearn.feature_extraction import DictVectorizer
vec = DictVectorizer()
features = vec.fit_transform(df_features).toarray()

3. ensemble d’entraînement et ensemble de test

À l’aide de la dernière commande, nous avons converti les caractéristiques numériques en tableaux d’étiquettes. L’étape suivante consiste à diviser les données en ensembles d’entraînement et de test. Là encore, sklearn dispose d’un outil pour le faire, appelé train_test_split. Tout ce que nous avons à faire est de l’importer et de l’utiliser comme suit :

from sklearn.model_selection import train_test_split
features_train, features_test, labels_train, labels_test = train_test_split(
features, labels, test_size=0.20, random_state=0)

Nos ensembles de test et d’apprentissage sont prêts. Maintenant, effectuons la classification en utilisant des algorithmes ou des approches d’apprentissage automatique, puis comparerons la précision de test de tous les classificateurs sur les données de test.

4. construire un modèle et choisir un classificateur

scikit-learn algorithm cheat-sheel

Comme nous l’avons déjà évoqué dans la section sur les raisons de son utilisation, Scikit-learn est fourni avec un organigramme qui aide les utilisateurs à décider quel algorithme d’apprentissage automatique conviendra le mieux à leur ensemble de données. Nous allons également l’utiliser comme référence pour identifier l’algorithme que nous devons utiliser sur nos données de test. L’organigramme est disponible sur le site officiel de Scikit-learn.

À l’aide de la liste suivante, voyons dans quelle catégorie nous nous situons :

  • le nombre d’échantillons : notre nombre d’échantillons est supérieur à 50 et inférieur à 100 000
  • les données sont-elles étiquetées ? nous avons des données étiquetées
  • la catégorie est-elle prédite ? nous avons des prédictions sur la catégorie des plantes d’iris.

Donc, en parcourant l’organigramme, nous pouvons essayer les algorithmes suivants sur notre ensemble de test :

  •  SVM (Support Vector Machine)
  • K-Nearest Neighbors Classifier

SVM (Support Vector Machine)

Dans le domaine de l’apprentissage automatique, le SVM ou Support Vector Machine est un algorithme d’apprentissage dans lequel l’algorithme analyse les données et construit un modèle qui est utilisé principalement pour les techniques de classification ou de régression de l’apprentissage automatique. Ici, dans notre cas, nous utilisons le modèle SVM pour la classification.

Calcul de la précision en utilisant l’ensemble de test :

from sklearn.svm import SVC
svm_model_linear = SVC(kernel = 'linear', C = 1).fit(features_train, labels_train)
svm_predictions = svm_model_linear.predict(features_test)
accuracy = svm_model_linear.score(features_test, labels_test)
print("Précision du test:",accuracy)

Sortie :

Précision du test : 1.0

Calcul de la précision à l’aide de l’ensemble d’entraînement :

from sklearn.svm import SVC
svm_model_linear = SVC(kernel = 'linear', C = 1).fit(features_train, labels_train)
svm_predictions = svm_model_linear.predict(features_train)
accuracy = svm_model_linear.score(features_train, labels_train)
print("Précision entrainement:",accuracy)

Sortie:

Précision entrainement: 0.9583333333333334

Maintenant, nous pouvons utiliser la précision de l’ensemble d’entraînement et la précision de l’ensemble de test que nous avons calculées pour déterminer dans quelle mesure notre modèle est surajusté en comparant ces deux précisions.

La suradaptation d’un modèle est une condition ou une erreur de modélisation où la fonction s’adapte trop étroitement à un ensemble limité de points de données.

Comme vous pouvez le voir, il n’y a pas de grande différence entre la précision du test et celle de l’entraînement, c’est-à-dire que notre modèle n’est pas surajusté.

Classificateur K-Nest Neighbors (voisins les plus proches)

KNN ou K-nearest neighbors est une méthode d’apprentissage non paramétrique en apprentissage automatique, principalement utilisée pour les techniques de classification et de régression. Il est considéré comme l’un des algorithmes les plus simples de l’apprentissage automatique.

Calcul de la précision en utilisant l’ensemble de test :

from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors = 7).fit(features_train, labels_train)
accuracy = knn.score(features_test, labels_test)
print("Précision du test:", accuracy)

Sortie

Précision du test: 1.0

Calcul de la précision à l’aide de l’ensemble d’entraînement :

from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors = 7).fit(features_train, labels_train)
accuracy = knn.score(features_train, labels_train)
print("Précision entrainement:", accuracy)

Sortie

Précision entrainement: 0.9583333333333334

Là encore, nous pouvons utiliser la précision de l’ensemble d’entraînement et celle de l’ensemble de test pour déterminer si le modèle est surajusté.

Remarque : il n’y a pas lieu de s’inquiéter si les résultats finaux sont légèrement différents ; on s’attend à ce que la précision de ces classificateurs varie parfois.

 5. Effectuer des tests sur notre modèle

Nous pouvons maintenant faire des prédictions sur des données inédites ou nouvelles. Par exemple, si nous choisissons une nouvelle fleur d’iris au hasard et que nous mesurons les 2 valeurs des caractéristiques, notre modèle peut maintenant prédire l’espèce de la fleur sur la base de ce qu’il a appris de l’ensemble de données d’apprentissage. Supposons que les valeurs des caractéristiques mesurées soient les suivantes :

        longueur du pétale = 3,3 cm

        largeur du pétale = 2,9 cm

Enregistrons les valeurs des caractéristiques dans un objet appelé X_new et utilisons l’estimateur knn pour prédire le code de l’espèce :

X_new = [[3.3, 2.9]]
print(knn.predict(X_new))
print(plantes_iris.target_names[knn.predict(X_new)])

Notre modèle a prédit que la nouvelle fleur appartient au type d’Iris Verscicolor, qui a une valeur de réponse de 1.

Conclusion

Scikit learn Python a fait ses preuves en étant capable d’aider les professionnels à résoudre les problèmes auxquels ils sont confrontés lorsqu’ils mettent en œuvre des modèles prédictifs. Scikit learn Python n’est pas seulement limité à l’industrie informatique. Il a des applications variées dans divers secteurs. Il peut être utilisé pour mettre en œuvre l’apprentissage automatique et peut être associé à des visualisations de données, ce qui rend l’apprentissage automatique encore plus intéressant. Avec tous les avantages qu’il présente, on peut facilement dire que Scikit Python a un large champ d’application.

J’espère qu’à travers ce tutoriel, vous avez appris à utiliser Scikit-Learn et que vous êtes maintenant prêt à passer à un autre niveau avec la bibliothèque de Data Science. Si vous souhaitez vous reconvertir dans le Big Data, nous vous offrons gratuitement cet ebook sur les 7 technologie principales du Big Data. N’hésitez pas à le télécharger, cela vous permettra également de vous abonner aux éditions Juvénal & Associés, et être notifié de la publication de tutoriels comme celui-ci.

Categories: Data Science

Juvénal JVC

Juvénal est spécialisé depuis 2011 dans la valorisation à large échelle des données. Son but est d'aider les professionnels de la data à développer les compétences indispensables pour réussir dans le Big Data. Il travaille actuellement comme Lead Data Engineer auprès des grands comptes. Lorsqu'il n'est pas en voyage, Juvénal rédige des livres ou est en train de préparer la sortie d'un de  ses livres. Vous pouvez télécharger un extrait de son dernier livre en date ici : https://www.data-transitionnumerique.com/extrait-ecosystme-hadoop/

>