Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lib/wekafiles/packages/new_package_check.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1598950809434
1599209053791
Binary file not shown.
272 changes: 136 additions & 136 deletions test/test_selenium.py

Large diffs are not rendered by default.

146 changes: 94 additions & 52 deletions ubumlaas/experiments/algorithm/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@
from time import time
import json
import os
from ubumlaas.util import string_is_array

from copy import deepcopy

import weka.core.jvm as jvm
from ubumlaas.util import get_dataframe_from_file
Expand Down Expand Up @@ -49,55 +52,88 @@ def task_skeleton(experiment, current_user):
# Diference sklearn executor and weka executor
# Get algorithm type
data = experiment["data"]
data = string_is_array(data)
if not isinstance(data,list):
data = [data]
v.app.logger.debug("%d - %d - Data list know is a list - %s", current_user['id'], experiment['id'], data)
# From here data will be a list
if exp_manager.is_multi:
rep = exp[0]["exp_config"]["repetition"]
else:
rep = exp["exp_config"]["repetition"]
res_global = []
state_global=[]
for i in range(rep):
if exp_manager.is_multi:
res=[]
state=[]
#Seed for no seed experiments, multi experiments should execute with the same data
rand = random.randint(1,1000000000)
for i in range(len(exp)):
r,s = execute_model(exp[i]["alg"]["lib"],data,exp[i],current_user,rand)
if s == 1:
res.append(json.loads(r))
v.app.logger.debug("%d - %d - Repetitions: %d", current_user['id'], experiment['id'], rep)
res_global_data = []
state_global_data=[]
for j in range(len(data)):
res_global = []
state_global=[]
for _i in range(rep):
if exp_manager.is_multi:
res=[]
state=[]
#Seed for no seed experiments, multi experiments should execute with the same data
rand = random.randint(1,1000000000)
for i in range(len(exp)):
aux_exp = deepcopy(exp[i])
if len(data)>1:
aux_exp["exp_config"]["target"]=aux_exp["exp_config"]["target"][j]
aux_exp["exp_config"]["columns"]=aux_exp["exp_config"]["columns"][j]
r,s = execute_model(exp[i]["alg"]["lib"],data[j],aux_exp,current_user,rand)
if s == 1:
res.append(json.loads(r))
else:
res.append(r)
state.append(s)
if 2 in state:
state = 2
else:
res.append(r)
state.append(s)
if 2 in state:
state = 2
state = 1
res_global.append(res)
else:
state = 1
res_global.append(res)
aux_exp = deepcopy(exp)
if len(data)>1:
aux_exp["exp_config"]["target"]=aux_exp["exp_config"]["target"][j]
aux_exp["exp_config"]["columns"]=aux_exp["exp_config"]["columns"][j]
res,state=execute_model(exp["alg"]["lib"],data[j],aux_exp,current_user)
if state == 1:
res_global.append(json.loads(res))
else:
res_global.append(res)

state_global.append(state)
if 2 in state_global:
state_global = 2
else:
res,state=execute_model(exp["alg"]["lib"],data,exp,current_user)
res_global.append(json.loads(res))

state_global.append(state)
if rep == 1:
res_global = res_global[0]
state_global = 1
if rep == 1:
res_global = res_global[0]

res_global_data.append(res_global)
state_global_data.append(state_global)

#Calculate result means
res = res_global
if rep>1 and 2 not in state_global:
state=1
if exp_manager.is_multi:
res_mean = []
for i in range(len(res[0])):
res_aux = []
for j in range(len(res)):
res_aux.append(res[j][i])
r_mean = calc_res_mean(res_aux, rep)
res_mean.append(r_mean)
res = res_global_data
res_data=[]
for k in range(len(data)):
if rep>1 and 2 not in state_global_data:
state=1
if exp_manager.is_multi:
res_mean = []
for i in range(len(res[k][0])):
res_aux = []
for j in range(len(res[k])):
res_aux.append(res[k][j][i])
r_mean = calc_res_mean(res_aux, rep)
res_mean.append(r_mean)
else:
res_mean=calc_res_mean(res[k], rep)
else:
res_mean=calc_res_mean(res, rep)

