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