Spaces:
Sleeping
Sleeping
import pickle | |
import gradio as gr | |
import pandas as pd | |
import statsmodels.api as sm | |
# Load the model from the file | |
with open('linear_regression_model_encoded.pkl', 'rb') as file: | |
loaded_model = pickle.load(file) | |
# The model is now loaded and ready to use | |
train_encoded_columns = [ | |
'age', 'bmi', 'bloodpressure', 'children', | |
'gender_male', | |
'diabetic_Yes', | |
'smoker_Yes', | |
'region_northwest', 'region_southeast', 'region_southwest' | |
] | |
# Define the function that will use the model to predict | |
def predict(age, bmi, bloodpressure,\ | |
children, gender, diabetic, smoker, region): | |
# Create a DataFrame for the input data | |
input_data = pd.DataFrame({ | |
'age': [age], | |
'bmi': [bmi], | |
'bloodpressure': [bloodpressure], | |
'children': [children], | |
'gender': [gender], | |
'diabetic': [diabetic], | |
'smoker': [smoker], | |
'region': [region] | |
}) | |
# One-hot encode the input data | |
input_data_encoded = pd.get_dummies(input_data) | |
# Add missing columns as zeros and align the order of columns | |
for column in train_encoded_columns: | |
if column not in input_data_encoded.columns: | |
input_data_encoded[column] = 0 | |
input_data_encoded = input_data_encoded[train_encoded_columns] | |
# Add a constant term if your model expects an intercept | |
input_data_encoded = sm.add_constant(input_data_encoded, has_constant='add') | |
# Make a prediction using the loaded model | |
prediction = loaded_model.predict(input_data_encoded) | |
return prediction[0] | |
# Define the dropdown options based on the training data categories | |
gender_options = ['male', 'female'] | |
diabetic_options = ['Yes', 'No'] | |
smoker_options = ['Yes', 'No'] | |
region_options = ['southwest', 'southeast', 'northwest', 'northeast'] | |
# Create the Gradio interface | |
iface = gr.Interface( | |
fn=predict, | |
inputs=[ | |
gr.Number(label="Age"), | |
gr.Number(label="BMI"), | |
gr.Number(label="Blood Pressure"), | |
gr.Number(label="Children"), | |
gr.Dropdown(choices=gender_options, label="Gender", value='male'), | |
gr.Dropdown(choices=diabetic_options, label="Diabetic", value='Yes'), | |
gr.Dropdown(choices=smoker_options, label="Smoker", value='Yes'), | |
gr.Dropdown(choices=region_options, label="Region", value='northwest') | |
], | |
outputs=gr.Textbox(label="Predicted Claim"), | |
title="Medical Claim Prediction", | |
description="Enter Age, BMI, and Blood Pressure to predict the medical claim", | |
allow_flagging='never') # Set flagging to 'never' | |
# Launch the interface | |
iface.launch() |