mirror of
https://github.com/Doctorado-ML/benchmark.git
synced 2025-08-17 16:35:54 +00:00
Compare commits
36 Commits
language_v
...
refactor_a
Author | SHA1 | Date | |
---|---|---|---|
fea46834c8
|
|||
a94a33e028
|
|||
b05a62b2e8
|
|||
2baaf753ef
|
|||
b01ee40df2
|
|||
ed308773ee
|
|||
0782736338
|
|||
71a11110bd
|
|||
3a2ec38671
|
|||
f60d9365dd
|
|||
5d7ed6f1ed
|
|||
8aa76c27c3
|
|||
93f0db36fa
|
|||
4e0be95a00
|
|||
e76366561c
|
|||
7e9bd7ae4a
|
|||
3ade3f4022
|
|||
1b8a424ad3
|
|||
146304f4b5
|
|||
07172b91c5
|
|||
|
68d9cb776e | ||
c8124be119
|
|||
58c52849d8
|
|||
d68fb47688
|
|||
38667d61f7
|
|||
dfd4f8179b
|
|||
8a9342c97b
|
|||
974227166c
|
|||
feea9c542a
|
|||
a53e957c00
|
|||
a2db4f1f6d
|
|||
5a3ae6f440
|
|||
|
8d06a2c5f6 | ||
c62b06f263
|
|||
|
b9eaa534bc | ||
|
c77feff54b |
8
.github/workflows/main.yml
vendored
8
.github/workflows/main.yml
vendored
@@ -12,11 +12,8 @@ jobs:
|
|||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os: [macos-latest, ubuntu-latest]
|
os: [ubuntu-latest]
|
||||||
python: ["3.10", "3.11"]
|
python: ["3.10"]
|
||||||
exclude:
|
|
||||||
- os: macos-latest
|
|
||||||
python: "3.11"
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
@@ -46,6 +43,7 @@ jobs:
|
|||||||
pip install -q --upgrade pip
|
pip install -q --upgrade pip
|
||||||
pip install -q -r requirements.txt
|
pip install -q -r requirements.txt
|
||||||
pip install -q --upgrade codecov coverage black flake8
|
pip install -q --upgrade codecov coverage black flake8
|
||||||
|
git clone https://github.com/Doctorado-ML/bayesclass.git
|
||||||
- name: Lint
|
- name: Lint
|
||||||
run: |
|
run: |
|
||||||
black --check --diff benchmark
|
black --check --diff benchmark
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
[](https://github.com/Doctorado-ML/benchmark/actions/workflows/main.yml)
|
[](https://github.com/Doctorado-ML/benchmark/actions/workflows/main.yml)
|
||||||
[](https://codecov.io/gh/Doctorado-ML/benchmark)
|
[](https://codecov.io/gh/Doctorado-ML/benchmark)
|
||||||
[](http://haystack.local:25000/dashboard?id=benchmark)
|
[](https://haystack.rmontanana.es:25000/dashboard?id=benchmark)
|
||||||
[](http://haystack.local:25000/dashboard?id=benchmark)
|
[](https://haystack.rmontanana.es:25000/dashboard?id=benchmark)
|
||||||

|

|
||||||
|
|
||||||
# benchmark
|
# benchmark
|
||||||
|
@@ -36,6 +36,7 @@ class EnvDefault(argparse.Action):
|
|||||||
self, envvar, required=True, default=None, mandatory=False, **kwargs
|
self, envvar, required=True, default=None, mandatory=False, **kwargs
|
||||||
):
|
):
|
||||||
self._args = EnvData.load()
|
self._args = EnvData.load()
|
||||||
|
self._overrides = {}
|
||||||
if required and not mandatory:
|
if required and not mandatory:
|
||||||
default = self._args[envvar]
|
default = self._args[envvar]
|
||||||
required = False
|
required = False
|
||||||
@@ -47,24 +48,27 @@ class EnvDefault(argparse.Action):
|
|||||||
setattr(namespace, self.dest, values)
|
setattr(namespace, self.dest, values)
|
||||||
|
|
||||||
|
|
||||||
class Arguments:
|
class Arguments(argparse.ArgumentParser):
|
||||||
def __init__(self):
|
def __init__(self, *args, **kwargs):
|
||||||
self.ap = argparse.ArgumentParser()
|
super().__init__(*args, **kwargs)
|
||||||
models_data = Models.define_models(random_state=0)
|
models_data = Models.define_models(random_state=0)
|
||||||
|
self._overrides = {}
|
||||||
|
self._subparser = None
|
||||||
self.parameters = {
|
self.parameters = {
|
||||||
"best": [
|
"best_paramfile": [
|
||||||
("-b", "--best"),
|
("-b", "--best_paramfile"),
|
||||||
{
|
{
|
||||||
"type": str,
|
"action": "store_true",
|
||||||
"required": False,
|
"required": False,
|
||||||
"help": "best results of models",
|
"default": False,
|
||||||
|
"help": "Use best hyperparams file?",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
"color": [
|
"color": [
|
||||||
("-c", "--color"),
|
("-c", "--color"),
|
||||||
{
|
{
|
||||||
"type": bool,
|
|
||||||
"required": False,
|
"required": False,
|
||||||
|
"action": "store_true",
|
||||||
"default": False,
|
"default": False,
|
||||||
"help": "use colors for the tree",
|
"help": "use colors for the tree",
|
||||||
},
|
},
|
||||||
@@ -72,8 +76,9 @@ class Arguments:
|
|||||||
"compare": [
|
"compare": [
|
||||||
("-c", "--compare"),
|
("-c", "--compare"),
|
||||||
{
|
{
|
||||||
"type": bool,
|
"action": "store_true",
|
||||||
"required": False,
|
"required": False,
|
||||||
|
"default": False,
|
||||||
"help": "Compare accuracy with best results",
|
"help": "Compare accuracy with best results",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
@@ -81,6 +86,8 @@ class Arguments:
|
|||||||
("-d", "--dataset"),
|
("-d", "--dataset"),
|
||||||
{
|
{
|
||||||
"type": str,
|
"type": str,
|
||||||
|
"envvar": "dataset", # for compatiblity with EnvDefault
|
||||||
|
"action": EnvDefault,
|
||||||
"required": False,
|
"required": False,
|
||||||
"help": "dataset to work with",
|
"help": "dataset to work with",
|
||||||
},
|
},
|
||||||
@@ -88,38 +95,26 @@ class Arguments:
|
|||||||
"excel": [
|
"excel": [
|
||||||
("-x", "--excel"),
|
("-x", "--excel"),
|
||||||
{
|
{
|
||||||
"type": bool,
|
|
||||||
"required": False,
|
"required": False,
|
||||||
|
"action": "store_true",
|
||||||
"default": False,
|
"default": False,
|
||||||
"help": "Generate Excel File",
|
"help": "Generate Excel File",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
"file": [
|
|
||||||
("-f", "--file"),
|
|
||||||
{"type": str, "required": False, "help": "Result file"},
|
|
||||||
],
|
|
||||||
"grid": [
|
|
||||||
("-g", "--grid"),
|
|
||||||
{
|
|
||||||
"type": str,
|
|
||||||
"required": False,
|
|
||||||
"help": "grid results of model",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
"grid_paramfile": [
|
"grid_paramfile": [
|
||||||
("-g", "--grid_paramfile"),
|
("-g", "--grid_paramfile"),
|
||||||
{
|
{
|
||||||
"type": bool,
|
|
||||||
"required": False,
|
"required": False,
|
||||||
|
"action": "store_true",
|
||||||
"default": False,
|
"default": False,
|
||||||
"help": "Use best hyperparams file?",
|
"help": "Use grid output hyperparams file?",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
"hidden": [
|
"hidden": [
|
||||||
("--hidden",),
|
("--hidden",),
|
||||||
{
|
{
|
||||||
"type": str,
|
|
||||||
"required": False,
|
"required": False,
|
||||||
|
"action": "store_true",
|
||||||
"default": False,
|
"default": False,
|
||||||
"help": "Show hidden results",
|
"help": "Show hidden results",
|
||||||
},
|
},
|
||||||
@@ -140,8 +135,8 @@ class Arguments:
|
|||||||
"lose": [
|
"lose": [
|
||||||
("-l", "--lose"),
|
("-l", "--lose"),
|
||||||
{
|
{
|
||||||
"type": bool,
|
|
||||||
"default": False,
|
"default": False,
|
||||||
|
"action": "store_true",
|
||||||
"required": False,
|
"required": False,
|
||||||
"help": "show lose results",
|
"help": "show lose results",
|
||||||
},
|
},
|
||||||
@@ -178,9 +173,10 @@ class Arguments:
|
|||||||
"nan": [
|
"nan": [
|
||||||
("--nan",),
|
("--nan",),
|
||||||
{
|
{
|
||||||
"type": bool,
|
"action": "store_true",
|
||||||
"required": False,
|
"required": False,
|
||||||
"help": "Move nan results to hidden folder",
|
"default": False,
|
||||||
|
"help": "List nan results to hidden folder",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
"number": [
|
"number": [
|
||||||
@@ -202,15 +198,6 @@ class Arguments:
|
|||||||
"help": "number of folds",
|
"help": "number of folds",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
"paramfile": [
|
|
||||||
("-f", "--paramfile"),
|
|
||||||
{
|
|
||||||
"type": bool,
|
|
||||||
"required": False,
|
|
||||||
"default": False,
|
|
||||||
"help": "Use best hyperparams file?",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
"platform": [
|
"platform": [
|
||||||
("-P", "--platform"),
|
("-P", "--platform"),
|
||||||
{
|
{
|
||||||
@@ -224,7 +211,7 @@ class Arguments:
|
|||||||
"quiet": [
|
"quiet": [
|
||||||
("-q", "--quiet"),
|
("-q", "--quiet"),
|
||||||
{
|
{
|
||||||
"type": bool,
|
"action": "store_true",
|
||||||
"required": False,
|
"required": False,
|
||||||
"default": False,
|
"default": False,
|
||||||
},
|
},
|
||||||
@@ -232,7 +219,7 @@ class Arguments:
|
|||||||
"report": [
|
"report": [
|
||||||
("-r", "--report"),
|
("-r", "--report"),
|
||||||
{
|
{
|
||||||
"type": bool,
|
"action": "store_true",
|
||||||
"default": False,
|
"default": False,
|
||||||
"required": False,
|
"required": False,
|
||||||
"help": "Report results",
|
"help": "Report results",
|
||||||
@@ -250,14 +237,18 @@ class Arguments:
|
|||||||
],
|
],
|
||||||
"sql": [
|
"sql": [
|
||||||
("-q", "--sql"),
|
("-q", "--sql"),
|
||||||
{"type": bool, "required": False, "help": "Generate SQL File"},
|
{
|
||||||
|
"required": False,
|
||||||
|
"action": "store_true",
|
||||||
|
"default": False,
|
||||||
|
"help": "Generate SQL File",
|
||||||
|
},
|
||||||
],
|
],
|
||||||
"stratified": [
|
"stratified": [
|
||||||
("-t", "--stratified"),
|
("-t", "--stratified"),
|
||||||
{
|
{
|
||||||
"action": EnvDefault,
|
"action": EnvDefault,
|
||||||
"envvar": "stratified",
|
"envvar": "stratified",
|
||||||
"type": str,
|
|
||||||
"required": True,
|
"required": True,
|
||||||
"help": "Stratified",
|
"help": "Stratified",
|
||||||
},
|
},
|
||||||
@@ -265,8 +256,8 @@ class Arguments:
|
|||||||
"tex_output": [
|
"tex_output": [
|
||||||
("-t", "--tex-output"),
|
("-t", "--tex-output"),
|
||||||
{
|
{
|
||||||
"type": bool,
|
|
||||||
"required": False,
|
"required": False,
|
||||||
|
"action": "store_true",
|
||||||
"default": False,
|
"default": False,
|
||||||
"help": "Generate Tex file with the table",
|
"help": "Generate Tex file with the table",
|
||||||
},
|
},
|
||||||
@@ -278,8 +269,8 @@ class Arguments:
|
|||||||
"win": [
|
"win": [
|
||||||
("-w", "--win"),
|
("-w", "--win"),
|
||||||
{
|
{
|
||||||
"type": bool,
|
|
||||||
"default": False,
|
"default": False,
|
||||||
|
"action": "store_true",
|
||||||
"required": False,
|
"required": False,
|
||||||
"help": "show win results",
|
"help": "show win results",
|
||||||
},
|
},
|
||||||
@@ -287,12 +278,43 @@ class Arguments:
|
|||||||
}
|
}
|
||||||
|
|
||||||
def xset(self, *arg_name, **kwargs):
|
def xset(self, *arg_name, **kwargs):
|
||||||
names, default = self.parameters[arg_name[0]]
|
names, parameters = self.parameters[arg_name[0]]
|
||||||
self.ap.add_argument(
|
if "overrides" in kwargs:
|
||||||
|
self._overrides[names[0]] = (kwargs["overrides"], kwargs["const"])
|
||||||
|
del kwargs["overrides"]
|
||||||
|
self.add_argument(
|
||||||
*names,
|
*names,
|
||||||
**{**default, **kwargs},
|
**{**parameters, **kwargs},
|
||||||
)
|
)
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
def add_subparser(
|
||||||
|
self, dest="subcommand", help_text="help for subcommand"
|
||||||
|
):
|
||||||
|
self._subparser = self.add_subparsers(dest=dest, help=help_text)
|
||||||
|
|
||||||
|
def add_subparsers_options(self, subparser, arguments):
|
||||||
|
command, help_text = subparser
|
||||||
|
parser = self._subparser.add_parser(command, help=help_text)
|
||||||
|
for name, args in arguments:
|
||||||
|
try:
|
||||||
|
names, parameters = self.parameters[name]
|
||||||
|
except KeyError:
|
||||||
|
names = (name,)
|
||||||
|
parameters = {}
|
||||||
|
# Order of args is important
|
||||||
|
parser.add_argument(*names, **{**args, **parameters})
|
||||||
|
|
||||||
|
def add_exclusive(self, hyperparameters, required=False):
|
||||||
|
group = self.add_mutually_exclusive_group(required=required)
|
||||||
|
for name in hyperparameters:
|
||||||
|
names, parameters = self.parameters[name]
|
||||||
|
group.add_argument(*names, **parameters)
|
||||||
|
|
||||||
def parse(self, args=None):
|
def parse(self, args=None):
|
||||||
return self.ap.parse_args(args)
|
for key, (dest_key, value) in self._overrides.items():
|
||||||
|
if args is None:
|
||||||
|
args = sys.argv[1:]
|
||||||
|
if key in args:
|
||||||
|
args.extend((f"--{dest_key}", value))
|
||||||
|
return super().parse_args(args)
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
import os
|
import os
|
||||||
|
from types import SimpleNamespace
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from scipy.io import arff
|
from scipy.io import arff
|
||||||
@@ -26,18 +27,18 @@ class DatasetsArff:
|
|||||||
def folder():
|
def folder():
|
||||||
return "datasets"
|
return "datasets"
|
||||||
|
|
||||||
def load(self, name, class_name, dataframe):
|
def load(self, name, class_name):
|
||||||
file_name = os.path.join(self.folder(), self.dataset_names(name))
|
file_name = os.path.join(self.folder(), self.dataset_names(name))
|
||||||
data = arff.loadarff(file_name)
|
data = arff.loadarff(file_name)
|
||||||
df = pd.DataFrame(data[0])
|
df = pd.DataFrame(data[0])
|
||||||
df.dropna(axis=0, how="any", inplace=True)
|
df.dropna(axis=0, how="any", inplace=True)
|
||||||
|
self.dataset = df
|
||||||
X = df.drop(class_name, axis=1)
|
X = df.drop(class_name, axis=1)
|
||||||
self.features = X.columns
|
self.features = X.columns
|
||||||
self.class_name = class_name
|
self.class_name = class_name
|
||||||
y, _ = pd.factorize(df[class_name])
|
y, _ = pd.factorize(df[class_name])
|
||||||
df[class_name] = y
|
|
||||||
X = X.to_numpy()
|
X = X.to_numpy()
|
||||||
return df if dataframe else (X, y)
|
return X, y
|
||||||
|
|
||||||
|
|
||||||
class DatasetsTanveer:
|
class DatasetsTanveer:
|
||||||
@@ -56,8 +57,12 @@ class DatasetsTanveer:
|
|||||||
sep="\t",
|
sep="\t",
|
||||||
index_col=0,
|
index_col=0,
|
||||||
)
|
)
|
||||||
X = data.drop("clase", axis=1).to_numpy()
|
X = data.drop("clase", axis=1)
|
||||||
|
self.features = X.columns
|
||||||
|
X = X.to_numpy()
|
||||||
y = data["clase"].to_numpy()
|
y = data["clase"].to_numpy()
|
||||||
|
self.dataset = data
|
||||||
|
self.class_name = "clase"
|
||||||
return X, y
|
return X, y
|
||||||
|
|
||||||
|
|
||||||
@@ -78,8 +83,11 @@ class DatasetsSurcov:
|
|||||||
)
|
)
|
||||||
data.dropna(axis=0, how="any", inplace=True)
|
data.dropna(axis=0, how="any", inplace=True)
|
||||||
self.columns = data.columns
|
self.columns = data.columns
|
||||||
col_list = ["class"]
|
X = data.drop(["class"], axis=1)
|
||||||
X = data.drop(col_list, axis=1).to_numpy()
|
self.features = X.columns
|
||||||
|
self.class_name = "class"
|
||||||
|
self.dataset = data
|
||||||
|
X = X.to_numpy()
|
||||||
y = data["class"].to_numpy()
|
y = data["class"].to_numpy()
|
||||||
return X, y
|
return X, y
|
||||||
|
|
||||||
@@ -87,50 +95,48 @@ class DatasetsSurcov:
|
|||||||
class Datasets:
|
class Datasets:
|
||||||
def __init__(self, dataset_name=None):
|
def __init__(self, dataset_name=None):
|
||||||
envData = EnvData.load()
|
envData = EnvData.load()
|
||||||
class_name = getattr(
|
# DatasetsSurcov, DatasetsTanveer, DatasetsArff,...
|
||||||
|
source_name = getattr(
|
||||||
__import__(__name__),
|
__import__(__name__),
|
||||||
f"Datasets{envData['source_data']}",
|
f"Datasets{envData['source_data']}",
|
||||||
)
|
)
|
||||||
self.load = (
|
self.discretize = envData["discretize"] == "1"
|
||||||
self.load_discretized
|
self.dataset = source_name()
|
||||||
if envData["discretize"] == "1"
|
|
||||||
else self.load_continuous
|
|
||||||
)
|
|
||||||
self.dataset = class_name()
|
|
||||||
self.class_names = []
|
self.class_names = []
|
||||||
self._load_names()
|
self.data_sets = []
|
||||||
if dataset_name is not None:
|
# initialize self.class_names & self.data_sets
|
||||||
try:
|
class_names, sets = self._init_names(dataset_name)
|
||||||
class_name = self.class_names[
|
self.class_names = class_names
|
||||||
self.data_sets.index(dataset_name)
|
self.data_sets = sets
|
||||||
]
|
|
||||||
self.class_names = [class_name]
|
|
||||||
except ValueError:
|
|
||||||
raise ValueError(f"Unknown dataset: {dataset_name}")
|
|
||||||
self.data_sets = [dataset_name]
|
|
||||||
|
|
||||||
def _load_names(self):
|
def _init_names(self, dataset_name):
|
||||||
file_name = os.path.join(self.dataset.folder(), Files.index)
|
file_name = os.path.join(self.dataset.folder(), Files.index)
|
||||||
default_class = "class"
|
default_class = "class"
|
||||||
with open(file_name) as f:
|
with open(file_name) as f:
|
||||||
self.data_sets = f.read().splitlines()
|
sets = f.read().splitlines()
|
||||||
self.class_names = [default_class] * len(self.data_sets)
|
class_names = [default_class] * len(sets)
|
||||||
if "," in self.data_sets[0]:
|
if "," in sets[0]:
|
||||||
result = []
|
result = []
|
||||||
class_names = []
|
class_names = []
|
||||||
for data in self.data_sets:
|
for data in sets:
|
||||||
name, class_name = data.split(",")
|
name, class_name = data.split(",")
|
||||||
result.append(name)
|
result.append(name)
|
||||||
class_names.append(class_name)
|
class_names.append(class_name)
|
||||||
self.data_sets = result
|
sets = result
|
||||||
self.class_names = class_names
|
# Set as dataset list the dataset passed as argument
|
||||||
|
if dataset_name is None:
|
||||||
|
return class_names, sets
|
||||||
|
try:
|
||||||
|
class_name = class_names[sets.index(dataset_name)]
|
||||||
|
except ValueError:
|
||||||
|
raise ValueError(f"Unknown dataset: {dataset_name}")
|
||||||
|
return [class_name], [dataset_name]
|
||||||
|
|
||||||
def get_attributes(self, name):
|
def get_attributes(self, name):
|
||||||
class Attributes:
|
tmp = self.discretize
|
||||||
pass
|
self.discretize = False
|
||||||
|
X, y = self.load(name)
|
||||||
X, y = self.load_continuous(name)
|
attr = SimpleNamespace()
|
||||||
attr = Attributes()
|
|
||||||
values, counts = np.unique(y, return_counts=True)
|
values, counts = np.unique(y, return_counts=True)
|
||||||
comp = ""
|
comp = ""
|
||||||
sep = ""
|
sep = ""
|
||||||
@@ -141,6 +147,7 @@ class Datasets:
|
|||||||
attr.classes = len(np.unique(y))
|
attr.classes = len(np.unique(y))
|
||||||
attr.samples = X.shape[0]
|
attr.samples = X.shape[0]
|
||||||
attr.features = X.shape[1]
|
attr.features = X.shape[1]
|
||||||
|
self.discretize = tmp
|
||||||
return attr
|
return attr
|
||||||
|
|
||||||
def get_features(self):
|
def get_features(self):
|
||||||
@@ -149,14 +156,25 @@ class Datasets:
|
|||||||
def get_class_name(self):
|
def get_class_name(self):
|
||||||
return self.dataset.class_name
|
return self.dataset.class_name
|
||||||
|
|
||||||
def load_continuous(self, name, dataframe=False):
|
def get_dataset(self):
|
||||||
|
return self.dataset.dataset
|
||||||
|
|
||||||
|
def load(self, name, dataframe=False):
|
||||||
try:
|
try:
|
||||||
class_name = self.class_names[self.data_sets.index(name)]
|
class_name = self.class_names[self.data_sets.index(name)]
|
||||||
return self.dataset.load(name, class_name, dataframe)
|
X, y = self.dataset.load(name, class_name)
|
||||||
|
if self.discretize:
|
||||||
|
X = self.discretize_dataset(X, y)
|
||||||
|
dataset = pd.DataFrame(X, columns=self.get_features())
|
||||||
|
dataset[self.get_class_name()] = y
|
||||||
|
self.dataset.dataset = dataset
|
||||||
|
if dataframe:
|
||||||
|
return self.get_dataset()
|
||||||
|
return X, y
|
||||||
except (ValueError, FileNotFoundError):
|
except (ValueError, FileNotFoundError):
|
||||||
raise ValueError(f"Unknown dataset: {name}")
|
raise ValueError(f"Unknown dataset: {name}")
|
||||||
|
|
||||||
def discretize(self, X, y):
|
def discretize_dataset(self, X, y):
|
||||||
"""Supervised discretization with Fayyad and Irani's MDLP algorithm.
|
"""Supervised discretization with Fayyad and Irani's MDLP algorithm.
|
||||||
|
|
||||||
Parameters
|
Parameters
|
||||||
@@ -170,16 +188,9 @@ class Datasets:
|
|||||||
-------
|
-------
|
||||||
tuple (X, y) of numpy.ndarray
|
tuple (X, y) of numpy.ndarray
|
||||||
"""
|
"""
|
||||||
discretiz = MDLP()
|
discretiz = MDLP(random_state=17, dtype=np.int32)
|
||||||
Xdisc = discretiz.fit_transform(X, y)
|
Xdisc = discretiz.fit_transform(X, y)
|
||||||
return Xdisc.astype(int), y.astype(int)
|
return Xdisc
|
||||||
|
|
||||||
def load_discretized(self, name, dataframe=False):
|
|
||||||
X, y = self.load_continuous(name)
|
|
||||||
X, y = self.discretize(X, y)
|
|
||||||
dataset = pd.DataFrame(X, columns=self.get_features())
|
|
||||||
dataset[self.get_class_name()] = y
|
|
||||||
return dataset if dataframe else X, y
|
|
||||||
|
|
||||||
def __iter__(self) -> Diterator:
|
def __iter__(self) -> Diterator:
|
||||||
return Diterator(self.data_sets)
|
return Diterator(self.data_sets)
|
||||||
|
@@ -8,7 +8,7 @@ from sklearn.ensemble import (
|
|||||||
)
|
)
|
||||||
from sklearn.svm import SVC
|
from sklearn.svm import SVC
|
||||||
from stree import Stree
|
from stree import Stree
|
||||||
from bayesclass import TAN
|
from bayesclass.clfs import TAN, KDB, AODE
|
||||||
from wodt import Wodt
|
from wodt import Wodt
|
||||||
from odte import Odte
|
from odte import Odte
|
||||||
from xgboost import XGBClassifier
|
from xgboost import XGBClassifier
|
||||||
@@ -22,6 +22,8 @@ class Models:
|
|||||||
return {
|
return {
|
||||||
"STree": Stree(random_state=random_state),
|
"STree": Stree(random_state=random_state),
|
||||||
"TAN": TAN(random_state=random_state),
|
"TAN": TAN(random_state=random_state),
|
||||||
|
"KDB": KDB(k=3),
|
||||||
|
"AODE": AODE(random_state=random_state),
|
||||||
"Cart": DecisionTreeClassifier(random_state=random_state),
|
"Cart": DecisionTreeClassifier(random_state=random_state),
|
||||||
"ExtraTree": ExtraTreeClassifier(random_state=random_state),
|
"ExtraTree": ExtraTreeClassifier(random_state=random_state),
|
||||||
"Wodt": Wodt(random_state=random_state),
|
"Wodt": Wodt(random_state=random_state),
|
||||||
|
@@ -1,12 +1,14 @@
|
|||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
from operator import itemgetter
|
from operator import itemgetter
|
||||||
|
from types import SimpleNamespace
|
||||||
import math
|
import math
|
||||||
import json
|
import json
|
||||||
import abc
|
import abc
|
||||||
import shutil
|
import shutil
|
||||||
import subprocess
|
import subprocess
|
||||||
import xlsxwriter
|
import xlsxwriter
|
||||||
|
from xlsxwriter.exceptions import DuplicateWorksheetName
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from .Experiments import BestResults
|
from .Experiments import BestResults
|
||||||
from .Datasets import Datasets
|
from .Datasets import Datasets
|
||||||
@@ -21,6 +23,10 @@ from .Utils import (
|
|||||||
from ._version import __version__
|
from ._version import __version__
|
||||||
|
|
||||||
|
|
||||||
|
def get_input(message="", is_test=False):
|
||||||
|
return "test" if is_test else input(message)
|
||||||
|
|
||||||
|
|
||||||
class BestResultsEver:
|
class BestResultsEver:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.data = {}
|
self.data = {}
|
||||||
@@ -35,7 +41,7 @@ class BestResultsEver:
|
|||||||
]
|
]
|
||||||
self.data["Arff"]["accuracy"] = [
|
self.data["Arff"]["accuracy"] = [
|
||||||
"STree_default (linear-ovo)",
|
"STree_default (linear-ovo)",
|
||||||
22.063496,
|
22.109799,
|
||||||
]
|
]
|
||||||
|
|
||||||
def get_name_value(self, key, score):
|
def get_name_value(self, key, score):
|
||||||
@@ -125,7 +131,7 @@ class BaseReport(abc.ABC):
|
|||||||
|
|
||||||
|
|
||||||
class Report(BaseReport):
|
class Report(BaseReport):
|
||||||
header_lengths = [30, 6, 5, 3, 7, 7, 7, 15, 16, 15]
|
header_lengths = [30, 6, 5, 3, 7, 7, 7, 15, 17, 15]
|
||||||
header_cols = [
|
header_cols = [
|
||||||
"Dataset",
|
"Dataset",
|
||||||
"Sampl.",
|
"Sampl.",
|
||||||
@@ -184,7 +190,7 @@ class Report(BaseReport):
|
|||||||
)
|
)
|
||||||
i += 1
|
i += 1
|
||||||
print(
|
print(
|
||||||
f"{result['time']:9.6f}±{result['time_std']:6.4f} ",
|
f"{result['time']:10.6f}±{result['time_std']:6.4f} ",
|
||||||
end="",
|
end="",
|
||||||
)
|
)
|
||||||
i += 1
|
i += 1
|
||||||
@@ -246,7 +252,7 @@ class ReportBest(BaseReport):
|
|||||||
"Hyperparameters",
|
"Hyperparameters",
|
||||||
]
|
]
|
||||||
|
|
||||||
def __init__(self, score, model, best, grid):
|
def __init__(self, score, model, best):
|
||||||
name = (
|
name = (
|
||||||
Files.best_results(score, model)
|
Files.best_results(score, model)
|
||||||
if best
|
if best
|
||||||
@@ -254,7 +260,6 @@ class ReportBest(BaseReport):
|
|||||||
)
|
)
|
||||||
file_name = os.path.join(Folders.results, name)
|
file_name = os.path.join(Folders.results, name)
|
||||||
self.best = best
|
self.best = best
|
||||||
self.grid = grid
|
|
||||||
self.score_name = score
|
self.score_name = score
|
||||||
self.model = model
|
self.model = model
|
||||||
super().__init__(file_name, best_file=True)
|
super().__init__(file_name, best_file=True)
|
||||||
@@ -328,7 +333,17 @@ class Excel(BaseReport):
|
|||||||
else:
|
else:
|
||||||
self.book = book
|
self.book = book
|
||||||
self.close = False
|
self.close = False
|
||||||
self.sheet = self.book.add_worksheet(self.data["model"])
|
suffix = ""
|
||||||
|
num = 1
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
self.sheet = self.book.add_worksheet(
|
||||||
|
self.data["model"] + suffix
|
||||||
|
)
|
||||||
|
break
|
||||||
|
except DuplicateWorksheetName:
|
||||||
|
num += 1
|
||||||
|
suffix = str(num)
|
||||||
self.max_hyper_width = 0
|
self.max_hyper_width = 0
|
||||||
self.col_hyperparams = 0
|
self.col_hyperparams = 0
|
||||||
|
|
||||||
@@ -1338,12 +1353,14 @@ class StubReport(BaseReport):
|
|||||||
|
|
||||||
|
|
||||||
class Summary:
|
class Summary:
|
||||||
def __init__(self, hidden=False) -> None:
|
def __init__(self, hidden=False, compare=False) -> None:
|
||||||
self.results = Files().get_all_results(hidden=hidden)
|
self.results = Files().get_all_results(hidden=hidden)
|
||||||
self.data = []
|
self.data = []
|
||||||
|
self.data_filtered = []
|
||||||
self.datasets = {}
|
self.datasets = {}
|
||||||
self.models = set()
|
self.models = set()
|
||||||
self.hidden = hidden
|
self.hidden = hidden
|
||||||
|
self.compare = compare
|
||||||
|
|
||||||
def get_models(self):
|
def get_models(self):
|
||||||
return sorted(self.models)
|
return sorted(self.models)
|
||||||
@@ -1386,18 +1403,15 @@ class Summary:
|
|||||||
self.data.append(entry)
|
self.data.append(entry)
|
||||||
|
|
||||||
def get_results_criteria(
|
def get_results_criteria(
|
||||||
self,
|
self, score, model, input_data, sort_key, number, nan=False
|
||||||
score,
|
|
||||||
model,
|
|
||||||
input_data,
|
|
||||||
sort_key,
|
|
||||||
number,
|
|
||||||
):
|
):
|
||||||
data = self.data.copy() if input_data is None else input_data
|
data = self.data.copy() if input_data is None else input_data
|
||||||
if score:
|
if score:
|
||||||
data = [x for x in data if x["score"] == score]
|
data = [x for x in data if x["score"] == score]
|
||||||
if model:
|
if model:
|
||||||
data = [x for x in data if x["model"] == model]
|
data = [x for x in data if x["model"] == model]
|
||||||
|
if nan:
|
||||||
|
data = [x for x in data if x["metric"] != x["metric"]]
|
||||||
keys = (
|
keys = (
|
||||||
itemgetter(sort_key, "time")
|
itemgetter(sort_key, "time")
|
||||||
if sort_key == "date"
|
if sort_key == "date"
|
||||||
@@ -1415,15 +1429,17 @@ class Summary:
|
|||||||
input_data=None,
|
input_data=None,
|
||||||
sort_key="date",
|
sort_key="date",
|
||||||
number=0,
|
number=0,
|
||||||
|
nan=False,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Print the list of results"""
|
"""Print the list of results"""
|
||||||
data = self.get_results_criteria(
|
if self.data_filtered == []:
|
||||||
score, model, input_data, sort_key, number
|
self.data_filtered = self.get_results_criteria(
|
||||||
)
|
score, model, input_data, sort_key, number, nan=nan
|
||||||
if data == []:
|
)
|
||||||
|
if self.data_filtered == []:
|
||||||
raise ValueError(NO_RESULTS)
|
raise ValueError(NO_RESULTS)
|
||||||
max_file = max(len(x["file"]) for x in data)
|
max_file = max(len(x["file"]) for x in self.data_filtered)
|
||||||
max_title = max(len(x["title"]) for x in data)
|
max_title = max(len(x["title"]) for x in self.data_filtered)
|
||||||
if self.hidden:
|
if self.hidden:
|
||||||
color1 = TextColor.GREEN
|
color1 = TextColor.GREEN
|
||||||
color2 = TextColor.YELLOW
|
color2 = TextColor.YELLOW
|
||||||
@@ -1432,10 +1448,11 @@ class Summary:
|
|||||||
color2 = TextColor.LINE2
|
color2 = TextColor.LINE2
|
||||||
print(color1, end="")
|
print(color1, end="")
|
||||||
print(
|
print(
|
||||||
f"{'Date':10s} {'File':{max_file}s} {'Score':8s} {'Time(h)':7s} "
|
f" # {'Date':10s} {'File':{max_file}s} {'Score':8s} "
|
||||||
f"{'Title':s}"
|
f"{'Time(h)':7s} {'Title':s}"
|
||||||
)
|
)
|
||||||
print(
|
print(
|
||||||
|
"===",
|
||||||
"=" * 10
|
"=" * 10
|
||||||
+ " "
|
+ " "
|
||||||
+ "=" * max_file
|
+ "=" * max_file
|
||||||
@@ -1444,21 +1461,115 @@ class Summary:
|
|||||||
+ " "
|
+ " "
|
||||||
+ "=" * 7
|
+ "=" * 7
|
||||||
+ " "
|
+ " "
|
||||||
+ "=" * max_title
|
+ "=" * max_title,
|
||||||
)
|
)
|
||||||
print(
|
print(
|
||||||
"\n".join(
|
"\n".join(
|
||||||
[
|
[
|
||||||
(color2 if n % 2 == 0 else color1)
|
(color2 if n % 2 == 0 else color1) + f"{n:3d} "
|
||||||
+ f"{x['date']} {x['file']:{max_file}s} "
|
f"{x['date']} {x['file']:{max_file}s} "
|
||||||
f"{x['metric']:8.5f} "
|
f"{x['metric']:8.5f} "
|
||||||
f"{x['duration']/3600:7.3f} "
|
f"{x['duration']/3600:7.3f} "
|
||||||
f"{x['title']}"
|
f"{x['title']}"
|
||||||
for n, x in enumerate(data)
|
for n, x in enumerate(self.data_filtered)
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def manage_results(self):
|
||||||
|
"""Manage results showed in the summary
|
||||||
|
return True if excel file is created False otherwise
|
||||||
|
"""
|
||||||
|
|
||||||
|
def process_file(num, command, path):
|
||||||
|
num = int(num)
|
||||||
|
name = self.data_filtered[num]["file"]
|
||||||
|
file_name_result = os.path.join(path, name)
|
||||||
|
verb1, verb2 = (
|
||||||
|
("delete", "Deleting")
|
||||||
|
if command == cmd.delete
|
||||||
|
else (
|
||||||
|
"hide",
|
||||||
|
"Hiding",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
conf_message = (
|
||||||
|
TextColor.RED
|
||||||
|
+ f"Are you sure to {verb1} {file_name_result} (y/n)? "
|
||||||
|
)
|
||||||
|
confirm = get_input(message=conf_message)
|
||||||
|
if confirm == "y":
|
||||||
|
print(TextColor.YELLOW + f"{verb2} {file_name_result}")
|
||||||
|
if command == cmd.delete:
|
||||||
|
os.unlink(file_name_result)
|
||||||
|
else:
|
||||||
|
os.rename(
|
||||||
|
os.path.join(Folders.results, name),
|
||||||
|
os.path.join(Folders.hidden_results, name),
|
||||||
|
)
|
||||||
|
self.data_filtered.pop(num)
|
||||||
|
get_input(message="Press enter to continue")
|
||||||
|
self.list_results()
|
||||||
|
|
||||||
|
cmd = SimpleNamespace(
|
||||||
|
quit="q", relist="r", delete="d", hide="h", excel="e"
|
||||||
|
)
|
||||||
|
message = (
|
||||||
|
TextColor.ENDC
|
||||||
|
+ f"Choose option {str(cmd).replace('namespace', '')}: "
|
||||||
|
)
|
||||||
|
path = Folders.hidden_results if self.hidden else Folders.results
|
||||||
|
book = None
|
||||||
|
max_value = len(self.data)
|
||||||
|
while True:
|
||||||
|
match get_input(message=message).split():
|
||||||
|
case [cmd.relist]:
|
||||||
|
self.list_results()
|
||||||
|
case [cmd.quit]:
|
||||||
|
if book is not None:
|
||||||
|
book.close()
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
case [cmd.hide, num] if num.isdigit() and int(num) < max_value:
|
||||||
|
if self.hidden:
|
||||||
|
print("Already hidden")
|
||||||
|
else:
|
||||||
|
process_file(num, path=path, command=cmd.hide)
|
||||||
|
case [cmd.delete, num] if num.isdigit() and int(
|
||||||
|
num
|
||||||
|
) < max_value:
|
||||||
|
process_file(num=num, path=path, command=cmd.delete)
|
||||||
|
case [cmd.excel, num] if num.isdigit() and int(
|
||||||
|
num
|
||||||
|
) < max_value:
|
||||||
|
# Add to excel file result #num
|
||||||
|
num = int(num)
|
||||||
|
file_name_result = os.path.join(
|
||||||
|
path, self.data_filtered[num]["file"]
|
||||||
|
)
|
||||||
|
if book is None:
|
||||||
|
file_name = Files.be_list_excel
|
||||||
|
book = xlsxwriter.Workbook(
|
||||||
|
file_name, {"nan_inf_to_errors": True}
|
||||||
|
)
|
||||||
|
excel = Excel(
|
||||||
|
file_name=file_name_result,
|
||||||
|
book=book,
|
||||||
|
compare=self.compare,
|
||||||
|
)
|
||||||
|
excel.report()
|
||||||
|
print(f"Added {file_name_result} to {Files.be_list_excel}")
|
||||||
|
case [num] if num.isdigit() and int(num) < max_value:
|
||||||
|
# Report the result #num
|
||||||
|
num = int(num)
|
||||||
|
file_name_result = os.path.join(
|
||||||
|
path, self.data_filtered[num]["file"]
|
||||||
|
)
|
||||||
|
rep = Report(file_name_result, compare=self.compare)
|
||||||
|
rep.report()
|
||||||
|
case _:
|
||||||
|
print("Invalid option. Try again!")
|
||||||
|
|
||||||
def show_result(self, data: dict, title: str = "") -> None:
|
def show_result(self, data: dict, title: str = "") -> None:
|
||||||
def whites(n: int) -> str:
|
def whites(n: int) -> str:
|
||||||
return " " * n + color1 + "*"
|
return " " * n + color1 + "*"
|
||||||
|
@@ -28,6 +28,7 @@ class Files:
|
|||||||
benchmark_r = "benchmark.r"
|
benchmark_r = "benchmark.r"
|
||||||
dot_env = ".env"
|
dot_env = ".env"
|
||||||
datasets_report_excel = "ReportDatasets.xlsx"
|
datasets_report_excel = "ReportDatasets.xlsx"
|
||||||
|
be_list_excel = "some_results.xlsx"
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def exreport_output(score):
|
def exreport_output(score):
|
||||||
@@ -145,3 +146,7 @@ class TextColor:
|
|||||||
ENDC = "\033[0m"
|
ENDC = "\033[0m"
|
||||||
BOLD = "\033[1m"
|
BOLD = "\033[1m"
|
||||||
UNDERLINE = "\033[4m"
|
UNDERLINE = "\033[4m"
|
||||||
|
WHITE = "\033[97m"
|
||||||
|
GREY = "\033[90m"
|
||||||
|
BLACK = "\033[90m"
|
||||||
|
DEFAULT = "\033[99m"
|
||||||
|
@@ -1 +0,0 @@
|
|||||||
__version__ = "0.7.1"
|
|
@@ -1 +1 @@
|
|||||||
__version__ = "0.2.0"
|
__version__ = "0.4.0"
|
||||||
|
@@ -5,7 +5,7 @@ from benchmark.Arguments import Arguments
|
|||||||
|
|
||||||
|
|
||||||
def main(args_test=None):
|
def main(args_test=None):
|
||||||
arguments = Arguments()
|
arguments = Arguments(prog="be_benchmark")
|
||||||
arguments.xset("score").xset("excel").xset("tex_output").xset("quiet")
|
arguments.xset("score").xset("excel").xset("tex_output").xset("quiet")
|
||||||
args = arguments.parse(args_test)
|
args = arguments.parse(args_test)
|
||||||
benchmark = Benchmark(score=args.score, visualize=not args.quiet)
|
benchmark = Benchmark(score=args.score, visualize=not args.quiet)
|
||||||
|
@@ -21,5 +21,5 @@ def main(args_test=None):
|
|||||||
print(e)
|
print(e)
|
||||||
else:
|
else:
|
||||||
if args.report:
|
if args.report:
|
||||||
report = ReportBest(args.score, args.model, best=True, grid=False)
|
report = ReportBest(args.score, args.model, best=True)
|
||||||
report.report()
|
report.report()
|
||||||
|
33
benchmark/scripts/be_init_project.py
Executable file
33
benchmark/scripts/be_init_project.py
Executable file
@@ -0,0 +1,33 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
import os
|
||||||
|
from benchmark.Utils import Files, Folders
|
||||||
|
from benchmark.Arguments import Arguments
|
||||||
|
|
||||||
|
|
||||||
|
def main(args_test=None):
|
||||||
|
arguments = Arguments(prog="be_init_project")
|
||||||
|
arguments.add_argument("project_name", help="Project name")
|
||||||
|
args = arguments.parse(args_test)
|
||||||
|
folders = []
|
||||||
|
folders.append(args.project_name)
|
||||||
|
folders.append(os.path.join(args.project_name, Folders.results))
|
||||||
|
folders.append(os.path.join(args.project_name, Folders.hidden_results))
|
||||||
|
folders.append(os.path.join(args.project_name, Folders.exreport))
|
||||||
|
folders.append(os.path.join(args.project_name, Folders.report))
|
||||||
|
folders.append(os.path.join(args.project_name, Folders.img))
|
||||||
|
try:
|
||||||
|
for folder in folders:
|
||||||
|
print(f"Creating folder {folder}")
|
||||||
|
os.makedirs(folder)
|
||||||
|
except FileExistsError as e:
|
||||||
|
print(e)
|
||||||
|
exit(1)
|
||||||
|
env_src = os.path.join(Folders.src(), "..", f"{Files.dot_env}.dist")
|
||||||
|
env_to = os.path.join(args.project_name, Files.dot_env)
|
||||||
|
os.system(f"cp {env_src} {env_to}")
|
||||||
|
print("Done!")
|
||||||
|
print(
|
||||||
|
"Please, edit .env file with your settings and add a datasets folder"
|
||||||
|
)
|
||||||
|
print("with an all.txt file with the datasets you want to use.")
|
||||||
|
print("In that folder you have to include all the datasets you'll use.")
|
@@ -1,7 +1,6 @@
|
|||||||
#! /usr/bin/env python
|
#! /usr/bin/env python
|
||||||
import os
|
|
||||||
from benchmark.Results import Summary
|
from benchmark.Results import Summary
|
||||||
from benchmark.Utils import Folders
|
from benchmark.Utils import Files
|
||||||
from benchmark.Arguments import Arguments
|
from benchmark.Arguments import Arguments
|
||||||
|
|
||||||
"""List experiments of a model
|
"""List experiments of a model
|
||||||
@@ -9,11 +8,12 @@ from benchmark.Arguments import Arguments
|
|||||||
|
|
||||||
|
|
||||||
def main(args_test=None):
|
def main(args_test=None):
|
||||||
arguments = Arguments()
|
arguments = Arguments(prog="be_list")
|
||||||
arguments.xset("number").xset("model", required=False).xset("key")
|
arguments.xset("number").xset("model", required=False).xset("key")
|
||||||
arguments.xset("hidden").xset("nan").xset("score", required=False)
|
arguments.xset("score", required=False).xset("compare").xset("hidden")
|
||||||
|
arguments.xset("nan")
|
||||||
args = arguments.parse(args_test)
|
args = arguments.parse(args_test)
|
||||||
data = Summary(hidden=args.hidden)
|
data = Summary(hidden=args.hidden, compare=args.compare)
|
||||||
data.acquire()
|
data.acquire()
|
||||||
try:
|
try:
|
||||||
data.list_results(
|
data.list_results(
|
||||||
@@ -21,33 +21,12 @@ def main(args_test=None):
|
|||||||
model=args.model,
|
model=args.model,
|
||||||
sort_key=args.key,
|
sort_key=args.key,
|
||||||
number=args.number,
|
number=args.number,
|
||||||
|
nan=args.nan,
|
||||||
)
|
)
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
print(e)
|
print(e)
|
||||||
else:
|
return
|
||||||
if args.nan:
|
excel_generated = data.manage_results()
|
||||||
results_nan = []
|
if excel_generated:
|
||||||
results = data.get_results_criteria(
|
print(f"Generated file: {Files.be_list_excel}")
|
||||||
score=args.score,
|
Files.open(Files.be_list_excel, test=args_test is not None)
|
||||||
model=args.model,
|
|
||||||
input_data=None,
|
|
||||||
sort_key=args.key,
|
|
||||||
number=args.number,
|
|
||||||
)
|
|
||||||
for result in results:
|
|
||||||
if result["metric"] != result["metric"]:
|
|
||||||
results_nan.append(result)
|
|
||||||
if results_nan != []:
|
|
||||||
print(
|
|
||||||
"\n"
|
|
||||||
+ "*" * 30
|
|
||||||
+ " Results with nan moved to hidden "
|
|
||||||
+ "*" * 30
|
|
||||||
)
|
|
||||||
data.list_results(input_data=results_nan)
|
|
||||||
for result in results_nan:
|
|
||||||
name = result["file"]
|
|
||||||
os.rename(
|
|
||||||
os.path.join(Folders.results, name),
|
|
||||||
os.path.join(Folders.hidden_results, name),
|
|
||||||
)
|
|
||||||
|
@@ -10,15 +10,20 @@ from benchmark.Arguments import Arguments
|
|||||||
|
|
||||||
|
|
||||||
def main(args_test=None):
|
def main(args_test=None):
|
||||||
arguments = Arguments()
|
arguments = Arguments(prog="be_main")
|
||||||
arguments.xset("stratified").xset("score").xset("model", mandatory=True)
|
arguments.xset("stratified").xset("score").xset("model", mandatory=True)
|
||||||
arguments.xset("n_folds").xset("platform").xset("quiet").xset("title")
|
arguments.xset("n_folds").xset("platform").xset("quiet").xset("title")
|
||||||
arguments.xset("hyperparameters").xset("paramfile").xset("report")
|
arguments.xset("report")
|
||||||
arguments.xset("grid_paramfile").xset("dataset")
|
arguments.add_exclusive(
|
||||||
|
["grid_paramfile", "best_paramfile", "hyperparameters"]
|
||||||
|
)
|
||||||
|
arguments.xset(
|
||||||
|
"dataset", overrides="title", const="Test with only one dataset"
|
||||||
|
)
|
||||||
args = arguments.parse(args_test)
|
args = arguments.parse(args_test)
|
||||||
report = args.report or args.dataset is not None
|
report = args.report or args.dataset is not None
|
||||||
if args.grid_paramfile:
|
if args.grid_paramfile:
|
||||||
args.paramfile = False
|
args.best_paramfile = False
|
||||||
try:
|
try:
|
||||||
job = Experiment(
|
job = Experiment(
|
||||||
score_name=args.score,
|
score_name=args.score,
|
||||||
@@ -26,7 +31,7 @@ def main(args_test=None):
|
|||||||
stratified=args.stratified,
|
stratified=args.stratified,
|
||||||
datasets=Datasets(dataset_name=args.dataset),
|
datasets=Datasets(dataset_name=args.dataset),
|
||||||
hyperparams_dict=args.hyperparameters,
|
hyperparams_dict=args.hyperparameters,
|
||||||
hyperparams_file=args.paramfile,
|
hyperparams_file=args.best_paramfile,
|
||||||
grid_paramfile=args.grid_paramfile,
|
grid_paramfile=args.grid_paramfile,
|
||||||
progress_bar=not args.quiet,
|
progress_bar=not args.quiet,
|
||||||
platform=args.platform,
|
platform=args.platform,
|
||||||
|
@@ -5,46 +5,79 @@ from benchmark.Arguments import Arguments
|
|||||||
|
|
||||||
|
|
||||||
"""Build report on screen of a result file, optionally generate excel and sql
|
"""Build report on screen of a result file, optionally generate excel and sql
|
||||||
file, and can compare results of report with best results obtained by model
|
file, and can compare results of report wibth best results obtained by model
|
||||||
If no argument is set, displays the datasets and its characteristics
|
If no argument is set, displays the datasets and its characteristics
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
def main(args_test=None):
|
def main(args_test=None):
|
||||||
arguments = Arguments()
|
is_test = args_test is not None
|
||||||
arguments.xset("file").xset("excel").xset("sql").xset("compare")
|
arguments = Arguments(prog="be_report")
|
||||||
arguments.xset("best").xset("grid").xset("model", required=False)
|
arguments.add_subparser()
|
||||||
arguments.xset("score", required=False)
|
arguments.add_subparsers_options(
|
||||||
|
(
|
||||||
|
"best",
|
||||||
|
"Report best results obtained by any model/score. "
|
||||||
|
"See be_build_best",
|
||||||
|
),
|
||||||
|
[
|
||||||
|
("model", dict(required=False)),
|
||||||
|
("score", dict(required=False)),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
arguments.add_subparsers_options(
|
||||||
|
(
|
||||||
|
"grid",
|
||||||
|
"Report grid results obtained by any model/score. "
|
||||||
|
"See be_build_grid",
|
||||||
|
),
|
||||||
|
[
|
||||||
|
("model", dict(required=False)),
|
||||||
|
("score", dict(required=False)),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
arguments.add_subparsers_options(
|
||||||
|
("file", "Report file results"),
|
||||||
|
[
|
||||||
|
("file_name", {}),
|
||||||
|
("excel", {}),
|
||||||
|
("sql", {}),
|
||||||
|
("compare", {}),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
arguments.add_subparsers_options(
|
||||||
|
("datasets", "Report datasets information"),
|
||||||
|
[
|
||||||
|
("excel", {}),
|
||||||
|
],
|
||||||
|
)
|
||||||
args = arguments.parse(args_test)
|
args = arguments.parse(args_test)
|
||||||
if args.best:
|
match args.subcommand:
|
||||||
args.grid = None
|
case "best" | "grid":
|
||||||
if args.grid:
|
best = args.subcommand == "best"
|
||||||
args.best = None
|
report = ReportBest(args.score, args.model, best)
|
||||||
if args.file is None and args.best is None and args.grid is None:
|
|
||||||
report = ReportDatasets(args.excel)
|
|
||||||
report.report()
|
|
||||||
if args.excel:
|
|
||||||
is_test = args_test is not None
|
|
||||||
Files.open(report.get_file_name(), is_test)
|
|
||||||
else:
|
|
||||||
if args.best is not None or args.grid is not None:
|
|
||||||
report = ReportBest(args.score, args.model, args.best, args.grid)
|
|
||||||
report.report()
|
report.report()
|
||||||
else:
|
case "file":
|
||||||
try:
|
try:
|
||||||
report = Report(args.file, args.compare)
|
report = Report(args.file_name, args.compare)
|
||||||
|
report.report()
|
||||||
except FileNotFoundError as e:
|
except FileNotFoundError as e:
|
||||||
print(e)
|
print(e)
|
||||||
else:
|
return
|
||||||
report.report()
|
if args.sql:
|
||||||
if args.excel:
|
sql = SQL(args.file_name)
|
||||||
excel = Excel(
|
sql.report()
|
||||||
file_name=args.file,
|
if args.excel:
|
||||||
compare=args.compare,
|
excel = Excel(
|
||||||
)
|
file_name=args.file_name,
|
||||||
excel.report()
|
compare=args.compare,
|
||||||
is_test = args_test is not None
|
)
|
||||||
Files.open(excel.get_file_name(), is_test)
|
excel.report()
|
||||||
if args.sql:
|
Files.open(excel.get_file_name(), is_test)
|
||||||
sql = SQL(args.file)
|
case "datasets":
|
||||||
sql.report()
|
report = ReportDatasets(args.excel)
|
||||||
|
report.report()
|
||||||
|
if args.excel:
|
||||||
|
Files.open(report.get_file_name(), is_test)
|
||||||
|
case _:
|
||||||
|
arguments.print_help()
|
||||||
|
1
benchmark/tests/.gitignore
vendored
1
benchmark/tests/.gitignore
vendored
@@ -1 +1,2 @@
|
|||||||
ReportDatasets.xlsx
|
ReportDatasets.xlsx
|
||||||
|
some_results.xlsx
|
||||||
|
@@ -24,13 +24,11 @@ class ArgumentsTest(TestBase):
|
|||||||
|
|
||||||
def test_parameters(self):
|
def test_parameters(self):
|
||||||
expected_parameters = {
|
expected_parameters = {
|
||||||
"best": ("-b", "--best"),
|
"best_paramfile": ("-b", "--best_paramfile"),
|
||||||
"color": ("-c", "--color"),
|
"color": ("-c", "--color"),
|
||||||
"compare": ("-c", "--compare"),
|
"compare": ("-c", "--compare"),
|
||||||
"dataset": ("-d", "--dataset"),
|
"dataset": ("-d", "--dataset"),
|
||||||
"excel": ("-x", "--excel"),
|
"excel": ("-x", "--excel"),
|
||||||
"file": ("-f", "--file"),
|
|
||||||
"grid": ("-g", "--grid"),
|
|
||||||
"grid_paramfile": ("-g", "--grid_paramfile"),
|
"grid_paramfile": ("-g", "--grid_paramfile"),
|
||||||
"hidden": ("--hidden",),
|
"hidden": ("--hidden",),
|
||||||
"hyperparameters": ("-p", "--hyperparameters"),
|
"hyperparameters": ("-p", "--hyperparameters"),
|
||||||
@@ -42,7 +40,6 @@ class ArgumentsTest(TestBase):
|
|||||||
"nan": ("--nan",),
|
"nan": ("--nan",),
|
||||||
"number": ("-n", "--number"),
|
"number": ("-n", "--number"),
|
||||||
"n_folds": ("-n", "--n_folds"),
|
"n_folds": ("-n", "--n_folds"),
|
||||||
"paramfile": ("-f", "--paramfile"),
|
|
||||||
"platform": ("-P", "--platform"),
|
"platform": ("-P", "--platform"),
|
||||||
"quiet": ("-q", "--quiet"),
|
"quiet": ("-q", "--quiet"),
|
||||||
"report": ("-r", "--report"),
|
"report": ("-r", "--report"),
|
||||||
@@ -98,3 +95,27 @@ class ArgumentsTest(TestBase):
|
|||||||
finally:
|
finally:
|
||||||
os.chdir(path)
|
os.chdir(path)
|
||||||
self.assertEqual(stderr.getvalue(), f"{NO_ENV}\n")
|
self.assertEqual(stderr.getvalue(), f"{NO_ENV}\n")
|
||||||
|
|
||||||
|
@patch("sys.stderr", new_callable=StringIO)
|
||||||
|
def test_overrides(self, stderr):
|
||||||
|
arguments = self.build_args()
|
||||||
|
arguments.xset("title")
|
||||||
|
arguments.xset("dataset", overrides="title", const="sample text")
|
||||||
|
test_args = ["-n", "3", "-m", "SVC", "-k", "1", "-d", "dataset"]
|
||||||
|
args = arguments.parse(test_args)
|
||||||
|
self.assertEqual(stderr.getvalue(), "")
|
||||||
|
self.assertEqual(args.title, "sample text")
|
||||||
|
|
||||||
|
@patch("sys.stderr", new_callable=StringIO)
|
||||||
|
def test_overrides_no_args(self, stderr):
|
||||||
|
arguments = self.build_args()
|
||||||
|
arguments.xset("title")
|
||||||
|
arguments.xset("dataset", overrides="title", const="sample text")
|
||||||
|
test_args = None
|
||||||
|
with self.assertRaises(SystemExit):
|
||||||
|
arguments.parse(test_args)
|
||||||
|
self.assertRegexpMatches(
|
||||||
|
stderr.getvalue(),
|
||||||
|
r"error: the following arguments are required: -m/--model, "
|
||||||
|
"-k/--key, --title",
|
||||||
|
)
|
||||||
|
@@ -5,6 +5,7 @@ from openpyxl import load_workbook
|
|||||||
from .TestBase import TestBase
|
from .TestBase import TestBase
|
||||||
from ..Utils import Folders, Files, NO_RESULTS
|
from ..Utils import Folders, Files, NO_RESULTS
|
||||||
from ..Results import Benchmark
|
from ..Results import Benchmark
|
||||||
|
from .._version import __version__
|
||||||
|
|
||||||
|
|
||||||
class BenchmarkTest(TestBase):
|
class BenchmarkTest(TestBase):
|
||||||
@@ -107,6 +108,16 @@ class BenchmarkTest(TestBase):
|
|||||||
benchmark.excel()
|
benchmark.excel()
|
||||||
file_name = benchmark.get_excel_file_name()
|
file_name = benchmark.get_excel_file_name()
|
||||||
book = load_workbook(file_name)
|
book = load_workbook(file_name)
|
||||||
|
replace = None
|
||||||
|
with_this = None
|
||||||
for sheet_name in book.sheetnames:
|
for sheet_name in book.sheetnames:
|
||||||
sheet = book[sheet_name]
|
sheet = book[sheet_name]
|
||||||
self.check_excel_sheet(sheet, f"exreport_excel_{sheet_name}")
|
if sheet_name == "Datasets":
|
||||||
|
replace = self.benchmark_version
|
||||||
|
with_this = __version__
|
||||||
|
self.check_excel_sheet(
|
||||||
|
sheet,
|
||||||
|
f"exreport_excel_{sheet_name}",
|
||||||
|
replace=replace,
|
||||||
|
with_this=with_this,
|
||||||
|
)
|
||||||
|
@@ -30,6 +30,19 @@ class DatasetTest(TestBase):
|
|||||||
expected = [271, 314, 171]
|
expected = [271, 314, 171]
|
||||||
self.assertSequenceEqual(Randomized.seeds(), expected)
|
self.assertSequenceEqual(Randomized.seeds(), expected)
|
||||||
|
|
||||||
|
def test_load_dataframe(self):
|
||||||
|
self.set_env(".env.arff")
|
||||||
|
dt = Datasets()
|
||||||
|
X, y = dt.load("iris", dataframe=False)
|
||||||
|
dataset = dt.load("iris", dataframe=True)
|
||||||
|
class_name = dt.get_class_name()
|
||||||
|
features = dt.get_features()
|
||||||
|
self.assertListEqual(y.tolist(), dataset[class_name].tolist())
|
||||||
|
for i in range(len(features)):
|
||||||
|
self.assertListEqual(
|
||||||
|
X[:, i].tolist(), dataset[features[i]].tolist()
|
||||||
|
)
|
||||||
|
|
||||||
def test_Datasets_iterator(self):
|
def test_Datasets_iterator(self):
|
||||||
test = {
|
test = {
|
||||||
".env.dist": ["balance-scale", "balloons"],
|
".env.dist": ["balance-scale", "balloons"],
|
||||||
|
@@ -2,11 +2,14 @@ import os
|
|||||||
from io import StringIO
|
from io import StringIO
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
from .TestBase import TestBase
|
from .TestBase import TestBase
|
||||||
from ..Results import Report, BaseReport, ReportBest, ReportDatasets
|
from ..Results import Report, BaseReport, ReportBest, ReportDatasets, get_input
|
||||||
from ..Utils import Symbols
|
from ..Utils import Symbols
|
||||||
|
|
||||||
|
|
||||||
class ReportTest(TestBase):
|
class ReportTest(TestBase):
|
||||||
|
def test_get_input(self):
|
||||||
|
self.assertEqual(get_input(is_test=True), "test")
|
||||||
|
|
||||||
def test_BaseReport(self):
|
def test_BaseReport(self):
|
||||||
with patch.multiple(BaseReport, __abstractmethods__=set()):
|
with patch.multiple(BaseReport, __abstractmethods__=set()):
|
||||||
file_name = os.path.join(
|
file_name = os.path.join(
|
||||||
@@ -66,13 +69,13 @@ class ReportTest(TestBase):
|
|||||||
_ = Report("unknown_file")
|
_ = Report("unknown_file")
|
||||||
|
|
||||||
def test_report_best(self):
|
def test_report_best(self):
|
||||||
report = ReportBest("accuracy", "STree", best=True, grid=False)
|
report = ReportBest("accuracy", "STree", best=True)
|
||||||
with patch(self.output, new=StringIO()) as stdout:
|
with patch(self.output, new=StringIO()) as stdout:
|
||||||
report.report()
|
report.report()
|
||||||
self.check_output_file(stdout, "report_best")
|
self.check_output_file(stdout, "report_best")
|
||||||
|
|
||||||
def test_report_grid(self):
|
def test_report_grid(self):
|
||||||
report = ReportBest("accuracy", "STree", best=False, grid=True)
|
report = ReportBest("accuracy", "STree", best=False)
|
||||||
with patch(self.output, new=StringIO()) as stdout:
|
with patch(self.output, new=StringIO()) as stdout:
|
||||||
report.report()
|
report.report()
|
||||||
file_name = "report_grid.test"
|
file_name = "report_grid.test"
|
||||||
@@ -81,20 +84,22 @@ class ReportTest(TestBase):
|
|||||||
output_text = stdout.getvalue().splitlines()
|
output_text = stdout.getvalue().splitlines()
|
||||||
# Compare replacing STree version
|
# Compare replacing STree version
|
||||||
for line, index in zip(expected, range(len(expected))):
|
for line, index in zip(expected, range(len(expected))):
|
||||||
if "1.2.4" in line:
|
if self.stree_version in line:
|
||||||
# replace STree version
|
# replace STree version
|
||||||
line = self.replace_STree_version(line, output_text, index)
|
line = self.replace_STree_version(line, output_text, index)
|
||||||
|
|
||||||
self.assertEqual(line, output_text[index])
|
self.assertEqual(line, output_text[index])
|
||||||
|
|
||||||
def test_report_best_both(self):
|
|
||||||
report = ReportBest("accuracy", "STree", best=True, grid=True)
|
|
||||||
with patch(self.output, new=StringIO()) as stdout:
|
|
||||||
report.report()
|
|
||||||
self.check_output_file(stdout, "report_best")
|
|
||||||
|
|
||||||
@patch("sys.stdout", new_callable=StringIO)
|
@patch("sys.stdout", new_callable=StringIO)
|
||||||
def test_report_datasets(self, mock_output):
|
def test_report_datasets(self, mock_output):
|
||||||
report = ReportDatasets()
|
report = ReportDatasets()
|
||||||
report.report()
|
report.report()
|
||||||
self.check_output_file(mock_output, "report_datasets")
|
file_name = f"report_datasets{self.ext}"
|
||||||
|
with open(os.path.join(self.test_files, file_name)) as f:
|
||||||
|
expected = f.read()
|
||||||
|
output_text = mock_output.getvalue().splitlines()
|
||||||
|
for line, index in zip(expected.splitlines(), range(len(expected))):
|
||||||
|
if self.benchmark_version in line:
|
||||||
|
# replace benchmark version
|
||||||
|
line = self.replace_benchmark_version(line, output_text, index)
|
||||||
|
self.assertEqual(line, output_text[index])
|
||||||
|
@@ -15,6 +15,8 @@ class TestBase(unittest.TestCase):
|
|||||||
self.test_files = "test_files"
|
self.test_files = "test_files"
|
||||||
self.output = "sys.stdout"
|
self.output = "sys.stdout"
|
||||||
self.ext = ".test"
|
self.ext = ".test"
|
||||||
|
self.benchmark_version = "0.2.0"
|
||||||
|
self.stree_version = "1.2.4"
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
def remove_files(self, files, folder):
|
def remove_files(self, files, folder):
|
||||||
@@ -31,7 +33,9 @@ class TestBase(unittest.TestCase):
|
|||||||
if value is not None:
|
if value is not None:
|
||||||
print(f'{row};{col};"{value}"', file=f)
|
print(f'{row};{col};"{value}"', file=f)
|
||||||
|
|
||||||
def check_excel_sheet(self, sheet, file_name):
|
def check_excel_sheet(
|
||||||
|
self, sheet, file_name, replace=None, with_this=None
|
||||||
|
):
|
||||||
file_name += self.ext
|
file_name += self.ext
|
||||||
with open(os.path.join(self.test_files, file_name), "r") as f:
|
with open(os.path.join(self.test_files, file_name), "r") as f:
|
||||||
expected = csv.reader(f, delimiter=";")
|
expected = csv.reader(f, delimiter=";")
|
||||||
@@ -43,6 +47,9 @@ class TestBase(unittest.TestCase):
|
|||||||
value = float(value)
|
value = float(value)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
pass
|
pass
|
||||||
|
if replace is not None and isinstance(value, str):
|
||||||
|
if replace in value:
|
||||||
|
value = value.replace(replace, with_this)
|
||||||
self.assertEqual(sheet.cell(int(row), int(col)).value, value)
|
self.assertEqual(sheet.cell(int(row), int(col)).value, value)
|
||||||
|
|
||||||
def check_output_file(self, output, file_name):
|
def check_output_file(self, output, file_name):
|
||||||
@@ -51,10 +58,15 @@ class TestBase(unittest.TestCase):
|
|||||||
expected = f.read()
|
expected = f.read()
|
||||||
self.assertEqual(output.getvalue(), expected)
|
self.assertEqual(output.getvalue(), expected)
|
||||||
|
|
||||||
@staticmethod
|
def replace_STree_version(self, line, output, index):
|
||||||
def replace_STree_version(line, output, index):
|
idx = line.find(self.stree_version)
|
||||||
idx = line.find("1.2.4")
|
return line.replace(self.stree_version, output[index][idx : idx + 5])
|
||||||
return line.replace("1.2.4", output[index][idx : idx + 5])
|
|
||||||
|
def replace_benchmark_version(self, line, output, index):
|
||||||
|
idx = line.find(self.benchmark_version)
|
||||||
|
return line.replace(
|
||||||
|
self.benchmark_version, output[index][idx : idx + 5]
|
||||||
|
)
|
||||||
|
|
||||||
def check_file_file(self, computed_file, expected_file):
|
def check_file_file(self, computed_file, expected_file):
|
||||||
with open(computed_file) as f:
|
with open(computed_file) as f:
|
||||||
|
@@ -13,6 +13,7 @@ from .PairCheck_test import PairCheckTest
|
|||||||
from .Arguments_test import ArgumentsTest
|
from .Arguments_test import ArgumentsTest
|
||||||
from .scripts.Be_Pair_check_test import BePairCheckTest
|
from .scripts.Be_Pair_check_test import BePairCheckTest
|
||||||
from .scripts.Be_List_test import BeListTest
|
from .scripts.Be_List_test import BeListTest
|
||||||
|
from .scripts.Be_Init_Project_test import BeInitProjectTest
|
||||||
from .scripts.Be_Report_test import BeReportTest
|
from .scripts.Be_Report_test import BeReportTest
|
||||||
from .scripts.Be_Summary_test import BeSummaryTest
|
from .scripts.Be_Summary_test import BeSummaryTest
|
||||||
from .scripts.Be_Grid_test import BeGridTest
|
from .scripts.Be_Grid_test import BeGridTest
|
||||||
|
@@ -2,6 +2,7 @@ import os
|
|||||||
from openpyxl import load_workbook
|
from openpyxl import load_workbook
|
||||||
from ...Utils import NO_RESULTS, Folders, Files
|
from ...Utils import NO_RESULTS, Folders, Files
|
||||||
from ..TestBase import TestBase
|
from ..TestBase import TestBase
|
||||||
|
from ..._version import __version__
|
||||||
|
|
||||||
|
|
||||||
class BeBenchmarkTest(TestBase):
|
class BeBenchmarkTest(TestBase):
|
||||||
@@ -24,7 +25,7 @@ class BeBenchmarkTest(TestBase):
|
|||||||
|
|
||||||
def test_be_benchmark_complete(self):
|
def test_be_benchmark_complete(self):
|
||||||
stdout, stderr = self.execute_script(
|
stdout, stderr = self.execute_script(
|
||||||
"be_benchmark", ["-s", self.score, "-q", "1", "-t", "1", "-x", "1"]
|
"be_benchmark", ["-s", self.score, "-q", "-t", "-x"]
|
||||||
)
|
)
|
||||||
self.assertEqual(stderr.getvalue(), "")
|
self.assertEqual(stderr.getvalue(), "")
|
||||||
# Check output
|
# Check output
|
||||||
@@ -43,13 +44,23 @@ class BeBenchmarkTest(TestBase):
|
|||||||
Folders.exreport, Files.exreport_excel(self.score)
|
Folders.exreport, Files.exreport_excel(self.score)
|
||||||
)
|
)
|
||||||
book = load_workbook(file_name)
|
book = load_workbook(file_name)
|
||||||
|
replace = None
|
||||||
|
with_this = None
|
||||||
for sheet_name in book.sheetnames:
|
for sheet_name in book.sheetnames:
|
||||||
sheet = book[sheet_name]
|
sheet = book[sheet_name]
|
||||||
self.check_excel_sheet(sheet, f"exreport_excel_{sheet_name}")
|
if sheet_name == "Datasets":
|
||||||
|
replace = self.benchmark_version
|
||||||
|
with_this = __version__
|
||||||
|
self.check_excel_sheet(
|
||||||
|
sheet,
|
||||||
|
f"exreport_excel_{sheet_name}",
|
||||||
|
replace=replace,
|
||||||
|
with_this=with_this,
|
||||||
|
)
|
||||||
|
|
||||||
def test_be_benchmark_single(self):
|
def test_be_benchmark_single(self):
|
||||||
stdout, stderr = self.execute_script(
|
stdout, stderr = self.execute_script(
|
||||||
"be_benchmark", ["-s", self.score, "-q", "1"]
|
"be_benchmark", ["-s", self.score, "-q"]
|
||||||
)
|
)
|
||||||
self.assertEqual(stderr.getvalue(), "")
|
self.assertEqual(stderr.getvalue(), "")
|
||||||
# Check output
|
# Check output
|
||||||
|
@@ -67,7 +67,7 @@ class BeBestTest(TestBase):
|
|||||||
|
|
||||||
def test_be_build_best_report(self):
|
def test_be_build_best_report(self):
|
||||||
stdout, _ = self.execute_script(
|
stdout, _ = self.execute_script(
|
||||||
"be_build_best", ["-s", "accuracy", "-m", "ODTE", "-r", "1"]
|
"be_build_best", ["-s", "accuracy", "-m", "ODTE", "-r"]
|
||||||
)
|
)
|
||||||
expected_data = {
|
expected_data = {
|
||||||
"balance-scale": [
|
"balance-scale": [
|
||||||
|
@@ -4,6 +4,10 @@ from ...Utils import Folders, Files
|
|||||||
from ..TestBase import TestBase
|
from ..TestBase import TestBase
|
||||||
|
|
||||||
|
|
||||||
|
def get_test():
|
||||||
|
return "hola"
|
||||||
|
|
||||||
|
|
||||||
class BeGridTest(TestBase):
|
class BeGridTest(TestBase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.prepare_scripts_env()
|
self.prepare_scripts_env()
|
||||||
@@ -65,7 +69,7 @@ class BeGridTest(TestBase):
|
|||||||
def test_be_grid_no_input(self):
|
def test_be_grid_no_input(self):
|
||||||
stdout, stderr = self.execute_script(
|
stdout, stderr = self.execute_script(
|
||||||
"be_grid",
|
"be_grid",
|
||||||
["-m", "ODTE", "-s", "f1-weighted", "-q", "1"],
|
["-m", "ODTE", "-s", "f1-weighted", "-q"],
|
||||||
)
|
)
|
||||||
self.assertEqual(stderr.getvalue(), "")
|
self.assertEqual(stderr.getvalue(), "")
|
||||||
grid_file = os.path.join(
|
grid_file = os.path.join(
|
||||||
|
66
benchmark/tests/scripts/Be_Init_Project_test.py
Normal file
66
benchmark/tests/scripts/Be_Init_Project_test.py
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
import os
|
||||||
|
from io import StringIO
|
||||||
|
from unittest.mock import patch
|
||||||
|
from ..TestBase import TestBase
|
||||||
|
from ...Utils import Folders
|
||||||
|
|
||||||
|
|
||||||
|
class BeInitProjectTest(TestBase):
|
||||||
|
def setUp(self):
|
||||||
|
self.prepare_scripts_env()
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
if os.path.exists("test_project"):
|
||||||
|
os.system("rm -rf test_project")
|
||||||
|
|
||||||
|
def assertIsFile(self, file_name):
|
||||||
|
if not os.path.isfile(file_name):
|
||||||
|
raise AssertionError(f"File {str(file_name)} does not exist")
|
||||||
|
|
||||||
|
def assertIsFolder(self, path):
|
||||||
|
if not os.path.exists(path):
|
||||||
|
raise AssertionError(f"Folder {str(path)} does not exist")
|
||||||
|
|
||||||
|
def test_be_init_project(self):
|
||||||
|
test_project = "test_project"
|
||||||
|
stdout, stderr = self.execute_script("be_init_project", [test_project])
|
||||||
|
self.assertEqual(stderr.getvalue(), "")
|
||||||
|
self.check_output_file(stdout, "be_init_project")
|
||||||
|
# check folders
|
||||||
|
expected = [
|
||||||
|
Folders.results,
|
||||||
|
Folders.hidden_results,
|
||||||
|
Folders.exreport,
|
||||||
|
Folders.report,
|
||||||
|
Folders.img,
|
||||||
|
]
|
||||||
|
for folder in expected:
|
||||||
|
self.assertIsFolder(os.path.join(test_project, folder))
|
||||||
|
self.assertIsFile(os.path.join(test_project, ".env"))
|
||||||
|
os.system(f"rm -rf {test_project}")
|
||||||
|
|
||||||
|
@patch("sys.stdout", new_callable=StringIO)
|
||||||
|
@patch("sys.stderr", new_callable=StringIO)
|
||||||
|
def test_be_init_project_no_arguments(self, stdout, stderr):
|
||||||
|
with self.assertRaises(SystemExit) as cm:
|
||||||
|
module = self.search_script("be_init_project")
|
||||||
|
module.main("")
|
||||||
|
self.assertEqual(cm.exception.code, 2)
|
||||||
|
self.check_output_file(stdout, "be_init_project_no_arguments")
|
||||||
|
self.assertEqual(stderr.getvalue(), "")
|
||||||
|
|
||||||
|
@patch("sys.stdout", new_callable=StringIO)
|
||||||
|
@patch("sys.stderr", new_callable=StringIO)
|
||||||
|
def test_be_init_project_twice(self, stdout, stderr):
|
||||||
|
test_project = "test_project"
|
||||||
|
self.execute_script("be_init_project", [test_project])
|
||||||
|
with self.assertRaises(SystemExit) as cm:
|
||||||
|
module = self.search_script("be_init_project")
|
||||||
|
module.main([test_project])
|
||||||
|
self.assertEqual(cm.exception.code, 1)
|
||||||
|
self.assertEqual(
|
||||||
|
stderr.getvalue(),
|
||||||
|
f"Creating folder {test_project}\n"
|
||||||
|
f"[Errno 17] File exists: '{test_project}'\n",
|
||||||
|
)
|
||||||
|
self.assertEqual(stdout.getvalue(), "")
|
@@ -1,5 +1,8 @@
|
|||||||
import os
|
import os
|
||||||
from ...Utils import Folders, NO_RESULTS
|
import shutil
|
||||||
|
from unittest.mock import patch
|
||||||
|
from openpyxl import load_workbook
|
||||||
|
from ...Utils import Folders, Files, NO_RESULTS
|
||||||
from ..TestBase import TestBase
|
from ..TestBase import TestBase
|
||||||
|
|
||||||
|
|
||||||
@@ -7,19 +10,90 @@ class BeListTest(TestBase):
|
|||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.prepare_scripts_env()
|
self.prepare_scripts_env()
|
||||||
|
|
||||||
def test_be_list(self):
|
@patch("benchmark.Results.get_input", return_value="q")
|
||||||
|
def test_be_list(self, input_data):
|
||||||
stdout, stderr = self.execute_script("be_list", ["-m", "STree"])
|
stdout, stderr = self.execute_script("be_list", ["-m", "STree"])
|
||||||
self.assertEqual(stderr.getvalue(), "")
|
self.assertEqual(stderr.getvalue(), "")
|
||||||
self.check_output_file(stdout, "summary_list_model")
|
self.check_output_file(stdout, "be_list_model")
|
||||||
|
|
||||||
def test_be_list_no_data(self):
|
@patch("benchmark.Results.get_input", side_effect=iter(["x", "q"]))
|
||||||
|
def test_be_list_invalid_option(self, input_data):
|
||||||
|
stdout, stderr = self.execute_script("be_list", ["-m", "STree"])
|
||||||
|
self.assertEqual(stderr.getvalue(), "")
|
||||||
|
self.check_output_file(stdout, "be_list_model_invalid")
|
||||||
|
|
||||||
|
@patch("benchmark.Results.get_input", side_effect=iter(["0", "q"]))
|
||||||
|
def test_be_list_report(self, input_data):
|
||||||
|
stdout, stderr = self.execute_script("be_list", ["-m", "STree"])
|
||||||
|
self.assertEqual(stderr.getvalue(), "")
|
||||||
|
self.check_output_file(stdout, "be_list_report")
|
||||||
|
|
||||||
|
@patch("benchmark.Results.get_input", side_effect=iter(["r", "q"]))
|
||||||
|
def test_be_list_twice(self, input_data):
|
||||||
|
stdout, stderr = self.execute_script("be_list", ["-m", "STree"])
|
||||||
|
self.assertEqual(stderr.getvalue(), "")
|
||||||
|
self.check_output_file(stdout, "be_list_model_2")
|
||||||
|
|
||||||
|
@patch("benchmark.Results.get_input", side_effect=iter(["e 2", "q"]))
|
||||||
|
def test_be_list_report_excel(self, input_data):
|
||||||
|
stdout, stderr = self.execute_script("be_list", ["-m", "STree"])
|
||||||
|
self.assertEqual(stderr.getvalue(), "")
|
||||||
|
self.check_output_file(stdout, "be_list_report_excel")
|
||||||
|
book = load_workbook(Files.be_list_excel)
|
||||||
|
sheet = book["STree"]
|
||||||
|
self.check_excel_sheet(sheet, "excel")
|
||||||
|
|
||||||
|
@patch(
|
||||||
|
"benchmark.Results.get_input", side_effect=iter(["e 2", "e 1", "q"])
|
||||||
|
)
|
||||||
|
def test_be_list_report_excel_twice(self, input_data):
|
||||||
|
stdout, stderr = self.execute_script("be_list", ["-m", "STree"])
|
||||||
|
self.assertEqual(stderr.getvalue(), "")
|
||||||
|
self.check_output_file(stdout, "be_list_report_excel_2")
|
||||||
|
book = load_workbook(Files.be_list_excel)
|
||||||
|
sheet = book["STree"]
|
||||||
|
self.check_excel_sheet(sheet, "excel")
|
||||||
|
sheet = book["STree2"]
|
||||||
|
self.check_excel_sheet(sheet, "excel2")
|
||||||
|
|
||||||
|
@patch("benchmark.Results.get_input", return_value="q")
|
||||||
|
def test_be_list_no_data(self, input_data):
|
||||||
stdout, stderr = self.execute_script(
|
stdout, stderr = self.execute_script(
|
||||||
"be_list", ["-m", "Wodt", "-s", "f1-macro"]
|
"be_list", ["-m", "Wodt", "-s", "f1-macro"]
|
||||||
)
|
)
|
||||||
self.assertEqual(stderr.getvalue(), "")
|
self.assertEqual(stderr.getvalue(), "")
|
||||||
self.assertEqual(stdout.getvalue(), f"{NO_RESULTS}\n")
|
self.assertEqual(stdout.getvalue(), f"{NO_RESULTS}\n")
|
||||||
|
|
||||||
def test_be_list_nan(self):
|
@patch(
|
||||||
|
"benchmark.Results.get_input", side_effect=iter(["d 0", "y", "", "q"])
|
||||||
|
)
|
||||||
|
# @patch("benchmark.Results.get_input", side_effect=iter(["q"]))
|
||||||
|
def test_be_list_delete(self, input_data):
|
||||||
|
def copy_files(source_folder, target_folder, file_name):
|
||||||
|
source = os.path.join(source_folder, file_name)
|
||||||
|
target = os.path.join(target_folder, file_name)
|
||||||
|
shutil.copyfile(source, target)
|
||||||
|
|
||||||
|
file_name = (
|
||||||
|
"results_accuracy_XGBoost_MacBookpro16_2022-05-04_11:00:"
|
||||||
|
"35_0.json"
|
||||||
|
)
|
||||||
|
# move nan result from hidden to results
|
||||||
|
copy_files(Folders.hidden_results, Folders.results, file_name)
|
||||||
|
try:
|
||||||
|
# list and delete result
|
||||||
|
stdout, stderr = self.execute_script("be_list", "")
|
||||||
|
self.assertEqual(stderr.getvalue(), "")
|
||||||
|
self.check_output_file(stdout, "be_list_delete")
|
||||||
|
except Exception:
|
||||||
|
# delete the result copied if be_list couldn't
|
||||||
|
os.unlink(os.path.join(Folders.results, file_name))
|
||||||
|
self.fail("test_be_list_delete() should not raise exception")
|
||||||
|
|
||||||
|
@patch(
|
||||||
|
"benchmark.Results.get_input", side_effect=iter(["h 0", "y", "", "q"])
|
||||||
|
)
|
||||||
|
def test_be_list_hide(self, input_data):
|
||||||
def swap_files(source_folder, target_folder, file_name):
|
def swap_files(source_folder, target_folder, file_name):
|
||||||
source = os.path.join(source_folder, file_name)
|
source = os.path.join(source_folder, file_name)
|
||||||
target = os.path.join(target_folder, file_name)
|
target = os.path.join(target_folder, file_name)
|
||||||
@@ -32,19 +106,38 @@ class BeListTest(TestBase):
|
|||||||
# move nan result from hidden to results
|
# move nan result from hidden to results
|
||||||
swap_files(Folders.hidden_results, Folders.results, file_name)
|
swap_files(Folders.hidden_results, Folders.results, file_name)
|
||||||
try:
|
try:
|
||||||
# list and move nan result to hidden
|
# list and move nan result to hidden again
|
||||||
stdout, stderr = self.execute_script("be_list", ["--nan", "1"])
|
stdout, stderr = self.execute_script("be_list", "")
|
||||||
self.assertEqual(stderr.getvalue(), "")
|
self.assertEqual(stderr.getvalue(), "")
|
||||||
self.check_output_file(stdout, "be_list_nan")
|
self.check_output_file(stdout, "be_list_hide")
|
||||||
except Exception:
|
except Exception:
|
||||||
# move back nan result file if be_list couldn't
|
# delete the result copied if be_list couldn't
|
||||||
swap_files(Folders.results, Folders.hidden_results, file_name)
|
swap_files(Folders.results, Folders.hidden_results, file_name)
|
||||||
self.fail("test_be_list_nan() should not raise exception")
|
self.fail("test_be_list_hide() should not raise exception")
|
||||||
|
|
||||||
def test_be_list_nan_no_nan(self):
|
@patch("benchmark.Results.get_input", side_effect=iter(["h 0", "q"]))
|
||||||
stdout, stderr = self.execute_script("be_list", ["--nan", "1"])
|
def test_be_list_already_hidden(self, input_data):
|
||||||
|
stdout, stderr = self.execute_script("be_list", ["--hidden"])
|
||||||
self.assertEqual(stderr.getvalue(), "")
|
self.assertEqual(stderr.getvalue(), "")
|
||||||
self.check_output_file(stdout, "be_list_no_nan")
|
self.check_output_file(stdout, "be_list_already_hidden")
|
||||||
|
|
||||||
|
@patch("benchmark.Results.get_input", side_effect=iter(["h 0", "n", "q"]))
|
||||||
|
def test_be_list_dont_hide(self, input_data):
|
||||||
|
stdout, stderr = self.execute_script("be_list", "")
|
||||||
|
self.assertEqual(stderr.getvalue(), "")
|
||||||
|
self.check_output_file(stdout, "be_list_default")
|
||||||
|
|
||||||
|
@patch("benchmark.Results.get_input", side_effect=iter(["q"]))
|
||||||
|
def test_be_list_hidden_nan(self, input_data):
|
||||||
|
stdout, stderr = self.execute_script("be_list", ["--hidden", "--nan"])
|
||||||
|
self.assertEqual(stderr.getvalue(), "")
|
||||||
|
self.check_output_file(stdout, "be_list_hidden_nan")
|
||||||
|
|
||||||
|
@patch("benchmark.Results.get_input", side_effect=iter(["q"]))
|
||||||
|
def test_be_list_hidden(self, input_data):
|
||||||
|
stdout, stderr = self.execute_script("be_list", ["--hidden"])
|
||||||
|
self.assertEqual(stderr.getvalue(), "")
|
||||||
|
self.check_output_file(stdout, "be_list_hidden")
|
||||||
|
|
||||||
def test_be_no_env(self):
|
def test_be_no_env(self):
|
||||||
path = os.getcwd()
|
path = os.getcwd()
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
import os
|
import os
|
||||||
|
import json
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
from ...Results import Report
|
from ...Results import Report
|
||||||
@@ -30,7 +31,7 @@ class BeMainTest(TestBase):
|
|||||||
def test_be_main_complete(self):
|
def test_be_main_complete(self):
|
||||||
stdout, _ = self.execute_script(
|
stdout, _ = self.execute_script(
|
||||||
"be_main",
|
"be_main",
|
||||||
["-s", self.score, "-m", "STree", "--title", "test", "-r", "1"],
|
["-s", self.score, "-m", "STree", "--title", "test", "-r"],
|
||||||
)
|
)
|
||||||
# keep the report name to delete it after
|
# keep the report name to delete it after
|
||||||
report_name = stdout.getvalue().splitlines()[-1].split("in ")[1]
|
report_name = stdout.getvalue().splitlines()[-1].split("in ")[1]
|
||||||
@@ -66,10 +67,8 @@ class BeMainTest(TestBase):
|
|||||||
"STree",
|
"STree",
|
||||||
"--title",
|
"--title",
|
||||||
"test",
|
"test",
|
||||||
"-f",
|
"-b",
|
||||||
"1",
|
|
||||||
"-r",
|
"-r",
|
||||||
"1",
|
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
# keep the report name to delete it after
|
# keep the report name to delete it after
|
||||||
@@ -79,6 +78,48 @@ class BeMainTest(TestBase):
|
|||||||
stdout, "be_main_best", [0, 2, 3, 5, 6, 7, 8, 9, 12, 13, 14]
|
stdout, "be_main_best", [0, 2, 3, 5, 6, 7, 8, 9, 12, 13, 14]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@patch("sys.stdout", new_callable=StringIO)
|
||||||
|
@patch("sys.stderr", new_callable=StringIO)
|
||||||
|
def test_be_main_incompatible_params(self, stdout, stderr):
|
||||||
|
m1 = (
|
||||||
|
"be_main: error: argument -b/--best_paramfile: not allowed with "
|
||||||
|
"argument -p/--hyperparameters"
|
||||||
|
)
|
||||||
|
m2 = (
|
||||||
|
"be_main: error: argument -g/--grid_paramfile: not allowed with "
|
||||||
|
"argument -p/--hyperparameters"
|
||||||
|
)
|
||||||
|
m3 = (
|
||||||
|
"be_main: error: argument -g/--grid_paramfile: not allowed with "
|
||||||
|
"argument -p/--hyperparameters"
|
||||||
|
)
|
||||||
|
m4 = m1
|
||||||
|
p0 = [
|
||||||
|
"-s",
|
||||||
|
self.score,
|
||||||
|
"-m",
|
||||||
|
"SVC",
|
||||||
|
"--title",
|
||||||
|
"test",
|
||||||
|
]
|
||||||
|
pset = json.dumps(dict(C=17))
|
||||||
|
p1 = p0.copy()
|
||||||
|
p1.extend(["-p", pset, "-b"])
|
||||||
|
p2 = p0.copy()
|
||||||
|
p2.extend(["-p", pset, "-g"])
|
||||||
|
p3 = p0.copy()
|
||||||
|
p3.extend(["-p", pset, "-g", "-b"])
|
||||||
|
p4 = p0.copy()
|
||||||
|
p4.extend(["-b", "-g"])
|
||||||
|
parameters = [(p1, m1), (p2, m2), (p3, m3), (p4, m4)]
|
||||||
|
for parameter, message in parameters:
|
||||||
|
with self.assertRaises(SystemExit) as msg:
|
||||||
|
module = self.search_script("be_main")
|
||||||
|
module.main(parameter)
|
||||||
|
self.assertEqual(msg.exception.code, 2)
|
||||||
|
self.assertEqual(stderr.getvalue(), "")
|
||||||
|
self.assertRegexpMatches(stdout.getvalue(), message)
|
||||||
|
|
||||||
def test_be_main_best_params_non_existent(self):
|
def test_be_main_best_params_non_existent(self):
|
||||||
model = "GBC"
|
model = "GBC"
|
||||||
stdout, stderr = self.execute_script(
|
stdout, stderr = self.execute_script(
|
||||||
@@ -90,10 +131,8 @@ class BeMainTest(TestBase):
|
|||||||
model,
|
model,
|
||||||
"--title",
|
"--title",
|
||||||
"test",
|
"test",
|
||||||
"-f",
|
"-b",
|
||||||
"1",
|
|
||||||
"-r",
|
"-r",
|
||||||
"1",
|
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
self.assertEqual(stderr.getvalue(), "")
|
self.assertEqual(stderr.getvalue(), "")
|
||||||
@@ -117,9 +156,7 @@ class BeMainTest(TestBase):
|
|||||||
"--title",
|
"--title",
|
||||||
"test",
|
"test",
|
||||||
"-g",
|
"-g",
|
||||||
"1",
|
|
||||||
"-r",
|
"-r",
|
||||||
"1",
|
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
self.assertEqual(stderr.getvalue(), "")
|
self.assertEqual(stderr.getvalue(), "")
|
||||||
@@ -142,9 +179,7 @@ class BeMainTest(TestBase):
|
|||||||
"--title",
|
"--title",
|
||||||
"test",
|
"test",
|
||||||
"-g",
|
"-g",
|
||||||
"1",
|
|
||||||
"-r",
|
"-r",
|
||||||
"1",
|
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
# keep the report name to delete it after
|
# keep the report name to delete it after
|
||||||
|
@@ -18,7 +18,7 @@ class BePrintStrees(TestBase):
|
|||||||
for name in self.datasets:
|
for name in self.datasets:
|
||||||
stdout, _ = self.execute_script(
|
stdout, _ = self.execute_script(
|
||||||
"be_print_strees",
|
"be_print_strees",
|
||||||
["-d", name, "-q", "1"],
|
["-d", name, "-q"],
|
||||||
)
|
)
|
||||||
file_name = os.path.join(Folders.img, f"stree_{name}.png")
|
file_name = os.path.join(Folders.img, f"stree_{name}.png")
|
||||||
self.files.append(file_name)
|
self.files.append(file_name)
|
||||||
@@ -33,7 +33,7 @@ class BePrintStrees(TestBase):
|
|||||||
for name in self.datasets:
|
for name in self.datasets:
|
||||||
stdout, _ = self.execute_script(
|
stdout, _ = self.execute_script(
|
||||||
"be_print_strees",
|
"be_print_strees",
|
||||||
["-d", name, "-q", "1", "-c", "1"],
|
["-d", name, "-q", "-c"],
|
||||||
)
|
)
|
||||||
file_name = os.path.join(Folders.img, f"stree_{name}.png")
|
file_name = os.path.join(Folders.img, f"stree_{name}.png")
|
||||||
self.files.append(file_name)
|
self.files.append(file_name)
|
||||||
|
@@ -1,7 +1,10 @@
|
|||||||
import os
|
import os
|
||||||
from openpyxl import load_workbook
|
from openpyxl import load_workbook
|
||||||
|
from io import StringIO
|
||||||
|
from unittest.mock import patch
|
||||||
from ...Utils import Folders, Files
|
from ...Utils import Folders, Files
|
||||||
from ..TestBase import TestBase
|
from ..TestBase import TestBase
|
||||||
|
from ..._version import __version__
|
||||||
|
|
||||||
|
|
||||||
class BeReportTest(TestBase):
|
class BeReportTest(TestBase):
|
||||||
@@ -14,6 +17,7 @@ class BeReportTest(TestBase):
|
|||||||
"results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.xlsx",
|
"results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.xlsx",
|
||||||
]
|
]
|
||||||
self.remove_files(files, Folders.results)
|
self.remove_files(files, Folders.results)
|
||||||
|
self.remove_files([Files.datasets_report_excel], os.getcwd())
|
||||||
return super().tearDown()
|
return super().tearDown()
|
||||||
|
|
||||||
def test_be_report(self):
|
def test_be_report(self):
|
||||||
@@ -21,47 +25,68 @@ class BeReportTest(TestBase):
|
|||||||
"results",
|
"results",
|
||||||
"results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json",
|
"results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json",
|
||||||
)
|
)
|
||||||
stdout, stderr = self.execute_script("be_report", ["-f", file_name])
|
stdout, stderr = self.execute_script("be_report", ["file", file_name])
|
||||||
self.assertEqual(stderr.getvalue(), "")
|
self.assertEqual(stderr.getvalue(), "")
|
||||||
self.check_output_file(stdout, "report")
|
self.check_output_file(stdout, "report")
|
||||||
|
|
||||||
def test_be_report_not_found(self):
|
def test_be_report_not_found(self):
|
||||||
stdout, stderr = self.execute_script("be_report", ["-f", "unknown"])
|
stdout, stderr = self.execute_script("be_report", ["file", "unknown"])
|
||||||
self.assertEqual(stderr.getvalue(), "")
|
self.assertEqual(stderr.getvalue(), "")
|
||||||
self.assertEqual(stdout.getvalue(), "unknown does not exists!\n")
|
self.assertEqual(stdout.getvalue(), "unknown does not exists!\n")
|
||||||
|
|
||||||
def test_be_report_compare(self):
|
def test_be_report_compare(self):
|
||||||
file_name = "results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json"
|
file_name = "results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json"
|
||||||
stdout, stderr = self.execute_script(
|
stdout, stderr = self.execute_script(
|
||||||
"be_report", ["-f", file_name, "-c", "1"]
|
"be_report", ["file", file_name, "-c"]
|
||||||
)
|
)
|
||||||
self.assertEqual(stderr.getvalue(), "")
|
self.assertEqual(stderr.getvalue(), "")
|
||||||
self.check_output_file(stdout, "report_compared")
|
self.check_output_file(stdout, "report_compared")
|
||||||
|
|
||||||
def test_be_report_datatsets(self):
|
def test_be_report_datatsets(self):
|
||||||
stdout, stderr = self.execute_script("be_report", [])
|
stdout, stderr = self.execute_script("be_report", ["datasets"])
|
||||||
self.assertEqual(stderr.getvalue(), "")
|
self.assertEqual(stderr.getvalue(), "")
|
||||||
self.check_output_file(stdout, "report_datasets")
|
file_name = f"report_datasets{self.ext}"
|
||||||
|
with open(os.path.join(self.test_files, file_name)) as f:
|
||||||
|
expected = f.read()
|
||||||
|
output_text = stdout.getvalue().splitlines()
|
||||||
|
for line, index in zip(expected.splitlines(), range(len(expected))):
|
||||||
|
if self.benchmark_version in line:
|
||||||
|
# replace benchmark version
|
||||||
|
line = self.replace_benchmark_version(line, output_text, index)
|
||||||
|
self.assertEqual(line, output_text[index])
|
||||||
|
|
||||||
def test_be_report_datasets_excel(self):
|
def test_be_report_datasets_excel(self):
|
||||||
stdout, stderr = self.execute_script("be_report", ["-x", "1"])
|
stdout, stderr = self.execute_script("be_report", ["datasets", "-x"])
|
||||||
self.assertEqual(stderr.getvalue(), "")
|
self.assertEqual(stderr.getvalue(), "")
|
||||||
self.check_output_file(stdout, "report_datasets")
|
file_name = f"report_datasets{self.ext}"
|
||||||
|
with open(os.path.join(self.test_files, file_name)) as f:
|
||||||
|
expected = f.read()
|
||||||
|
output_text = stdout.getvalue().splitlines()
|
||||||
|
for line, index in zip(expected.splitlines(), range(len(expected))):
|
||||||
|
if self.benchmark_version in line:
|
||||||
|
# replace benchmark version
|
||||||
|
line = self.replace_benchmark_version(line, output_text, index)
|
||||||
|
self.assertEqual(line, output_text[index])
|
||||||
file_name = os.path.join(os.getcwd(), Files.datasets_report_excel)
|
file_name = os.path.join(os.getcwd(), Files.datasets_report_excel)
|
||||||
book = load_workbook(file_name)
|
book = load_workbook(file_name)
|
||||||
sheet = book["Datasets"]
|
sheet = book["Datasets"]
|
||||||
self.check_excel_sheet(sheet, "exreport_excel_Datasets")
|
self.check_excel_sheet(
|
||||||
|
sheet,
|
||||||
|
"exreport_excel_Datasets",
|
||||||
|
replace=self.benchmark_version,
|
||||||
|
with_this=__version__,
|
||||||
|
)
|
||||||
|
|
||||||
def test_be_report_best(self):
|
def test_be_report_best(self):
|
||||||
stdout, stderr = self.execute_script(
|
stdout, stderr = self.execute_script(
|
||||||
"be_report", ["-s", "accuracy", "-m", "STree", "-b", "1"]
|
"be_report", ["best", "-s", "accuracy", "-m", "STree"]
|
||||||
)
|
)
|
||||||
self.assertEqual(stderr.getvalue(), "")
|
self.assertEqual(stderr.getvalue(), "")
|
||||||
self.check_output_file(stdout, "report_best")
|
self.check_output_file(stdout, "report_best")
|
||||||
|
|
||||||
def test_be_report_grid(self):
|
def test_be_report_grid(self):
|
||||||
stdout, stderr = self.execute_script(
|
stdout, stderr = self.execute_script(
|
||||||
"be_report", ["-s", "accuracy", "-m", "STree", "-g", "1"]
|
"be_report", ["grid", "-s", "accuracy", "-m", "STree"]
|
||||||
)
|
)
|
||||||
self.assertEqual(stderr.getvalue(), "")
|
self.assertEqual(stderr.getvalue(), "")
|
||||||
file_name = "report_grid.test"
|
file_name = "report_grid.test"
|
||||||
@@ -75,19 +100,24 @@ class BeReportTest(TestBase):
|
|||||||
line = self.replace_STree_version(line, output_text, index)
|
line = self.replace_STree_version(line, output_text, index)
|
||||||
self.assertEqual(line, output_text[index])
|
self.assertEqual(line, output_text[index])
|
||||||
|
|
||||||
def test_be_report_best_both(self):
|
@patch("sys.stderr", new_callable=StringIO)
|
||||||
stdout, stderr = self.execute_script(
|
def test_be_report_unknown_subcommand(self, stderr):
|
||||||
"be_report",
|
with self.assertRaises(SystemExit) as msg:
|
||||||
["-s", "accuracy", "-m", "STree", "-b", "1", "-g", "1"],
|
module = self.search_script("be_report")
|
||||||
)
|
module.main(["unknown"])
|
||||||
|
self.assertEqual(msg.exception.code, 2)
|
||||||
|
self.check_output_file(stderr, "report_unknown_subcommand")
|
||||||
|
|
||||||
|
def test_be_report_without_subcommand(self):
|
||||||
|
stdout, stderr = self.execute_script("be_report", "")
|
||||||
self.assertEqual(stderr.getvalue(), "")
|
self.assertEqual(stderr.getvalue(), "")
|
||||||
self.check_output_file(stdout, "report_best")
|
self.check_output_file(stdout, "report_without_subcommand")
|
||||||
|
|
||||||
def test_be_report_excel_compared(self):
|
def test_be_report_excel_compared(self):
|
||||||
file_name = "results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json"
|
file_name = "results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json"
|
||||||
stdout, stderr = self.execute_script(
|
stdout, stderr = self.execute_script(
|
||||||
"be_report",
|
"be_report",
|
||||||
["-f", file_name, "-x", "1", "-c", "1"],
|
["file", file_name, "-x", "-c"],
|
||||||
)
|
)
|
||||||
file_name = os.path.join(
|
file_name = os.path.join(
|
||||||
Folders.results, file_name.replace(".json", ".xlsx")
|
Folders.results, file_name.replace(".json", ".xlsx")
|
||||||
@@ -102,7 +132,7 @@ class BeReportTest(TestBase):
|
|||||||
file_name = "results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json"
|
file_name = "results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json"
|
||||||
stdout, stderr = self.execute_script(
|
stdout, stderr = self.execute_script(
|
||||||
"be_report",
|
"be_report",
|
||||||
["-f", file_name, "-x", "1"],
|
["file", file_name, "-x"],
|
||||||
)
|
)
|
||||||
file_name = os.path.join(
|
file_name = os.path.join(
|
||||||
Folders.results, file_name.replace(".json", ".xlsx")
|
Folders.results, file_name.replace(".json", ".xlsx")
|
||||||
@@ -117,7 +147,7 @@ class BeReportTest(TestBase):
|
|||||||
file_name = "results_accuracy_ODTE_Galgo_2022-04-20_10:52:20_0.json"
|
file_name = "results_accuracy_ODTE_Galgo_2022-04-20_10:52:20_0.json"
|
||||||
stdout, stderr = self.execute_script(
|
stdout, stderr = self.execute_script(
|
||||||
"be_report",
|
"be_report",
|
||||||
["-f", file_name, "-q", "1"],
|
["file", file_name, "-q"],
|
||||||
)
|
)
|
||||||
file_name = os.path.join(
|
file_name = os.path.join(
|
||||||
Folders.results, file_name.replace(".json", ".sql")
|
Folders.results, file_name.replace(".json", ".sql")
|
||||||
|
10
benchmark/tests/test_files/be_init_project.test
Normal file
10
benchmark/tests/test_files/be_init_project.test
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
Creating folder test_project
|
||||||
|
Creating folder test_project/results
|
||||||
|
Creating folder test_project/hidden_results
|
||||||
|
Creating folder test_project/exreport
|
||||||
|
Creating folder test_project/exreport/exreport_output
|
||||||
|
Creating folder test_project/img
|
||||||
|
Done!
|
||||||
|
Please, edit .env file with your settings and add a datasets folder
|
||||||
|
with an all.txt file with the datasets you want to use.
|
||||||
|
In that folder you have to include all the datasets you'll use.
|
@@ -0,0 +1,2 @@
|
|||||||
|
usage: be_init_project [-h] project_name
|
||||||
|
be_init_project: error: the following arguments are required: project_name
|
5
benchmark/tests/test_files/be_list_already_hidden.test
Normal file
5
benchmark/tests/test_files/be_list_already_hidden.test
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
[92m # Date File Score Time(h) Title
|
||||||
|
=== ========== ================================================================ ======== ======= =======================
|
||||||
|
[93m 0 2022-05-04 results_accuracy_XGBoost_MacBookpro16_2022-05-04_11:00:35_0.json nan 3.091 Default hyperparameters
|
||||||
|
[92m 1 2021-11-01 results_accuracy_STree_iMac27_2021-11-01_23:55:16_0.json 0.97446 0.098 default
|
||||||
|
Already hidden
|
7
benchmark/tests/test_files/be_list_default.test
Normal file
7
benchmark/tests/test_files/be_list_default.test
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
[94m # Date File Score Time(h) Title
|
||||||
|
=== ========== =============================================================== ======== ======= ============================================
|
||||||
|
[96m 0 2022-04-20 results_accuracy_ODTE_Galgo_2022-04-20_10:52:20_0.json 0.04341 6.275 Gridsearched hyperparams v022.1b random_init
|
||||||
|
[94m 1 2022-01-14 results_accuracy_RandomForest_iMac27_2022-01-14_12:39:30_0.json 0.03627 0.076 Test default paramters with RandomForest
|
||||||
|
[96m 2 2021-11-01 results_accuracy_STree_macbook-pro_2021-11-01_19:17:07_0.json 0.03790 1.143 default B
|
||||||
|
[94m 3 2021-10-27 results_accuracy_STree_iMac27_2021-10-27_09:40:40_0.json 0.04158 0.943 default A
|
||||||
|
[96m 4 2021-09-30 results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json 0.04544 0.173 With gridsearched hyperparameters
|
16
benchmark/tests/test_files/be_list_delete.test
Normal file
16
benchmark/tests/test_files/be_list_delete.test
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
[94m # Date File Score Time(h) Title
|
||||||
|
=== ========== ================================================================ ======== ======= ============================================
|
||||||
|
[96m 0 2022-05-04 results_accuracy_XGBoost_MacBookpro16_2022-05-04_11:00:35_0.json nan 3.091 Default hyperparameters
|
||||||
|
[94m 1 2022-04-20 results_accuracy_ODTE_Galgo_2022-04-20_10:52:20_0.json 0.04341 6.275 Gridsearched hyperparams v022.1b random_init
|
||||||
|
[96m 2 2022-01-14 results_accuracy_RandomForest_iMac27_2022-01-14_12:39:30_0.json 0.03627 0.076 Test default paramters with RandomForest
|
||||||
|
[94m 3 2021-11-01 results_accuracy_STree_macbook-pro_2021-11-01_19:17:07_0.json 0.03790 1.143 default B
|
||||||
|
[96m 4 2021-10-27 results_accuracy_STree_iMac27_2021-10-27_09:40:40_0.json 0.04158 0.943 default A
|
||||||
|
[94m 5 2021-09-30 results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json 0.04544 0.173 With gridsearched hyperparameters
|
||||||
|
[93mDeleting results/results_accuracy_XGBoost_MacBookpro16_2022-05-04_11:00:35_0.json
|
||||||
|
[94m # Date File Score Time(h) Title
|
||||||
|
=== ========== =============================================================== ======== ======= ============================================
|
||||||
|
[96m 0 2022-04-20 results_accuracy_ODTE_Galgo_2022-04-20_10:52:20_0.json 0.04341 6.275 Gridsearched hyperparams v022.1b random_init
|
||||||
|
[94m 1 2022-01-14 results_accuracy_RandomForest_iMac27_2022-01-14_12:39:30_0.json 0.03627 0.076 Test default paramters with RandomForest
|
||||||
|
[96m 2 2021-11-01 results_accuracy_STree_macbook-pro_2021-11-01_19:17:07_0.json 0.03790 1.143 default B
|
||||||
|
[94m 3 2021-10-27 results_accuracy_STree_iMac27_2021-10-27_09:40:40_0.json 0.04158 0.943 default A
|
||||||
|
[96m 4 2021-09-30 results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json 0.04544 0.173 With gridsearched hyperparameters
|
4
benchmark/tests/test_files/be_list_hidden.test
Normal file
4
benchmark/tests/test_files/be_list_hidden.test
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
[92m # Date File Score Time(h) Title
|
||||||
|
=== ========== ================================================================ ======== ======= =======================
|
||||||
|
[93m 0 2022-05-04 results_accuracy_XGBoost_MacBookpro16_2022-05-04_11:00:35_0.json nan 3.091 Default hyperparameters
|
||||||
|
[92m 1 2021-11-01 results_accuracy_STree_iMac27_2021-11-01_23:55:16_0.json 0.97446 0.098 default
|
3
benchmark/tests/test_files/be_list_hidden_nan.test
Normal file
3
benchmark/tests/test_files/be_list_hidden_nan.test
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
[92m # Date File Score Time(h) Title
|
||||||
|
=== ========== ================================================================ ======== ======= =======================
|
||||||
|
[93m 0 2022-05-04 results_accuracy_XGBoost_MacBookpro16_2022-05-04_11:00:35_0.json nan 3.091 Default hyperparameters
|
16
benchmark/tests/test_files/be_list_hide.test
Normal file
16
benchmark/tests/test_files/be_list_hide.test
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
[94m # Date File Score Time(h) Title
|
||||||
|
=== ========== ================================================================ ======== ======= ============================================
|
||||||
|
[96m 0 2022-05-04 results_accuracy_XGBoost_MacBookpro16_2022-05-04_11:00:35_0.json nan 3.091 Default hyperparameters
|
||||||
|
[94m 1 2022-04-20 results_accuracy_ODTE_Galgo_2022-04-20_10:52:20_0.json 0.04341 6.275 Gridsearched hyperparams v022.1b random_init
|
||||||
|
[96m 2 2022-01-14 results_accuracy_RandomForest_iMac27_2022-01-14_12:39:30_0.json 0.03627 0.076 Test default paramters with RandomForest
|
||||||
|
[94m 3 2021-11-01 results_accuracy_STree_macbook-pro_2021-11-01_19:17:07_0.json 0.03790 1.143 default B
|
||||||
|
[96m 4 2021-10-27 results_accuracy_STree_iMac27_2021-10-27_09:40:40_0.json 0.04158 0.943 default A
|
||||||
|
[94m 5 2021-09-30 results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json 0.04544 0.173 With gridsearched hyperparameters
|
||||||
|
[93mHiding results/results_accuracy_XGBoost_MacBookpro16_2022-05-04_11:00:35_0.json
|
||||||
|
[94m # Date File Score Time(h) Title
|
||||||
|
=== ========== =============================================================== ======== ======= ============================================
|
||||||
|
[96m 0 2022-04-20 results_accuracy_ODTE_Galgo_2022-04-20_10:52:20_0.json 0.04341 6.275 Gridsearched hyperparams v022.1b random_init
|
||||||
|
[94m 1 2022-01-14 results_accuracy_RandomForest_iMac27_2022-01-14_12:39:30_0.json 0.03627 0.076 Test default paramters with RandomForest
|
||||||
|
[96m 2 2021-11-01 results_accuracy_STree_macbook-pro_2021-11-01_19:17:07_0.json 0.03790 1.143 default B
|
||||||
|
[94m 3 2021-10-27 results_accuracy_STree_iMac27_2021-10-27_09:40:40_0.json 0.04158 0.943 default A
|
||||||
|
[96m 4 2021-09-30 results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json 0.04544 0.173 With gridsearched hyperparameters
|
5
benchmark/tests/test_files/be_list_model.test
Normal file
5
benchmark/tests/test_files/be_list_model.test
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
[94m # Date File Score Time(h) Title
|
||||||
|
=== ========== ============================================================= ======== ======= =================================
|
||||||
|
[96m 0 2021-11-01 results_accuracy_STree_macbook-pro_2021-11-01_19:17:07_0.json 0.03790 1.143 default B
|
||||||
|
[94m 1 2021-10-27 results_accuracy_STree_iMac27_2021-10-27_09:40:40_0.json 0.04158 0.943 default A
|
||||||
|
[96m 2 2021-09-30 results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json 0.04544 0.173 With gridsearched hyperparameters
|
10
benchmark/tests/test_files/be_list_model_2.test
Normal file
10
benchmark/tests/test_files/be_list_model_2.test
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
[94m # Date File Score Time(h) Title
|
||||||
|
=== ========== ============================================================= ======== ======= =================================
|
||||||
|
[96m 0 2021-11-01 results_accuracy_STree_macbook-pro_2021-11-01_19:17:07_0.json 0.03790 1.143 default B
|
||||||
|
[94m 1 2021-10-27 results_accuracy_STree_iMac27_2021-10-27_09:40:40_0.json 0.04158 0.943 default A
|
||||||
|
[96m 2 2021-09-30 results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json 0.04544 0.173 With gridsearched hyperparameters
|
||||||
|
[94m # Date File Score Time(h) Title
|
||||||
|
=== ========== ============================================================= ======== ======= =================================
|
||||||
|
[96m 0 2021-11-01 results_accuracy_STree_macbook-pro_2021-11-01_19:17:07_0.json 0.03790 1.143 default B
|
||||||
|
[94m 1 2021-10-27 results_accuracy_STree_iMac27_2021-10-27_09:40:40_0.json 0.04158 0.943 default A
|
||||||
|
[96m 2 2021-09-30 results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json 0.04544 0.173 With gridsearched hyperparameters
|
6
benchmark/tests/test_files/be_list_model_invalid.test
Normal file
6
benchmark/tests/test_files/be_list_model_invalid.test
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
[94m # Date File Score Time(h) Title
|
||||||
|
=== ========== ============================================================= ======== ======= =================================
|
||||||
|
[96m 0 2021-11-01 results_accuracy_STree_macbook-pro_2021-11-01_19:17:07_0.json 0.03790 1.143 default B
|
||||||
|
[94m 1 2021-10-27 results_accuracy_STree_iMac27_2021-10-27_09:40:40_0.json 0.04158 0.943 default A
|
||||||
|
[96m 2 2021-09-30 results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json 0.04544 0.173 With gridsearched hyperparameters
|
||||||
|
Invalid option. Try again!
|
@@ -1,13 +0,0 @@
|
|||||||
[94mDate File Score Time(h) Title
|
|
||||||
========== ================================================================ ======== ======= ============================================
|
|
||||||
[96m2022-05-04 results_accuracy_XGBoost_MacBookpro16_2022-05-04_11:00:35_0.json nan 3.091 Default hyperparameters
|
|
||||||
[94m2022-04-20 results_accuracy_ODTE_Galgo_2022-04-20_10:52:20_0.json 0.04341 6.275 Gridsearched hyperparams v022.1b random_init
|
|
||||||
[96m2022-01-14 results_accuracy_RandomForest_iMac27_2022-01-14_12:39:30_0.json 0.03627 0.076 Test default paramters with RandomForest
|
|
||||||
[94m2021-11-01 results_accuracy_STree_macbook-pro_2021-11-01_19:17:07_0.json 0.03790 1.143 default B
|
|
||||||
[96m2021-10-27 results_accuracy_STree_iMac27_2021-10-27_09:40:40_0.json 0.04158 0.943 default A
|
|
||||||
[94m2021-09-30 results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json 0.04544 0.173 With gridsearched hyperparameters
|
|
||||||
|
|
||||||
****************************** Results with nan moved to hidden ******************************
|
|
||||||
[94mDate File Score Time(h) Title
|
|
||||||
========== ================================================================ ======== ======= =======================
|
|
||||||
[96m2022-05-04 results_accuracy_XGBoost_MacBookpro16_2022-05-04_11:00:35_0.json nan 3.091 Default hyperparameters
|
|
@@ -1,7 +0,0 @@
|
|||||||
[94mDate File Score Time(h) Title
|
|
||||||
========== =============================================================== ======== ======= ============================================
|
|
||||||
[96m2022-04-20 results_accuracy_ODTE_Galgo_2022-04-20_10:52:20_0.json 0.04341 6.275 Gridsearched hyperparams v022.1b random_init
|
|
||||||
[94m2022-01-14 results_accuracy_RandomForest_iMac27_2022-01-14_12:39:30_0.json 0.03627 0.076 Test default paramters with RandomForest
|
|
||||||
[96m2021-11-01 results_accuracy_STree_macbook-pro_2021-11-01_19:17:07_0.json 0.03790 1.143 default B
|
|
||||||
[94m2021-10-27 results_accuracy_STree_iMac27_2021-10-27_09:40:40_0.json 0.04158 0.943 default A
|
|
||||||
[96m2021-09-30 results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json 0.04544 0.173 With gridsearched hyperparameters
|
|
20
benchmark/tests/test_files/be_list_report.test
Normal file
20
benchmark/tests/test_files/be_list_report.test
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
[94m # Date File Score Time(h) Title
|
||||||
|
=== ========== ============================================================= ======== ======= =================================
|
||||||
|
[96m 0 2021-11-01 results_accuracy_STree_macbook-pro_2021-11-01_19:17:07_0.json 0.03790 1.143 default B
|
||||||
|
[94m 1 2021-10-27 results_accuracy_STree_iMac27_2021-10-27_09:40:40_0.json 0.04158 0.943 default A
|
||||||
|
[96m 2 2021-09-30 results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json 0.04544 0.173 With gridsearched hyperparameters
|
||||||
|
[94m*************************************************************************************************************************
|
||||||
|
[94m* STree ver. 1.2.3 Python ver. 3.11x with 5 Folds cross validation and 10 random seeds. 2021-11-01 19:17:07 *
|
||||||
|
[94m* default B *
|
||||||
|
[94m* Random seeds: [57, 31, 1714, 17, 23, 79, 83, 97, 7, 1] Stratified: False *
|
||||||
|
[94m* Execution took 4115.04 seconds, 1.14 hours, on macbook-pro *
|
||||||
|
[94m* Score is accuracy *
|
||||||
|
[94m*************************************************************************************************************************
|
||||||
|
|
||||||
|
Dataset Sampl. Feat. Cls Nodes Leaves Depth Score Time Hyperparameters
|
||||||
|
============================== ====== ===== === ======= ======= ======= =============== ================= ===============
|
||||||
|
[96mbalance-scale 625 4 3 18.78 9.88 5.90 0.970000±0.0020 0.233304±0.0481 {'max_features': 'auto', 'splitter': 'mutual'}
|
||||||
|
[94mballoons 16 4 2 4.72 2.86 2.78 0.556667±0.2941 0.021352±0.0058 {'max_features': 'auto', 'splitter': 'mutual'}
|
||||||
|
[94m*************************************************************************************************************************
|
||||||
|
[94m* accuracy compared to STree_default (liblinear-ovr) .: 0.0379 *
|
||||||
|
[94m*************************************************************************************************************************
|
7
benchmark/tests/test_files/be_list_report_excel.test
Normal file
7
benchmark/tests/test_files/be_list_report_excel.test
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
[94m # Date File Score Time(h) Title
|
||||||
|
=== ========== ============================================================= ======== ======= =================================
|
||||||
|
[96m 0 2021-11-01 results_accuracy_STree_macbook-pro_2021-11-01_19:17:07_0.json 0.03790 1.143 default B
|
||||||
|
[94m 1 2021-10-27 results_accuracy_STree_iMac27_2021-10-27_09:40:40_0.json 0.04158 0.943 default A
|
||||||
|
[96m 2 2021-09-30 results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json 0.04544 0.173 With gridsearched hyperparameters
|
||||||
|
Added results/results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json to some_results.xlsx
|
||||||
|
Generated file: some_results.xlsx
|
8
benchmark/tests/test_files/be_list_report_excel_2.test
Normal file
8
benchmark/tests/test_files/be_list_report_excel_2.test
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
[94m # Date File Score Time(h) Title
|
||||||
|
=== ========== ============================================================= ======== ======= =================================
|
||||||
|
[96m 0 2021-11-01 results_accuracy_STree_macbook-pro_2021-11-01_19:17:07_0.json 0.03790 1.143 default B
|
||||||
|
[94m 1 2021-10-27 results_accuracy_STree_iMac27_2021-10-27_09:40:40_0.json 0.04158 0.943 default A
|
||||||
|
[96m 2 2021-09-30 results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json 0.04544 0.173 With gridsearched hyperparameters
|
||||||
|
Added results/results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json to some_results.xlsx
|
||||||
|
Added results/results_accuracy_STree_iMac27_2021-10-27_09:40:40_0.json to some_results.xlsx
|
||||||
|
Generated file: some_results.xlsx
|
@@ -1,16 +1,16 @@
|
|||||||
[94m************************************************************************************************************************
|
[94m*************************************************************************************************************************
|
||||||
[94m* STree ver. 1.2.4 Python ver. 3.11x with 5 Folds cross validation and 10 random seeds. 2022-05-09 00:15:25 *
|
[94m* STree ver. 1.2.4 Python ver. 3.11x with 5 Folds cross validation and 10 random seeds. 2022-05-09 00:15:25 *
|
||||||
[94m* test *
|
[94m* test *
|
||||||
[94m* Random seeds: [57, 31, 1714, 17, 23, 79, 83, 97, 7, 1] Stratified: False *
|
[94m* Random seeds: [57, 31, 1714, 17, 23, 79, 83, 97, 7, 1] Stratified: False *
|
||||||
[94m* Execution took 0.80 seconds, 0.00 hours, on iMac27 *
|
[94m* Execution took 0.80 seconds, 0.00 hours, on iMac27 *
|
||||||
[94m* Score is accuracy *
|
[94m* Score is accuracy *
|
||||||
[94m************************************************************************************************************************
|
[94m*************************************************************************************************************************
|
||||||
|
|
||||||
Dataset Sampl. Feat. Cls Nodes Leaves Depth Score Time Hyperparameters
|
Dataset Sampl. Feat. Cls Nodes Leaves Depth Score Time Hyperparameters
|
||||||
============================== ====== ===== === ======= ======= ======= =============== ================ ===============
|
============================== ====== ===== === ======= ======= ======= =============== ================= ===============
|
||||||
[96mbalance-scale 625 4 3 23.32 12.16 6.44 0.840160±0.0304 0.013745±0.0019 {'splitter': 'best', 'max_features': 'auto'}
|
[96mbalance-scale 625 4 3 23.32 12.16 6.44 0.840160±0.0304 0.013745±0.0019 {'splitter': 'best', 'max_features': 'auto'}
|
||||||
[94mballoons 16 4 2 3.00 2.00 2.00 0.860000±0.2850 0.000388±0.0000 {'C': 7, 'gamma': 0.1, 'kernel': 'rbf', 'max_iter': 10000.0, 'multiclass_strategy': 'ovr'}
|
[94mballoons 16 4 2 3.00 2.00 2.00 0.860000±0.2850 0.000388±0.0000 {'C': 7, 'gamma': 0.1, 'kernel': 'rbf', 'max_iter': 10000.0, 'multiclass_strategy': 'ovr'}
|
||||||
[94m************************************************************************************************************************
|
[94m*************************************************************************************************************************
|
||||||
[94m* accuracy compared to STree_default (liblinear-ovr) .: 0.0422 *
|
[94m* accuracy compared to STree_default (liblinear-ovr) .: 0.0422 *
|
||||||
[94m************************************************************************************************************************
|
[94m*************************************************************************************************************************
|
||||||
Results in results/results_accuracy_STree_iMac27_2022-05-09_00:15:25_0.json
|
Results in results/results_accuracy_STree_iMac27_2022-05-09_00:15:25_0.json
|
||||||
|
@@ -1,16 +1,16 @@
|
|||||||
[94m************************************************************************************************************************
|
[94m*************************************************************************************************************************
|
||||||
[94m* STree ver. 1.2.4 Python ver. 3.11x with 5 Folds cross validation and 10 random seeds. 2022-05-08 20:14:43 *
|
[94m* STree ver. 1.2.4 Python ver. 3.11x with 5 Folds cross validation and 10 random seeds. 2022-05-08 20:14:43 *
|
||||||
[94m* test *
|
[94m* test *
|
||||||
[94m* Random seeds: [57, 31, 1714, 17, 23, 79, 83, 97, 7, 1] Stratified: False *
|
[94m* Random seeds: [57, 31, 1714, 17, 23, 79, 83, 97, 7, 1] Stratified: False *
|
||||||
[94m* Execution took 0.48 seconds, 0.00 hours, on iMac27 *
|
[94m* Execution took 0.48 seconds, 0.00 hours, on iMac27 *
|
||||||
[94m* Score is accuracy *
|
[94m* Score is accuracy *
|
||||||
[94m************************************************************************************************************************
|
[94m*************************************************************************************************************************
|
||||||
|
|
||||||
Dataset Sampl. Feat. Cls Nodes Leaves Depth Score Time Hyperparameters
|
Dataset Sampl. Feat. Cls Nodes Leaves Depth Score Time Hyperparameters
|
||||||
============================== ====== ===== === ======= ======= ======= =============== ================ ===============
|
============================== ====== ===== === ======= ======= ======= =============== ================= ===============
|
||||||
[96mbalance-scale 625 4 3 17.36 9.18 6.18 0.908480±0.0247 0.007388±0.0013 {}
|
[96mbalance-scale 625 4 3 17.36 9.18 6.18 0.908480±0.0247 0.007388±0.0013 {}
|
||||||
[94mballoons 16 4 2 4.64 2.82 2.66 0.663333±0.3009 0.000664±0.0002 {}
|
[94mballoons 16 4 2 4.64 2.82 2.66 0.663333±0.3009 0.000664±0.0002 {}
|
||||||
[94m************************************************************************************************************************
|
[94m*************************************************************************************************************************
|
||||||
[94m* accuracy compared to STree_default (liblinear-ovr) .: 0.0390 *
|
[94m* accuracy compared to STree_default (liblinear-ovr) .: 0.0390 *
|
||||||
[94m************************************************************************************************************************
|
[94m*************************************************************************************************************************
|
||||||
Results in results/results_accuracy_STree_iMac27_2022-05-08_20:14:43_0.json
|
Results in results/results_accuracy_STree_iMac27_2022-05-08_20:14:43_0.json
|
||||||
|
@@ -1,15 +1,15 @@
|
|||||||
[94m************************************************************************************************************************
|
[94m*************************************************************************************************************************
|
||||||
[94m* STree ver. 1.2.4 Python ver. 3.11x with 5 Folds cross validation and 10 random seeds. 2022-05-08 19:38:28 *
|
[94m* STree ver. 1.2.4 Python ver. 3.11x with 5 Folds cross validation and 10 random seeds. 2022-05-08 19:38:28 *
|
||||||
[94m* test *
|
[94m* Test with only one dataset *
|
||||||
[94m* Random seeds: [57, 31, 1714, 17, 23, 79, 83, 97, 7, 1] Stratified: False *
|
[94m* Random seeds: [57, 31, 1714, 17, 23, 79, 83, 97, 7, 1] Stratified: False *
|
||||||
[94m* Execution took 0.06 seconds, 0.00 hours, on iMac27 *
|
[94m* Execution took 0.06 seconds, 0.00 hours, on iMac27 *
|
||||||
[94m* Score is accuracy *
|
[94m* Score is accuracy *
|
||||||
[94m************************************************************************************************************************
|
[94m*************************************************************************************************************************
|
||||||
|
|
||||||
Dataset Sampl. Feat. Cls Nodes Leaves Depth Score Time Hyperparameters
|
Dataset Sampl. Feat. Cls Nodes Leaves Depth Score Time Hyperparameters
|
||||||
============================== ====== ===== === ======= ======= ======= =============== ================ ===============
|
============================== ====== ===== === ======= ======= ======= =============== ================= ===============
|
||||||
[96mballoons 16 4 2 4.64 2.82 2.66 0.663333±0.3009 0.000671±0.0001 {}
|
[96mballoons 16 4 2 4.64 2.82 2.66 0.663333±0.3009 0.000671±0.0001 {}
|
||||||
[94m************************************************************************************************************************
|
[94m*************************************************************************************************************************
|
||||||
[94m* accuracy compared to STree_default (liblinear-ovr) .: 0.0165 *
|
[94m* accuracy compared to STree_default (liblinear-ovr) .: 0.0165 *
|
||||||
[94m************************************************************************************************************************
|
[94m*************************************************************************************************************************
|
||||||
Partial result file removed: results/results_accuracy_STree_iMac27_2022-05-08_19:38:28_0.json
|
Partial result file removed: results/results_accuracy_STree_iMac27_2022-05-08_19:38:28_0.json
|
||||||
|
@@ -1,16 +1,16 @@
|
|||||||
[94m************************************************************************************************************************
|
[94m*************************************************************************************************************************
|
||||||
[94m* STree ver. 1.2.4 Python ver. 3.11x with 5 Folds cross validation and 10 random seeds. 2022-05-09 00:21:06 *
|
[94m* STree ver. 1.2.4 Python ver. 3.11x with 5 Folds cross validation and 10 random seeds. 2022-05-09 00:21:06 *
|
||||||
[94m* test *
|
[94m* test *
|
||||||
[94m* Random seeds: [57, 31, 1714, 17, 23, 79, 83, 97, 7, 1] Stratified: False *
|
[94m* Random seeds: [57, 31, 1714, 17, 23, 79, 83, 97, 7, 1] Stratified: False *
|
||||||
[94m* Execution took 0.89 seconds, 0.00 hours, on iMac27 *
|
[94m* Execution took 0.89 seconds, 0.00 hours, on iMac27 *
|
||||||
[94m* Score is accuracy *
|
[94m* Score is accuracy *
|
||||||
[94m************************************************************************************************************************
|
[94m*************************************************************************************************************************
|
||||||
|
|
||||||
Dataset Sampl. Feat. Cls Nodes Leaves Depth Score Time Hyperparameters
|
Dataset Sampl. Feat. Cls Nodes Leaves Depth Score Time Hyperparameters
|
||||||
============================== ====== ===== === ======= ======= ======= =============== ================ ===============
|
============================== ====== ===== === ======= ======= ======= =============== ================= ===============
|
||||||
[96mbalance-scale 625 4 3 26.12 13.56 7.94 0.910720±0.0249 0.015852±0.0027 {'C': 1.0, 'kernel': 'liblinear', 'multiclass_strategy': 'ovr'}
|
[96mbalance-scale 625 4 3 26.12 13.56 7.94 0.910720±0.0249 0.015852±0.0027 {'C': 1.0, 'kernel': 'liblinear', 'multiclass_strategy': 'ovr'}
|
||||||
[94mballoons 16 4 2 4.64 2.82 2.66 0.663333±0.3009 0.000640±0.0001 {'C': 1.0, 'kernel': 'linear', 'multiclass_strategy': 'ovr'}
|
[94mballoons 16 4 2 4.64 2.82 2.66 0.663333±0.3009 0.000640±0.0001 {'C': 1.0, 'kernel': 'linear', 'multiclass_strategy': 'ovr'}
|
||||||
[94m************************************************************************************************************************
|
[94m*************************************************************************************************************************
|
||||||
[94m* accuracy compared to STree_default (liblinear-ovr) .: 0.0391 *
|
[94m* accuracy compared to STree_default (liblinear-ovr) .: 0.0391 *
|
||||||
[94m************************************************************************************************************************
|
[94m*************************************************************************************************************************
|
||||||
Results in results/results_accuracy_STree_iMac27_2022-05-09_00:21:06_0.json
|
Results in results/results_accuracy_STree_iMac27_2022-05-09_00:21:06_0.json
|
||||||
|
@@ -26,10 +26,10 @@
|
|||||||
* [93mresults_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json [96m*
|
* [93mresults_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json [96m*
|
||||||
[96m* [96m*
|
[96m* [96m*
|
||||||
[96m*********************************************************************************
|
[96m*********************************************************************************
|
||||||
[94mDate File Score Time(h) Title
|
[94m # Date File Score Time(h) Title
|
||||||
========== =============================================================== ======== ======= ============================================
|
=== ========== =============================================================== ======== ======= ============================================
|
||||||
[96m2021-09-30 results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json 0.04544 0.173 With gridsearched hyperparameters
|
[96m 0 2021-09-30 results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json 0.04544 0.173 With gridsearched hyperparameters
|
||||||
[94m2022-04-20 results_accuracy_ODTE_Galgo_2022-04-20_10:52:20_0.json 0.04341 6.275 Gridsearched hyperparams v022.1b random_init
|
[94m 1 2022-04-20 results_accuracy_ODTE_Galgo_2022-04-20_10:52:20_0.json 0.04341 6.275 Gridsearched hyperparams v022.1b random_init
|
||||||
[96m2021-10-27 results_accuracy_STree_iMac27_2021-10-27_09:40:40_0.json 0.04158 0.943 default A
|
[96m 2 2021-10-27 results_accuracy_STree_iMac27_2021-10-27_09:40:40_0.json 0.04158 0.943 default A
|
||||||
[94m2021-11-01 results_accuracy_STree_macbook-pro_2021-11-01_19:17:07_0.json 0.03790 1.143 default B
|
[94m 3 2021-11-01 results_accuracy_STree_macbook-pro_2021-11-01_19:17:07_0.json 0.03790 1.143 default B
|
||||||
[96m2022-01-14 results_accuracy_RandomForest_iMac27_2022-01-14_12:39:30_0.json 0.03627 0.076 Test default paramters with RandomForest
|
[96m 4 2022-01-14 results_accuracy_RandomForest_iMac27_2022-01-14_12:39:30_0.json 0.03627 0.076 Test default paramters with RandomForest
|
||||||
|
@@ -26,10 +26,10 @@
|
|||||||
* [93mresults_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json [96m*
|
* [93mresults_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json [96m*
|
||||||
[96m* [96m*
|
[96m* [96m*
|
||||||
[96m*********************************************************************************
|
[96m*********************************************************************************
|
||||||
[94mDate File Score Time(h) Title
|
[94m # Date File Score Time(h) Title
|
||||||
========== =============================================================== ======== ======= ============================================
|
=== ========== =============================================================== ======== ======= ============================================
|
||||||
[96m2021-09-30 results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json 0.04544 0.173 With gridsearched hyperparameters
|
[96m 0 2021-09-30 results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json 0.04544 0.173 With gridsearched hyperparameters
|
||||||
[94m2022-04-20 results_accuracy_ODTE_Galgo_2022-04-20_10:52:20_0.json 0.04341 6.275 Gridsearched hyperparams v022.1b random_init
|
[94m 1 2022-04-20 results_accuracy_ODTE_Galgo_2022-04-20_10:52:20_0.json 0.04341 6.275 Gridsearched hyperparams v022.1b random_init
|
||||||
[96m2021-10-27 results_accuracy_STree_iMac27_2021-10-27_09:40:40_0.json 0.04158 0.943 default A
|
[96m 2 2021-10-27 results_accuracy_STree_iMac27_2021-10-27_09:40:40_0.json 0.04158 0.943 default A
|
||||||
[94m2021-11-01 results_accuracy_STree_macbook-pro_2021-11-01_19:17:07_0.json 0.03790 1.143 default B
|
[94m 3 2021-11-01 results_accuracy_STree_macbook-pro_2021-11-01_19:17:07_0.json 0.03790 1.143 default B
|
||||||
[96m2022-01-14 results_accuracy_RandomForest_iMac27_2022-01-14_12:39:30_0.json 0.03627 0.076 Test default paramters with RandomForest
|
[96m 4 2022-01-14 results_accuracy_RandomForest_iMac27_2022-01-14_12:39:30_0.json 0.03627 0.076 Test default paramters with RandomForest
|
||||||
|
@@ -26,13 +26,13 @@
|
|||||||
* [93mresults_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json [96m*
|
* [93mresults_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json [96m*
|
||||||
[96m* [96m*
|
[96m* [96m*
|
||||||
[96m*********************************************************************************
|
[96m*********************************************************************************
|
||||||
[94mDate File Score Time(h) Title
|
[94m # Date File Score Time(h) Title
|
||||||
========== =============================================================== ======== ======= ============================================
|
=== ========== =============================================================== ======== ======= ============================================
|
||||||
[96m2021-09-30 results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json 0.04544 0.173 With gridsearched hyperparameters
|
[96m 0 2021-09-30 results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json 0.04544 0.173 With gridsearched hyperparameters
|
||||||
[94m2022-04-20 results_accuracy_ODTE_Galgo_2022-04-20_10:52:20_0.json 0.04341 6.275 Gridsearched hyperparams v022.1b random_init
|
[94m 1 2022-04-20 results_accuracy_ODTE_Galgo_2022-04-20_10:52:20_0.json 0.04341 6.275 Gridsearched hyperparams v022.1b random_init
|
||||||
[96m2021-10-27 results_accuracy_STree_iMac27_2021-10-27_09:40:40_0.json 0.04158 0.943 default A
|
[96m 2 2021-10-27 results_accuracy_STree_iMac27_2021-10-27_09:40:40_0.json 0.04158 0.943 default A
|
||||||
[94m2021-11-01 results_accuracy_STree_macbook-pro_2021-11-01_19:17:07_0.json 0.03790 1.143 default B
|
[94m 3 2021-11-01 results_accuracy_STree_macbook-pro_2021-11-01_19:17:07_0.json 0.03790 1.143 default B
|
||||||
[96m2022-01-14 results_accuracy_RandomForest_iMac27_2022-01-14_12:39:30_0.json 0.03627 0.076 Test default paramters with RandomForest
|
[96m 4 2022-01-14 results_accuracy_RandomForest_iMac27_2022-01-14_12:39:30_0.json 0.03627 0.076 Test default paramters with RandomForest
|
||||||
** No results found **
|
** No results found **
|
||||||
** No results found **
|
** No results found **
|
||||||
** No results found **
|
** No results found **
|
||||||
|
@@ -26,10 +26,10 @@
|
|||||||
* [93mresults_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json [96m*
|
* [93mresults_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json [96m*
|
||||||
[96m* [96m*
|
[96m* [96m*
|
||||||
[96m*********************************************************************************
|
[96m*********************************************************************************
|
||||||
[94mDate File Score Time(h) Title
|
[94m # Date File Score Time(h) Title
|
||||||
========== =============================================================== ======== ======= ============================================
|
=== ========== =============================================================== ======== ======= ============================================
|
||||||
[96m2021-09-30 results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json 0.04544 0.173 With gridsearched hyperparameters
|
[96m 0 2021-09-30 results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json 0.04544 0.173 With gridsearched hyperparameters
|
||||||
[94m2022-04-20 results_accuracy_ODTE_Galgo_2022-04-20_10:52:20_0.json 0.04341 6.275 Gridsearched hyperparams v022.1b random_init
|
[94m 1 2022-04-20 results_accuracy_ODTE_Galgo_2022-04-20_10:52:20_0.json 0.04341 6.275 Gridsearched hyperparams v022.1b random_init
|
||||||
[96m2021-10-27 results_accuracy_STree_iMac27_2021-10-27_09:40:40_0.json 0.04158 0.943 default A
|
[96m 2 2021-10-27 results_accuracy_STree_iMac27_2021-10-27_09:40:40_0.json 0.04158 0.943 default A
|
||||||
[94m2021-11-01 results_accuracy_STree_macbook-pro_2021-11-01_19:17:07_0.json 0.03790 1.143 default B
|
[94m 3 2021-11-01 results_accuracy_STree_macbook-pro_2021-11-01_19:17:07_0.json 0.03790 1.143 default B
|
||||||
[96m2022-01-14 results_accuracy_RandomForest_iMac27_2022-01-14_12:39:30_0.json 0.03627 0.076 Test default paramters with RandomForest
|
[96m 4 2022-01-14 results_accuracy_RandomForest_iMac27_2022-01-14_12:39:30_0.json 0.03627 0.076 Test default paramters with RandomForest
|
||||||
|
48
benchmark/tests/test_files/excel2.test
Normal file
48
benchmark/tests/test_files/excel2.test
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
1;1;" STree ver. 1.2.3 Python ver. 3.11x with 5 Folds cross validation and 10 random seeds. 2021-10-27 09:40:40"
|
||||||
|
2;1;" default A"
|
||||||
|
3;1;" Score is accuracy"
|
||||||
|
3;2;" Execution time"
|
||||||
|
3;5;"3,395.01 s"
|
||||||
|
3;7;" "
|
||||||
|
3;8;"Platform"
|
||||||
|
3;9;"iMac27"
|
||||||
|
3;10;"Random seeds: [57, 31, 1714, 17, 23, 79, 83, 97, 7, 1]"
|
||||||
|
4;5;" 0.94 h"
|
||||||
|
4;10;"Stratified: False"
|
||||||
|
6;1;"Dataset"
|
||||||
|
6;2;"Samples"
|
||||||
|
6;3;"Features"
|
||||||
|
6;4;"Classes"
|
||||||
|
6;5;"Nodes"
|
||||||
|
6;6;"Leaves"
|
||||||
|
6;7;"Depth"
|
||||||
|
6;8;"Score"
|
||||||
|
6;9;"Score Std."
|
||||||
|
6;10;"Time"
|
||||||
|
6;11;"Time Std."
|
||||||
|
6;12;"Hyperparameters"
|
||||||
|
7;1;"balance-scale"
|
||||||
|
7;2;"625"
|
||||||
|
7;3;"4"
|
||||||
|
7;4;"3"
|
||||||
|
7;5;"11.08"
|
||||||
|
7;6;"5.9"
|
||||||
|
7;7;"5.9"
|
||||||
|
7;8;"0.98"
|
||||||
|
7;9;"0.001"
|
||||||
|
7;10;"0.2852065515518188"
|
||||||
|
7;11;"0.06031593282605064"
|
||||||
|
7;12;"{'splitter': 'best', 'max_features': 'auto'}"
|
||||||
|
8;1;"balloons"
|
||||||
|
8;2;"16"
|
||||||
|
8;3;"4"
|
||||||
|
8;4;"2"
|
||||||
|
8;5;"4.12"
|
||||||
|
8;6;"2.56"
|
||||||
|
8;7;"2.56"
|
||||||
|
8;8;"0.695"
|
||||||
|
8;9;"0.2756860130252853"
|
||||||
|
8;10;"0.02120100021362305"
|
||||||
|
8;11;"0.003526023309468471"
|
||||||
|
8;12;"{'splitter': 'best', 'max_features': 'auto'}"
|
||||||
|
10;1;"** accuracy compared to STree_default (liblinear-ovr) .: 0.0416"
|
@@ -1,15 +1,15 @@
|
|||||||
[94m************************************************************************************************************************
|
[94m*************************************************************************************************************************
|
||||||
[94m* STree ver. 1.2.3 Python ver. 3.11x with 5 Folds cross validation and 10 random seeds. 2021-09-30 11:42:07 *
|
[94m* STree ver. 1.2.3 Python ver. 3.11x with 5 Folds cross validation and 10 random seeds. 2021-09-30 11:42:07 *
|
||||||
[94m* With gridsearched hyperparameters *
|
[94m* With gridsearched hyperparameters *
|
||||||
[94m* Random seeds: [57, 31, 1714, 17, 23, 79, 83, 97, 7, 1] Stratified: False *
|
[94m* Random seeds: [57, 31, 1714, 17, 23, 79, 83, 97, 7, 1] Stratified: False *
|
||||||
[94m* Execution took 624.25 seconds, 0.17 hours, on iMac27 *
|
[94m* Execution took 624.25 seconds, 0.17 hours, on iMac27 *
|
||||||
[94m* Score is accuracy *
|
[94m* Score is accuracy *
|
||||||
[94m************************************************************************************************************************
|
[94m*************************************************************************************************************************
|
||||||
|
|
||||||
Dataset Sampl. Feat. Cls Nodes Leaves Depth Score Time Hyperparameters
|
Dataset Sampl. Feat. Cls Nodes Leaves Depth Score Time Hyperparameters
|
||||||
============================== ====== ===== === ======= ======= ======= =============== ================ ===============
|
============================== ====== ===== === ======= ======= ======= =============== ================= ===============
|
||||||
[96mbalance-scale 625 4 3 7.00 4.00 3.00 0.970560±0.0150 0.014049±0.0020 {'C': 10000.0, 'gamma': 0.1, 'kernel': 'rbf', 'max_iter': 10000.0, 'multiclass_strategy': 'ovr'}
|
[96mbalance-scale 625 4 3 7.00 4.00 3.00 0.970560±0.0150 0.014049±0.0020 {'C': 10000.0, 'gamma': 0.1, 'kernel': 'rbf', 'max_iter': 10000.0, 'multiclass_strategy': 'ovr'}
|
||||||
[94mballoons 16 4 2 3.00 2.00 2.00 0.860000±0.2850 0.000854±0.0000 {'C': 7, 'gamma': 0.1, 'kernel': 'rbf', 'max_iter': 10000.0, 'multiclass_strategy': 'ovr'}
|
[94mballoons 16 4 2 3.00 2.00 2.00 0.860000±0.2850 0.000854±0.0000 {'C': 7, 'gamma': 0.1, 'kernel': 'rbf', 'max_iter': 10000.0, 'multiclass_strategy': 'ovr'}
|
||||||
[94m************************************************************************************************************************
|
[94m*************************************************************************************************************************
|
||||||
[94m* accuracy compared to STree_default (liblinear-ovr) .: 0.0454 *
|
[94m* accuracy compared to STree_default (liblinear-ovr) .: 0.0454 *
|
||||||
[94m************************************************************************************************************************
|
[94m*************************************************************************************************************************
|
||||||
|
@@ -1,16 +1,16 @@
|
|||||||
[94m************************************************************************************************************************
|
[94m*************************************************************************************************************************
|
||||||
[94m* STree ver. 1.2.3 Python ver. 3.11x with 5 Folds cross validation and 10 random seeds. 2021-09-30 11:42:07 *
|
[94m* STree ver. 1.2.3 Python ver. 3.11x with 5 Folds cross validation and 10 random seeds. 2021-09-30 11:42:07 *
|
||||||
[94m* With gridsearched hyperparameters *
|
[94m* With gridsearched hyperparameters *
|
||||||
[94m* Random seeds: [57, 31, 1714, 17, 23, 79, 83, 97, 7, 1] Stratified: False *
|
[94m* Random seeds: [57, 31, 1714, 17, 23, 79, 83, 97, 7, 1] Stratified: False *
|
||||||
[94m* Execution took 624.25 seconds, 0.17 hours, on iMac27 *
|
[94m* Execution took 624.25 seconds, 0.17 hours, on iMac27 *
|
||||||
[94m* Score is accuracy *
|
[94m* Score is accuracy *
|
||||||
[94m************************************************************************************************************************
|
[94m*************************************************************************************************************************
|
||||||
|
|
||||||
Dataset Sampl. Feat. Cls Nodes Leaves Depth Score Time Hyperparameters
|
Dataset Sampl. Feat. Cls Nodes Leaves Depth Score Time Hyperparameters
|
||||||
============================== ====== ===== === ======= ======= ======= =============== ================ ===============
|
============================== ====== ===== === ======= ======= ======= =============== ================= ===============
|
||||||
[96mbalance-scale 625 4 3 7.00 4.00 3.00 0.970560±0.0150 0.014049±0.0020 {'C': 10000.0, 'gamma': 0.1, 'kernel': 'rbf', 'max_iter': 10000.0, 'multiclass_strategy': 'ovr'}
|
[96mbalance-scale 625 4 3 7.00 4.00 3.00 0.970560±0.0150 0.014049±0.0020 {'C': 10000.0, 'gamma': 0.1, 'kernel': 'rbf', 'max_iter': 10000.0, 'multiclass_strategy': 'ovr'}
|
||||||
[94mballoons 16 4 2 3.00 2.00 2.00 0.860000±0.2850✔ 0.000854±0.0000 {'C': 7, 'gamma': 0.1, 'kernel': 'rbf', 'max_iter': 10000.0, 'multiclass_strategy': 'ovr'}
|
[94mballoons 16 4 2 3.00 2.00 2.00 0.860000±0.2850✔ 0.000854±0.0000 {'C': 7, 'gamma': 0.1, 'kernel': 'rbf', 'max_iter': 10000.0, 'multiclass_strategy': 'ovr'}
|
||||||
[94m************************************************************************************************************************
|
[94m*************************************************************************************************************************
|
||||||
[94m* ✔ Equal to best .....: 1 *
|
[94m* ✔ Equal to best .....: 1 *
|
||||||
[94m* accuracy compared to STree_default (liblinear-ovr) .: 0.0454 *
|
[94m* accuracy compared to STree_default (liblinear-ovr) .: 0.0454 *
|
||||||
[94m************************************************************************************************************************
|
[94m*************************************************************************************************************************
|
||||||
|
@@ -0,0 +1,2 @@
|
|||||||
|
usage: be_report [-h] {best,grid,file,datasets} ...
|
||||||
|
be_report: error: argument subcommand: invalid choice: 'unknown' (choose from 'best', 'grid', 'file', 'datasets')
|
12
benchmark/tests/test_files/report_without_subcommand.test
Normal file
12
benchmark/tests/test_files/report_without_subcommand.test
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
usage: be_report [-h] {best,grid,file,datasets} ...
|
||||||
|
|
||||||
|
positional arguments:
|
||||||
|
{best,grid,file,datasets}
|
||||||
|
help for subcommand
|
||||||
|
best Report best results obtained by any model/score. See be_build_best
|
||||||
|
grid Report grid results obtained by any model/score. See be_build_grid
|
||||||
|
file Report file results
|
||||||
|
datasets Report datasets information
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
@@ -1,4 +1,4 @@
|
|||||||
[92mDate File Score Time(h) Title
|
[92m # Date File Score Time(h) Title
|
||||||
========== ================================================================ ======== ======= =======================
|
=== ========== ================================================================ ======== ======= =======================
|
||||||
[93m2022-05-04 results_accuracy_XGBoost_MacBookpro16_2022-05-04_11:00:35_0.json nan 3.091 Default hyperparameters
|
[93m 0 2022-05-04 results_accuracy_XGBoost_MacBookpro16_2022-05-04_11:00:35_0.json nan 3.091 Default hyperparameters
|
||||||
[92m2021-11-01 results_accuracy_STree_iMac27_2021-11-01_23:55:16_0.json 0.97446 0.098 default
|
[92m 1 2021-11-01 results_accuracy_STree_iMac27_2021-11-01_23:55:16_0.json 0.97446 0.098 default
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
[94mDate File Score Time(h) Title
|
[94m # Date File Score Time(h) Title
|
||||||
========== ============================================================= ======== ======= =================================
|
=== ========== ============================================================= ======== ======= =================================
|
||||||
[96m2021-11-01 results_accuracy_STree_macbook-pro_2021-11-01_19:17:07_0.json 0.03790 1.143 default B
|
[96m 0 2021-11-01 results_accuracy_STree_macbook-pro_2021-11-01_19:17:07_0.json 0.03790 1.143 default B
|
||||||
[94m2021-10-27 results_accuracy_STree_iMac27_2021-10-27_09:40:40_0.json 0.04158 0.943 default A
|
[94m 1 2021-10-27 results_accuracy_STree_iMac27_2021-10-27_09:40:40_0.json 0.04158 0.943 default A
|
||||||
[96m2021-09-30 results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json 0.04544 0.173 With gridsearched hyperparameters
|
[96m 2 2021-09-30 results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json 0.04544 0.173 With gridsearched hyperparameters
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
[94mDate File Score Time(h) Title
|
[94m # Date File Score Time(h) Title
|
||||||
========== =============================================================== ======== ======= ============================================
|
=== ========== =============================================================== ======== ======= ============================================
|
||||||
[96m2022-04-20 results_accuracy_ODTE_Galgo_2022-04-20_10:52:20_0.json 0.04341 6.275 Gridsearched hyperparams v022.1b random_init
|
[96m 0 2022-04-20 results_accuracy_ODTE_Galgo_2022-04-20_10:52:20_0.json 0.04341 6.275 Gridsearched hyperparams v022.1b random_init
|
||||||
[94m2022-01-14 results_accuracy_RandomForest_iMac27_2022-01-14_12:39:30_0.json 0.03627 0.076 Test default paramters with RandomForest
|
[94m 1 2022-01-14 results_accuracy_RandomForest_iMac27_2022-01-14_12:39:30_0.json 0.03627 0.076 Test default paramters with RandomForest
|
||||||
[96m2021-11-01 results_accuracy_STree_macbook-pro_2021-11-01_19:17:07_0.json 0.03790 1.143 default B
|
[96m 2 2021-11-01 results_accuracy_STree_macbook-pro_2021-11-01_19:17:07_0.json 0.03790 1.143 default B
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
[94mDate File Score Time(h) Title
|
[94m # Date File Score Time(h) Title
|
||||||
========== =============================================================== ======== ======= ============================================
|
=== ========== =============================================================== ======== ======= ============================================
|
||||||
[96m2022-04-20 results_accuracy_ODTE_Galgo_2022-04-20_10:52:20_0.json 0.04341 6.275 Gridsearched hyperparams v022.1b random_init
|
[96m 0 2022-04-20 results_accuracy_ODTE_Galgo_2022-04-20_10:52:20_0.json 0.04341 6.275 Gridsearched hyperparams v022.1b random_init
|
||||||
[94m2022-01-14 results_accuracy_RandomForest_iMac27_2022-01-14_12:39:30_0.json 0.03627 0.076 Test default paramters with RandomForest
|
[94m 1 2022-01-14 results_accuracy_RandomForest_iMac27_2022-01-14_12:39:30_0.json 0.03627 0.076 Test default paramters with RandomForest
|
||||||
[96m2021-11-01 results_accuracy_STree_macbook-pro_2021-11-01_19:17:07_0.json 0.03790 1.143 default B
|
[96m 2 2021-11-01 results_accuracy_STree_macbook-pro_2021-11-01_19:17:07_0.json 0.03790 1.143 default B
|
||||||
[94m2021-10-27 results_accuracy_STree_iMac27_2021-10-27_09:40:40_0.json 0.04158 0.943 default A
|
[94m 3 2021-10-27 results_accuracy_STree_iMac27_2021-10-27_09:40:40_0.json 0.04158 0.943 default A
|
||||||
[96m2021-09-30 results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json 0.04544 0.173 With gridsearched hyperparameters
|
[96m 4 2021-09-30 results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json 0.04544 0.173 With gridsearched hyperparameters
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
[94mDate File Score Time(h) Title
|
[94m # Date File Score Time(h) Title
|
||||||
========== =============================================================== ======== ======= ============================================
|
=== ========== =============================================================== ======== ======= ============================================
|
||||||
[96m2021-09-30 results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json 0.04544 0.173 With gridsearched hyperparameters
|
[96m 0 2021-09-30 results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json 0.04544 0.173 With gridsearched hyperparameters
|
||||||
[94m2022-04-20 results_accuracy_ODTE_Galgo_2022-04-20_10:52:20_0.json 0.04341 6.275 Gridsearched hyperparams v022.1b random_init
|
[94m 1 2022-04-20 results_accuracy_ODTE_Galgo_2022-04-20_10:52:20_0.json 0.04341 6.275 Gridsearched hyperparams v022.1b random_init
|
||||||
[96m2021-10-27 results_accuracy_STree_iMac27_2021-10-27_09:40:40_0.json 0.04158 0.943 default A
|
[96m 2 2021-10-27 results_accuracy_STree_iMac27_2021-10-27_09:40:40_0.json 0.04158 0.943 default A
|
||||||
[94m2021-11-01 results_accuracy_STree_macbook-pro_2021-11-01_19:17:07_0.json 0.03790 1.143 default B
|
[94m 3 2021-11-01 results_accuracy_STree_macbook-pro_2021-11-01_19:17:07_0.json 0.03790 1.143 default B
|
||||||
[96m2022-01-14 results_accuracy_RandomForest_iMac27_2022-01-14_12:39:30_0.json 0.03627 0.076 Test default paramters with RandomForest
|
[96m 4 2022-01-14 results_accuracy_RandomForest_iMac27_2022-01-14_12:39:30_0.json 0.03627 0.076 Test default paramters with RandomForest
|
||||||
|
8
setup.py
8
setup.py
@@ -38,6 +38,7 @@ def script_names():
|
|||||||
"print_strees",
|
"print_strees",
|
||||||
"report",
|
"report",
|
||||||
"summary",
|
"summary",
|
||||||
|
"init_project",
|
||||||
]
|
]
|
||||||
result = []
|
result = []
|
||||||
for script in scripts:
|
for script in scripts:
|
||||||
@@ -49,20 +50,17 @@ setuptools.setup(
|
|||||||
name="benchmark",
|
name="benchmark",
|
||||||
version=get_data("version", "_version.py"),
|
version=get_data("version", "_version.py"),
|
||||||
license=get_data("license"),
|
license=get_data("license"),
|
||||||
description="Oblique decision tree with svm nodes",
|
description="Benchmark of models with different datasets",
|
||||||
long_description=readme(),
|
long_description=readme(),
|
||||||
long_description_content_type="text/markdown",
|
long_description_content_type="text/markdown",
|
||||||
packages=setuptools.find_packages(),
|
packages=setuptools.find_packages(),
|
||||||
url="https://github.com/Doctorado-ML/benchmark",
|
url="https://github.com/Doctorado-ML/benchmark",
|
||||||
author=get_data("author"),
|
author=get_data("author"),
|
||||||
author_email=get_data("author_email"),
|
author_email=get_data("author_email"),
|
||||||
keywords="scikit-learn oblique-classifier oblique-decision-tree decision-\
|
keywords="scikit-learn benchmark",
|
||||||
tree svm svc",
|
|
||||||
classifiers=[
|
classifiers=[
|
||||||
"Development Status :: 4 - Beta",
|
"Development Status :: 4 - Beta",
|
||||||
"License :: OSI Approved :: " + get_data("license"),
|
"License :: OSI Approved :: " + get_data("license"),
|
||||||
"Programming Language :: Python :: 3.8",
|
|
||||||
"Programming Language :: Python :: 3.9",
|
|
||||||
"Programming Language :: Python :: 3.10",
|
"Programming Language :: Python :: 3.10",
|
||||||
"Natural Language :: English",
|
"Natural Language :: English",
|
||||||
"Topic :: Scientific/Engineering :: Artificial Intelligence",
|
"Topic :: Scientific/Engineering :: Artificial Intelligence",
|
||||||
|
Reference in New Issue
Block a user