brcprado's picture
Update app.py
aeacb2a
import numpy as np
from sklearn.linear_model import LinearRegression
import gradio as gr
from sklearn.model_selection import train_test_split
from sklearn.ensemble import AdaBoostRegressor, ExtraTreesRegressor
import pandas as pd
from sklearn.tree import DecisionTreeRegressor, ExtraTreeRegressor
from xgboost import XGBRegressor
from sklearn.metrics import r2_score
from catboost import CatBoostRegressor
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import r2_score
import random
logger = gr.SimpleCSVLogger()
# set all random seeds to 42
random.seed(42)
np.random.seed(42)
def AdaBoostRegressorR2(x_file_obj,y_file_obj,learning_rate, n_estimators, loss, base_estimator, test_size,random_seed):
if base_estimator == "DecisionTreeRegressor":
base_estimator = DecisionTreeRegressor()
elif base_estimator == "XGBoost":
base_estimator = XGBRegressor()
elif base_estimator == "RandomForestRegressor":
base_estimator = RandomForestRegressor()
elif base_estimator == "CatBoostRegressor":
base_estimator = CatBoostRegressor()
elif base_estimator == "LinearRegression":
base_estimator = LinearRegression()
elif base_estimator == "ExtraTreeRegressor":
base_estimator = ExtraTreeRegressor()
elif base_estimator == "None":
base_estimator = None
X = pd.read_csv(x_file_obj.name,dtype=str)
y = pd.read_csv(y_file_obj.name,dtype=str)
y = y.values.ravel()
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=test_size, random_state=random_seed)
model = AdaBoostRegressor(learning_rate=learning_rate, n_estimators=n_estimators, loss=loss,base_estimator=base_estimator,random_state=random_seed)
model.fit(x_train, y_train)
predictions = model.predict(x_test)
return r2_score(y_test, predictions)
adaInterface = gr.Interface(
AdaBoostRegressorR2,
[
gr.components.File(label="X File (CSV)"),
gr.components.File(label="Y File (CSV)"),
gr.components.Slider(0.1, 1, default=0.1, label="learning_rate"),
gr.components.Slider(0, 1000, default=10, label="n_estimators"),
gr.components.Dropdown(["linear", "square", "exponential"], label="loss"),
gr.components.Dropdown(["DecisionTreeRegressor","XGBoost","RandomForestRegressor","CatBoostRegressor","LinearRegression","ExtraTreeRegressor","None"], label="base_estimator"),
gr.components.Slider(0.1, 0.9, default=0.2, label="test_size"),
gr.components.Slider(0, 100, default=42, label="random_seed")
],
outputs="number",
title="AdaBoostRegressor",
description="Treino de um modelo de regressão com AdaBoostRegressor",
allow_flagging="manual"
)
def CatBoostRegressorR2(x_file_obj,y_file_obj,learning_rate, n_estimators, loss, max_depth, max_bin, l2_leaf_reg, test_size,random_seed):
X = pd.read_csv(x_file_obj.name,dtype=str)
y = pd.read_csv(y_file_obj.name,dtype=str)
y = y.values.ravel()
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=test_size, random_state=random_seed)
model = CatBoostRegressor(learning_rate=learning_rate, n_estimators=n_estimators, loss_function=loss,max_depth=max_depth,
max_bin=max_bin,l2_leaf_reg=l2_leaf_reg ,random_state=random_seed)
model.fit(x_train, y_train)
predictions = model.predict(x_test)
return r2_score(y_test, predictions)
catInterface = gr.Interface(
CatBoostRegressorR2,
[
gr.components.File(label="X File (CSV)"),
gr.components.File(label="Y File (CSV)"),
gr.components.Slider(0.1, 1, default=0.1, label="learning_rate"),
gr.components.Slider(0, 1000, default=10, label="n_estimators"),
gr.components.Dropdown(["RMSE", "MAE", "Quantile:alpha=0.9", "LogLinQuantile:alpha=0.9", "Poisson", "MAPE", "MultiRMSE","Quantile", "LogLinQuantile", "Lq:q=1", "Lq:q=2"], label="loss"),
gr.components.Slider(0, 100, default=1, label="max_depth"),
gr.components.Slider(1, 255, default=255, label="max_bin"),
gr.components.Slider(0, 100, default=3, label="l2_leaf_reg"),
gr.components.Slider(0.1, 0.9, default=0.2, label="test_size"),
gr.components.Slider(0, 100, default=42, label="random_seed")
],
outputs="number",
title="CatBoostRegressor",
description="Treino de um modelo de regressão com CatBoostRegressor",
allow_flagging="manual"
)
def RandomForestRegressorR2(x_file_obj,y_file_obj,n_estimators,
criterion, max_depth,min_samples_split,
min_samples_leaf,min_weight_fraction_leaf,max_features,max_leaf_nodes,min_impurity_decrease,bootstrap,n_jobs,test_size,random_seed):
max_depth = int(max_depth)
X = pd.read_csv(x_file_obj.name,dtype=str)
y = pd.read_csv(y_file_obj.name,dtype=str)
y = y.values.ravel()
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=test_size, random_state=random_seed)
model = RandomForestRegressor(n_estimators=n_estimators, criterion=criterion, max_depth=max_depth,
min_samples_split=min_samples_split,min_samples_leaf=min_samples_leaf,
min_weight_fraction_leaf=min_weight_fraction_leaf,max_features=max_features,max_leaf_nodes=max_leaf_nodes,
min_impurity_decrease=min_impurity_decrease,bootstrap=bootstrap,n_jobs=n_jobs,random_state=random_seed)
model.fit(x_train, y_train)
predictions = model.predict(x_test)
return r2_score(y_test, predictions)
randomForestInterface = gr.Interface(
RandomForestRegressorR2,
[
gr.components.File(label="X File (CSV)"),
gr.components.File(label="Y File (CSV)"),
gr.components.Slider(0, 1000, default=10, label="n_estimators"),
gr.components.Dropdown(["mse", "mae","poisson"], label="criterion",default="mse"),
gr.components.Slider(0, 100, default=1, label="max_depth"),
gr.components.Slider(0, 100, default=1, label="min_samples_split"),
gr.components.Slider(0, 100, default=1, label="min_samples_leaf"),
gr.components.Slider(0, 0.5, default=0, label="min_weight_fraction_leaf"),
gr.components.Dropdown(["auto", "sqrt", "log2"], label="max_features",default="auto"),
gr.components.Slider(0, 100, default=1, label="max_leaf_nodes"),
gr.components.Slider(0, 1, default=0, label="min_impurity_decrease"),
gr.components.Dropdown(["True", "False"], label="bootstrap",default="True"),
gr.components.Dropdown([i for i in range(-1,5,1)], default=-1, label="n_jobs"),
gr.components.Slider(0.1, 0.9, default=0.2, label="test_size"),
gr.components.Slider(0, 100, default=42, label="random_seed")
],
outputs="number",
title="RandomForestRegressor",
description="Treino de um modelo de regressão com RandomForestRegressor",
allow_flagging="manual"
)
# TODO - Add more parameters EXTRA TREE
def ExtraTreesRegressorR2(x_file_obj,y_file_obj,n_estimators,
criterion, max_depth,min_samples_split,
min_samples_leaf,min_weight_fraction_leaf,max_features,max_leaf_nodes,min_impurity_decrease,bootstrap,n_jobs,test_size,random_seed):
max_depth = int(max_depth)
X = pd.read_csv(x_file_obj.name,dtype=str)
y = pd.read_csv(y_file_obj.name,dtype=str)
y = y.values.ravel()
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=test_size, random_state=random_seed)
model = ExtraTreesRegressor(n_estimators=n_estimators, criterion=criterion, max_depth=max_depth,
min_samples_split=min_samples_split,min_samples_leaf=min_samples_leaf,
min_weight_fraction_leaf=min_weight_fraction_leaf,max_features=max_features,max_leaf_nodes=max_leaf_nodes,
min_impurity_decrease=min_impurity_decrease,bootstrap=bootstrap,n_jobs=n_jobs,random_state=random_seed)
model.fit(x_train, y_train)
predictions = model.predict(x_test)
return r2_score(y_test, predictions)
extraTreesInterface = gr.Interface(
ExtraTreesRegressorR2,
[
gr.components.File(label="X File (CSV)"),
gr.components.File(label="Y File (CSV)"),
gr.components.Slider(0, 1000, default=10, label="n_estimators"),
gr.components.Dropdown(["mse", "mae","poisson"], label="criterion",default="mse"),
gr.components.Slider(0, 100, default=1, label="max_depth"),
gr.components.Slider(0, 100, default=1, label="min_samples_split"),
gr.components.Slider(0, 100, default=1, label="min_samples_leaf"),
gr.components.Slider(0, 0.5, default=0, label="min_weight_fraction_leaf"),
gr.components.Dropdown(["auto", "sqrt", "log2"], label="max_features",default="auto"),
gr.components.Slider(0, 100, default=1, label="max_leaf_nodes"),
gr.components.Slider(0, 1, default=0, label="min_impurity_decrease"),
gr.components.Dropdown(["True", "False"], label="bootstrap",default="True"),
gr.components.Dropdown([i for i in range(-1,5,1)], default=-1, label="n_jobs"),
gr.components.Slider(0.1, 0.9, default=0.2, label="test_size"),
gr.components.Slider(0, 100, default=42, label="random_seed")
],
outputs="number",
title="ExtraTreesRegressor",
description="Treino de um modelo de regressão com ExtraTreesRegressor",
allow_flagging="manual"
)
def linearRegressionR2(x_file_obj,y_file_obj,fit_intercept, normalize, copy_X):
X = pd.read_csv(x_file_obj.name,dtype=str)
y = pd.read_csv(y_file_obj.name,dtype=str)
y = y.values.ravel()
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
model = LinearRegression(fit_intercept=fit_intercept, normalize=normalize, copy_X=copy_X)
model.fit(x_train, y_train)
predictions = model.predict(x_test)
return r2_score(y_test, predictions)
linearRegressionInterface = gr.Interface(
linearRegressionR2,
[
gr.components.File(label="X File (CSV)"),
gr.components.File(label="Y File (CSV)"),
gr.components.Checkbox(True, label="fit_intercept"),
gr.components.Checkbox(False, label="normalize"),
gr.components.Checkbox(True, label="copy_X"),
],
outputs="number",
title="LinearRegression",
description="Treino de um modelo de regressão com LinearRegression",
allow_flagging="manual")
iface = gr.TabbedInterface([catInterface, adaInterface, randomForestInterface, extraTreesInterface, linearRegressionInterface],
["CatBoostRegressor", "AdaBoostRegresssor","RandomForestRegressor", "ExtraTreesRegressor","LinearRegression"],theme="dark")
iface.launch(share=False, show_error=True)