fadzwan's picture
Update app.py
f1a0cad verified
raw
history blame
2.94 kB
import streamlit as st
import numpy as np
import pickle
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
def load_data():
# Replace this with your actual data loading logic
X_train = np.random.rand(100, 5)
y_train = np.random.rand(100)
return X_train, y_train
def load_model_artifacts():
with open('slump_regressor.pkl', 'rb') as f:
regressor = pickle.load(f)
with open('scaler.pkl', 'rb') as f:
scaler = pickle.load(f)
with open('pca.pkl', 'rb') as f:
pca = pickle.load(f)
return regressor, scaler, pca
def save_model_artifacts(regressor, scaler, pca):
with open('slump_regressor.pkl', 'wb') as f:
pickle.dump(regressor, f, protocol=pickle.HIGHEST_PROTOCOL)
with open('scaler.pkl', 'wb') as f:
pickle.dump(scaler, f, protocol=pickle.HIGHEST_PROTOCOL)
with open('pca.pkl', 'wb') as f:
pickle.dump(pca, f, protocol=pickle.HIGHEST_PROTOCOL)
def predict_slump_app(regressor, scaler, pca):
st.subheader("Enter Concrete Mix Parameters")
cement = st.number_input("Cement (kg/m³)", min_value=0.0, step=1.0)
slag = st.number_input("Slag (kg/m³)", min_value=0.0, step=1.0)
flyash = st.number_input("Fly Ash (kg/m³)", min_value=0.0, step=1.0)
water = st.number_input("Water (kg/m³)", min_value=0.0, step=1.0)
superplasticizer = st.number_input("Superplasticizer (kg/m³)", min_value=0.0, step=0.1)
coarseaggregate = st.number_input("Coarse Aggregate (kg/m³)", min_value=0.0, step=1.0)
fineaggregate = st.number_input("Fine Aggregate (kg/m³)", min_value=0.0, step=1.0)
if st.button("Predict Slump Strength"):
X_new = np.array([cement, slag, flyash, water, superplasticizer, coarseaggregate, fineaggregate])
X_new = scaler.transform([X_new])
X_new = pca.transform(X_new)
slump_prediction = regressor.predict(X_new)[0]
return slump_prediction
else:
return None
def main():
st.set_page_config(page_title="Concrete Slump Strength Prediction")
st.title("Concrete Slump Strength Prediction")
st.write("Enter the concrete mix parameters to predict the slump.")
try:
regressor, scaler, pca = load_model_artifacts()
except (FileNotFoundError, UnpicklingError):
X_train, y_train = load_data()
regressor = LinearRegression()
regressor.fit(X_train, y_train)
scaler = StandardScaler()
scaler.fit(X_train)
pca = PCA(n_components=4)
pca.fit(scaler.transform(X_train))
save_model_artifacts(regressor, scaler, pca)
slump_prediction = predict_slump_app(regressor, scaler, pca)
if slump_prediction is not None:
st.subheader("Predicted Slump Strength")
st.markdown(f"The predicted slump strength is **{slump_prediction:.2f} MPa**.")
if __name__ == '__main__':
main()