CoolFace
Apppublic

Photon08/ml_studio

sourceHugging Faceupdated 4y agoView on Hugging Face
0likes
app.py165 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 GradientBoostingClassifier6import 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 shap14import matplotlib as mt15 16def train(data=None,problem="Regression",model="LinearRegression",label=None):17 18    df = pd.read_csv(data)19 20    target = df[label].copy()21    features = df.drop(label, axis=1)22 23    X_train,X_test,y_train,y_test = train_test_split(features,target,test_size=0.20,random_state=42,shuffle=True,stratify=target)24 25    num_features = []26    cat_features = []27    cols = list(features.columns)28    for i in cols:29        if df[i].dtypes == "object":30            cat_features.append(i)31        else:32            num_features.append(i)33 34    if problem == "Regression":35        if cat_features[0]!="":36 37            trf = ColumnTransformer([("num_trf",StandardScaler(),num_features),38                                 ("cat_trf",OneHotEncoder(sparse_output=False),cat_features)])39        else:40            trf = ColumnTransformer([("num_trf",StandardScaler(),num_features)])41            42        43        44        final_pipe = Pipeline([("transformers",trf),("reg_model",LinearRegression())])45 46        final_pipe.fit(X_train,y_train)47 48        #model = pickle.dump(final_pipe,open("regression_model","wb"))49 50        #y_hat = model.predict(X_train)51 52        return final_pipe, X_train,X_test,y_train,y_test53    if problem == "Classification":54        if model == "GradientBoosting":55 56            trf = ColumnTransformer([("num_trf",StandardScaler(),num_features),57                                    ("cat_trf",OneHotEncoder(),cat_features)])58            59            60            lbl_encd = LabelEncoder()61 62            lbl_encd.fit(y_train)63            y_train_trf = lbl_encd.transform(y_train)64 65            y_test_trf = lbl_encd.fit(y_test)66            67            final_pipe = Pipeline([("transformers",trf),("clf_model",GradientBoostingClassifier(random_state=42))])68 69            final_pipe.fit(X_train,y_train_trf)70            #file = open("model")71            #model = pickle.dump(final_pipe,("","wb"))72 73            return final_pipe, X_train,X_test,y_train_trf,y_test_trf74        elif model == "LogisticRegression":75            trf = ColumnTransformer([("num_trf",StandardScaler(),num_features),76                                    ("cat_trf",OneHotEncoder(),cat_features)])77            78            79            lbl_encd = LabelEncoder()80 81            lbl_encd.fit(y_train)82            y_train_trf = lbl_encd.transform(y_train)83 84            y_test_trf = lbl_encd.fit(y_test)85            86            final_pipe = Pipeline([("transformers",trf),("clf_model",LogisticRegression(random_state=42))])87 88            final_pipe.fit(X_train,y_train_trf)89            #file = open("model")90            #model = pickle.dump(final_pipe,("","wb"))91 92            return final_pipe, X_train,X_test,y_train_trf,y_test_trf93 94 95def predict(model=None,x=None):96 97    #m = pickle.load(open(model,"rb"))98    y_hat = model.predict(x)99 100    return y_hat101 102def evaluate(y_true,y_pred, problem="Regression"):103 104    if problem == "Regression":105        metric = r2_score(y_true,y_pred)106        return metric107    else:108        metric = classification_report(y_true,y_pred,output_dict=True)109        met_df = pd.DataFrame(metric).transpose()110        file = met_df.to_csv().encode('utf-8')111 112        return file113 114st.title("No Code Machine Learning Studio: ")115 116st.image(image="https://www.silvertouchtech.co.uk/wp-content/uploads/2020/05/ai-banner.jpg")117st.write("Drag & Drop Portal for Machine Learing")118prob_type = st.selectbox(label="Please select your ML problem type: ",options=("Regression","Classification"))119 120train_data = st.file_uploader(label="Please upload your training dataset",type=["csv"])121 122if prob_type == "Classification":123 124    model = st.selectbox(label="Plase Select your classification model: ", options=("GradientBoosting","LogisticRegression"))125else:126    model = "LinearRegression"127 128 129def explain(model="LinearRegression",train_data=None,test_data=None):130    explainer = shap.LinearExplainer(model,train_data,feature_dependence=False)131    shap_values = explainer.shap_values(test_data)132 133    shap.summary_plot(shap_values,test_data,plot_type="violin",show=False)134    mt.pyplot.gcf().axes[-1].set_box_aspect(10)135 136 137y = st.text_input("Please write your target column name:  ")138#num_f = st.text_input("Please write your numerical feature names(separted by ","): ").split(",")139#cat_f = st.text_input("Please write your categorical feature names(separted by ","): ").split(",")140 141if st.button("Train"):142    #if cat_f[0]!="":143    model_, X_train,X_test,y_train,y_test = train(data=train_data,problem=prob_type,model=model, label=y)144    #else:145    #model_, X_train,X_test,y_train,y_test = train(data=train_data,problem=prob_type,model=model, label=y,num_features=num_f,cat_features=cat_f)146 147    y_hat_train = predict(model_,X_train)148    y_hat_test = predict(model_,X_test)149 150    if prob_type == "Classification":151        st.write("Classification report of training set: ")152        report = evaluate(y_train,y_hat_train,prob_type)153 154        st.download_button(label="Click here to download the report",data=report, mime="text/csv")155        st.write("Classification report of testing dataset: ")156        report_test = evaluate(y_train,y_hat_train,prob_type)157        st.download_button(key="test",label="Click here to download the report",data=report_test, mime="text/csv")158 159    else:160        st.write("r2 score on training set: ")161        st.write(evaluate(y_train,y_hat_train))162        st.write("r2 score on test set: ")163 164        st.write(evaluate(y_test,y_hat_test,prob_type))165        #explain(model_.named_steps["reg_model"],X_train,X_test)