Spaces:
Sleeping
Sleeping
import streamlit as st | |
import pandas as pd | |
import numpy as np | |
import pickle | |
# Load the pre-trained model | |
with open('abalone_model.pkl', 'rb') as file: | |
model = pickle.load(file) | |
# Define the prediction function | |
def predict_age(sex, length, diameter, height, whole_weight, shucked_weight, viscera_weight, shell_weight): | |
shell_volume = length * diameter * height | |
meat_ratio = whole_weight / shell_weight | |
bmi = whole_weight / (length ** 2) | |
shell_surface_area = 2 * (length * diameter + length * height + diameter * height) | |
volume_to_weight_ratio = shell_volume / whole_weight | |
shell_weight_to_length_ratio = shell_weight / length | |
meat_weight_to_lenth_ratio = whole_weight / length | |
features = [[ | |
sex, | |
length, | |
diameter, | |
height, | |
whole_weight, | |
shucked_weight, | |
viscera_weight, | |
shell_weight, | |
shell_volume, | |
meat_ratio, | |
bmi, | |
shell_surface_area, | |
volume_to_weight_ratio, | |
shell_weight_to_length_ratio, | |
meat_weight_to_lenth_ratio | |
]] | |
columns = [ | |
'Sex', | |
'Length', | |
'Diameter', | |
'Height', | |
'Whole_weight', | |
'Shucked_weight', | |
'Viscera_weight', | |
'Shell_weight', | |
'Shell_Volume', | |
'Meat_Ratio', | |
'BMI', | |
'Shell_Surface_Area', | |
'Volume_to Weigh_Ratio', | |
'Shell_Weight_to Length_Ratio', | |
'Mea_Weight_to_Length Ratio' | |
] | |
features_df = pd.DataFrame(data=features, columns=columns) | |
prediction = model.predict(features_df) | |
age = prediction[0] + 1.5 | |
return age | |
# Streamlit app | |
st.title('Abalone Age Predictor') | |
st.write("Enter the physical measurements of the abalone to predict its age.") | |
# Input fields | |
sex = st.selectbox('Sex', ['M', 'F', 'I']) | |
length = st.number_input('Length (mm)', min_value=0.0, value=0.0) | |
diameter = st.number_input('Diameter (mm)', min_value=0.0, value=0.0) | |
height = st.number_input('Height (mm)', min_value=0.0, value=0.0) | |
whole_weight = st.number_input('Whole Weight (grams)', min_value=0.0, value=0.0) | |
shucked_weight = st.number_input('Shucked Weight (grams)', min_value=0.0, value=0.0) | |
viscera_weight = st.number_input('Viscera Weight (grams)', min_value=0.0, value=0.0) | |
shell_weight = st.number_input('Shell Weight (grams)', min_value=0.0, value=0.0) | |
# Predict button | |
if st.button('Predict Age'): | |
try: | |
# Check for valid input values | |
if length <= 0 or diameter <= 0 or height <= 0 or whole_weight <= 0 or shucked_weight <= 0 or viscera_weight <= 0 or shell_weight <= 0: | |
st.error("All input values must be greater than zero.") | |
else: | |
age = predict_age(sex, length, diameter, height, whole_weight, shucked_weight, viscera_weight, shell_weight) | |
st.write(f'The predicted age of the abalone is: {age:.2f} years') | |
except Exception as e: | |
st.error(f"An error occurred: {e}") |