res=res_mean
elif 2 not in state_global:
res_mean=res[k]
res_data.append(res_mean)
res=res_data
if len(data)==1:
res = res[0]
elif 2 not in state_global_data:
state = 1
else:
state = 2
Expand All @@ -121,18 +157,21 @@ def calc_res_mean(res, rep):
Returns:
dict: Results mean
"""
print(res)
res_mean={}
for i in res[0].keys():
aux=[]
for j in range(rep):
aux.append(res[j][i])
if isinstance(res[0][i],list):
res_mean[i]= np.array(aux).mean(0).tolist()
else:
res_mean[i]=np.array(aux).mean().tolist()
if i != "ROC": # ROC array incorrect over mean, represent points in space, not value. Use AUC to know the mean.
aux=[]
for j in range(rep):
aux.append(res[j][i][0])
if isinstance(res[0][i],list):
res_mean[i]= np.array(aux).mean(0).tolist()
else:
res_mean[i] = np.array(aux).mean().tolist()
res_mean[i] = [res_mean[i]]
return res_mean

def execute_model(alg_lib,data, exp, current_user,seed_multi=None):
def execute_model(alg_lib, data, exp, current_user,seed_multi=None):
type_app = alg_lib
execution_lib = None
try:
Expand Down Expand Up @@ -161,7 +200,13 @@ def execute_model(alg_lib,data, exp, current_user,seed_multi=None):
y_score_list = []
y_test_list = []
X_test_list = []
if exp_config.get("mode") == "split" and exp_config["train_partition"] < 100:

if execution_lib.algorithm_type == "Clustering":
y_pred, y_score = execution_lib.predict(model, X)
y_pred_list.append(y_pred)
y_score_list.append(y_score)

elif exp_config.get("mode") == "split" and exp_config["train_partition"] < 100:
X_train, X_test, y_train, y_test = execution_lib\
.generate_train_test_split(X, y, exp_config["train_partition"],random_state=seed_multi)
model = execution_lib.create_model()
Expand All @@ -185,10 +230,7 @@ def execute_model(alg_lib,data, exp, current_user,seed_multi=None):
y_test_list.append(y_test)
X_test_list.append(X_test)

elif execution_lib.algorithm_type == "Clustering":
y_pred, y_score = execution_lib.predict(model, X)
y_pred_list.append(y_pred)
y_score_list.append(y_score)


score = {}
if exp_config["mode"] == "cross" or exp_config["train_partition"] < 100 or execution_lib.algorithm_type == "Clustering":
Expand Down
4 changes: 3 additions & 1 deletion ubumlaas/experiments/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,13 @@ class ExperimentForm(FlaskForm):
filter_name = SelectField("Select Filter",
choices=[("", "---")])

def __init__(self, id=None):
def __init__(self, id=None, iddata=None):
super(ExperimentForm, self).__init__()
if id is not None:
self.alg_name.id="alg_name_"+str(id)
self.filter_name.id="filter_name_"+str(id)
if iddata is not None:
self.data.id="data_"+str(iddata)

def alg_list(self, alg_typ):
"""Generate a list of supported algorithms by type.
Expand Down
12 changes: 11 additions & 1 deletion ubumlaas/experiments/views/dataset.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from flask import \
(render_template)
(render_template, request)
from ubumlaas.experiments.forms import \
(ExperimentForm, DatasetForm)
from flask_login import (current_user, login_required)
Expand All @@ -24,6 +24,16 @@ def update_dataset_list():
form_e.dataset_list() #log inside dataset_list
return render_template("blocks/select_dataset.html", form_e=form_e)

@login_required
@views.experiments.route("/new_dataset_maker", methods=["POST"])
def new_dataset_maker():

iddex = request.form.get("idex", 0)
form_e = ExperimentForm(0, iddex)
form_e.dataset_list()
form_d = DatasetForm()
return render_template("blocks/dataset_maker.html", form_e=form_e, iddex=iddex, form_d=form_d);


