graph TD
A[Intelligence Artificielle] --> B[Machine Learning]
B --> C[Deep Learning]
A --> D[Systèmes experts]
A --> E[Robotique]
B --> F[Apprentissage supervisé]
B --> G[Apprentissage non supervisé]
B --> H[Apprentissage par renforcement]
Séance 1: Introduction IA et Machine Learning
1. Définition et Concepts de Base
1.1 Intelligence Artificielle (IA)
L’Intelligence Artificielle est un domaine de l’informatique qui vise à créer des systèmes capables d’effectuer des tâches nécessitant normalement l’intelligence humaine.
- Assistants vocaux (Siri, Alexa, Google Assistant)
- Recommandations Netflix/Spotify
- Filtres anti-spam des emails
- Reconnaissance faciale sur smartphones
- Traduction automatique
1.2 Machine Learning (Apprentissage Automatique)
Le Machine Learning est une sous-discipline de l’IA qui permet aux ordinateurs d’apprendre à partir de données sans être explicitement programmés.
Différence clé:
- Programmation traditionnelle: Humain écrit les règles → Ordinateur applique
- Machine Learning: Ordinateur apprend les règles à partir des données
# Approche traditionnelle
def classifier_email(email):
if "viagra" in email or "lottery" in email:
return "spam"
else:
return "not spam"
# Approche Machine Learning
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(X_train, y_train) # Apprend des exemples
prediction = model.predict(new_email)1.3 Deep Learning
Le Deep Learning est une sous-catégorie du ML utilisant des réseaux de neurones artificiels profonds (plusieurs couches).
Diagramme mermaid:
2. Applications et Cas d’Utilisation
2.1 Vision par Ordinateur
- Détection d’objets
- Reconnaissance faciale
- Diagnostic médical (imagerie)
- Voitures autonomes
2.2 Traitement du Langage Naturel (NLP)
- Chatbots et assistants virtuels
- Traduction automatique
- Analyse de sentiments
- Résumé automatique de textes
2.3 Systèmes de Recommandation
- E-commerce (Amazon, Alibaba)
- Streaming (Netflix, YouTube)
- Réseaux sociaux (Facebook, Instagram)
2.4 Finance
- Détection de fraude
- Trading algorithmique
- Évaluation de risque de crédit
2.5 Santé
- Diagnostic de maladies
- Découverte de médicaments
- Analyse d’imagerie médicale
3. Types d’Apprentissage
3.1 Apprentissage Supervisé
Le modèle apprend à partir de données étiquetées (avec réponses connues).
Données d’entraînement: emails avec labels “spam” ou “non spam” Objectif: Prédire si un nouveau email est spam
Tâches principales:
- Classification: prédire une catégorie (spam/non spam, chat/chien)
- Régression: prédire une valeur continue (prix maison, température)
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestRegressor
# Classification
clf = LogisticRegression()
clf.fit(X_train, y_train) # y_train contient les catégories
pred_class = clf.predict(X_test)
# Régression
reg = RandomForestRegressor()
reg.fit(X_train, y_train) # y_train contient les valeurs continues
pred_value = reg.predict(X_test)3.2 Apprentissage Non Supervisé
Le modèle apprend à partir de données non étiquetées (sans réponses).
Données: comportements d’achat de clients Objectif: Identifier des groupes de clients similaires (segmentation)
Tâches principales:
- Clustering: regrouper des données similaires
- Réduction de dimension: simplifier les données
- Détection d’anomalies: identifier des points inhabituels
from sklearn.cluster import KMeans
from sklearn.decomposition import PCA
# Clustering
kmeans = KMeans(n_clusters=3)
clusters = kmeans.fit_predict(X)
# Réduction de dimension
pca = PCA(n_components=2)
X_reduced = pca.fit_transform(X)3.3 Apprentissage Semi-Supervisé
Combine données étiquetées (peu) et non étiquetées (beaucoup).
Cas d’usage: Lorsque l’étiquetage est coûteux (imagerie médicale, reconnaissance vocale)
3.4 Apprentissage par Renforcement
L’agent apprend par essai-erreur en interagissant avec un environnement.
- Jeux vidéo (AlphaGo, Chess AI)
- Robotique
- Contrôle de systèmes complexes
Composants:
- Agent: celui qui apprend
- Environnement: le monde dans lequel l’agent évolue
- Actions: ce que l’agent peut faire
- Récompenses: feedback positif/négatif
4. Étapes de Conception d’un Modèle IA
4.1 Pipeline ML Standard
Diagramme mermaid:
graph TB
A[1 Définir le problème] --> B[2 Collecter les données]
B --> C[3 Explorer les données]
C --> D[4 Préparer les données]
D --> E[5 Choisir un modèle]
E --> F[6 Entraîner le modèle]
F --> G[7 Évaluer le modèle]
G --> H{Performance OK?}
H -->|Non| E
H -->|Oui| I[8 Déployer]
I --> J[9 Monitorer]
4.2 Détails des Étapes
Étape 1: Définir le Problème
- Quel type de problème? (classification, régression, clustering)
- Quelles sont les métriques de succès?
- Quelles sont les contraintes?
Étape 2: Collecter les Données
- Sources de données
- Quantité nécessaire
- Qualité des données
Étape 3: Explorer les Données (EDA)
- Statistiques descriptives
- Visualisations
- Identifier les patterns, outliers, données manquantes
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# Exemple EDA simple
df = pd.read_csv('data.csv')
print(df.info())
print(df.describe())
# Visualisation
sns.pairplot(df)
plt.show()Étape 4: Préparer les Données
- Nettoyage (valeurs manquantes, doublons)
- Transformation (normalisation, encodage)
- Feature engineering
- Split train/test
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.impute import SimpleImputer
# Split des données
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
# Normalisation
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# Gestion des valeurs manquantes
imputer = SimpleImputer(strategy='mean')
X_train_imputed = imputer.fit_transform(X_train)
X_test_imputed = imputer.transform(X_test)Étape 5: Choisir un Modèle
- Basé sur le type de problème
- Complexité vs interprétabilité
- Ressources disponibles
Étape 6: Entraîner le Modèle
- Ajuster les paramètres
- Optimisation
Étape 7: Évaluer le Modèle
- Métriques appropriées
- Validation croisée
- Analyse des erreurs
Étape 8: Déployer
- Mise en production
- API, application web, etc.
Étape 9: Monitorer
- Performances en production
- Dérive des données (data drift)
- Mise à jour du modèle
5. Concepts Clés
5.1 Overfitting vs Underfitting
- Modèle trop simple
- Ne capture pas les patterns dans les données
- Biais élevé, variance faible
- Mauvaise performance train ET test
- Modèle trop complexe
- Mémorise les données d’entraînement (bruit inclus)
- Biais faible, variance élevée
- Bonne performance train, mauvaise performance test
- Modèle équilibré
- Capture les vrais patterns
- Biais et variance faibles
- Bonne généralisation
import numpy as np
import matplotlib.pyplot as plt
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
# Génération de données
np.random.seed(42)
X = np.linspace(0, 10, 50)
y = 2*X + 1 + np.random.randn(50)*2
# Sous-ajustement (linear)
underfit_model = LinearRegression()
underfit_model.fit(X.reshape(-1, 1), y)
y_underfit = underfit_model.predict(X.reshape(-1, 1))
# Bon ajustement (polynomial degree 2)
goodfit_model = Pipeline([
('poly', PolynomialFeatures(degree=2)),
('linear', LinearRegression())
])
goodfit_model.fit(X.reshape(-1, 1), y)
y_goodfit = goodfit_model.predict(X.reshape(-1, 1))
# Surajustement (polynomial degree 15)
overfit_model = Pipeline([
('poly', PolynomialFeatures(degree=15)),
('linear', LinearRegression())
])
overfit_model.fit(X.reshape(-1, 1), y)
y_overfit = overfit_model.predict(X.reshape(-1, 1))
# Visualisation
fig, axes = plt.subplots(1, 3, figsize=(15, 4))
axes[0].scatter(X, y, alpha=0.5)
axes[0].plot(X, y_underfit, 'r-', linewidth=2)
axes[0].set_title('Underfitting (linéaire)')
axes[1].scatter(X, y, alpha=0.5)
axes[1].plot(X, y_goodfit, 'g-', linewidth=2)
axes[1].set_title('Good Fit (polynomial deg 2)')
axes[2].scatter(X, y, alpha=0.5)
axes[2].plot(X, y_overfit, 'b-', linewidth=2)
axes[2].set_title('Overfitting (polynomial deg 15)')
plt.tight_layout()
plt.show()5.2 Compromis Biais-Variance
L’équilibre fondamental du Machine Learning
Le compromis biais-variance est un concept essentiel qui explique pourquoi certains modèles ne généralisent pas bien. Imaginez apprendre pour un examen :
- Biais élevé = Vous survolez trop le cours (sous-apprentissage)
- Variance élevée = Vous mémorisez par cœur sans comprendre (sur-apprentissage)
Formules Mathématiques Clés
Erreur totale du modèle : \[E_{\text{total}} = \underbrace{\text{Biais}^2}_{\text{simplicité}} + \underbrace{\text{Variance}}_{\text{complexité}} + \epsilon\]
Où :
- \(\text{Biais} = E[\hat{f}(x)] - f(x)\) (différence entre prédiction moyenne et vérité)
- \(\text{Variance} = E[(\hat{f}(x) - E[\hat{f}(x)])^2]\) (variabilité des prédictions)
- \(\epsilon\) = Bruit irréductible des données
Exemple Illustratif avec Python
Dans cet exemple ,nous allons explorer le compromis biais-variance à travers un cas concret :
Le Scénario
Imaginons que nous voulons prédire une variable y à partir d’une variable X. Nos données suivent une tendance sinusoïdale (comme une vague) avec du bruit aléatoire ajouté pour simuler des mesures réelles imparfaites.
Les Trois Types de Modèles Testés
Nous allons ajuster trois modèles polynomiaux de complexité croissante :
- Degré 1 (Linéaire) :
- Modèle le plus simple : une ligne droite
- Problème attendu : Trop simple pour capturer la forme sinusoïdale → Biais élevé (sous-ajustement)
- La ligne droite ne peut pas suivre les courbes des données
- Degré 3 (Cubique) :
- Complexité modérée : peut faire des courbes douces
- Résultat attendu : Bon équilibre entre simplicité et flexibilité
- Capture la tendance générale sans trop coller au bruit
- Degré 9 (Polynôme de haut degré) :
- Modèle très complexe : peut faire des courbes très compliquées
- Problème attendu : Trop flexible, suit le bruit → Variance élevée (sur-ajustement)
- Passe par presque tous les points d’entraînement mais prédit mal sur de nouvelles données
Ce que Vous Allez Observer
Dans les onglets suivants, vous verrez :
- Points bleus = Données d’entraînement (le modèle “voit” ces points)
- Points rouges = Données de test (le modèle ne “voit” PAS ces points)
- Ligne verte = Prédictions du modèle
Question clé à observer : Quel modèle prédit le mieux les points rouges (test) qu’il n’a jamais vus ?
Composition de l’Erreur Totale
Explication : L’erreur totale d’un modèle se décompose en trois parties :
- Biais² : Erreur systématique due à la simplicité du modèle
- Variance : Sensibilité du modèle aux variations dans les données
- Bruit irréductible : Erreur aléatoire inhérente aux données
graph TD
A["Erreur Totale"] --> B["Biais au carre<br/>Erreur due a la simplicite"]
A --> C["Variance<br/>Erreur due a la complexite"]
A --> D["Bruit irreductible<br/>Non controlable"]
style A fill:#e1f5ff
style B fill:#ffe1e1
style C fill:#fff4e1
style D fill:#f0f0f0
Impact de la Complexité sur le Modèle
Explication : Lorsqu’on augmente la complexité d’un modèle :
- Le biais diminue : le modèle peut mieux capturer les patterns complexes
- La variance augmente : le modèle devient plus sensible au bruit dans les données
C’est le cœur du compromis biais-variance !
graph TD
E1["Complexite croissante"] --> F1["Impact sur Biais"]
E1 --> G1["Impact sur Variance"]
F1 --> H1["Modele simple: Biais eleve"]
F1 --> I1["Modele complexe: Biais faible"]
G1 --> J1["Modele simple: Variance faible"]
G1 --> K1["Modele complexe: Variance elevee"]
style E1 fill:#e1f5ff
style F1 fill:#fff4e1
style G1 fill:#fff4e1
style H1 fill:#f8d7da
style I1 fill:#d4edda
style J1 fill:#d4edda
style K1 fill:#f8d7da
Recherche de la Zone Optimale
Explication : L’objectif est de trouver le point d’équilibre où :
- Le biais n’est pas trop élevé (modèle pas trop simple)
- La variance n’est pas trop élevée (modèle pas trop complexe)
- Le modèle généralise bien sur de nouvelles données
graph TD
L2["Recherche de l equilibre"] --> M2["Zone optimale<br/>Biais carre proche Variance"]
M2 --> N2["Modele generalise bien"]
style L2 fill:#fff3cd
style M2 fill:#d1ecf1
style N2 fill:#d4edda
A Retenir
- Biais élevé = Modèle trop simple = Sous-ajustement (underfitting)
- Variance élevée = Modèle trop complexe = Sur-ajustement (overfitting)
- Objectif = Trouver le juste milieu pour une bonne généralisation
- Erreur de test = Indicateur principal de la performance réelle du modèle
Exercice Pratique : Diagnostic et Correction
from sklearn.datasets import make_moons
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
# Données non-linéaires
X, y = make_moons(n_samples=1000, noise=0.3, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
# Test de différents modèles
models = {
'Arbre Profond (Variance)': DecisionTreeClassifier(max_depth=20),
'Arbre Simple (Biais)': DecisionTreeClassifier(max_depth=2),
'Arbre Optimisé': DecisionTreeClassifier(max_depth=5, min_samples_split=10),
'Random Forest': RandomForestClassifier(n_estimators=100, max_depth=5),
'SVM Linéaire (Biais)': SVC(kernel='linear', C=1),
'SVM RBF (Variance)': SVC(kernel='rbf', C=10, gamma=10)
}
print("🧪 TEST DU COMPROMIS BIAS-VARIANCE")
print("=" * 50)
for name, model in models.items():
diagnose_bias_variance(model, X_train, X_test, y_train, y_test)
print("-" * 40)Conclusion et Bonnes Pratiques
Checklist de Validation
Règles Empiriques
- Commencez simple : Linéaire/logistique comme baseline
- Augmentez progressivement la complexité
- Surveillez l’écart entre train et validation
- Utilisez l’ensemble de test UNE SEULE FOIS à la fin
- Documentez vos choix d’hyperparamètres
Formule à Retenir
Modèle Idéal = Biais² + Variance + Bruit
→ Minimiser la somme, pas individuellement
Le compromis biais-variance n’est pas un problème à éliminer mais un équilibre à maîtriser. La clé réside dans la compréhension des besoins de votre problème spécifique et l’ajustement continu de votre approche.
6. Exercices de Réflexion
- Apprentissage supervisé (Classification) : On prédit une étiquette binaire (malade ou non).
- Apprentissage non supervisé (Clustering) : On regroupe des données sans étiquettes préalables.
- Apprentissage par renforcement : Le robot apprend par essais et erreurs avec un système de récompenses.
- Apprentissage supervisé (Régression) : On prédit une valeur numérique continue.
- Apprentissage non supervisé (Détection d’anomalies) : On cherche des comportements qui s’écartent de la norme.
Une précision de 100 % sur les données d’entraînement est souvent le signe d’un surapprentissage (overfitting). Le modèle a “mémorisé” le bruit et les particularités des données d’entraînement au lieu d’apprendre les tendances générales. Par conséquent, il risque d’avoir de très mauvaises performances sur de nouvelles données (faible capacité de généralisation).
Exemples dans le domaine du commerce électronique :
- Système de recommandation de produits : Identifier des groupes de clients aux comportements similaires (Clustering).
- Prévision de la demande (stocks) : Prédire le nombre d’unités qui seront vendues le mois prochain (Régression).
- Filtrage de commentaires abusifs : Identifier si un avis client est conforme ou non aux règles de la plateforme (Classification).
Résumé de la Séance
Lectures Complémentaires
- Géron, A. (2019) - Chapitre 1: The Machine Learning Landscape
- Google’s Machine Learning Crash Course
- Andrew Ng - What is Machine Learning?
Comment Trouver l’Équilibre ?
Formule à retenir : \[E_{\text{test}} = \text{Biais}^2 + \text{Variance} + \epsilon\]
Le succès = trouver le point où cette somme est minimale !
Cette compréhension est cruciale pour choisir et ajuster vos modèles. L’objectif n’est pas d’éliminer le biais ou la variance, mais de trouver l’équilibre optimal pour votre problème spécifique !