This commit is contained in:
Ladebeze66 2025-02-22 16:16:01 +01:00
parent 81b0118bd3
commit bef54d17b2
10 changed files with 105 additions and 29 deletions

19
.dockerignore Normal file
View 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 lenvironnement 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
View File

@ -31,3 +31,7 @@ Thumbs.db
*.tar.gz
dist/
build/
# Ignorer les fichiers générés
model.npy
data/data.normalized.csv

14
Dokerfile Normal file
View 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"]

View File

@ -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
1 km price km_norm price_norm
2 240000 3650 1.0 0.0
3 139800 3800 0.5384636643774096 0.032327586206896554
4 150500 4400 0.5877494806564687 0.16163793103448276
5 185530 4450 0.7491029520822106 0.1724137931034483
6 176000 5250 0.7052063325364692 0.3448275862068966
7 114800 5350 0.4233098880244679 0.36637931034482757
8 166800 5800 0.6628297428385866 0.46336206896551724
9 89000 5990 0.30447119082823204 0.5043103448275862
10 144500 5999 0.5601125743317626 0.50625
11 84000 6200 0.2814404355576437 0.5495689655172413
12 82029 6390 0.27236171182997776 0.5905172413793104
13 63060 6390 0.18498763248441968 0.5905172413793104
14 74000 6600 0.23537892501646698 0.6357758620689655
15 97500 6800 0.3436234747882322 0.6788793103448276
16 67000 6800 0.2031358676376433 0.6788793103448276
17 76025 6900 0.24470638090105526 0.7004310344827587
18 48235 6900 0.11670144310712526 0.7004310344827587
19 93000 6990 0.32289579504470267 0.7198275862068966
20 60949 7490 0.1752640476091773 0.8275862068965517
21 65674 7555 0.1970281113398833 0.8415948275862069
22 54000 7990 0.1432559039341136 0.9353448275862069
23 68500 7990 0.2100450942188198 0.9353448275862069
24 22899 7990 0.0 0.9353448275862069
25 61789 8290 0.17913321449463615 1.0

View File

@ -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é
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é...")
# Entraîner le modèle
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
print("🖥️ Lancement de l'interface graphique...")
print("Lancement de l'interface graphique...")
show_gui(predict_price)
if __name__ == "__main__":

BIN
model.npy

Binary file not shown.

View File

@ -548,6 +548,40 @@ Implémentation de la fonction coût
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
- 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
View File

@ -0,0 +1,5 @@
numpy
pandas
matplotlib
seaborn
tk

23
src/evaluate_model.py Normal file
View 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

View File

@ -3,6 +3,7 @@ import pandas as pd
from data_process import load_and_process_data
from gradient_descent import gradient_descent
from visualization import plot_cost_history, plot_regression_line
from evaluate_model import evaluate_model
def train_model():
"""
@ -16,7 +17,7 @@ def train_model():
theta_0_init = 0
theta_1_init = 1
learning_rate = 0.1 # Taux d'apprentissage
iterations = 1000
iterations = 10000
# 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)
@ -31,6 +32,7 @@ def train_model():
plot_cost_history(cost_history) # Affichage de l'historique du coût
# Affichage de la régression linéaire
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