This commit is contained in:
Ladebeze66 2025-02-22 15:02:16 +01:00
parent c8f4ee3bbb
commit 81b0118bd3
7 changed files with 75 additions and 26 deletions

25
data/data_normalized.csv Normal file
View File

@ -0,0 +1,25 @@
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

31
main.py
View File

@ -5,33 +5,20 @@ import os
sys.path.append(os.path.abspath("src"))
from src.training_model import train_model
from src.prediction import predict_price
from src.prediction import predict_price # ✅ Peut maintenant être importé dès le début
from src.gui import show_gui # ✅ Import propre et structuré
# Interface principale en console
def main():
print(" Bienvenue dans le modèle de prédiction de prix de voiture !")
print(" Le modèle va être entraîné...")
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 !")
while True:
try:
# Demander un kilométrage
km = float(input("\nEntrez un kilométrage (ou tapez 'exit' pour quitter) : "))
# Prédire le prix
price = predict_price(km)
print(f"Prix estimé : {price:.2f}")
except ValueError:
print("Veuillez entrer un nombre valide ou 'exit' pour quitter.")
# Demander si l'utilisateur veut continuer
continuer = input("Voulez-vous faire une autre estimation ? (o/n) : ").strip().lower()
if continuer != "o":
print("Merci d'avoir utilisé le modèle de prédiction ! À bientôt !")
break
# Lancer l'interface graphique après l'entraînement
print("🖥️ Lancement de l'interface graphique...")
show_gui(predict_price)
if __name__ == "__main__":
main()

BIN
model.npy Normal file

Binary file not shown.

View File

@ -13,6 +13,7 @@ def load_and_process_data(file_path):
df["km_norm"] = (df["km"] - km_min) / (km_max - km_min)
df["price_norm"] = (df["price"] - price_min) / (price_max - price_min)
print("Normalisation en cours...")
df.to_csv("data/data_normalized.csv", index=False)
print("Données nettoyées et normalisées suvegardées dans 'data/data_normalized.csv' !")
plot_raw_data(df) # Affichage des données normalisées

View File

@ -1,5 +1,5 @@
import numpy as np
from src.cost_function import compute_cost
from cost_function import compute_cost
def gradient_descent(X, y, theta_0, theta_1, learning_rate, iterations):
"""Applique la descente de gradient et retourne les paramètres optimisés."""

36
src/gui.py Normal file
View File

@ -0,0 +1,36 @@
import tkinter as tk
from tkinter import messagebox
def show_gui(predict_price):
"""Affiche l'interface graphique Tkinter pour entrer un kilométrage et voir le prix estimé."""
def estimate_price():
try:
km = float(entry_km.get()) # Récupère la valeur entrée
price = predict_price(km) # Prédiction du prix
label_result.config(text=f"Prix estimé : {price:.2f}", fg="green") # Affiche le prix
except ValueError:
messagebox.showerror("Erreur", "Veuillez entrer un kilométrage valide.")
root = tk.Tk()
root.title("Estimation de prix de voiture")
frame = tk.Frame(root, padx=20, pady=20)
frame.pack()
label_title = tk.Label(frame, text="Estimation de prix de voiture", font=("Arial", 14, "bold"))
label_title.pack()
label_km = tk.Label(frame, text="Entrez le kilométrage :")
label_km.pack()
entry_km = tk.Entry(frame)
entry_km.pack()
btn_estimate = tk.Button(frame, text="Estimer le prix", command=estimate_price)
btn_estimate.pack()
label_result = tk.Label(frame, text="", font=("Arial", 12))
label_result.pack()
root.mainloop()

View File

@ -1,8 +1,8 @@
import numpy as np
import pandas as pd
from src.data_process import load_and_process_data
from src.gradient_descent import gradient_descent
from src.visualization import plot_cost_history, plot_regression_line
from data_process import load_and_process_data
from gradient_descent import gradient_descent
from visualization import plot_cost_history, plot_regression_line
def train_model():
"""