from flask import Flask, render_template, request
from pyngrok import ngrok
import pandas as pd
import joblib
import torch
from [Link] import DataLoader, TensorDataset
import numpy as np
import [Link] as nn
# Définition du modèle
class DeepRegressor([Link]):
def _init_(self, input_size):
super(DeepRegressor, self)._init_()
self.fc1 = [Link](input_size, 64)
self.fc2 = [Link](64, 64)
self.fc3 = [Link](64, 1)
def forward(self, x):
x = [Link](self.fc1(x))
x = [Link](self.fc2(x))
x = self.fc3(x)
return x
# Charger les label encoders et le modèle
def load_label_encoders(file_path):
# Charger les label encoders à partir du fichier
label_encoders = [Link](file_path)
return label_encoders
def load_model(file_path):
# Charger le modèle entier à partir du fichier
model = [Link](file_path, map_location=[Link]('cpu'))
return model
def preprocess_data(data, label_encoders):
# Créer une copie des données
processed_data = [Link]()
# Encoder les données catégoriques
for column, label_encoder in label_encoders.items():
if column in processed_data.columns:
# Vérifier les valeurs inconnues
unknown_labels = set(processed_data[column]) - set(label_encoder.classes_)
if unknown_labels:
raise ValueError(f"Unknown labels found in column '{column}': {unknown_labels}")
processed_data[column] = label_encoder.transform(processed_data[column])
return processed_data
def predict_selling_price(data, label_encoders, model):
# Prétraiter les données
processed_data = preprocess_data(data, label_encoders)
# Convertir les données en tenseurs PyTorch
X_test = [Link](processed_data.[Link](np.float32))
# Passer les données au modèle pour prédiction
with torch.no_grad():
[Link]()
predictions = model(X_test).numpy()
return predictions
def get_input_from_user(columns, label_encoders):
# Créer un dictionnaire pour stocker les données saisies par l'utilisateur
input_data = {}
# Demander à l'utilisateur de saisir les données pour chaque colonne
for column in columns:
if column in label_encoders:
label_encoder = label_encoders[column]
options = list(label_encoder.classes_)
input_data[column] = render_template('[Link]', options=options, column=column)
else:
input_data[column] = render_template('[Link]', column=column)
return input_data
# Créer une instance de l'application Flask
app = Flask(_name_)
# Charger les label encoders et le modèle
label_encoders = load_label_encoders('label_encoders.pkl')
model = load_model('modele_regresseur.pth')
# Définir une route pour afficher le formulaire
@[Link]('/', methods=['GET', 'POST'])
def index():
if [Link] == 'GET':
columns = pd.read_csv('dataset_encoded.csv').drop('sellingprice', axis=1).columns
input_fields = get_input_from_user(columns, label_encoders)
return render_template('[Link]', input_fields=input_fields)
elif [Link] == 'POST':
try:
data = {}
for key, value in [Link]():
data[key] = [value]
test_data = [Link](data)
return f"Predicted price : {predictions[0][0]} €"
except Exception as e:
return str(e)
# Démarrer l'application Flask
if _name_ == '_main_':
# Ouvrir un tunnel ngrok sur le port 5000
public_url = [Link](5000)
print(" * ngrok tunnel \"{}\" -> \"[Link]
# Exécuter l'application Flask sur le port 5000
[Link](port=5000)