Pourquoi Scikit-learn ?
Scikit-learn est un des outils les plus populaires et puissants pour la science de données en Python. Il s'agit d'une bibliothèque open source qui fournit une variété large de fonctionnalités pour le traitement, l'apprentissage et l'évaluation des modèles d'apprentissage automatique (ML).
Dans un monde où les entreprises se battent pour analyser et interpréter de vastes quantités de données, Scikit-learn offre des solutions pratiques et efficaces. Par exemple, imaginez une entreprise qui souhaite prédire le taux de churn de ses clients. Avec Scikit-learn, elle peut facilement préparer les données, entraîner un modèle d'apprentissage automatique et évaluer sa performance pour prendre des décisions plus éclairées.
Prerequis
Pour suivre ce tutoriel, vous aurez besoin des éléments suivants :
- Connaissance de base en Python
- Installation de Python (version 3.6 ou supérieure)
- Un environnement de développement intégré (IDE) comme Visual Studio Code, PyCharm, ou Jupyter Notebook
- Bibliothèque Scikit-learn
Vous pouvez installer Scikit-learn via pip :
pip install scikit-learn
Concepts fondamentaux
1. Ensemble de données (Dataset)
Un ensemble de données est une collection d'objets (appelés instances ou échantillons) avec leurs attributs et leur classe cible (si applicable). Dans Scikit-learn, les ensembles de données sont généralement représentés par des objets DataFrame de la bibliothèque pandas.
import pandas as pd
## Exemple d'ensemble de données
data = {
'age': [25, 30, 35, 40],
'income': [50000, 60000, 70000, 80000],
'purchased': ['No', 'Yes', 'Yes', 'No']
}
df = pd.DataFrame(data)
print(df)
2. Features et Target
Les features sont les variables prédictives (ou caractéristiques) qui déterminent la classe cible. La target est la variable que nous essayons de prédire.
X = df[['age', 'income']]
y = df['purchased']
3. Apprentissage supervisé
L'apprentissage supervisé est un type d'apprentissage où le modèle est entraîné sur un ensemble de données étiquetées, c'est-à-dire que les sorties correctes sont connues.
from sklearn.model_selection import train_test_split
## Diviser les données en ensembles d'entraînement et de test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
4. Modèles (Models)
Scikit-learn propose une variété de modèles prêts à l'emploi pour différents types de problèmes. Par exemple, nous pouvons utiliser un modèle de régression logistique pour résoudre notre problème de classification.
from sklearn.linear_model import LogisticRegression
## Créer et entraîner le modèle
model = LogisticRegression()
model.fit(X_train, y_train)
5. Évaluation du modèle (Model Evaluation)
Après l'entraînement, il est important d'évaluer la performance du modèle sur un ensemble de test.
from sklearn.metrics import accuracy_score
## Prédire les valeurs de test et évaluer le modèle
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')
Mise en pratique : projet fil rouge
Voici un mini-projet complet pour créer une API de prédiction d'achat. Nous utiliserons Flask, un framework web Python léger.
Étape 1 : Installer les dépendances
pip install scikit-learn flask pandas numpy
Étape 2 : Créer le fichier app.py
from flask import Flask, request, jsonify
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
app = Flask(__name__)
## Charger les données et préparer le modèle
data = {
'age': [25, 30, 35, 40],
'income': [50000, 60000, 70000, 80000],
'purchased': ['No', 'Yes', 'Yes', 'No']
}
df = pd.DataFrame(data)
X = df[['age', 'income']]
y = df['purchased']
## Diviser les données en ensembles d'entraînement et de test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
## Créer et entraîner le modèle
model = LogisticRegression()
model.fit(X_train, y_train)
@app.route('/predict', methods=['POST'])
def predict():
data = request.get_json(force=True)
age = data['age']
income = data['income']
# Préparer les données de prédiction
prediction = model.predict([[age, income]])
return jsonify({'prediction': prediction[0]})
if __name__ == '__main__':
app.run(debug=True)
Étape 3 : Exécuter l'API
python app.py
Étape 4 : Tester l'API
Vous pouvez tester l'API en envoyant une requête POST avec les données de prédiction.
curl -X POST http://127.0.0.1:5000/predict -H "Content-Type: application/json" -d '{"age": 30, "income": 60000}'
Erreurs frequentes et debugging
1. ValueError: could not convert string to float
Ce message d'erreur indique que Scikit-learn ne peut pas convertir une chaîne de caractères en flottant.
## ❌ Mauvais
data = {
'age': ['25', '30', '35', '40'],
'income': [50000, 60000, 70000, 80000],
'purchased': ['No', 'Yes', 'Yes', 'No']
}
df = pd.DataFrame(data)
python
## ✅ Correct
data = {
'age': [25, 30, 35, 40],
'income': [50000, 60000, 70000, 80000],
'purchased': ['No', 'Yes', 'Yes', 'No']
}
df = pd.DataFrame(data)
2. AttributeError: module 'sklearn.linear_model' has no attribute 'LogisticRegressionClassifier'
Ce message d'erreur indique que vous essayez d'utiliser une classe qui n'existe pas.
## ❌ Mauvais
from sklearn.linear_model import LogisticRegressionClassifier
model = LogisticRegressionClassifier()
python
## ✅ Correct
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
3. ModuleNotFoundError: No module named 'sklearn.model_selection'
Ce message d'erreur indique que Scikit-learn n'est pas correctement installé.
pip install scikit-learn
Pour aller plus loin
- Apprendre les modèles de classification non supervisée : Découvrez comment utiliser des modèles comme l'ACP (Analyse en Composantes Principales) pour analyser les données sans étiquette.
- Utiliser les pipelines : Les pipelines vous permettent d'automatiser le processus de préparation et de modèleisation des données.
- Exercice pratique : Créez un système de recommandation basé sur l'apprentissage collaboratif.
Quel est votre niveau de compétence en machine learning ? Vous pouvez commencer par essayer ces exercices pour vous familiariser avec Scikit-learn et continuer à apprendre avec des projets plus complexes.