File size: 3,927 Bytes
06c3be1
 
 
 
8218a11
9cdd02f
06c3be1
9cdd02f
 
 
 
 
 
f586f9f
 
 
 
4538ba0
 
 
 
 
 
 
 
 
 
 
9cdd02f
 
 
06c3be1
91a67a4
 
 
 
 
06c3be1
 
 
9cdd02f
06c3be1
 
9cdd02f
06c3be1
9cdd02f
 
91a67a4
 
 
9cdd02f
06c3be1
 
 
9cdd02f
06c3be1
 
9cdd02f
06c3be1
 
 
 
9cdd02f
 
 
06c3be1
 
9cdd02f
 
06c3be1
 
 
 
 
 
 
 
 
 
 
 
9cdd02f
06c3be1
 
9cdd02f
 
 
06c3be1
9cdd02f
 
06c3be1
4538ba0
91a67a4
 
4538ba0
 
9cdd02f
06c3be1
 
9cdd02f
06c3be1
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import pandas as pd
import gradio as gr
import numpy as np
import plotly.express as px
import pickle
from sklearn.preprocessing import StandardScaler

# Charger les modèles sauvegardés
with open("scaler.pkl", "rb") as f:
    scaler = pickle.load(f)

with open("pca_model.pkl", "rb") as f:
    pca_model = pickle.load(f)

with open("kmeans_model.pkl", "rb") as f:
    model_cluster = pickle.load(f)



# Vérifie si le fichier existe et charge-le
try:
    with open("lg.pkl", "rb") as f:
        model_diabetes = pickle.load(f)
        print("Model loaded successfully!")
except FileNotFoundError:
    print("File 'lg.pkl' not found.")
except EOFError:
    print("File 'lg.pkl' is empty or corrupted.")

# Charger le dataframe (assurez-vous de mettre le bon chemin vers votre fichier)
df_scaled = pd.read_csv("data.csv")  # Remplacez par le chemin réel du fichier

# Appliquer PCA pour transformer les données en 2D et prédire les clusters
pca_result = pca_model.transform(df_scaled)
pca_df = pd.DataFrame(pca_result, columns=['PC1', 'PC2'])
pca_df['Cluster'] = model_cluster.predict(df_scaled)

# Fonction de prédiction du diabète
def predict_diabetes(pregnancies, glucose, blood_pressure, skin_thickness, insulin, bmi, dpf, age):
    input_data = np.array([[pregnancies, glucose, blood_pressure, skin_thickness, insulin, bmi, dpf, age]])
    prediction = model_diabetes.predict(input_data)[0]  # Utilise le modèle de régression logistique pour prédire
    return "Diabétique" if prediction == 1 else "Non diabétique"

# Fonction pour afficher les clusters
def plot_clusters(selected_cluster):
    # Filtrer par le cluster sélectionné (si "Tous" n'est pas choisi)
    if selected_cluster != "Tous":
        selected_data = pca_df[pca_df['Cluster'] == int(selected_cluster)]
    else:
        selected_data = pca_df

    if selected_data.empty:
        return px.scatter(title="Aucun point à afficher")

    # Créer le graphique avec Plotly
    fig = px.scatter(selected_data, x='PC1', y='PC2', color=selected_data['Cluster'].astype(str),
                     title=f"Visualisation du Cluster {selected_cluster}", labels={'color': 'Cluster'})

    return fig

# Fonction pour télécharger les clusters en CSV
def download_clusters():
    return df.to_csv(index=False), "clusters.csv"

# Interface utilisateur Gradio
with gr.Blocks() as app:
    gr.Markdown("## Application Machine Learning : Classification et Clustering")

    # **Section Classification**
    gr.Markdown("### Prédiction du Diabète")
    with gr.Row():
        pregnancies = gr.Number(label="Grossesses")
        glucose = gr.Number(label="Glucose")
        blood_pressure = gr.Number(label="Pression artérielle")
    with gr.Row():
        skin_thickness = gr.Number(label="Épaisseur de peau")
        insulin = gr.Number(label="Insuline")
        bmi = gr.Number(label="IMC")
    with gr.Row():
        dpf = gr.Number(label="DPF")
        age = gr.Number(label="Âge")

    predict_button = gr.Button("Prédire")
    output_label = gr.Textbox(label="Résultat")

    predict_button.click(fn=predict_diabetes,
                         inputs=[pregnancies, glucose, blood_pressure, skin_thickness, insulin, bmi, dpf, age],
                         outputs=output_label)

    # **Section Clustering**
    gr.Markdown("### Visualisation des Clusters des Réactions en Ligne")

    # Calculate unique clusters after PCA and prediction
    unique_clusters = pca_df['Cluster'].unique()

    cluster_selector = gr.Dropdown(["Tous"] + [str(i) for i in unique_clusters],
                                   label="Sélectionner un cluster")
    cluster_plot = gr.Plot()

    cluster_selector.change(fn=plot_clusters, inputs=[cluster_selector], outputs=[cluster_plot])

    # Téléchargement des clusters
    download_button = gr.Button("Télécharger les clusters")
    download_button.click(fn=download_clusters, outputs=gr.File())

app.launch()