Avant de vous faire découvrir ses fonctions utiles, rappelons-nous ce qu’est Scikit-learn et dans quel cas l’utiliser. Scikit-Learn est une bibliothèque Python destinée au Machine Learning, pour l’apprentissage supervisé ou non supervisé. Elle offre également la possibilité d'analyser des modèles avec les moyens statistiques.
L’installation se fait avec conda :
conda install scikit-learn
Ou bien avec pip :
pip install -U scikit-learn
Dans cet article, nous explorerons cinq fonctions de Scikit-learn (souvent abrégé « Scikit », ou tout simplement « sklearn »), qui pourraient transformer votre approche de l’apprentissage des données.
1. Obtenez des jeux de données
La fonction très utile (surtout pour les débutants) est la possibilité de travailler avec plusieurs ensembles de données intégrés automatiquement dans Scikit-learn.
Parmi les bases les plus utilisées, nous trouvons : l’ensemble de données iris, l’ensemble de données des prix des maisons, l’ensemble de données sur le diabète. Ces ensembles de données sont conçus pour être facilement compréhensibles, ce qui permet une mise en œuvre directe de modèles d’apprentissage automatique.
Vous pouvez importer l’ensemble de données iris avec le code suivant :
from sklearn.datasets import load_iris
De manière similaire, vous pouvez importer d’autres ensembles de données disponibles dans la bibliothèque Scikit-learn.
2. Divisez vos données
La première étape avant l’entraînement de tout algorithme de machine learning consiste à diviser l’ensemble de données en deux parties: les données pour entraîner le modèle et les données pour le tester (80% contre 20% respectivement dans la plupart des cas).
Ce fractionnement est crucial pour la suite du travail, il permet de :
- Obtenir une estimation de la performance du modèle sur des nouvelles données ;
- Détecter l’overfitting (surajustement – si un modèle est ajusté de manière trop précise aux données d’entraînement, il peut ne pourra généraliser correctement sur de nouvelles données ;
- Optimiser les hyperparamètres – en ajustant les paramètres du modèle et en évaluant les performances sur l’ensemble de test ;
- Vérifier la robustesse du modèle envers les données inconnues dans des situations du monde réel.
La fonction de Scikit-learn qui permet de créer l’ensemble d’entraînement et l’ensemble de test en une ligne de code s’appelle train_test_split :
from sklearn.model_selection import train_test_split
3. Utilisez les techniques avancées
Il est possible d’élever le niveau de l’apprentissage de données en utilisant l’approche qui fait appel à l’utilisation de plusieurs modèles pour prédire la variable cible (au lieu de s’en remettre à un seul). L’objectif principal de cette technique d’ensemble est d’atténuer le compromis entre la variance et le biais.
Nous divisons le jeu de données de manière aléatoire en sous-ensembles, qui sont ensuite présentés à différents modèles pour l’entraînement. Lorsqu’il est temps de faire une prédiction, on considère la moyenne de toutes les prédictions générées par ces modèles.
Il en existe deux techniques principales: bagging (ou Bootstrap Aggregating) et boosting.
La particularité du bagging réside dans le fait que les entrées pour différents modèles sont indépendantes les unes des autres, ce qui permet d’éviter le surajustement.
En Scikit-learn la classe BaggingClassifier peut être utilisée pour appliquer la technique de bagging à différents algorithmes de machine learning :
from sklearn.ensemble import BaggingClassifier
Cette technique a été une source d’inspiration pour la création de Random Forest (forêt aléatoire), car un des exemples les plus courants de bagging est l’utilisation de plusieurs arbres de décision pour la prédiction.
Boosting est une approche dans laquelle plusieurs modèles sont formés de manière à ce que la sortie d’un modèle influence l’entrée du modèle suivant, et une attention particulière est accordée aux données qui ont été prédites de manière incorrecte.
Afin de pouvoir profiter de cette technique, vous pouvez importer la classe GradientBoostingClassifier pour les problèmes de classification :
from sklearn.ensemble import GradientBoostingClassifier
ou GradientBoostingRegressor pour les problèmes de régression :
from sklearn.ensemble import GradientBoostingRegressor
4. Évaluez la performance de votre modèle
Après avoir appliqué l’algorithme de machine learning, il est indispensable d’évaluer la performance d’un modèle. La fonction pour le faire de manière plus robuste et fiable s’appelle cross_val_score.
L’objectif principal de cette fonction est de faire la validation croisée. Cette approche permet de maximiser l’utilisation des données d’entraînement en les divisant en plusieurs sous-ensembles (plis). Chacun de ces plis est utilisé ensuite à tour de rôle comme ensemble de validation, en laissant les autres pour d’entraînement.
Cela contribue à éviter les biais liés à une seule division des données et permet (grâce aux scores de performance moyens) d’obtenir une estimation plus réaliste de la robustesse du modèle sur différents sous-ensembles de données.
Voici le code pour importer cette fonction de Scikit-learn :
from sklearn.model_selection import cross_val_score
5. Épurez votre code en le rendant plus élégant et moins consommateur
La fonctionnalité Pipeline permet de combiner plusieurs étapes de prétraitement et de modélisation en une seule séquence.
Cela facilite la répétabilité du processus et l’application cohérente des transformations sur les ensembles d’entraînement et de test.
Voici un exemple du code dans lequel nous standardisons les données, faisons la réduction de dimension et l’entraînement d’un modèle :
#On import des fonctions nécessaires
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.metrics import mean_squared_error
#On effectue le split des données
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
#On normalise les données
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
#On réduit la dimension
pca = PCA(n_components=3)
X_train_pca = pca.fit_transform(X_train_scaled)
X_test_pca = pca.transform(X_test_scaled)
#On entraîne le modèle
regressor = GradientBoostingRegressor(n_estimators=100, learning_rate=0.1, max_depth=3, random_state=42)
regressor.fit(X_train_pca, y_train)
#Finalement, on évalue le modèle
predictions = regressor.predict(X_test_pca)
mse = mean_squared_error(y_test, predictions)
Nous pouvons refaire le même code en utilisant Pipeline :
#On import des fonctions nécessaires
from sklearn.pipeline import Pipeline
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.metrics import mean_squared_error
#On effectue le split des données
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
#On créé un pipeline
pipeline = Pipeline([
('scaler', StandardScaler()), #On normalise les données
('pca', PCA(n_components=3)), #On réduit la dimension
('regressor', GradientBoostingRegressor(n_estimators=100, learning_rate=0.1, max_depth=3, random_state=42))
#On entraîne le modèle
])
#On entraîne le modèle en utilisant le pipeline
pipeline.fit(X_train, y_train)
#Finalement, on évalue le modèle
predictions = pipeline.predict(X_test)
mse = mean_squared_error(y_test, predictions)
print("Erreur quadratique moyenne :", mse)
L’utilisation de Pipeline, nous permet de définir chaque étape avec un nom spécifique (ex : ‘scaler’, ‘pca’, ‘regressor’), simplifiant ainsi le processus d’entraînement et d’évaluation pour le modèle.
Elle réduit le besoin de répéter plusieurs fois des étapes similaires, ce qui améliore la lisibilité du code. Dans l’exemple au-dessus la version avec Pipeline est plus courte d’environ 4 lignes, ce qui représente une réduction significative, surtout à mesure que le nombre d’étapes de prétraitement et de modélisation augmente.
Conclusion
Scikit-learn offre une panoplie de fonctionnalités puissantes susceptibles de simplifier considérablement le développement de vos modèles d’apprentissage automatique. En explorant ces cinq fonctions présentées, vous avez l’opportunité d’accroître votre efficacité et d’obtenir des résultats plus robustes. Ainsi, n’hésitez pas à intégrer dès aujourd’hui ces fonctionnalités à votre boîte à outils en machine learning !