LEWOPO commited on
Commit
6035bd4
·
verified ·
1 Parent(s): 8e63ae0

Upload 3 files

Browse files
Files changed (3) hide show
  1. app.py +102 -0
  2. model.pkl +3 -0
  3. requirements.txt +11 -0
app.py ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import pandas as pd
3
+ import pickle
4
+ import lime
5
+ import lime.lime_tabular
6
+ import streamlit.components.v1 as components
7
+
8
+ # Load your trained model
9
+ with open('model.pkl', 'rb') as file:
10
+ model = pickle.load(file)
11
+
12
+ obesity_mapping = {
13
+ 0: 'Normal',
14
+ 1: 'Surpoid/Obése'
15
+ }
16
+ # Define the input features for the user to input
17
+ def user_input_features():
18
+ age = st.number_input('Age:',min_value=8, max_value=100, value=24, step=1, format="%d")
19
+ classe = st.radio('Classe_', ('Primaire','Secondaire'))
20
+ Zone = st.radio('zone', ('Rurale', 'Urbaine'))
21
+ Diversité = st.radio('Consumption of food between meals (CAEC)', ('Mauvaise', 'Bonne'))
22
+ Region = st.selectbox(
23
+ 'Region de ',
24
+ ('Nord_ouest' ,'Sud_ouest', '1Ouest')
25
+ )
26
+ Sexe = st.radio('Genre', ('F', 'M'))
27
+
28
+
29
+ Zone = 1 if Zone == 'Rurale' else 0
30
+ classe = 1 if classe == 'Primaire' else 0
31
+ Diversité = 1 if Diversité == 'Mauvaise' else 0
32
+ Region = ['Nord_ouest' ,'Sud_ouest', '1Ouest'].index(Region)
33
+
34
+ sex_f = 1 if Sexe == 'F' else 0
35
+ sex_m = 1 if Sexe == 'M' else 0
36
+
37
+ data = {
38
+ 'Region': Region,
39
+ 'Zone': Zone,
40
+ 'Classe': classe,
41
+ 'Age': age,
42
+ 'Diversité': Diversité,
43
+ 'Genre_F': sex_f,
44
+ 'Genre_M': sex_m
45
+ }
46
+ features = pd.DataFrame(data, index=[0])
47
+ return features
48
+
49
+ st.title('Obesity App')
50
+
51
+ # Display the input fields
52
+ input_df = user_input_features()
53
+
54
+ # Initialiser LIME
55
+ explainer = lime.lime_tabular.LimeTabularExplainer(
56
+ training_data=input_df.values, # Entraînement sur la base des données d'entrée
57
+ feature_names=input_df.columns,
58
+ class_names=[obesity_mapping[0], obesity_mapping[1]],
59
+ mode='classification'
60
+ )
61
+
62
+ # Predict button
63
+ if st.button('Predict'):
64
+ # Make a prediction
65
+ prediction = model.predict(input_df)
66
+ prediction_proba = model.predict_proba(input_df)[0]
67
+
68
+ data = {
69
+ 'Obesity Type': [obesity_mapping[i] for i in range(len(prediction_proba))],
70
+ 'Probability': prediction_proba
71
+ }
72
+
73
+ # Create a dataframe to display the results
74
+ result_df = pd.DataFrame(data)
75
+
76
+ # Transpose the dataframe to have obesity types as columns and add a row header
77
+ result_df = result_df.T
78
+ result_df.columns = result_df.iloc[0]
79
+ result_df = result_df.drop(result_df.index[0])
80
+ result_df.index = ['Probability']
81
+
82
+ # Display the results in a table with proper formatting
83
+ st.table(result_df.style.format("{:.4f}"))
84
+ # Générer l'explication LIME pour l'individu
85
+ # exp = explainer.explain_instance(input_df.values[0], model.predict_proba, num_features=5)
86
+
87
+ # # Afficher les explications dans Streamlit
88
+ # st.subheader('Explication LIME')
89
+ # exp.show_in_notebook(show_table=True, show_all=False)
90
+ # st.write(exp.as_list())
91
+ # Générer l'explication LIME pour l'individu
92
+ exp = explainer.explain_instance(input_df.values[0], model.predict_proba, num_features=4)
93
+
94
+ # Récupérer l'explication LIME sous forme HTML
95
+ explanation_html = exp.as_html()
96
+
97
+ # Afficher l'explication LIME dans Streamlit
98
+ st.subheader('Explication LIME')
99
+
100
+ # Utiliser Streamlit pour afficher du HTML
101
+ components.html(explanation_html, height=800) # Ajuster la hauteur selon le contenu
102
+
model.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:28aa471b6ae23de5abe249cfe72e5bfe8240d72e942feeacb56980d1aed7020c
3
+ size 335533
requirements.txt ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ streamlit==1.37.1
2
+ streamlit-option-menu==0.3.13
3
+ pandas==2.2.0
4
+ lime==0.2.0.1
5
+ Pillow==9.2.0
6
+ seaborn==0.12.2
7
+ matplotlib==3.7.1
8
+ xgboost==2.0.3
9
+ numpy==1.26.3
10
+ openpyxl=3.1.5
11
+