CoolFace
Apppublic

Photon08/ml_studio_no_code

sourceHugging Faceupdated 4y agoView on Hugging Face
0likes
app.py198 linesDownload Raw Back to root
1import pandas as pd2import numpy as np3from sklearn.preprocessing import StandardScaler, OneHotEncoder, LabelEncoder, OrdinalEncoder4from sklearn.linear_model import LinearRegression, LogisticRegression5from sklearn.ensemble import GradientBoostingClassifier, RandomForestRegressor,HistGradientBoostingRegressor6#import xgboost7from sklearn.compose import ColumnTransformer8#import pickle9from sklearn.pipeline import Pipeline10from sklearn.model_selection import train_test_split11from sklearn.metrics import classification_report, r2_score12import streamlit as st13import time14#import shap15#import matplotlib as mt16 17def train(data=None,problem="Regression",model="LinearRegression",label=None):18 19    df = pd.read_csv(data)20 21    target = df[label].copy()22    features = df.drop(label, axis=1)23 24    X_train,X_test,y_train,y_test = train_test_split(features,target,test_size=0.20,random_state=42,shuffle=True)25 26    num_features = []27    cat_features = []28    cols = list(features.columns)29    for i in cols:30        if df[i].dtypes == "object":31            cat_features.append(i)32        else:33            num_features.append(i)34 35    if problem == "Regression":36        trf = ColumnTransformer([("num_trf",StandardScaler(),num_features),37                                 ("cat_trf",OneHotEncoder(sparse_output=False),cat_features)])38        39            40        41        42        if model == "LinearRegression":43            final_pipe = Pipeline([("transformers",trf),("reg_model",LinearRegression())])44        elif model == "RandomForestRegressor":45            final_pipe = Pipeline([("transformers",trf),("rf_reg_model",RandomForestRegressor(random_state=42))])46        else:47            final_pipe = Pipeline([("transformers",trf),("reg_model",HistGradientBoostingRegressor(random_state=42))])48 49        final_pipe.fit(X_train,y_train)50 51        final_pipe.fit(X_train,y_train)52 53        #model = pickle.dump(final_pipe,open("regression_model","wb"))54 55        #y_hat = model.predict(X_train)56 57        return final_pipe, X_train,X_test,y_train,y_test58    if problem == "Classification":59        if model == "GradientBoosting":60 61            trf = ColumnTransformer([("num_trf",StandardScaler(),num_features),62                                    ("cat_trf",OneHotEncoder(),cat_features)])63            64            65            lbl_encd = LabelEncoder()66 67            lbl_encd.fit(y_train)68            y_train_trf = lbl_encd.transform(y_train)69 70            y_test_trf = lbl_encd.fit(y_test)71            72            final_pipe = Pipeline([("transformers",trf),("clf_model",GradientBoostingClassifier(random_state=42))])73 74            final_pipe.fit(X_train,y_train_trf)75            #file = open("model")76            #model = pickle.dump(final_pipe,("","wb"))77 78            return final_pipe, X_train,X_test,y_train_trf,y_test_trf79        elif model == "LogisticRegression":80            trf = ColumnTransformer([("num_trf",StandardScaler(),num_features),81                                    ("cat_trf",OneHotEncoder(),cat_features)])82            83            84            lbl_encd = LabelEncoder()85 86            lbl_encd.fit(y_train)87            y_train_trf = lbl_encd.transform(y_train)88 89            y_test_trf = lbl_encd.fit(y_test)90            91            final_pipe = Pipeline([("transformers",trf),("clf_model",LogisticRegression(random_state=42))])92 93            final_pipe.fit(X_train,y_train_trf)94            #file = open("model")95            #model = pickle.dump(final_pipe,("","wb"))96 97            return final_pipe, X_train,X_test,y_train_trf,y_test_trf98 99 100def predict(model=None,x=None):101 102    #m = pickle.load(open(model,"rb"))103    y_hat = model.predict(x)104 105    return y_hat106 107def evaluate(y_true,y_pred, problem="Regression"):108 109    if problem == "Regression":110        metric = r2_score(y_true,y_pred)111        return metric112    else:113        metric = classification_report(y_true,y_pred,output_dict=True)114        met_df = pd.DataFrame(metric).transpose()115        file = met_df.to_csv().encode('utf-8')116 117        return file118st.title("No Code Machine Learning Studio :six_pointed_star:")119 120st.image(image="https://www.silvertouchtech.co.uk/wp-content/uploads/2020/05/ai-banner.jpg")121st.subheader("Plug & Play Portal for Machine Learing")122    123prob_type = st.selectbox(label="Please select your ML problem type: ",options=("Regression","Classification"))124 125train_data = st.file_uploader(label="Please upload your training dataset",type=["csv"])126 127if prob_type == "Classification":128 129    model = st.selectbox(label="Plase Select your classification model: ", options=("GradientBoosting","LogisticRegression"))130else:131    model = st.selectbox(label="Plase Select your classification model: ", options=("LinearRegression","RandomForestRegressor","HistGradientBoostingRegressor"))132 133 134#def explain(model="LinearRegression",train_data=None,test_data=None):135#explainer = shap.LinearExplainer(model,train_data,feature_dependence=False)136#    shap_values = explainer.shap_values(test_data)137 138#    shap.summary_plot(shap_values,test_data,plot_type="violin",show=False)139#    mt.pyplot.gcf().axes[-1].set_box_aspect(10)140 141 142y = st.text_input("Please write your target column name:  ")143#num_f = st.text_input("Please write your numerical feature names(separted by ","): ").split(",")144#cat_f = st.text_input("Please write your categorical feature names(separted by ","): ").split(",")145 146if st.button("Train"):147    148    time.sleep(1)149    150    151    if prob_type=="Classification":152        with st.progress(10,"Discovering the dataset..."):153            time.sleep(0.5)154            st.progress(20, "Applying the preprocessing steps...")155            time.sleep(1)156            st.progress(25,"Training engine has started...")157            st.progress(50, "Training the model...")158            model_, X_train,X_test,y_train,y_test = train(data=train_data,problem=prob_type,model=model, label=y)159            time.sleep(2)160            st.progress(75, "Training complete...")161            st.progress(85, "Evaluating model performance...")162            st.progress(90, "Generating Classification report...")163            time.sleep(1)164            st.progress(100, "Complete! :100:")165        y_hat_train = predict(model_,X_train)166        y_hat_test = predict(model_,X_test)167        report = evaluate(y_train,y_hat_train,prob_type)168 169        st.download_button(label="Click here to download the report",data=report, mime="text/csv")170        time.sleep(2)171        st.write("Classification report of testing dataset: ")172        report_test = evaluate(y_train,y_hat_train,prob_type)173        st.download_button(key="test",label="Click here to download the report",data=report_test, mime="text/csv")174        st.success("Report generated successfully! :beers:")175        time.sleep(20)176    else:177        with st.progress(10,"Discovering the dataset..."):178            time.sleep(0.5)179            st.progress(20, "Applying the preprocessing steps...")180            time.sleep(1)181            st.progress(25,"Training engine has started...")182            st.progress(50, "Training the model...")183            model_, X_train,X_test,y_train,y_test = train(data=train_data,problem=prob_type,model=model, label=y)184            time.sleep(2)185            st.progress(75, "Training complete...")186            st.progress(85, "Evaluating model performance...")187            st.progress(90, "Generating Regression metrics...")188            time.sleep(1)189            st.progress(100, "Complete! :100:")190        y_hat_train = predict(model_,X_train)191        y_hat_test = predict(model_,X_test)192        st.write("r2 score on training set: ")193        st.write(evaluate(y_train,y_hat_train))194        st.write("r2 score on test set: ")195        time.sleep(0.5)196 197        st.write(evaluate(y_test,y_hat_test,prob_type)) 198        st.success("Metrics generated successfully! :beers:")