CoolFace
Apppublic

kaushik7425/Cable_Optimization

sourceHugging Faceupdated 9mo agoView on Hugging Face
0likes
streamlit_app.py169 linesDownload Raw Back to src
1import streamlit as st2import pandas as pd3import seaborn as sns4import matplotlib.pyplot as plt5import numpy as np6 7from sklearn.linear_model import ElasticNet, Ridge, LinearRegression8from sklearn.model_selection import train_test_split, GridSearchCV9from sklearn.metrics import r2_score10 11st.set_page_config(layout="wide")12 13# ================= LOAD DATA =================14@st.cache_data15def load_data():16    df = pd.read_csv("cabeldata.csv")17    df.columns = [c.strip() for c in df.columns]18    return df19 20df = load_data()21target = "Simulated Capacitance(pF) for 4.2ft"22 23numeric_cols = df.select_dtypes(include="number").columns.tolist()24numeric_cols.remove(target)25 26# ================= SIDEBAR =================27st.sidebar.title("Model & Physics Control")28 29model_choice = st.sidebar.selectbox(30    "Select Model",31    ["ElasticNet (Recommended)", "Ridge", "Linear Regression"]32)33 34selected_features = st.sidebar.multiselect(35    "Select Input Physics",36    numeric_cols,37    default=[38        c for c in [39            "Conductor OD(mm)",40            "Conductor Dielectric OD(mm)",41            "insulated diameter mil",42            "Packing Ratio %",43            "TPI",44            "OD conductor bundle",45            "Desire shield OD",46            "Dielectric material PN 155C/ .7 loss tangent",47            "Free air capacitance for 4.2ft single Twisted Pair",48            "Free air capacitance for single Twisted Pair pf/ft"49        ] if c in numeric_cols50    ]51)52 53remove_outliers = st.sidebar.checkbox("Remove Outliers", True)54train_btn = st.sidebar.button("Train Model")55 56# ================= TRAIN =================57if train_btn:58 59    data = df[selected_features + [target]].dropna()60    X = data[selected_features]61    y = data[target]62 63    if remove_outliers:64        base = LinearRegression()65        base.fit(X, y)66        residuals = y - base.predict(X)67        mask = residuals.abs() < 1068        X = X[mask]69        y = y[mask]70 71    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)72 73    if model_choice == "Linear Regression":74        model = LinearRegression()75        model.fit(X_train, y_train)76 77    elif model_choice == "Ridge":78        grid = GridSearchCV(Ridge(), {"alpha":[0.01,0.1,1,10,50]}, cv=5, scoring="r2")79        grid.fit(X_train, y_train)80        model = grid.best_estimator_81        params = grid.best_params_82 83    else:84        grid = GridSearchCV(85            ElasticNet(max_iter=10000),86            {"alpha":[0.001,0.01,0.1,1,10],"l1_ratio":[0.1,0.3,0.5,0.7,0.9]},87            cv=5, scoring="r2"88        )89        grid.fit(X_train, y_train)90        model = grid.best_estimator_91        params = grid.best_params_92 93    y_pred = model.predict(X_test)94 95    st.session_state.model = model96    st.session_state.features = selected_features97    st.session_state.y_test = y_test98    st.session_state.y_pred = y_pred99    st.session_state.r2 = r2_score(y_test, y_pred)100    st.session_state.model_choice = model_choice101    st.session_state.params = params if "params" in locals() else None102 103# ================= UI =================104st.title("RF Cable Capacitance Digital Twin")105 106if "model" in st.session_state:107    st.success(f"{st.session_state.model_choice} | Test R² = {st.session_state.r2}")108    if st.session_state.params:109        st.info(f"Model parameters: {st.session_state.params}")110else:111    st.warning("Select physics + model and click Train")112 113# ================= PREDICT =================114if "model" in st.session_state:115    st.subheader("Predict Cable")116 117    inputs = {}118    cols = st.columns(3)119    for i,f in enumerate(st.session_state.features):120        inputs[f] = cols[i%3].number_input(f, value=0.0, step=0.0000001, format="%.10f")121 122    if st.button("Predict Capacitance"):123        row = pd.DataFrame([inputs])124        pred = st.session_state.model.predict(row)[0]125        st.success(f"Predicted Capacitance = {pred} pF")126 127# ================= PLOTS =================128if "model" in st.session_state:129    st.subheader("Diagnostics")130 131    plot = st.selectbox("Select Plot",132        ["None","Correlation Heatmap","Predicted vs Actual","Residuals","Feature vs Capacitance","GGPlot Smooth"]133    )134 135    if plot=="Correlation Heatmap":136        fig,ax=plt.subplots(figsize=(10,6))137        sns.heatmap(df[st.session_state.features+[target]].corr(), cmap="coolwarm", center=0, ax=ax)138        st.pyplot(fig)139 140    elif plot=="Predicted vs Actual":141        fig,ax=plt.subplots()142        ax.scatter(st.session_state.y_test, st.session_state.y_pred)143        ax.plot([st.session_state.y_test.min(),st.session_state.y_test.max()],144                [st.session_state.y_test.min(),st.session_state.y_test.max()])145        st.pyplot(fig)146 147    elif plot=="Residuals":148        fig,ax=plt.subplots()149        ax.scatter(st.session_state.y_test, st.session_state.y_test-st.session_state.y_pred)150        ax.axhline(0)151        st.pyplot(fig)152 153    elif plot=="Feature vs Capacitance":154        f=st.selectbox("Select Feature",st.session_state.features)155        fig,ax=plt.subplots()156        ax.scatter(df[f],df[target])157        st.pyplot(fig)158 159    elif plot=="GGPlot Smooth":160        f=st.selectbox("Select Feature",st.session_state.features)161        x=df[f]; y=df[target]162        z=np.polyfit(x,y,3)163        xp=np.linspace(x.min(),x.max(),200)164        yp=np.polyval(z,xp)165        fig,ax=plt.subplots()166        ax.scatter(x,y,alpha=0.4)167        ax.plot(xp,yp,color="red")168        st.pyplot(fig)169