Praneeth383's picture
Update app.py
2e3fa3c
import gradio as gr
import joblib
import pandas as pd
import numpy as np
# Load your dataset here
file_path_gr = 'heart.dat'
df = pd.read_csv(file_path_gr, header=None, sep='\s+')
# Define the X variable with the feature columns
X = df.drop(df.columns[-1], axis=1)
# Load the saved models
best_models = [
("Logistic Regression", joblib.load('Logistic Regression_best_model.pkl')),
("Support Vector Machine", joblib.load('Support Vector Machine_best_model.pkl')),
("Decision Trees", joblib.load('Decision Trees_best_model.pkl')),
("Random Forests", joblib.load('Random Forests_best_model.pkl')),
("MLPClassifier", joblib.load('MLPClassifier_best_model.pkl')),
("K-Nearest Neighbors", joblib.load('K-Nearest Neighbors_best_model.pkl')),
("Linear Discriminant Analysis",joblib.load('Linear Discriminant Analysis_best_model.pkl'))
]
# Load the saved scaler
scaler = joblib.load('scaler.pkl')
attribute_names = [
"age", "sex", "chest pain type", "resting blood pressure",
"serum cholesterol", "fasting blood sugar > 120 mg/dl",
"resting ECG results", "maximum heart rate achieved",
"exercise induced angina", "oldpeak", "slope of peak exercise ST segment",
"number of major vessels", "thal"
]
def predict(*args):
user_features = list(args[:-1])
model_name = args[-1]
model = dict(best_models)[model_name]
input_data = np.array(user_features).reshape(1, -1)
input_data_scaled = scaler.transform(input_data)
probs = model.predict_proba(input_data_scaled)
return {f"Absence of heart disease" if i == 0 else "Presence of heart disease": p for i, p in enumerate(probs[0])}
# List of model names for the dropdown menu
model_names = [name for name, _ in best_models]
# Define inputs
user_features = [gr.inputs.Number(label=col_name) for col_name in attribute_names]
model_name = gr.inputs.Dropdown(choices=model_names, label="Model")
# Define output
output = gr.outputs.Label(num_top_classes=len(np.unique(df[df.columns[-1]])), label="Predicted Class Probabilities")
# Define examples
examples = [
[70.0, 1.0, 4.0, 130.0, 322.0, 0.0, 2.0, 109.0, 0.0, 2.4, 2.0, 3.0, 3.0, "Logistic Regression"],
[67.0, 0.0, 3.0, 115.0, 564.0, 0.0, 2.0, 160.0, 0.0, 1.6, 2.0, 0.0, 7.0, "Logistic Regression"]
]
# Create the Gradio interface
iface = gr.Interface(
fn=predict,
inputs=user_features + [model_name],
outputs=output,
title="Machine Learning Model",
description="Select a model and enter user features to predict class probabilities.",
examples=examples
).launch(debug=True)
iface.launch()