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() |