File size: 3,063 Bytes
c8c581e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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

import gradio as gr
import joblib
import numpy as np
import pandas as pd

# Load the trained model
model_path = "trained_model.pkl"

def load_model(path):
    try:
        return joblib.load(path)
    except Exception as e:
        raise ValueError(f"Error loading model: {e}")

# Define the prediction function
def predict_heart_disease(
    PhysicalHealthDays: float,
    MentalHealthDays: float,
    SleepHours: float,
    BMI: float,
    PhysicalActivities: str,
    AlcoholDrinkers: str,
    HIVTesting: str,
    RemovedTeeth: str,
    HighRiskLastYear: str,
    CovidPos: str,
):
    try:
        model = load_model(model_path)
        # Encode categorical inputs as integers
        physical_activities = 1 if PhysicalActivities.lower() == "yes" else 0
        alcohol_drinkers = 1 if AlcoholDrinkers.lower() == "yes" else 0
        hiv_testing = 1 if HIVTesting.lower() == "yes" else 0
        removed_teeth = 1 if RemovedTeeth.lower() == "yes" else 0
        high_risk_last_year = 1 if HighRiskLastYear.lower() == "yes" else 0
        covid_pos = 1 if CovidPos.lower() == "yes" else 0

        # Combine inputs into a numpy array for prediction
        features = np.array([
            PhysicalHealthDays, MentalHealthDays, SleepHours, BMI,
            physical_activities, alcohol_drinkers, hiv_testing,
            removed_teeth, high_risk_last_year, covid_pos
        ]).reshape(1, -1)

        # Predict with the model
        prediction = model.predict(features)
        return "Heart Disease Risk" if prediction[0] == 1 else "No Risk"
    except Exception as e:
        return f"Error during prediction: {e}"

# Define the Gradio interface
with gr.Blocks() as app:
    gr.Markdown("# Heart Disease Prediction App")
    gr.Markdown("### Provide input values and receive a prediction.")
    
    with gr.Row():
        PhysicalHealthDays = gr.Slider(0, 30, label="Physical Health Days")
        MentalHealthDays = gr.Slider(0, 30, label="Mental Health Days")
        SleepHours = gr.Slider(0, 24, label="Average Sleep Hours")
        BMI = gr.Slider(10, 50, label="Body Mass Index (BMI)")
    
    with gr.Row():
        PhysicalActivities = gr.Radio(["Yes", "No"], label="Engaged in Physical Activities?")
        AlcoholDrinkers = gr.Radio(["Yes", "No"], label="Consumes Alcohol?")
        HIVTesting = gr.Radio(["Yes", "No"], label="Tested for HIV?")
        RemovedTeeth = gr.Radio(["Yes", "No"], label="Has Removed Teeth?")
        HighRiskLastYear = gr.Radio(["Yes", "No"], label="High Risk Last Year?")
        CovidPos = gr.Radio(["Yes", "No"], label="Tested Positive for COVID-19?")

    predict_button = gr.Button("Predict")
    output = gr.Textbox(label="Prediction Result")

    # Connect prediction logic
    predict_button.click(
        fn=predict_heart_disease,
        inputs=[
            PhysicalHealthDays, MentalHealthDays, SleepHours, BMI,
            PhysicalActivities, AlcoholDrinkers, HIVTesting,
            RemovedTeeth, HighRiskLastYear, CovidPos
        ],
        outputs=output,
    )

# Launch the app
app.launch()