diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index d05b2f7..0000000 --- a/.dockerignore +++ /dev/null @@ -1,19 +0,0 @@ -# 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 \ No newline at end of file diff --git a/.gitignore b/.gitignore index b52bb8d..913cc9f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ # Ignorer l'environnement virtuel -ftline/ +ftlinear/ # Ignorer les fichiers de cache Python __pycache__/ diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 50d8fee..0000000 --- a/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -# 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"] \ No newline at end of file diff --git a/main.py b/main.py index 6c140d3..a8f5ae1 100644 --- a/main.py +++ b/main.py @@ -5,7 +5,6 @@ import os sys.path.append(os.path.abspath("src")) from src.training_model import train_model -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é def main(): @@ -15,7 +14,7 @@ def main(): # Entraîner le modèle train_model() print("Modèle entraîné avec succès !") - + from src.prediction import predict_price # Lancer l'interface graphique après l'entraînement print("Lancement de l'interface graphique...") show_gui(predict_price) diff --git a/run.sh b/run.sh new file mode 100644 index 0000000..2d9a479 --- /dev/null +++ b/run.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +echo "🚀 Activation de l'environnement virtuel..." + +# Vérifier si l'environnement virtuel existe +if [ ! -d "ftlinear" ]; then + echo "🛠 Création de l'environnement virtuel..." + python3 -m venv ftlinear +fi + +# Détecter si le système est Debian/Ubuntu avec PEP 668 (éviter l'erreur `externally-managed-environment`) +if grep -q "externally-managed" /usr/lib/python*/EXTERNALLY-MANAGED 2>/dev/null; then + echo "⚠️ Système avec gestion des paquets restreinte. Utilisation de '--break-system-packages'." + PIP_EXTRA="--break-system-packages" +else + PIP_EXTRA="" +fi + +# Activer l'environnement virtuel +source ftlinear/bin/activate + +echo "📦 Installation des dépendances..." +pip install --upgrade pip $PIP_EXTRA +pip install -r requirements.txt $PIP_EXTRA + +echo "🎯 Exécution du programme..." +python main.py diff --git a/src/prediction.py b/src/prediction.py index f173b80..0eebfbf 100644 --- a/src/prediction.py +++ b/src/prediction.py @@ -1,15 +1,17 @@ import numpy as np import pandas as pd +import os -# Charger les valeurs min/max pour la dé-normalisation -df = pd.read_csv("data/data_normalized.csv") +# Génère le chemin absolu basé sur l’emplacement du script +file_path = os.path.abspath(os.path.join(os.getcwd(), "data", "data_normalized.csv")) +df = pd.read_csv(file_path) km_min, km_max = df["km"].min(), df["km"].max() price_min, price_max = df["price"].min(), df["price"].max() def predict_price(km): """Prédit le prix d'une voiture en fonction du kilométrage donné en entrée.""" # Charger les paramètres optimisés (entraînés sur des données normalisées) - theta_0, theta_1 = np.load("model.npy") + theta_0, theta_1 = np.load("data/model.npy") # Normaliser le kilométrage km_norm = (km - km_min) / (km_max - km_min) diff --git a/src/training_model.py b/src/training_model.py index 9088ad6..425a4bf 100644 --- a/src/training_model.py +++ b/src/training_model.py @@ -17,13 +17,13 @@ def train_model(): theta_0_init = 0 theta_1_init = 1 learning_rate = 0.1 # Taux d'apprentissage - iterations = 10000 + iterations = 1000 # 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) # Sauvegarder les paramètres optimisés - np.save("model.npy", [theta_0_opt, theta_1_opt]) # Sauvegarde des paramètres optimisés dans un fichier .npy + np.save("data/model.npy", [theta_0_opt, theta_1_opt]) # Sauvegarde des paramètres optimisés dans un fichier .npy print("Modèle entraîné et paramètres sauvegardés.") print(f"Paramètre optimisé θ₀ = {theta_0_opt}") print(f"Paramètre optimisé θ₁ = {theta_1_opt}")