mirror of
https://github.com/Ladebeze66/ft_linear_regression.git
synced 2025-12-13 04:36:51 +01:00
Docker
This commit is contained in:
parent
81b0118bd3
commit
bef54d17b2
19
.dockerignore
Normal file
19
.dockerignore
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# Ignorer le dossier Git et les fichiers de versioning
|
||||||
|
.git/
|
||||||
|
.gitignore
|
||||||
|
|
||||||
|
# Ignorer les fichiers Python temporaires
|
||||||
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
|
*.pyo
|
||||||
|
*.pyd
|
||||||
|
|
||||||
|
# Ignorer l’environnement virtuel (si jamais recréé)
|
||||||
|
venv/
|
||||||
|
ftline/
|
||||||
|
|
||||||
|
# Ignorer les fichiers générés
|
||||||
|
model.npy
|
||||||
|
data/data.normalized.csv
|
||||||
|
|
||||||
|
ft_linear_subject.pdf
|
||||||
4
.gitignore
vendored
4
.gitignore
vendored
@ -31,3 +31,7 @@ Thumbs.db
|
|||||||
*.tar.gz
|
*.tar.gz
|
||||||
dist/
|
dist/
|
||||||
build/
|
build/
|
||||||
|
|
||||||
|
# Ignorer les fichiers générés
|
||||||
|
model.npy
|
||||||
|
data/data.normalized.csv
|
||||||
|
|||||||
14
Dokerfile
Normal file
14
Dokerfile
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# Utilisation d'une image Python officielle
|
||||||
|
FROM python:3.12
|
||||||
|
|
||||||
|
# Définition du répertoire de travail
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Copier tous les fichiers du projet dans le conteneur
|
||||||
|
COPY . /app
|
||||||
|
|
||||||
|
# Installer les dépendances du projet
|
||||||
|
RUN pip install --no-cache-dir -r requirements.txt
|
||||||
|
|
||||||
|
# COMMANDE PAR défaut : Exécuter "main.py"
|
||||||
|
CMD ["python", "main.py"]
|
||||||
@ -1,25 +0,0 @@
|
|||||||
km,price,km_norm,price_norm
|
|
||||||
240000,3650,1.0,0.0
|
|
||||||
139800,3800,0.5384636643774096,0.032327586206896554
|
|
||||||
150500,4400,0.5877494806564687,0.16163793103448276
|
|
||||||
185530,4450,0.7491029520822106,0.1724137931034483
|
|
||||||
176000,5250,0.7052063325364692,0.3448275862068966
|
|
||||||
114800,5350,0.4233098880244679,0.36637931034482757
|
|
||||||
166800,5800,0.6628297428385866,0.46336206896551724
|
|
||||||
89000,5990,0.30447119082823204,0.5043103448275862
|
|
||||||
144500,5999,0.5601125743317626,0.50625
|
|
||||||
84000,6200,0.2814404355576437,0.5495689655172413
|
|
||||||
82029,6390,0.27236171182997776,0.5905172413793104
|
|
||||||
63060,6390,0.18498763248441968,0.5905172413793104
|
|
||||||
74000,6600,0.23537892501646698,0.6357758620689655
|
|
||||||
97500,6800,0.3436234747882322,0.6788793103448276
|
|
||||||
67000,6800,0.2031358676376433,0.6788793103448276
|
|
||||||
76025,6900,0.24470638090105526,0.7004310344827587
|
|
||||||
48235,6900,0.11670144310712526,0.7004310344827587
|
|
||||||
93000,6990,0.32289579504470267,0.7198275862068966
|
|
||||||
60949,7490,0.1752640476091773,0.8275862068965517
|
|
||||||
65674,7555,0.1970281113398833,0.8415948275862069
|
|
||||||
54000,7990,0.1432559039341136,0.9353448275862069
|
|
||||||
68500,7990,0.2100450942188198,0.9353448275862069
|
|
||||||
22899,7990,0.0,0.9353448275862069
|
|
||||||
61789,8290,0.17913321449463615,1.0
|
|
||||||
|
6
main.py
6
main.py
@ -9,15 +9,15 @@ from src.prediction import predict_price # ✅ Peut maintenant être importé d
|
|||||||
from src.gui import show_gui # ✅ Import propre et structuré
|
from src.gui import show_gui # ✅ Import propre et structuré
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
print("📌 Bienvenue dans le modèle de prédiction de prix de voiture !")
|
print("Bienvenue dans le modèle de prédiction de prix de voiture !")
|
||||||
print("🔄 Le modèle va être entraîné...")
|
print("🔄 Le modèle va être entraîné...")
|
||||||
|
|
||||||
# Entraîner le modèle
|
# Entraîner le modèle
|
||||||
train_model()
|
train_model()
|
||||||
print("✅ Modèle entraîné avec succès !")
|
print("Modèle entraîné avec succès !")
|
||||||
|
|
||||||
# Lancer l'interface graphique après l'entraînement
|
# Lancer l'interface graphique après l'entraînement
|
||||||
print("🖥️ Lancement de l'interface graphique...")
|
print("Lancement de l'interface graphique...")
|
||||||
show_gui(predict_price)
|
show_gui(predict_price)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
34
notes.txt
34
notes.txt
@ -548,6 +548,40 @@ Implémentation de la fonction coût
|
|||||||
tmpθ₁ = learningRate × (1 / m) ∑ᵐ⁻¹ᵢ=₀ (estimatePrice(mileage[i]) − price[i]) x mileage[i]
|
tmpθ₁ = learningRate × (1 / m) ∑ᵐ⁻¹ᵢ=₀ (estimatePrice(mileage[i]) − price[i]) x mileage[i]
|
||||||
En mathématique ces valeurs temporaires sont sous forme de dérivées
|
En mathématique ces valeurs temporaires sont sous forme de dérivées
|
||||||
|
|
||||||
|
- Calcul de l'évaluation du modèle
|
||||||
|
. Calcul de deux métriques de performance:
|
||||||
|
1. L'erreur quadratique moyenne (MSE - Mean Squared Error)
|
||||||
|
2. Le coefficient de détermination (R² _ R square score)
|
||||||
|
Ces deux valeurs évaluent à quel point notre modèle de régression linéaire est précision
|
||||||
|
|
||||||
|
1. Erruer quadratique Moyenne (MSE)
|
||||||
|
Formule:
|
||||||
|
MSE = (1/m)∑ᵐᵢ=1(yi - ^yi)²
|
||||||
|
. yi = valeur réelle du prix normalisé
|
||||||
|
. ^yi = Valeur prédite par notre modèle
|
||||||
|
. m = Nombre total de points de données
|
||||||
|
|
||||||
|
interprétation:
|
||||||
|
. MSE proche de 0 fait très peu d'erreur
|
||||||
|
. MSE élevé -> Le modèle prédit mal le prix
|
||||||
|
mse = np.mean((y - y_pred) ** 2)
|
||||||
|
|
||||||
|
2. Coefficient de détermination (R² Score)
|
||||||
|
Formule:
|
||||||
|
R² = 1 - (SSrsesidual / SStotal)
|
||||||
|
Avec:
|
||||||
|
. SStotal = Somme des carrés des différences entre les valeurs réelles et leur moyenne
|
||||||
|
SStotal = ∑(yi - -y)²
|
||||||
|
où -y est la moyenne de toutes les valeurs réelle
|
||||||
|
. SSresidual = Somme des carrés des erreurs entre les valeurs réelles et les perédictions
|
||||||
|
SSresidual = ∑(yi - ^yi)²
|
||||||
|
|
||||||
|
interprétation de R²:
|
||||||
|
. R² = 1 -> Le modèle est parfait et explique 100% des variations de price_norm.
|
||||||
|
. R² = 0 -> Le modèle est inutile et ne fait pas mieux qu'une poyenne
|
||||||
|
. R² < 0 -> Le modèle est pire que de deviner la moyenne (cata!)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
5
requirements.txt
Normal file
5
requirements.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
numpy
|
||||||
|
pandas
|
||||||
|
matplotlib
|
||||||
|
seaborn
|
||||||
|
tk
|
||||||
23
src/evaluate_model.py
Normal file
23
src/evaluate_model.py
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
import numpy as np
|
||||||
|
|
||||||
|
def evaluate_model(df, theta_0, theta_1):
|
||||||
|
"""Calcule la précision du modèle en utilisant l'erreur quadratique moyenne (MSE) et R²."""
|
||||||
|
X = df["km_norm"].values
|
||||||
|
y = df["price_norm"].values
|
||||||
|
|
||||||
|
# Prédictions du modèle
|
||||||
|
y_pred = theta_0 + theta_1 * X
|
||||||
|
|
||||||
|
# Erreur quadratique moyenne (MSE)
|
||||||
|
mse = np.mean((y - y_pred) ** 2)
|
||||||
|
|
||||||
|
# Coefficient de détermination (R²)
|
||||||
|
ss_total = np.sum((y - np.mean(y)) ** 2)
|
||||||
|
ss_residual = np.sum((y - y_pred) ** 2)
|
||||||
|
r2_score = 1 - (ss_residual / ss_total)
|
||||||
|
|
||||||
|
print(f"\nPrécision du modèle :")
|
||||||
|
print(f"🔹 Erreur quadratique moyenne (MSE) : {mse:.4f}")
|
||||||
|
print(f"🔹 Coefficient de détermination (R²) : {r2_score:.4f} (plus proche de 1 = meilleur)")
|
||||||
|
|
||||||
|
return mse, r2_score
|
||||||
@ -3,6 +3,7 @@ import pandas as pd
|
|||||||
from data_process import load_and_process_data
|
from data_process import load_and_process_data
|
||||||
from gradient_descent import gradient_descent
|
from gradient_descent import gradient_descent
|
||||||
from visualization import plot_cost_history, plot_regression_line
|
from visualization import plot_cost_history, plot_regression_line
|
||||||
|
from evaluate_model import evaluate_model
|
||||||
|
|
||||||
def train_model():
|
def train_model():
|
||||||
"""
|
"""
|
||||||
@ -16,7 +17,7 @@ def train_model():
|
|||||||
theta_0_init = 0
|
theta_0_init = 0
|
||||||
theta_1_init = 1
|
theta_1_init = 1
|
||||||
learning_rate = 0.1 # Taux d'apprentissage
|
learning_rate = 0.1 # Taux d'apprentissage
|
||||||
iterations = 1000
|
iterations = 10000
|
||||||
|
|
||||||
# Exécuter la descente de gradient
|
# Exécuter la descente de gradient
|
||||||
theta_0_opt, theta_1_opt, cost_history = gradient_descent(X, y, theta_0_init, theta_1_init, learning_rate, iterations)
|
theta_0_opt, theta_1_opt, cost_history = gradient_descent(X, y, theta_0_init, theta_1_init, learning_rate, iterations)
|
||||||
@ -31,6 +32,7 @@ def train_model():
|
|||||||
plot_cost_history(cost_history) # Affichage de l'historique du coût
|
plot_cost_history(cost_history) # Affichage de l'historique du coût
|
||||||
# Affichage de la régression linéaire
|
# Affichage de la régression linéaire
|
||||||
plot_regression_line(df, theta_0_opt, theta_1_opt)
|
plot_regression_line(df, theta_0_opt, theta_1_opt)
|
||||||
|
evaluate_model(df, theta_0_opt, theta_1_opt)
|
||||||
|
|
||||||
return theta_0_opt, theta_1_opt
|
return theta_0_opt, theta_1_opt
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user