mirror of
https://github.com/Ladebeze66/devsite.git
synced 2026-05-11 16:56:26 +02:00
132 lines
5.0 KiB
Markdown
132 lines
5.0 KiB
Markdown
---
|
||
title: "ft_linear_regression"
|
||
slug: ft-linear-regression
|
||
type: projet
|
||
source: manual
|
||
domains: [ia, ecole-42, algorithmique]
|
||
tags: [data-ia]
|
||
aliases:
|
||
- ft linear regression
|
||
- ft_linear_regression
|
||
- ft-linear-regression
|
||
- régression linéaire
|
||
- linear regression
|
||
- descente de gradient
|
||
- régression 42
|
||
- premier projet ia 42
|
||
- régression linéaire from scratch
|
||
answers:
|
||
- "Qu'est-ce que ft_linear_regression ?"
|
||
- "Parle-moi de ft_linear_regression."
|
||
- "Comment a-t-il implémenté une régression linéaire ?"
|
||
- "Quel est le premier projet Data / IA à l'École 42 ?"
|
||
- "A-t-il codé une descente de gradient ?"
|
||
priority: 6
|
||
linked:
|
||
- "[[MOC-Projets]]"
|
||
- "[[MOC-Ecole-42]]"
|
||
- "[[MOC-Ia]]"
|
||
related:
|
||
- "[[piscine-python-data-science]]"
|
||
- "[[ia]]"
|
||
- "[[grasbot]]"
|
||
updated: 2026-04-23
|
||
visibility: public
|
||
---
|
||
|
||
# ft_linear_regression
|
||
|
||
> [!info] Contexte
|
||
> **Premier projet de la branche Data Science / IA de l'École 42**, enchaîné
|
||
> après la [[piscine-python-data-science|Piscine Python — Data Science]].
|
||
> Socle mathématique pour les travaux IA côté [[ia]] et [[grasbot]].
|
||
|
||
## Résumé
|
||
|
||
Implémenter **from scratch** un algorithme de **régression linéaire simple**
|
||
entraînée par **descente de gradient**, sans utiliser de fonction toute
|
||
faite (`numpy.polyfit`, `sklearn.LinearRegression`, etc.). L'exercice
|
||
force à comprendre les **fondations mathématiques du machine learning**
|
||
avant de manipuler les bibliothèques de haut niveau.
|
||
|
||
## Objectifs pédagogiques
|
||
|
||
- Découvrir les concepts fondamentaux du ML : **hypothèse**, **fonction de
|
||
coût**, **paramètres**, **convergence**.
|
||
- Implémenter la **descente de gradient** à la main, avec mise à jour
|
||
simultanée de θ₀ (biais) et θ₁ (pente) via des variables temporaires
|
||
pour éviter un couplage entre les deux mises à jour.
|
||
- Comprendre le rôle du **learning rate** : un pas trop grand fait osciller
|
||
l'algorithme, un pas trop petit le ralentit artificiellement.
|
||
- Travailler la **préparation des données** : détection des valeurs
|
||
aberrantes via l'**IQR** (*Interquartile Range*), gestion des valeurs
|
||
manquantes, **normalisation min-max** pour que la descente converge
|
||
malgré des échelles différentes (kilométrages en milliers, prix en
|
||
dizaines de milliers).
|
||
|
||
## Stack technique
|
||
|
||
| Outil | Rôle |
|
||
|-------|------|
|
||
| **Python 3** | Langage principal |
|
||
| **pandas** | Chargement et exploration du CSV (`describe()`, quartiles, détection d'aberrants) |
|
||
| **NumPy** | Calculs vectoriels pour la descente de gradient |
|
||
| **Matplotlib + Seaborn** | Visualisation du nuage de points et de la droite de régression |
|
||
| **scikit-learn** | **Uniquement** pour les métriques d'évaluation (`mean_squared_error`, `r2_score`), pas pour l'entraînement |
|
||
| **Tkinter** | Interface graphique native : saisie d'un kilométrage, affichage du prix estimé en temps réel |
|
||
|
||
## Architecture du code
|
||
|
||
Modules thématiques dans `src/` :
|
||
|
||
- `data_process.py` — chargement, nettoyage, normalisation du dataset.
|
||
- `cost_function.py` — fonction de coût *Mean Squared Error* :
|
||
`J(θ₀, θ₁) = (1 / 2m) · Σ(hθ(x) − y)²`.
|
||
- `gradient_descent.py` — boucle d'entraînement (mise à jour simultanée
|
||
des paramètres).
|
||
- `training_model.py` — orchestration de l'entraînement + sauvegarde des
|
||
paramètres optimaux.
|
||
- `prediction.py` — rechargement des paramètres pour prédire sur une
|
||
nouvelle entrée.
|
||
- `evaluate_model.py` — calcul MSE + R² pour mesurer la qualité du modèle.
|
||
- `visualization.py` — tracé du nuage de points + droite de régression.
|
||
- `gui.py` — interface Tkinter (bonus).
|
||
|
||
## Parties bonus réalisées
|
||
|
||
- **Graphe** du nuage de points avec droite de régression superposée.
|
||
- **Mesure de précision** via MSE et **coefficient de détermination R²**
|
||
(proche de 1 → modèle pertinent, proche de 0 → modèle inutile, négatif
|
||
→ pire qu'une moyenne).
|
||
- **Interface graphique utilisateur** (Tkinter).
|
||
|
||
## Compétences mobilisées
|
||
|
||
- **Mathématiques appliquées** : dérivées partielles, minimisation d'une
|
||
fonction de coût, interprétation géométrique d'une régression.
|
||
- **Programmation scientifique Python** : vectorisation NumPy, DataFrames
|
||
pandas, patterns de préparation de données.
|
||
- **Visualisation de données** : IQR, distribution, scatter plot —
|
||
comprendre ses données avant de modéliser.
|
||
- **Évaluation de modèle** : différence entre *loss* d'entraînement et
|
||
métriques de qualité, interprétation du R².
|
||
|
||
## Valeur pour la suite
|
||
|
||
Ce projet constitue la **base intellectuelle** de tout ce qui suit en IA.
|
||
Comprendre ce qui se passe sous `model.fit(X, y)` change radicalement la
|
||
manière d'aborder les bibliothèques de haut niveau (scikit-learn,
|
||
PyTorch, TensorFlow) et d'interpréter les comportements inattendus d'un
|
||
modèle (non-convergence, explosion du learning rate, overfitting).
|
||
|
||
---
|
||
|
||
## Liens
|
||
|
||
- [[MOC-Projets]] — hub projets
|
||
- [[MOC-Ecole-42]] — contexte pédagogique
|
||
- [[MOC-Ia]] — domaine *ia*
|
||
- [[piscine-python-data-science]] — pré-requis pratique
|
||
- [[ia]] — compétence IA (fiche)
|
||
- [[grasbot]] — projet IA appliqué au portfolio
|