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
|
||||
dist/
|
||||
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é
|
||||
|
||||
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__":
|
||||
|
||||
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]
|
||||
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 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
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user