@login_required
@views.experiments.route("/new_experiment/new_dataset", methods=["POST"])
Expand Down
16 changes: 10 additions & 6 deletions ubumlaas/experiments/views/experiment.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ def new_experiment():
str -- HTTP response with rendered page.
"""

form_e = ExperimentForm(0)
form_e = ExperimentForm(0, 0)
form_e.dataset_list()

form_d = DatasetForm()
Expand All @@ -45,7 +45,7 @@ def new_experiment():

return render_template("experiment_form.html", form_e=form_e,
form_d=form_d, form_p=form_p,
title="New experiment", experiment=experiment, idex=0)
title="New experiment", experiment=experiment, idex=0, iddex=0)


@login_required
Expand Down Expand Up @@ -74,12 +74,15 @@ def launch_experiment():
if filter_name is not None:
filter_name = "["+filter_name+"]"
filter_config = "["+filter_config+"]"
data = request.form.get("data")
if "," in data:
data = "["+data+"]"

exp = Experiment(user.id, alg_name,
unquote(alg_config),
json.dumps(exp_config),
filter_name, filter_config,
request.form.get("data"),
data,
None, time.time(), None, 0)
v.app.logger.info("%d - Create experiment", current_user.id)
v.db.session.add(exp)
Expand Down Expand Up @@ -144,13 +147,14 @@ def change_column_list():
Returns:
str -- HTTP response with JSON
"""
form_e = ExperimentForm()
iddex = request.form.get("iddex",0)
form_e = ExperimentForm(iddex)
filename = form_e.data.data
upload_folder = "ubumlaas/datasets/"+current_user.username+"/"
df, target_columns = get_dataframe_from_file(upload_folder, filename, target_column=True)
to_return = {"html": render_template("blocks/show_columns.html", data=df),
to_return = {"html": render_template("blocks/show_columns.html", data=df, iddex=iddex),
"html2": render_template("blocks/show_columns_reduced.html",
data=df.columns),
data=df.columns, iddex=iddex),
"df": generate_df_html(df),
"config": target_columns}
v.app.logger.info("%d - Get dataset information - %s%s%s", current_user.id, upload_folder,"/",filename)
Expand Down
12 changes: 11 additions & 1 deletion ubumlaas/static/css/bootstrap-append.css
Original file line number Diff line number Diff line change
Expand Up @@ -208,4 +208,14 @@ footer .main-footer {
-ms-transition: all 250ms ease-in-out 0s;
-o-transition: all 250ms ease-in-out 0s;
transition: all 250ms ease-in-out 0s;
}
}

.custom-select[multiple],
.custom-select[size]:not([size="1"])
{
height: auto;
-webkit-appearance: menulist-textfield;
background-image: none;
/* Fix for excess right padding */
padding-right: 0.75rem;
}
11 changes: 5 additions & 6 deletions ubumlaas/static/css/custom.css
Original file line number Diff line number Diff line change
Expand Up @@ -106,17 +106,17 @@ option.list-group-item{
padding: 0.25rem 1rem !important;
}

#sel[multiple] option.list-group-item-success:checked{
.sel[multiple] option.list-group-item-success:checked{
background-color: var(--success) !important;
color: #ffffff !important;
}

#sel[multiple] option.list-group-item-primary:checked{
.sel[multiple] option.list-group-item-primary:checked{
background-color: var(--primary) !important;
color: #ffffff !important;
}

#sel[multiple] option.list-group-item-secondary:checked{
.sel[multiple] option.list-group-item-secondary:checked{
background-color: var(--secondary) !important;
color: #ffffff !important;
}
Expand All @@ -125,14 +125,13 @@ tr.align-middle td{
vertical-align: middle !important;
}

#makers{
#makers, #data-makers{
position: relative !important;
display: flex;
align-items: stretch;

}

.maker{
.maker, .data-maker{
position: static;
height: 100%;
width: 100%;
Expand Down
Loading