ModuMLTECH commited on
Commit
dff6b58
·
verified ·
1 Parent(s): 84fc924

Upload ModelReg_Final_Projet_app.py

Browse files
Files changed (1) hide show
  1. ModelReg_Final_Projet_app.py +155 -0
ModelReg_Final_Projet_app.py ADDED
@@ -0,0 +1,155 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # -*- coding: utf-8 -*-
2
+ """Copie de Untitled4.ipynb
3
+
4
+ Automatically generated by Colab.
5
+
6
+ Original file is located at
7
+ https://colab.research.google.com/drive/1S1GQ3V9KA8SZTVhyRe-esQ-y16vp_D7j
8
+ """
9
+
10
+ #Importer les packages
11
+ import numpy as np
12
+ import gradio as gr
13
+ import pandas as pd
14
+
15
+ data = pd.read_csv('Telephone_data___.csv')
16
+ df = pd.read_csv('data_clean.csv')
17
+
18
+ # Encoder les variables catégorielles
19
+ from sklearn.preprocessing import LabelEncoder
20
+ # Créer différents encodeurs pour les variables catégorielles
21
+ encoder0 = LabelEncoder()
22
+ encoder1 = LabelEncoder()
23
+ encoder2 = LabelEncoder()
24
+ encoders = [encoder0, encoder1, encoder2]
25
+ columns = [col for col in data.columns if data[col].dtype == 'object']
26
+ for i in range(len(columns)):
27
+ encoders[i].fit(data[columns[i]]) # le modèle prend le temps de reconnaitre les classes
28
+ # Fractionner les données
29
+ x= df.drop('etat', axis = 1).values # variables prédicteurs
30
+ y = df['etat'].values # variable cible
31
+
32
+ # importer StandardScaler
33
+ from sklearn.preprocessing import StandardScaler, MinMaxScaler, normalize
34
+ # Instancier StandardScaler
35
+ scaler = StandardScaler()
36
+ scaler.fit(x) # calcul de la moyenne et de l'écart type
37
+ x = scaler.transform(x) # normalisation
38
+
39
+
40
+ from sklearn.model_selection import train_test_split
41
+ # Splitter les données en train, val et test
42
+ x_train, x_vt,y_train,y_vt = train_test_split(x,y , test_size = 0.2, random_state = 42)
43
+ # Splitter les données en val et test
44
+ x_val, x_test, y_val, y_test = train_test_split(x_vt, y_vt, test_size = 0.5, random_state = 42)
45
+
46
+
47
+ from sklearn.ensemble import GradientBoostingClassifier
48
+ # Entrainer Gradient Boosting en utilisant les paramètres optimaux 'max_depth': 4, 'n_estimators': 80
49
+ gb = GradientBoostingClassifier(max_depth = 5, n_estimators = 60)
50
+ # Entrainement
51
+ gb.fit(x_train, y_train)
52
+
53
+
54
+ # Importer gradio
55
+ import gradio as gr
56
+ import numpy as np
57
+
58
+ # Fonction de prédiction avec vérifications
59
+ def Pred_func(prix, adresse, marque, dim_ecr, ram, stockage):
60
+ try:
61
+ # Encoder les valeurs des variables adresse et marque
62
+ Adresse = encoder0.transform([adresse])[0] # Transformer et récupérer la première valeur
63
+ Marque = encoder1.transform([marque])[0]
64
+
65
+ # Affichage pour vérifier les encodages
66
+ print(f"Encodage Adresse: {Adresse}, Marque: {Marque}")
67
+
68
+ # Vecteur des valeurs numériques avec les variables encodées
69
+ x_new = np.array([prix, Adresse, Marque, dim_ecr, ram, stockage])
70
+ x_new = x_new.reshape(1, -1) # Convertir en un tableau 2D
71
+
72
+ # Vérifier la forme des données d'entrée
73
+ print(f"Forme des données d'entrée: {x_new.shape}")
74
+
75
+ # Normaliser les données
76
+ x_new = scaler.transform(x_new)
77
+
78
+ # Prédire la variable cible 'etat' avec le modèle gb
79
+ y_pred = gb.predict(x_new)
80
+
81
+ # Vérifier la forme et la valeur de la prédiction
82
+ print(f"Prédiction encodée: {y_pred}")
83
+
84
+ # Décoder la valeur prédite pour 'etat'
85
+ y_pred_decoded = encoder2.inverse_transform([y_pred[0]])[0] # Décoder la valeur encodée
86
+
87
+ # Afficher la valeur décodée
88
+ print(f"Prédiction décodée: {y_pred_decoded}")
89
+
90
+ return str(y_pred_decoded)
91
+
92
+ except Exception as e:
93
+ # Afficher l'erreur pour diagnostiquer le problème
94
+ print(f"Erreur rencontrée: {str(e)}")
95
+ return f"Erreur lors de la prédiction: {str(e)}"
96
+
97
+
98
+ # Fonction de prédiction multiple
99
+ def Pred_func_csv(file):
100
+ # Lire le fichier csv
101
+ df = pd.read_csv(file)
102
+ # prédictions
103
+ predictions = []
104
+ # Boucle sur les lignes du dataframe
105
+ for row in df.iloc[:, :].values:
106
+ # nouvelle ligne avec les valeurs des Fuel_Type, Seller_Type et Transmission encodées
107
+ new_row = np.array([row[0], row[1], encoder0.transform([row[2]])[0], encoder1.transform([row[3]])[0]])
108
+ new_row = new_row.reshape(1,-1) # convertir en un 2D array
109
+ # Normaliser les données
110
+ new_row = scaler.transform(new_row)
111
+ # Prédire
112
+ y_pred = rf.predict(new_row)
113
+ # Décoder la valeur prédite pour 'etat'
114
+ y_pred_decoded = encoder2.inverse_transform([y_pred[0]])[0] # Décoder la valeur encodée
115
+ predictions.append(y_pred_decoded) # Ajouter la prédiction à la liste
116
+ df['etat'] = predictions
117
+ df.to_csv('predictions.csv', index = False)
118
+ return 'predictions.csv'
119
+
120
+ # définir les blocks afin de pouvoir ajouter plusieurs interfaces
121
+ demo = gr.Blocks(theme = gr.themes.Glass())
122
+
123
+ # autres themes
124
+ #gr.themes.Base() gr.themes.Default() gr.themes.Glass() gr.themes.Monochrome() gr.themes.Soft()
125
+
126
+
127
+ # Interface Gradio pour interagir avec la fonction
128
+ interface1 = gr.Interface(
129
+ fn=Pred_func, # Fonction à appeler
130
+ inputs=[
131
+ gr.Number(label="prix"),
132
+ gr.Dropdown(choices= list(np.unique(data.adresse)), label='Adresse'), # on utilise list pour bcp de valeur
133
+ gr.Dropdown(choices= list(np.unique(data.marque)), label='Marque'), # on utilise list pour bcp de valeur
134
+ gr.Number(label="Dimension de l'écran"),
135
+ gr.Number(label="RAM (Go)"),
136
+ gr.Number(label="Stockage (Go)")
137
+ ],
138
+ outputs="text", # Sortie sous forme de texte
139
+ title="Prédiction de l'état d'un Téléphone portable", # Titre de l'interface
140
+ )
141
+ # Créer l'interface 2 permettant de faire une prédiction multiple en partant d'un fichier csv
142
+ interface2 = gr.Interface(fn = Pred_func_csv,
143
+ inputs = gr.File(label='Upload a csv file'),
144
+ outputs = gr.File(label='Download a csv file'),
145
+ title="Predict the selling price of a car with a multiple inputs",
146
+ description = """This machine learning model allows us to predict the selling price of a car
147
+ from the kms driven, present price, fuel type, seller type, transmission and age of the car.
148
+ """)
149
+
150
+ # faire un tabbing (regrouper en onglet) des interfaces
151
+ with demo:
152
+ gr.TabbedInterface([interface1, interface2], ['Simple Prediction', 'Prédiction multiple'])
153
+
154
+ # lancer l'interface
155
+ demo.launch()