mirror of
https://github.com/Doctorado-ML/benchmark.git
synced 2025-08-17 00:15:55 +00:00
Compare commits
62 Commits
v0.1.1
...
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 | ||
9039a634cf
|
|||
5b5d385b4c
|
|||
6ebcc31c36
|
|||
cd2d803ff5
|
|||
6aec5b2a97
|
|||
f1b9dc1fef
|
|||
2e6f49de8e
|
|||
2d61cd11c2
|
|||
4b442a46f2
|
|||
feaf85d0b8
|
|||
c62b06f263
|
|||
|
b9eaa534bc | ||
0d87e670f7
|
|||
|
c77feff54b | ||
1e83db7956
|
|||
8cf823e843
|
|||
97718e6e82
|
|||
|
5532beb88a | ||
db61911ca6
|
|||
b24a508d1c
|
|||
29c4b4ceef
|
|||
2362f66c7a
|
|||
8001c7f2eb
|
|||
47bf6eeda6
|
|||
34b3bd94de
|
|||
7875e2e6ac
|
|||
34b25756ea
|
|||
e15ab3dcab
|
|||
12024df4d8
|
@@ -4,3 +4,5 @@ n_folds=5
|
||||
model=ODTE
|
||||
stratified=0
|
||||
source_data=Tanveer
|
||||
seeds=[57, 31, 1714, 17, 23, 79, 83, 97, 7, 1]
|
||||
discretize=0
|
||||
|
25
.github/workflows/build.yml
vendored
25
.github/workflows/build.yml
vendored
@@ -8,25 +8,22 @@ jobs:
|
||||
name: Build
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Get project version
|
||||
id: step_one
|
||||
run: |
|
||||
version=$(git describe --tags --abbrev=0)
|
||||
echo "project_version=$version" >> $GITHUB_ENV
|
||||
- run: echo "project_version=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV
|
||||
- uses: sonarsource/sonarqube-scan-action@master
|
||||
env:
|
||||
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
||||
SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}
|
||||
with:
|
||||
args: >
|
||||
-Dsonar.projectVersion=${{ env.project_version }}
|
||||
-Dsonar.python.version=3.10
|
||||
with:
|
||||
args: >
|
||||
-Dsonar.projectVersion=${{ env.project_version }}
|
||||
-Dsonar.python.version=3.10
|
||||
# If you wish to fail your job when the Quality Gate is red, uncomment the
|
||||
# following lines. This would typically be used to fail a deployment.
|
||||
- uses: sonarsource/sonarqube-quality-gate-action@master
|
||||
timeout-minutes: 5
|
||||
env:
|
||||
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
||||
#- uses: sonarsource/sonarqube-quality-gate-action@master
|
||||
# timeout-minutes: 5
|
||||
# env:
|
||||
# SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
||||
# SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}
|
||||
|
7
.github/workflows/main.yml
vendored
7
.github/workflows/main.yml
vendored
@@ -12,11 +12,11 @@ jobs:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-latest, ubuntu-latest]
|
||||
os: [ubuntu-latest]
|
||||
python: ["3.10"]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
- name: Set up Python ${{ matrix.python }}
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
@@ -43,10 +43,11 @@ jobs:
|
||||
pip install -q --upgrade pip
|
||||
pip install -q -r requirements.txt
|
||||
pip install -q --upgrade codecov coverage black flake8
|
||||
git clone https://github.com/Doctorado-ML/bayesclass.git
|
||||
- name: Lint
|
||||
run: |
|
||||
black --check --diff benchmark
|
||||
flake8 --count benchmark
|
||||
flake8 --count benchmark --ignore=E203,W503
|
||||
- name: Tests
|
||||
run: |
|
||||
coverage run -m unittest -v benchmark.tests
|
||||
|
@@ -1,7 +1,7 @@
|
||||
[](https://github.com/Doctorado-ML/benchmark/actions/workflows/main.yml)
|
||||
[](https://codecov.io/gh/Doctorado-ML/benchmark)
|
||||
[](http://haystack.local:25000/dashboard?id=benchmark)
|
||||
[](http://haystack.local:25000/dashboard?id=benchmark)
|
||||
[](https://haystack.rmontanana.es:25000/dashboard?id=benchmark)
|
||||
[](https://haystack.rmontanana.es:25000/dashboard?id=benchmark)
|
||||

|
||||
|
||||
# benchmark
|
||||
|
@@ -1,6 +1,6 @@
|
||||
import sys
|
||||
import argparse
|
||||
from .Experiments import Models
|
||||
from .Models import Models
|
||||
from .Utils import Files, NO_ENV
|
||||
|
||||
ALL_METRICS = (
|
||||
@@ -36,6 +36,7 @@ class EnvDefault(argparse.Action):
|
||||
self, envvar, required=True, default=None, mandatory=False, **kwargs
|
||||
):
|
||||
self._args = EnvData.load()
|
||||
self._overrides = {}
|
||||
if required and not mandatory:
|
||||
default = self._args[envvar]
|
||||
required = False
|
||||
@@ -47,24 +48,27 @@ class EnvDefault(argparse.Action):
|
||||
setattr(namespace, self.dest, values)
|
||||
|
||||
|
||||
class Arguments:
|
||||
def __init__(self):
|
||||
self.ap = argparse.ArgumentParser()
|
||||
class Arguments(argparse.ArgumentParser):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
models_data = Models.define_models(random_state=0)
|
||||
self._overrides = {}
|
||||
self._subparser = None
|
||||
self.parameters = {
|
||||
"best": [
|
||||
("-b", "--best"),
|
||||
"best_paramfile": [
|
||||
("-b", "--best_paramfile"),
|
||||
{
|
||||
"type": str,
|
||||
"action": "store_true",
|
||||
"required": False,
|
||||
"help": "best results of models",
|
||||
"default": False,
|
||||
"help": "Use best hyperparams file?",
|
||||
},
|
||||
],
|
||||
"color": [
|
||||
("-c", "--color"),
|
||||
{
|
||||
"type": bool,
|
||||
"required": False,
|
||||
"action": "store_true",
|
||||
"default": False,
|
||||
"help": "use colors for the tree",
|
||||
},
|
||||
@@ -72,8 +76,9 @@ class Arguments:
|
||||
"compare": [
|
||||
("-c", "--compare"),
|
||||
{
|
||||
"type": bool,
|
||||
"action": "store_true",
|
||||
"required": False,
|
||||
"default": False,
|
||||
"help": "Compare accuracy with best results",
|
||||
},
|
||||
],
|
||||
@@ -81,6 +86,8 @@ class Arguments:
|
||||
("-d", "--dataset"),
|
||||
{
|
||||
"type": str,
|
||||
"envvar": "dataset", # for compatiblity with EnvDefault
|
||||
"action": EnvDefault,
|
||||
"required": False,
|
||||
"help": "dataset to work with",
|
||||
},
|
||||
@@ -88,38 +95,26 @@ class Arguments:
|
||||
"excel": [
|
||||
("-x", "--excel"),
|
||||
{
|
||||
"type": bool,
|
||||
"required": False,
|
||||
"action": "store_true",
|
||||
"default": False,
|
||||
"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": [
|
||||
("-g", "--grid_paramfile"),
|
||||
{
|
||||
"type": bool,
|
||||
"required": False,
|
||||
"action": "store_true",
|
||||
"default": False,
|
||||
"help": "Use best hyperparams file?",
|
||||
"help": "Use grid output hyperparams file?",
|
||||
},
|
||||
],
|
||||
"hidden": [
|
||||
("--hidden",),
|
||||
{
|
||||
"type": str,
|
||||
"required": False,
|
||||
"action": "store_true",
|
||||
"default": False,
|
||||
"help": "Show hidden results",
|
||||
},
|
||||
@@ -140,8 +135,8 @@ class Arguments:
|
||||
"lose": [
|
||||
("-l", "--lose"),
|
||||
{
|
||||
"type": bool,
|
||||
"default": False,
|
||||
"action": "store_true",
|
||||
"required": False,
|
||||
"help": "show lose results",
|
||||
},
|
||||
@@ -178,9 +173,10 @@ class Arguments:
|
||||
"nan": [
|
||||
("--nan",),
|
||||
{
|
||||
"type": bool,
|
||||
"action": "store_true",
|
||||
"required": False,
|
||||
"help": "Move nan results to hidden folder",
|
||||
"default": False,
|
||||
"help": "List nan results to hidden folder",
|
||||
},
|
||||
],
|
||||
"number": [
|
||||
@@ -202,15 +198,6 @@ class Arguments:
|
||||
"help": "number of folds",
|
||||
},
|
||||
],
|
||||
"paramfile": [
|
||||
("-f", "--paramfile"),
|
||||
{
|
||||
"type": bool,
|
||||
"required": False,
|
||||
"default": False,
|
||||
"help": "Use best hyperparams file?",
|
||||
},
|
||||
],
|
||||
"platform": [
|
||||
("-P", "--platform"),
|
||||
{
|
||||
@@ -224,7 +211,7 @@ class Arguments:
|
||||
"quiet": [
|
||||
("-q", "--quiet"),
|
||||
{
|
||||
"type": bool,
|
||||
"action": "store_true",
|
||||
"required": False,
|
||||
"default": False,
|
||||
},
|
||||
@@ -232,7 +219,7 @@ class Arguments:
|
||||
"report": [
|
||||
("-r", "--report"),
|
||||
{
|
||||
"type": bool,
|
||||
"action": "store_true",
|
||||
"default": False,
|
||||
"required": False,
|
||||
"help": "Report results",
|
||||
@@ -250,14 +237,18 @@ class Arguments:
|
||||
],
|
||||
"sql": [
|
||||
("-q", "--sql"),
|
||||
{"type": bool, "required": False, "help": "Generate SQL File"},
|
||||
{
|
||||
"required": False,
|
||||
"action": "store_true",
|
||||
"default": False,
|
||||
"help": "Generate SQL File",
|
||||
},
|
||||
],
|
||||
"stratified": [
|
||||
("-t", "--stratified"),
|
||||
{
|
||||
"action": EnvDefault,
|
||||
"envvar": "stratified",
|
||||
"type": str,
|
||||
"required": True,
|
||||
"help": "Stratified",
|
||||
},
|
||||
@@ -265,8 +256,8 @@ class Arguments:
|
||||
"tex_output": [
|
||||
("-t", "--tex-output"),
|
||||
{
|
||||
"type": bool,
|
||||
"required": False,
|
||||
"action": "store_true",
|
||||
"default": False,
|
||||
"help": "Generate Tex file with the table",
|
||||
},
|
||||
@@ -278,8 +269,8 @@ class Arguments:
|
||||
"win": [
|
||||
("-w", "--win"),
|
||||
{
|
||||
"type": bool,
|
||||
"default": False,
|
||||
"action": "store_true",
|
||||
"required": False,
|
||||
"help": "show win results",
|
||||
},
|
||||
@@ -287,12 +278,43 @@ class Arguments:
|
||||
}
|
||||
|
||||
def xset(self, *arg_name, **kwargs):
|
||||
names, default = self.parameters[arg_name[0]]
|
||||
self.ap.add_argument(
|
||||
names, parameters = self.parameters[arg_name[0]]
|
||||
if "overrides" in kwargs:
|
||||
self._overrides[names[0]] = (kwargs["overrides"], kwargs["const"])
|
||||
del kwargs["overrides"]
|
||||
self.add_argument(
|
||||
*names,
|
||||
**{**default, **kwargs},
|
||||
**{**parameters, **kwargs},
|
||||
)
|
||||
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):
|
||||
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)
|
||||
|
196
benchmark/Datasets.py
Normal file
196
benchmark/Datasets.py
Normal file
@@ -0,0 +1,196 @@
|
||||
import os
|
||||
from types import SimpleNamespace
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
from scipy.io import arff
|
||||
from .Utils import Files
|
||||
from .Arguments import EnvData
|
||||
from mdlp.discretization import MDLP
|
||||
|
||||
|
||||
class Diterator:
|
||||
def __init__(self, data):
|
||||
self._stack = data.copy()
|
||||
|
||||
def __next__(self):
|
||||
if len(self._stack) == 0:
|
||||
raise StopIteration()
|
||||
return self._stack.pop(0)
|
||||
|
||||
|
||||
class DatasetsArff:
|
||||
@staticmethod
|
||||
def dataset_names(name):
|
||||
return f"{name}.arff"
|
||||
|
||||
@staticmethod
|
||||
def folder():
|
||||
return "datasets"
|
||||
|
||||
def load(self, name, class_name):
|
||||
file_name = os.path.join(self.folder(), self.dataset_names(name))
|
||||
data = arff.loadarff(file_name)
|
||||
df = pd.DataFrame(data[0])
|
||||
df.dropna(axis=0, how="any", inplace=True)
|
||||
self.dataset = df
|
||||
X = df.drop(class_name, axis=1)
|
||||
self.features = X.columns
|
||||
self.class_name = class_name
|
||||
y, _ = pd.factorize(df[class_name])
|
||||
X = X.to_numpy()
|
||||
return X, y
|
||||
|
||||
|
||||
class DatasetsTanveer:
|
||||
@staticmethod
|
||||
def dataset_names(name):
|
||||
return f"{name}_R.dat"
|
||||
|
||||
@staticmethod
|
||||
def folder():
|
||||
return "data"
|
||||
|
||||
def load(self, name, *args):
|
||||
file_name = os.path.join(self.folder(), self.dataset_names(name))
|
||||
data = pd.read_csv(
|
||||
file_name,
|
||||
sep="\t",
|
||||
index_col=0,
|
||||
)
|
||||
X = data.drop("clase", axis=1)
|
||||
self.features = X.columns
|
||||
X = X.to_numpy()
|
||||
y = data["clase"].to_numpy()
|
||||
self.dataset = data
|
||||
self.class_name = "clase"
|
||||
return X, y
|
||||
|
||||
|
||||
class DatasetsSurcov:
|
||||
@staticmethod
|
||||
def dataset_names(name):
|
||||
return f"{name}.csv"
|
||||
|
||||
@staticmethod
|
||||
def folder():
|
||||
return "datasets"
|
||||
|
||||
def load(self, name, *args):
|
||||
file_name = os.path.join(self.folder(), self.dataset_names(name))
|
||||
data = pd.read_csv(
|
||||
file_name,
|
||||
index_col=0,
|
||||
)
|
||||
data.dropna(axis=0, how="any", inplace=True)
|
||||
self.columns = data.columns
|
||||
X = data.drop(["class"], axis=1)
|
||||
self.features = X.columns
|
||||
self.class_name = "class"
|
||||
self.dataset = data
|
||||
X = X.to_numpy()
|
||||
y = data["class"].to_numpy()
|
||||
return X, y
|
||||
|
||||
|
||||
class Datasets:
|
||||
def __init__(self, dataset_name=None):
|
||||
envData = EnvData.load()
|
||||
# DatasetsSurcov, DatasetsTanveer, DatasetsArff,...
|
||||
source_name = getattr(
|
||||
__import__(__name__),
|
||||
f"Datasets{envData['source_data']}",
|
||||
)
|
||||
self.discretize = envData["discretize"] == "1"
|
||||
self.dataset = source_name()
|
||||
self.class_names = []
|
||||
self.data_sets = []
|
||||
# initialize self.class_names & self.data_sets
|
||||
class_names, sets = self._init_names(dataset_name)
|
||||
self.class_names = class_names
|
||||
self.data_sets = sets
|
||||
|
||||
def _init_names(self, dataset_name):
|
||||
file_name = os.path.join(self.dataset.folder(), Files.index)
|
||||
default_class = "class"
|
||||
with open(file_name) as f:
|
||||
sets = f.read().splitlines()
|
||||
class_names = [default_class] * len(sets)
|
||||
if "," in sets[0]:
|
||||
result = []
|
||||
class_names = []
|
||||
for data in sets:
|
||||
name, class_name = data.split(",")
|
||||
result.append(name)
|
||||
class_names.append(class_name)
|
||||
sets = result
|
||||
# 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):
|
||||
tmp = self.discretize
|
||||
self.discretize = False
|
||||
X, y = self.load(name)
|
||||
attr = SimpleNamespace()
|
||||
values, counts = np.unique(y, return_counts=True)
|
||||
comp = ""
|
||||
sep = ""
|
||||
for count in counts:
|
||||
comp += f"{sep}{count/sum(counts)*100:5.2f}%"
|
||||
sep = "/ "
|
||||
attr.balance = comp
|
||||
attr.classes = len(np.unique(y))
|
||||
attr.samples = X.shape[0]
|
||||
attr.features = X.shape[1]
|
||||
self.discretize = tmp
|
||||
return attr
|
||||
|
||||
def get_features(self):
|
||||
return self.dataset.features
|
||||
|
||||
def get_class_name(self):
|
||||
return self.dataset.class_name
|
||||
|
||||
def get_dataset(self):
|
||||
return self.dataset.dataset
|
||||
|
||||
def load(self, name, dataframe=False):
|
||||
try:
|
||||
class_name = self.class_names[self.data_sets.index(name)]
|
||||
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):
|
||||
raise ValueError(f"Unknown dataset: {name}")
|
||||
|
||||
def discretize_dataset(self, X, y):
|
||||
"""Supervised discretization with Fayyad and Irani's MDLP algorithm.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
X : np.ndarray
|
||||
array (n_samples, n_features) of features
|
||||
y : np.ndarray
|
||||
array (n_samples,) of labels
|
||||
|
||||
Returns
|
||||
-------
|
||||
tuple (X, y) of numpy.ndarray
|
||||
"""
|
||||
discretiz = MDLP(random_state=17, dtype=np.int32)
|
||||
Xdisc = discretiz.fit_transform(X, y)
|
||||
return Xdisc
|
||||
|
||||
def __iter__(self) -> Diterator:
|
||||
return Diterator(self.data_sets)
|
@@ -1,4 +1,5 @@
|
||||
import os
|
||||
import sys
|
||||
import json
|
||||
import random
|
||||
import warnings
|
||||
@@ -6,7 +7,6 @@ import time
|
||||
from datetime import datetime
|
||||
from tqdm import tqdm
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
from sklearn.model_selection import (
|
||||
StratifiedKFold,
|
||||
KFold,
|
||||
@@ -14,91 +14,15 @@ from sklearn.model_selection import (
|
||||
cross_validate,
|
||||
)
|
||||
from .Utils import Folders, Files, NO_RESULTS
|
||||
from .Datasets import Datasets
|
||||
from .Models import Models
|
||||
from .Arguments import EnvData
|
||||
|
||||
|
||||
class Randomized:
|
||||
seeds = [57, 31, 1714, 17, 23, 79, 83, 97, 7, 1]
|
||||
|
||||
|
||||
class Diterator:
|
||||
def __init__(self, data):
|
||||
self._stack = data.copy()
|
||||
|
||||
def __next__(self):
|
||||
if len(self._stack) == 0:
|
||||
raise StopIteration()
|
||||
return self._stack.pop(0)
|
||||
|
||||
|
||||
class DatasetsTanveer:
|
||||
@staticmethod
|
||||
def dataset_names(name):
|
||||
return f"{name}_R.dat"
|
||||
|
||||
@staticmethod
|
||||
def folder():
|
||||
return "data"
|
||||
|
||||
def load(self, name):
|
||||
file_name = os.path.join(self.folder(), self.dataset_names(name))
|
||||
data = pd.read_csv(
|
||||
file_name,
|
||||
sep="\t",
|
||||
index_col=0,
|
||||
)
|
||||
X = data.drop("clase", axis=1).to_numpy()
|
||||
y = data["clase"].to_numpy()
|
||||
return X, y
|
||||
|
||||
|
||||
class DatasetsSurcov:
|
||||
@staticmethod
|
||||
def dataset_names(name):
|
||||
return f"{name}.csv"
|
||||
|
||||
@staticmethod
|
||||
def folder():
|
||||
return "datasets"
|
||||
|
||||
def load(self, name):
|
||||
file_name = os.path.join(self.folder(), self.dataset_names(name))
|
||||
data = pd.read_csv(
|
||||
file_name,
|
||||
index_col=0,
|
||||
)
|
||||
data.dropna(axis=0, how="any", inplace=True)
|
||||
self.columns = data.columns
|
||||
col_list = ["class"]
|
||||
X = data.drop(col_list, axis=1).to_numpy()
|
||||
y = data["class"].to_numpy()
|
||||
return X, y
|
||||
|
||||
|
||||
class Datasets:
|
||||
def __init__(self, dataset_name=None):
|
||||
envData = EnvData.load()
|
||||
class_name = getattr(
|
||||
__import__(__name__),
|
||||
f"Datasets{envData['source_data']}",
|
||||
)
|
||||
self.dataset = class_name()
|
||||
if dataset_name is None:
|
||||
file_name = os.path.join(self.dataset.folder(), Files.index)
|
||||
with open(file_name) as f:
|
||||
self.data_sets = f.read().splitlines()
|
||||
else:
|
||||
self.data_sets = [dataset_name]
|
||||
|
||||
def load(self, name):
|
||||
try:
|
||||
return self.dataset.load(name)
|
||||
except FileNotFoundError:
|
||||
raise ValueError(f"Unknown dataset: {name}")
|
||||
|
||||
def __iter__(self) -> Diterator:
|
||||
return Diterator(self.data_sets)
|
||||
def seeds():
|
||||
return json.loads(EnvData.load()["seeds"])
|
||||
|
||||
|
||||
class BestResults:
|
||||
@@ -234,7 +158,7 @@ class Experiment:
|
||||
self.platform = platform
|
||||
self.progress_bar = progress_bar
|
||||
self.folds = folds
|
||||
self.random_seeds = Randomized.seeds
|
||||
self.random_seeds = Randomized.seeds()
|
||||
self.results = []
|
||||
self.duration = 0
|
||||
self._init_experiment()
|
||||
@@ -242,6 +166,10 @@ class Experiment:
|
||||
def get_output_file(self):
|
||||
return self.output_file
|
||||
|
||||
@staticmethod
|
||||
def get_python_version():
|
||||
return "{}.{}".format(sys.version_info.major, sys.version_info.minor)
|
||||
|
||||
def _build_classifier(self, random_state, hyperparameters):
|
||||
self.model = Models.get_model(self.model_name, random_state)
|
||||
clf = self.model
|
||||
@@ -273,7 +201,7 @@ class Experiment:
|
||||
shuffle=True, random_state=random_state, n_splits=self.folds
|
||||
)
|
||||
clf = self._build_classifier(random_state, hyperparameters)
|
||||
self.version = clf.version() if hasattr(clf, "version") else "-"
|
||||
self.version = Models.get_version(self.model_name, clf)
|
||||
with warnings.catch_warnings():
|
||||
warnings.filterwarnings("ignore")
|
||||
res = cross_validate(
|
||||
@@ -323,6 +251,8 @@ class Experiment:
|
||||
output["duration"] = self.duration
|
||||
output["seeds"] = self.random_seeds
|
||||
output["platform"] = self.platform
|
||||
output["language_version"] = self.get_python_version()
|
||||
output["language"] = "Python"
|
||||
output["results"] = self.results
|
||||
with open(self.output_file, "w") as f:
|
||||
json.dump(output, f)
|
||||
@@ -381,7 +311,7 @@ class GridSearch:
|
||||
self.progress_bar = progress_bar
|
||||
self.folds = folds
|
||||
self.platform = platform
|
||||
self.random_seeds = Randomized.seeds
|
||||
self.random_seeds = Randomized.seeds()
|
||||
self.grid_file = os.path.join(
|
||||
Folders.results, Files.grid_input(score_name, model_name)
|
||||
)
|
||||
|
@@ -8,9 +8,12 @@ from sklearn.ensemble import (
|
||||
)
|
||||
from sklearn.svm import SVC
|
||||
from stree import Stree
|
||||
from bayesclass.clfs import TAN, KDB, AODE
|
||||
from wodt import Wodt
|
||||
from odte import Odte
|
||||
from xgboost import XGBClassifier
|
||||
import sklearn
|
||||
import xgboost
|
||||
|
||||
|
||||
class Models:
|
||||
@@ -18,6 +21,9 @@ class Models:
|
||||
def define_models(random_state):
|
||||
return {
|
||||
"STree": Stree(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),
|
||||
"ExtraTree": ExtraTreeClassifier(random_state=random_state),
|
||||
"Wodt": Wodt(random_state=random_state),
|
||||
@@ -89,3 +95,15 @@ class Models:
|
||||
nodes, leaves = result.nodes_leaves()
|
||||
depth = result.depth_ if hasattr(result, "depth_") else 0
|
||||
return nodes, leaves, depth
|
||||
|
||||
@staticmethod
|
||||
def get_version(name, clf):
|
||||
if hasattr(clf, "version"):
|
||||
return clf.version()
|
||||
if name in ["Cart", "ExtraTree", "RandomForest", "GBC", "SVC"]:
|
||||
return sklearn.__version__
|
||||
elif name.startswith("Bagging") or name.startswith("AdaBoost"):
|
||||
return sklearn.__version__
|
||||
elif name == "XGBoost":
|
||||
return xgboost.__version__
|
||||
return "Error"
|
||||
|
@@ -1,21 +1,51 @@
|
||||
import os
|
||||
import sys
|
||||
from operator import itemgetter
|
||||
from types import SimpleNamespace
|
||||
import math
|
||||
import json
|
||||
import abc
|
||||
import shutil
|
||||
import subprocess
|
||||
import xlsxwriter
|
||||
from xlsxwriter.exceptions import DuplicateWorksheetName
|
||||
import numpy as np
|
||||
from .Experiments import Datasets, BestResults
|
||||
from .Experiments import BestResults
|
||||
from .Datasets import Datasets
|
||||
from .Arguments import EnvData, ALL_METRICS
|
||||
from .Utils import (
|
||||
Folders,
|
||||
Files,
|
||||
Symbols,
|
||||
BEST_ACCURACY_STREE,
|
||||
TextColor,
|
||||
NO_RESULTS,
|
||||
)
|
||||
from ._version import __version__
|
||||
|
||||
|
||||
def get_input(message="", is_test=False):
|
||||
return "test" if is_test else input(message)
|
||||
|
||||
|
||||
class BestResultsEver:
|
||||
def __init__(self):
|
||||
self.data = {}
|
||||
for i in ["Tanveer", "Surcov", "Arff"]:
|
||||
self.data[i] = {}
|
||||
for metric in ALL_METRICS:
|
||||
self.data[i][metric.replace("-", "_")] = ["self", 1.0]
|
||||
self.data[i][metric] = ["self", 1.0]
|
||||
self.data["Tanveer"]["accuracy"] = [
|
||||
"STree_default (liblinear-ovr)",
|
||||
40.282203,
|
||||
]
|
||||
self.data["Arff"]["accuracy"] = [
|
||||
"STree_default (linear-ovo)",
|
||||
22.109799,
|
||||
]
|
||||
|
||||
def get_name_value(self, key, score):
|
||||
return self.data[key][score]
|
||||
|
||||
|
||||
class BaseReport(abc.ABC):
|
||||
@@ -29,7 +59,20 @@ class BaseReport(abc.ABC):
|
||||
with open(self.file_name) as f:
|
||||
self.data = json.load(f)
|
||||
self.best_acc_file = best_file
|
||||
self.lines = self.data if best_file else self.data["results"]
|
||||
if best_file:
|
||||
self.lines = self.data
|
||||
else:
|
||||
self.lines = self.data["results"]
|
||||
self.score_name = self.data["score_name"]
|
||||
self.__compute_best_results_ever()
|
||||
|
||||
def __compute_best_results_ever(self):
|
||||
args = EnvData.load()
|
||||
key = args["source_data"]
|
||||
best = BestResultsEver()
|
||||
self.best_score_name, self.best_score_value = best.get_name_value(
|
||||
key, self.score_name
|
||||
)
|
||||
|
||||
def _get_accuracy(self, item):
|
||||
return self.data[item][0] if self.best_acc_file else item["score"]
|
||||
@@ -68,6 +111,12 @@ class BaseReport(abc.ABC):
|
||||
}
|
||||
return meaning[status]
|
||||
|
||||
def _get_best_accuracy(self):
|
||||
return self.best_score_value
|
||||
|
||||
def _get_message_best_accuracy(self):
|
||||
return f"{self.score_name} compared to {self.best_score_name} .:"
|
||||
|
||||
@abc.abstractmethod
|
||||
def header(self) -> None:
|
||||
pass
|
||||
@@ -82,10 +131,10 @@ class BaseReport(abc.ABC):
|
||||
|
||||
|
||||
class Report(BaseReport):
|
||||
header_lengths = [30, 5, 5, 3, 7, 7, 7, 15, 16, 15]
|
||||
header_lengths = [30, 6, 5, 3, 7, 7, 7, 15, 17, 15]
|
||||
header_cols = [
|
||||
"Dataset",
|
||||
"Samp",
|
||||
"Sampl.",
|
||||
"Feat.",
|
||||
"Cls",
|
||||
"Nodes",
|
||||
@@ -141,7 +190,7 @@ class Report(BaseReport):
|
||||
)
|
||||
i += 1
|
||||
print(
|
||||
f"{result['time']:9.6f}±{result['time_std']:6.4f} ",
|
||||
f"{result['time']:10.6f}±{result['time_std']:6.4f} ",
|
||||
end="",
|
||||
)
|
||||
i += 1
|
||||
@@ -155,7 +204,8 @@ class Report(BaseReport):
|
||||
self._compare_totals = {}
|
||||
self.header_line("*")
|
||||
self.header_line(
|
||||
f" Report {self.data['model']} ver. {self.data['version']}"
|
||||
f" {self.data['model']} ver. {self.data['version']}"
|
||||
f" {self.data['language']} ver. {self.data['language_version']}"
|
||||
f" with {self.data['folds']} Folds "
|
||||
f"cross validation and {len(self.data['seeds'])} random seeds. "
|
||||
f"{self.data['date']} {self.data['time']}"
|
||||
@@ -187,8 +237,8 @@ class Report(BaseReport):
|
||||
f" {key} {self._status_meaning(key)} .....: {value:2d}"
|
||||
)
|
||||
self.header_line(
|
||||
f" Accuracy compared to stree_default (liblinear-ovr) .: "
|
||||
f"{accuracy/BEST_ACCURACY_STREE:7.4f}"
|
||||
f" {self._get_message_best_accuracy()} "
|
||||
f"{accuracy/self._get_best_accuracy():7.4f}"
|
||||
)
|
||||
self.header_line("*")
|
||||
|
||||
@@ -202,18 +252,17 @@ class ReportBest(BaseReport):
|
||||
"Hyperparameters",
|
||||
]
|
||||
|
||||
def __init__(self, score, model, best, grid):
|
||||
def __init__(self, score, model, best):
|
||||
name = (
|
||||
Files.best_results(score, model)
|
||||
if best
|
||||
else Files.grid_output(score, model)
|
||||
)
|
||||
self.best = best
|
||||
self.grid = grid
|
||||
file_name = os.path.join(Folders.results, name)
|
||||
super().__init__(file_name, best_file=True)
|
||||
self.best = best
|
||||
self.score_name = score
|
||||
self.model = model
|
||||
super().__init__(file_name, best_file=True)
|
||||
|
||||
def header_line(self, text: str) -> None:
|
||||
length = sum(self.header_lengths) + len(self.header_lengths) - 3
|
||||
@@ -253,8 +302,8 @@ class ReportBest(BaseReport):
|
||||
def footer(self, accuracy):
|
||||
self.header_line("*")
|
||||
self.header_line(
|
||||
f" Scores compared to stree_default accuracy (liblinear-ovr) .: "
|
||||
f"{accuracy/BEST_ACCURACY_STREE:7.4f}"
|
||||
f" {self._get_message_best_accuracy()} "
|
||||
f"{accuracy/self._get_best_accuracy():7.4f}"
|
||||
)
|
||||
self.header_line("*")
|
||||
|
||||
@@ -284,7 +333,17 @@ class Excel(BaseReport):
|
||||
else:
|
||||
self.book = book
|
||||
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.col_hyperparams = 0
|
||||
|
||||
@@ -306,7 +365,8 @@ class Excel(BaseReport):
|
||||
|
||||
def get_title(self):
|
||||
return (
|
||||
f" Report {self.data['model']} ver. {self.data['version']}"
|
||||
f" {self.data['model']} ver. {self.data['version']}"
|
||||
f" {self.data['language']} ver. {self.data['language_version']}"
|
||||
f" with {self.data['folds']} Folds "
|
||||
f"cross validation and {len(self.data['seeds'])} random seeds. "
|
||||
f"{self.data['date']} {self.data['time']}"
|
||||
@@ -508,8 +568,8 @@ class Excel(BaseReport):
|
||||
self.sheet.write(self.row, 3, self._status_meaning(key), bold)
|
||||
self.row += 1
|
||||
message = (
|
||||
f"** Accuracy compared to stree_default (liblinear-ovr) .: "
|
||||
f"{accuracy/BEST_ACCURACY_STREE:7.4f}"
|
||||
f"** {self._get_message_best_accuracy()} "
|
||||
f"{accuracy/self._get_best_accuracy():7.4f}"
|
||||
)
|
||||
bold = self.book.add_format({"bold": True, "font_size": 14})
|
||||
# set width of the hyperparams column with the maximum width
|
||||
@@ -523,37 +583,251 @@ class Excel(BaseReport):
|
||||
self.sheet.set_row(c, 20)
|
||||
self.sheet.set_row(0, 25)
|
||||
self.sheet.freeze_panes(6, 1)
|
||||
self.sheet.hide_gridlines()
|
||||
self.sheet.hide_gridlines(2)
|
||||
if self.close:
|
||||
self.book.close()
|
||||
|
||||
|
||||
class ReportDatasets:
|
||||
row = 6
|
||||
# alternate lines colors
|
||||
color1 = "#DCE6F1"
|
||||
color2 = "#FDE9D9"
|
||||
color3 = "#B1A0C7"
|
||||
|
||||
def __init__(self, excel=False, book=None):
|
||||
self.excel = excel
|
||||
self.env = EnvData().load()
|
||||
self.close = False
|
||||
self.output = True
|
||||
self.header_text = f"Datasets used in benchmark ver. {__version__}"
|
||||
if excel:
|
||||
self.max_length = 0
|
||||
if book is None:
|
||||
self.excel_file_name = Files.datasets_report_excel
|
||||
self.book = xlsxwriter.Workbook(
|
||||
self.excel_file_name, {"nan_inf_to_errors": True}
|
||||
)
|
||||
self.set_properties(self.get_title())
|
||||
self.close = True
|
||||
else:
|
||||
self.book = book
|
||||
self.output = False
|
||||
self.sheet = self.book.add_worksheet("Datasets")
|
||||
|
||||
def set_properties(self, title):
|
||||
self.book.set_properties(
|
||||
{
|
||||
"title": title,
|
||||
"subject": "Machine learning results",
|
||||
"author": "Ricardo Montañana Gómez",
|
||||
"manager": "Dr. J. A. Gámez, Dr. J. M. Puerta",
|
||||
"company": "UCLM",
|
||||
"comments": "Created with Python and XlsxWriter",
|
||||
}
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def report():
|
||||
def get_python_version():
|
||||
return "{}.{}".format(sys.version_info.major, sys.version_info.minor)
|
||||
|
||||
def get_title(self):
|
||||
return (
|
||||
f" Benchmark ver. {__version__} - "
|
||||
f" Python ver. {self.get_python_version()}"
|
||||
f" with {self.env['n_folds']} Folds cross validation "
|
||||
f" Discretization: {self.env['discretize']} "
|
||||
f"Stratification: {self.env['stratified']}"
|
||||
)
|
||||
|
||||
def get_file_name(self):
|
||||
return self.excel_file_name
|
||||
|
||||
def header(self):
|
||||
merge_format = self.book.add_format(
|
||||
{
|
||||
"border": 1,
|
||||
"bold": 1,
|
||||
"align": "center",
|
||||
"valign": "vcenter",
|
||||
"font_size": 18,
|
||||
"bg_color": self.color3,
|
||||
}
|
||||
)
|
||||
merge_format_subheader = self.book.add_format(
|
||||
{
|
||||
"border": 1,
|
||||
"bold": 1,
|
||||
"align": "center",
|
||||
"valign": "vcenter",
|
||||
"font_size": 16,
|
||||
"bg_color": self.color1,
|
||||
}
|
||||
)
|
||||
merge_format_subheader_right = self.book.add_format(
|
||||
{
|
||||
"border": 1,
|
||||
"bold": 1,
|
||||
"align": "right",
|
||||
"valign": "vcenter",
|
||||
"font_size": 16,
|
||||
"bg_color": self.color1,
|
||||
}
|
||||
)
|
||||
merge_format_subheader_left = self.book.add_format(
|
||||
{
|
||||
"border": 1,
|
||||
"bold": 1,
|
||||
"align": "left",
|
||||
"valign": "vcenter",
|
||||
"font_size": 16,
|
||||
"bg_color": self.color1,
|
||||
}
|
||||
)
|
||||
self.sheet.merge_range(0, 0, 0, 4, self.header_text, merge_format)
|
||||
self.sheet.merge_range(
|
||||
1,
|
||||
0,
|
||||
4,
|
||||
0,
|
||||
f" Default score {self.env['score']}",
|
||||
merge_format_subheader,
|
||||
)
|
||||
self.sheet.merge_range(
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
3,
|
||||
"Cross validation",
|
||||
merge_format_subheader_right,
|
||||
)
|
||||
self.sheet.write(
|
||||
1, 4, f"{self.env['n_folds']} Folds", merge_format_subheader_left
|
||||
)
|
||||
self.sheet.merge_range(
|
||||
2,
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
"Stratified",
|
||||
merge_format_subheader_right,
|
||||
)
|
||||
self.sheet.write(
|
||||
2,
|
||||
4,
|
||||
f"{'True' if self.env['stratified']=='1' else 'False'}",
|
||||
merge_format_subheader_left,
|
||||
)
|
||||
self.sheet.merge_range(
|
||||
3,
|
||||
1,
|
||||
3,
|
||||
3,
|
||||
"Discretized",
|
||||
merge_format_subheader_right,
|
||||
)
|
||||
self.sheet.write(
|
||||
3,
|
||||
4,
|
||||
f"{'True' if self.env['discretize']=='1' else 'False'}",
|
||||
merge_format_subheader_left,
|
||||
)
|
||||
self.sheet.merge_range(
|
||||
4,
|
||||
1,
|
||||
4,
|
||||
3,
|
||||
"Seeds",
|
||||
merge_format_subheader_right,
|
||||
)
|
||||
self.sheet.write(
|
||||
4, 4, f"{self.env['seeds']}", merge_format_subheader_left
|
||||
)
|
||||
self.update_max_length(len(self.env["seeds"]) + 1)
|
||||
header_cols = [
|
||||
("Dataset", 30),
|
||||
("Samples", 10),
|
||||
("Features", 10),
|
||||
("Classes", 10),
|
||||
("Balance", 50),
|
||||
]
|
||||
bold = self.book.add_format(
|
||||
{
|
||||
"bold": True,
|
||||
"font_size": 14,
|
||||
"bg_color": self.color3,
|
||||
"border": 1,
|
||||
}
|
||||
)
|
||||
i = 0
|
||||
for item, length in header_cols:
|
||||
self.sheet.write(5, i, item, bold)
|
||||
self.sheet.set_column(i, i, length)
|
||||
i += 1
|
||||
|
||||
def footer(self):
|
||||
# set Balance column width to max length
|
||||
self.sheet.set_column(4, 4, self.max_length)
|
||||
self.sheet.freeze_panes(6, 1)
|
||||
self.sheet.hide_gridlines(2)
|
||||
if self.close:
|
||||
self.book.close()
|
||||
|
||||
def print_line(self, result):
|
||||
size_n = 14
|
||||
integer = self.book.add_format(
|
||||
{"num_format": "#,###", "font_size": size_n, "border": 1}
|
||||
)
|
||||
normal = self.book.add_format({"font_size": size_n, "border": 1})
|
||||
col = 0
|
||||
if self.row % 2 == 0:
|
||||
normal.set_bg_color(self.color1)
|
||||
integer.set_bg_color(self.color1)
|
||||
else:
|
||||
normal.set_bg_color(self.color2)
|
||||
integer.set_bg_color(self.color2)
|
||||
self.sheet.write(self.row, col, result.dataset, normal)
|
||||
self.sheet.write(self.row, col + 1, result.samples, integer)
|
||||
self.sheet.write(self.row, col + 2, result.features, integer)
|
||||
self.sheet.write(self.row, col + 3, result.classes, normal)
|
||||
self.sheet.write(self.row, col + 4, result.balance, normal)
|
||||
self.update_max_length(len(result.balance))
|
||||
self.row += 1
|
||||
|
||||
def update_max_length(self, value):
|
||||
if value > self.max_length:
|
||||
self.max_length = value
|
||||
|
||||
def report(self):
|
||||
data_sets = Datasets()
|
||||
color_line = TextColor.LINE1
|
||||
print(color_line, end="")
|
||||
print(f"{'Dataset':30s} Samp. Feat. Cls Balance")
|
||||
print("=" * 30 + " ===== ===== === " + "=" * 40)
|
||||
if self.excel:
|
||||
self.header()
|
||||
if self.output:
|
||||
print(color_line, end="")
|
||||
print(self.header_text)
|
||||
print("")
|
||||
print(f"{'Dataset':30s} Sampl. Feat. Cls Balance")
|
||||
print("=" * 30 + " ====== ===== === " + "=" * 60)
|
||||
for dataset in data_sets:
|
||||
X, y = data_sets.load(dataset)
|
||||
attributes = data_sets.get_attributes(dataset)
|
||||
attributes.dataset = dataset
|
||||
if self.excel:
|
||||
self.print_line(attributes)
|
||||
color_line = (
|
||||
TextColor.LINE2
|
||||
if color_line == TextColor.LINE1
|
||||
else TextColor.LINE1
|
||||
)
|
||||
values, counts = np.unique(y, return_counts=True)
|
||||
comp = ""
|
||||
sep = ""
|
||||
for count in counts:
|
||||
comp += f"{sep}{count/sum(counts)*100:5.2f}%"
|
||||
sep = "/ "
|
||||
print(color_line, end="")
|
||||
print(
|
||||
f"{dataset:30s} {X.shape[0]:5,d} {X.shape[1]:5,d} "
|
||||
f"{len(np.unique(y)):3d} {comp:40s}"
|
||||
)
|
||||
if self.output:
|
||||
print(color_line, end="")
|
||||
print(
|
||||
f"{dataset:30s} {attributes.samples:6,d} "
|
||||
f"{attributes.features:5,d} {attributes.classes:3d} "
|
||||
f"{attributes.balance:40s}"
|
||||
)
|
||||
if self.excel:
|
||||
self.footer()
|
||||
|
||||
|
||||
class SQL(BaseReport):
|
||||
@@ -633,6 +907,13 @@ class Benchmark:
|
||||
self._report = {}
|
||||
self._datasets = set()
|
||||
self.visualize = visualize
|
||||
self.__compute_best_results_ever()
|
||||
|
||||
def __compute_best_results_ever(self):
|
||||
args = EnvData.load()
|
||||
key = args["source_data"]
|
||||
best = BestResultsEver()
|
||||
_, self.best_score_value = best.get_name_value(key, self._score)
|
||||
|
||||
def get_result_file_name(self):
|
||||
return os.path.join(Folders.exreport, Files.exreport(self._score))
|
||||
@@ -970,7 +1251,7 @@ class Benchmark:
|
||||
sheet.write_formula(
|
||||
row,
|
||||
col + 1,
|
||||
f"=sum({range_metric})/{BEST_ACCURACY_STREE}",
|
||||
f"=sum({range_metric})/{self.best_score_value}",
|
||||
decimal_total,
|
||||
)
|
||||
range_rank = (
|
||||
@@ -1018,7 +1299,12 @@ class Benchmark:
|
||||
k = Excel(file_name=file_name, book=book)
|
||||
k.report()
|
||||
sheet.freeze_panes(6, 1)
|
||||
sheet.hide_gridlines()
|
||||
sheet.hide_gridlines(2)
|
||||
|
||||
def add_datasets_sheet():
|
||||
# Add datasets sheet
|
||||
re = ReportDatasets(excel=True, book=book)
|
||||
re.report()
|
||||
|
||||
def exreport_output():
|
||||
file_name = os.path.join(
|
||||
@@ -1046,6 +1332,7 @@ class Benchmark:
|
||||
footer()
|
||||
models_files()
|
||||
exreport_output()
|
||||
add_datasets_sheet()
|
||||
book.close()
|
||||
|
||||
|
||||
@@ -1062,16 +1349,18 @@ class StubReport(BaseReport):
|
||||
|
||||
def footer(self, accuracy: float) -> None:
|
||||
self.accuracy = accuracy
|
||||
self.score = accuracy / BEST_ACCURACY_STREE
|
||||
self.score = accuracy / self._get_best_accuracy()
|
||||
|
||||
|
||||
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.data = []
|
||||
self.data_filtered = []
|
||||
self.datasets = {}
|
||||
self.models = set()
|
||||
self.hidden = hidden
|
||||
self.compare = compare
|
||||
|
||||
def get_models(self):
|
||||
return sorted(self.models)
|
||||
@@ -1114,18 +1403,15 @@ class Summary:
|
||||
self.data.append(entry)
|
||||
|
||||
def get_results_criteria(
|
||||
self,
|
||||
score,
|
||||
model,
|
||||
input_data,
|
||||
sort_key,
|
||||
number,
|
||||
self, score, model, input_data, sort_key, number, nan=False
|
||||
):
|
||||
data = self.data.copy() if input_data is None else input_data
|
||||
if score:
|
||||
data = [x for x in data if x["score"] == score]
|
||||
if 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 = (
|
||||
itemgetter(sort_key, "time")
|
||||
if sort_key == "date"
|
||||
@@ -1143,15 +1429,17 @@ class Summary:
|
||||
input_data=None,
|
||||
sort_key="date",
|
||||
number=0,
|
||||
nan=False,
|
||||
) -> None:
|
||||
"""Print the list of results"""
|
||||
data = self.get_results_criteria(
|
||||
score, model, input_data, sort_key, number
|
||||
)
|
||||
if data == []:
|
||||
if self.data_filtered == []:
|
||||
self.data_filtered = self.get_results_criteria(
|
||||
score, model, input_data, sort_key, number, nan=nan
|
||||
)
|
||||
if self.data_filtered == []:
|
||||
raise ValueError(NO_RESULTS)
|
||||
max_file = max(len(x["file"]) for x in data)
|
||||
max_title = max(len(x["title"]) 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 self.data_filtered)
|
||||
if self.hidden:
|
||||
color1 = TextColor.GREEN
|
||||
color2 = TextColor.YELLOW
|
||||
@@ -1160,10 +1448,11 @@ class Summary:
|
||||
color2 = TextColor.LINE2
|
||||
print(color1, end="")
|
||||
print(
|
||||
f"{'Date':10s} {'File':{max_file}s} {'Score':8s} {'Time(h)':7s} "
|
||||
f"{'Title':s}"
|
||||
f" # {'Date':10s} {'File':{max_file}s} {'Score':8s} "
|
||||
f"{'Time(h)':7s} {'Title':s}"
|
||||
)
|
||||
print(
|
||||
"===",
|
||||
"=" * 10
|
||||
+ " "
|
||||
+ "=" * max_file
|
||||
@@ -1172,21 +1461,115 @@ class Summary:
|
||||
+ " "
|
||||
+ "=" * 7
|
||||
+ " "
|
||||
+ "=" * max_title
|
||||
+ "=" * max_title,
|
||||
)
|
||||
print(
|
||||
"\n".join(
|
||||
[
|
||||
(color2 if n % 2 == 0 else color1)
|
||||
+ f"{x['date']} {x['file']:{max_file}s} "
|
||||
(color2 if n % 2 == 0 else color1) + f"{n:3d} "
|
||||
f"{x['date']} {x['file']:{max_file}s} "
|
||||
f"{x['metric']:8.5f} "
|
||||
f"{x['duration']/3600:7.3f} "
|
||||
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 whites(n: int) -> str:
|
||||
return " " * n + color1 + "*"
|
||||
|
@@ -1,7 +1,8 @@
|
||||
import os
|
||||
import sys
|
||||
import subprocess
|
||||
|
||||
BEST_ACCURACY_STREE = 40.282203
|
||||
PYTHON_VERSION = "{}.{}".format(sys.version_info.major, sys.version_info.minor)
|
||||
NO_RESULTS = "** No results found **"
|
||||
NO_ENV = "File .env not found"
|
||||
|
||||
@@ -26,6 +27,8 @@ class Files:
|
||||
exreport_pdf = "Rplots.pdf"
|
||||
benchmark_r = "benchmark.r"
|
||||
dot_env = ".env"
|
||||
datasets_report_excel = "ReportDatasets.xlsx"
|
||||
be_list_excel = "some_results.xlsx"
|
||||
|
||||
@staticmethod
|
||||
def exreport_output(score):
|
||||
@@ -143,3 +146,7 @@ class TextColor:
|
||||
ENDC = "\033[0m"
|
||||
BOLD = "\033[1m"
|
||||
UNDERLINE = "\033[4m"
|
||||
WHITE = "\033[97m"
|
||||
GREY = "\033[90m"
|
||||
BLACK = "\033[90m"
|
||||
DEFAULT = "\033[99m"
|
||||
|
@@ -1,9 +1,16 @@
|
||||
from .Experiments import Experiment, Datasets, DatasetsSurcov, DatasetsTanveer
|
||||
from .Datasets import (
|
||||
Datasets,
|
||||
DatasetsSurcov,
|
||||
DatasetsTanveer,
|
||||
DatasetsArff,
|
||||
)
|
||||
from .Experiments import Experiment
|
||||
from .Results import Report, Summary
|
||||
from ._version import __version__
|
||||
|
||||
__author__ = "Ricardo Montañana Gómez"
|
||||
__copyright__ = "Copyright 2020-2022, Ricardo Montañana Gómez"
|
||||
__copyright__ = "Copyright 2020-2023, Ricardo Montañana Gómez"
|
||||
__license__ = "MIT License"
|
||||
__author_email__ = "ricardo.montanana@alu.uclm.es"
|
||||
|
||||
__all__ = ["Experiment", "Datasets", "Report", "Summary"]
|
||||
__all__ = ["Experiment", "Datasets", "Report", "Summary", __version__]
|
||||
|
@@ -1 +1 @@
|
||||
__version__ = "0.1.1"
|
||||
__version__ = "0.4.0"
|
||||
|
@@ -5,7 +5,7 @@ from benchmark.Arguments import Arguments
|
||||
|
||||
|
||||
def main(args_test=None):
|
||||
arguments = Arguments()
|
||||
arguments = Arguments(prog="be_benchmark")
|
||||
arguments.xset("score").xset("excel").xset("tex_output").xset("quiet")
|
||||
args = arguments.parse(args_test)
|
||||
benchmark = Benchmark(score=args.score, visualize=not args.quiet)
|
||||
|
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env python
|
||||
from benchmark.Results import ReportBest
|
||||
from benchmark.Experiments import Datasets, BestResults
|
||||
from benchmark.Experiments import BestResults
|
||||
from benchmark.Datasets import Datasets
|
||||
from benchmark.Arguments import Arguments
|
||||
|
||||
"""Build a json file with the best results of a model and its hyperparameters
|
||||
@@ -20,5 +21,5 @@ def main(args_test=None):
|
||||
print(e)
|
||||
else:
|
||||
if args.report:
|
||||
report = ReportBest(args.score, args.model, best=True, grid=False)
|
||||
report = ReportBest(args.score, args.model, best=True)
|
||||
report.report()
|
||||
|
@@ -1,5 +1,6 @@
|
||||
#!/usr/bin/env python
|
||||
from benchmark.Experiments import GridSearch, Datasets
|
||||
from benchmark.Experiments import GridSearch
|
||||
from benchmark.Datasets import Datasets
|
||||
from benchmark.Arguments import Arguments
|
||||
|
||||
"""Do experiment and build result file, optionally print report with results
|
||||
|
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
|
||||
import os
|
||||
from benchmark.Results import Summary
|
||||
from benchmark.Utils import Folders
|
||||
from benchmark.Utils import Files
|
||||
from benchmark.Arguments import Arguments
|
||||
|
||||
"""List experiments of a model
|
||||
@@ -9,11 +8,12 @@ from benchmark.Arguments import Arguments
|
||||
|
||||
|
||||
def main(args_test=None):
|
||||
arguments = Arguments()
|
||||
arguments = Arguments(prog="be_list")
|
||||
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)
|
||||
data = Summary(hidden=args.hidden)
|
||||
data = Summary(hidden=args.hidden, compare=args.compare)
|
||||
data.acquire()
|
||||
try:
|
||||
data.list_results(
|
||||
@@ -21,33 +21,12 @@ def main(args_test=None):
|
||||
model=args.model,
|
||||
sort_key=args.key,
|
||||
number=args.number,
|
||||
nan=args.nan,
|
||||
)
|
||||
except ValueError as e:
|
||||
print(e)
|
||||
else:
|
||||
if args.nan:
|
||||
results_nan = []
|
||||
results = data.get_results_criteria(
|
||||
score=args.score,
|
||||
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),
|
||||
)
|
||||
return
|
||||
excel_generated = data.manage_results()
|
||||
if excel_generated:
|
||||
print(f"Generated file: {Files.be_list_excel}")
|
||||
Files.open(Files.be_list_excel, test=args_test is not None)
|
||||
|
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env python
|
||||
import os
|
||||
from benchmark.Experiments import Experiment, Datasets
|
||||
from benchmark.Experiments import Experiment
|
||||
from benchmark.Datasets import Datasets
|
||||
from benchmark.Results import Report
|
||||
from benchmark.Arguments import Arguments
|
||||
|
||||
@@ -9,15 +10,20 @@ from benchmark.Arguments import Arguments
|
||||
|
||||
|
||||
def main(args_test=None):
|
||||
arguments = Arguments()
|
||||
arguments = Arguments(prog="be_main")
|
||||
arguments.xset("stratified").xset("score").xset("model", mandatory=True)
|
||||
arguments.xset("n_folds").xset("platform").xset("quiet").xset("title")
|
||||
arguments.xset("hyperparameters").xset("paramfile").xset("report")
|
||||
arguments.xset("grid_paramfile").xset("dataset")
|
||||
arguments.xset("report")
|
||||
arguments.add_exclusive(
|
||||
["grid_paramfile", "best_paramfile", "hyperparameters"]
|
||||
)
|
||||
arguments.xset(
|
||||
"dataset", overrides="title", const="Test with only one dataset"
|
||||
)
|
||||
args = arguments.parse(args_test)
|
||||
report = args.report or args.dataset is not None
|
||||
if args.grid_paramfile:
|
||||
args.paramfile = False
|
||||
args.best_paramfile = False
|
||||
try:
|
||||
job = Experiment(
|
||||
score_name=args.score,
|
||||
@@ -25,7 +31,7 @@ def main(args_test=None):
|
||||
stratified=args.stratified,
|
||||
datasets=Datasets(dataset_name=args.dataset),
|
||||
hyperparams_dict=args.hyperparameters,
|
||||
hyperparams_file=args.paramfile,
|
||||
hyperparams_file=args.best_paramfile,
|
||||
grid_paramfile=args.grid_paramfile,
|
||||
progress_bar=not args.quiet,
|
||||
platform=args.platform,
|
||||
|
@@ -3,7 +3,7 @@ import os
|
||||
import json
|
||||
from stree import Stree
|
||||
from graphviz import Source
|
||||
from benchmark.Experiments import Datasets
|
||||
from benchmark.Datasets import Datasets
|
||||
from benchmark.Utils import Files, Folders
|
||||
from benchmark.Arguments import Arguments
|
||||
|
||||
|
@@ -5,42 +5,79 @@ from benchmark.Arguments import Arguments
|
||||
|
||||
|
||||
"""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
|
||||
"""
|
||||
|
||||
|
||||
def main(args_test=None):
|
||||
arguments = Arguments()
|
||||
arguments.xset("file").xset("excel").xset("sql").xset("compare")
|
||||
arguments.xset("best").xset("grid").xset("model", required=False)
|
||||
arguments.xset("score", required=False)
|
||||
is_test = args_test is not None
|
||||
arguments = Arguments(prog="be_report")
|
||||
arguments.add_subparser()
|
||||
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)
|
||||
if args.best:
|
||||
args.grid = None
|
||||
if args.grid:
|
||||
args.best = None
|
||||
if args.file is None and args.best is None and args.grid is None:
|
||||
ReportDatasets.report()
|
||||
else:
|
||||
if args.best is not None or args.grid is not None:
|
||||
report = ReportBest(args.score, args.model, args.best, args.grid)
|
||||
match args.subcommand:
|
||||
case "best" | "grid":
|
||||
best = args.subcommand == "best"
|
||||
report = ReportBest(args.score, args.model, best)
|
||||
report.report()
|
||||
else:
|
||||
case "file":
|
||||
try:
|
||||
report = Report(args.file, args.compare)
|
||||
report = Report(args.file_name, args.compare)
|
||||
report.report()
|
||||
except FileNotFoundError as e:
|
||||
print(e)
|
||||
else:
|
||||
report.report()
|
||||
if args.excel:
|
||||
excel = Excel(
|
||||
file_name=args.file,
|
||||
compare=args.compare,
|
||||
)
|
||||
excel.report()
|
||||
is_test = args_test is not None
|
||||
Files.open(excel.get_file_name(), is_test)
|
||||
if args.sql:
|
||||
sql = SQL(args.file)
|
||||
sql.report()
|
||||
return
|
||||
if args.sql:
|
||||
sql = SQL(args.file_name)
|
||||
sql.report()
|
||||
if args.excel:
|
||||
excel = Excel(
|
||||
file_name=args.file_name,
|
||||
compare=args.compare,
|
||||
)
|
||||
excel.report()
|
||||
Files.open(excel.get_file_name(), is_test)
|
||||
case "datasets":
|
||||
report = ReportDatasets(args.excel)
|
||||
report.report()
|
||||
if args.excel:
|
||||
Files.open(report.get_file_name(), is_test)
|
||||
case _:
|
||||
arguments.print_help()
|
||||
|
@@ -5,3 +5,5 @@ model=ODTE
|
||||
stratified=0
|
||||
# Source of data Tanveer/Surcov
|
||||
source_data=Tanveer
|
||||
seeds=[57, 31, 1714, 17, 23, 79, 83, 97, 7, 1]
|
||||
discretize=0
|
||||
|
8
benchmark/tests/.env.arff
Normal file
8
benchmark/tests/.env.arff
Normal file
@@ -0,0 +1,8 @@
|
||||
score=accuracy
|
||||
platform=MacBookpro16
|
||||
n_folds=5
|
||||
model=ODTE
|
||||
stratified=0
|
||||
source_data=Arff
|
||||
seeds=[271, 314, 171]
|
||||
discretize=1
|
@@ -5,3 +5,5 @@ model=ODTE
|
||||
stratified=0
|
||||
# Source of data Tanveer/Surcov
|
||||
source_data=Tanveer
|
||||
seeds=[57, 31, 1714, 17, 23, 79, 83, 97, 7, 1]
|
||||
discretize=0
|
||||
|
@@ -5,3 +5,5 @@ model=ODTE
|
||||
stratified=0
|
||||
# Source of data Tanveer/Surcov
|
||||
source_data=Surcov
|
||||
seeds=[57, 31, 1714, 17, 23, 79, 83, 97, 7, 1]
|
||||
discretize=0
|
2
benchmark/tests/.gitignore
vendored
Normal file
2
benchmark/tests/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
ReportDatasets.xlsx
|
||||
some_results.xlsx
|
@@ -24,13 +24,11 @@ class ArgumentsTest(TestBase):
|
||||
|
||||
def test_parameters(self):
|
||||
expected_parameters = {
|
||||
"best": ("-b", "--best"),
|
||||
"best_paramfile": ("-b", "--best_paramfile"),
|
||||
"color": ("-c", "--color"),
|
||||
"compare": ("-c", "--compare"),
|
||||
"dataset": ("-d", "--dataset"),
|
||||
"excel": ("-x", "--excel"),
|
||||
"file": ("-f", "--file"),
|
||||
"grid": ("-g", "--grid"),
|
||||
"grid_paramfile": ("-g", "--grid_paramfile"),
|
||||
"hidden": ("--hidden",),
|
||||
"hyperparameters": ("-p", "--hyperparameters"),
|
||||
@@ -42,7 +40,6 @@ class ArgumentsTest(TestBase):
|
||||
"nan": ("--nan",),
|
||||
"number": ("-n", "--number"),
|
||||
"n_folds": ("-n", "--n_folds"),
|
||||
"paramfile": ("-f", "--paramfile"),
|
||||
"platform": ("-P", "--platform"),
|
||||
"quiet": ("-q", "--quiet"),
|
||||
"report": ("-r", "--report"),
|
||||
@@ -98,3 +95,27 @@ class ArgumentsTest(TestBase):
|
||||
finally:
|
||||
os.chdir(path)
|
||||
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 ..Utils import Folders, Files, NO_RESULTS
|
||||
from ..Results import Benchmark
|
||||
from .._version import __version__
|
||||
|
||||
|
||||
class BenchmarkTest(TestBase):
|
||||
@@ -89,6 +90,15 @@ class BenchmarkTest(TestBase):
|
||||
self.assertTrue(os.path.exists(benchmark.get_tex_file()))
|
||||
self.check_file_file(benchmark.get_tex_file(), "exreport_tex")
|
||||
|
||||
@staticmethod
|
||||
def generate_excel_sheet(test, sheet, file_name):
|
||||
with open(os.path.join("test_files", file_name), "w") as f:
|
||||
for row in range(1, sheet.max_row + 1):
|
||||
for col in range(1, sheet.max_column + 1):
|
||||
value = sheet.cell(row=row, column=col).value
|
||||
if value is not None:
|
||||
print(f'{row};{col};"{value}"', file=f)
|
||||
|
||||
def test_excel_output(self):
|
||||
benchmark = Benchmark("accuracy", visualize=False)
|
||||
benchmark.compile_results()
|
||||
@@ -98,9 +108,16 @@ class BenchmarkTest(TestBase):
|
||||
benchmark.excel()
|
||||
file_name = benchmark.get_excel_file_name()
|
||||
book = load_workbook(file_name)
|
||||
replace = None
|
||||
with_this = None
|
||||
for sheet_name in book.sheetnames:
|
||||
sheet = book[sheet_name]
|
||||
self.check_excel_sheet(sheet, f"exreport_excel_{sheet_name}")
|
||||
# ExcelTest.generate_excel_sheet(
|
||||
# self, 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,
|
||||
)
|
||||
|
@@ -1,6 +1,7 @@
|
||||
import os
|
||||
from .TestBase import TestBase
|
||||
from ..Experiments import BestResults, Datasets
|
||||
from ..Experiments import BestResults
|
||||
from ..Datasets import Datasets
|
||||
|
||||
|
||||
class BestResultTest(TestBase):
|
||||
|
@@ -1,6 +1,7 @@
|
||||
import shutil
|
||||
from .TestBase import TestBase
|
||||
from ..Experiments import Randomized, Datasets
|
||||
from ..Experiments import Randomized
|
||||
from ..Datasets import Datasets
|
||||
|
||||
|
||||
class DatasetTest(TestBase):
|
||||
@@ -22,12 +23,31 @@ class DatasetTest(TestBase):
|
||||
|
||||
def test_Randomized(self):
|
||||
expected = [57, 31, 1714, 17, 23, 79, 83, 97, 7, 1]
|
||||
self.assertSequenceEqual(Randomized.seeds, expected)
|
||||
self.assertSequenceEqual(Randomized.seeds(), expected)
|
||||
|
||||
def test_Randomized_3_seeds(self):
|
||||
self.set_env(".env.arff")
|
||||
expected = [271, 314, 171]
|
||||
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):
|
||||
test = {
|
||||
".env.dist": ["balance-scale", "balloons"],
|
||||
".env.surcov": ["iris", "wine"],
|
||||
".env.arff": ["iris", "wine"],
|
||||
}
|
||||
for key, value in test.items():
|
||||
self.set_env(key)
|
||||
@@ -51,6 +71,11 @@ class DatasetTest(TestBase):
|
||||
self.assertSequenceEqual(X.shape, (625, 4))
|
||||
self.assertSequenceEqual(y.shape, (625,))
|
||||
|
||||
def test_create_with_unknown_dataset(self):
|
||||
with self.assertRaises(ValueError) as msg:
|
||||
Datasets("unknown")
|
||||
self.assertEqual(str(msg.exception), "Unknown dataset: unknown")
|
||||
|
||||
def test_load_unknown_dataset(self):
|
||||
dt = Datasets()
|
||||
with self.assertRaises(ValueError) as msg:
|
||||
@@ -61,6 +86,7 @@ class DatasetTest(TestBase):
|
||||
test = {
|
||||
".env.dist": "balloons",
|
||||
".env.surcov": "wine",
|
||||
".env.arff": "iris",
|
||||
}
|
||||
for key, value in test.items():
|
||||
self.set_env(key)
|
||||
|
@@ -1,6 +1,7 @@
|
||||
import json
|
||||
from .TestBase import TestBase
|
||||
from ..Experiments import Experiment, Datasets
|
||||
from ..Experiments import Experiment
|
||||
from ..Datasets import Datasets
|
||||
|
||||
|
||||
class ExperimentTest(TestBase):
|
||||
|
@@ -1,6 +1,7 @@
|
||||
import json
|
||||
from .TestBase import TestBase
|
||||
from ..Experiments import GridSearch, Datasets
|
||||
from ..Experiments import GridSearch
|
||||
from ..Datasets import Datasets
|
||||
|
||||
|
||||
class GridSearchTest(TestBase):
|
||||
@@ -77,7 +78,9 @@ class GridSearchTest(TestBase):
|
||||
"v. 1.2.4, Computed on Test on 2022-02-22 at 12:00:00 took 1s",
|
||||
],
|
||||
}
|
||||
self.assertSequenceEqual(data, expected)
|
||||
for key, value in expected.items():
|
||||
self.assertEqual(data[key][0], value[0])
|
||||
self.assertDictEqual(data[key][1], value[1])
|
||||
|
||||
def test_duration_message(self):
|
||||
expected = ["47.234s", "5.421m", "1.177h"]
|
||||
|
@@ -15,6 +15,8 @@ from odte import Odte
|
||||
from xgboost import XGBClassifier
|
||||
from .TestBase import TestBase
|
||||
from ..Models import Models
|
||||
import xgboost
|
||||
import sklearn
|
||||
|
||||
|
||||
class ModelTest(TestBase):
|
||||
@@ -33,6 +35,38 @@ class ModelTest(TestBase):
|
||||
for key, value in test.items():
|
||||
self.assertIsInstance(Models.get_model(key), value)
|
||||
|
||||
def test_Models_version(self):
|
||||
def ver_stree():
|
||||
return "1.2.3"
|
||||
|
||||
def ver_wodt():
|
||||
return "h.j.k"
|
||||
|
||||
def ver_odte():
|
||||
return "4.5.6"
|
||||
|
||||
test = {
|
||||
"STree": [ver_stree, "1.2.3"],
|
||||
"Wodt": [ver_wodt, "h.j.k"],
|
||||
"ODTE": [ver_odte, "4.5.6"],
|
||||
"RandomForest": [None, "7.8.9"],
|
||||
"BaggingStree": [None, "x.y.z"],
|
||||
"AdaBoostStree": [None, "w.x.z"],
|
||||
"XGBoost": [None, "10.11.12"],
|
||||
}
|
||||
for key, value in test.items():
|
||||
clf = Models.get_model(key)
|
||||
if key in ["STree", "Wodt", "ODTE"]:
|
||||
clf.version = value[0]
|
||||
elif key == "XGBoost":
|
||||
xgboost.__version__ = value[1]
|
||||
else:
|
||||
sklearn.__version__ = value[1]
|
||||
self.assertEqual(Models.get_version(key, clf), value[1])
|
||||
|
||||
def test_bogus_Model_Version(self):
|
||||
self.assertEqual(Models.get_version("unknown", None), "Error")
|
||||
|
||||
def test_BaggingStree(self):
|
||||
clf = Models.get_model("BaggingStree")
|
||||
self.assertIsInstance(clf, BaggingClassifier)
|
||||
|
@@ -2,11 +2,14 @@ import os
|
||||
from io import StringIO
|
||||
from unittest.mock import patch
|
||||
from .TestBase import TestBase
|
||||
from ..Results import Report, BaseReport, ReportBest, ReportDatasets
|
||||
from ..Results import Report, BaseReport, ReportBest, ReportDatasets, get_input
|
||||
from ..Utils import Symbols
|
||||
|
||||
|
||||
class ReportTest(TestBase):
|
||||
def test_get_input(self):
|
||||
self.assertEqual(get_input(is_test=True), "test")
|
||||
|
||||
def test_BaseReport(self):
|
||||
with patch.multiple(BaseReport, __abstractmethods__=set()):
|
||||
file_name = os.path.join(
|
||||
@@ -66,25 +69,37 @@ class ReportTest(TestBase):
|
||||
_ = Report("unknown_file")
|
||||
|
||||
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:
|
||||
report.report()
|
||||
self.check_output_file(stdout, "report_best")
|
||||
|
||||
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:
|
||||
report.report()
|
||||
self.check_output_file(stdout, "report_grid")
|
||||
file_name = "report_grid.test"
|
||||
with open(os.path.join(self.test_files, file_name)) as f:
|
||||
expected = f.read().splitlines()
|
||||
output_text = stdout.getvalue().splitlines()
|
||||
# Compare replacing STree version
|
||||
for line, index in zip(expected, range(len(expected))):
|
||||
if self.stree_version in line:
|
||||
# replace STree version
|
||||
line = self.replace_STree_version(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")
|
||||
self.assertEqual(line, output_text[index])
|
||||
|
||||
@patch("sys.stdout", new_callable=StringIO)
|
||||
def test_report_datasets(self, mock_output):
|
||||
report = ReportDatasets()
|
||||
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])
|
||||
|
@@ -14,6 +14,9 @@ class TestBase(unittest.TestCase):
|
||||
os.chdir(os.path.dirname(os.path.abspath(__file__)))
|
||||
self.test_files = "test_files"
|
||||
self.output = "sys.stdout"
|
||||
self.ext = ".test"
|
||||
self.benchmark_version = "0.2.0"
|
||||
self.stree_version = "1.2.4"
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def remove_files(self, files, folder):
|
||||
@@ -30,8 +33,10 @@ class TestBase(unittest.TestCase):
|
||||
if value is not None:
|
||||
print(f'{row};{col};"{value}"', file=f)
|
||||
|
||||
def check_excel_sheet(self, sheet, file_name):
|
||||
file_name += ".test"
|
||||
def check_excel_sheet(
|
||||
self, sheet, file_name, replace=None, with_this=None
|
||||
):
|
||||
file_name += self.ext
|
||||
with open(os.path.join(self.test_files, file_name), "r") as f:
|
||||
expected = csv.reader(f, delimiter=";")
|
||||
for row, col, value in expected:
|
||||
@@ -42,18 +47,31 @@ class TestBase(unittest.TestCase):
|
||||
value = float(value)
|
||||
except ValueError:
|
||||
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)
|
||||
|
||||
def check_output_file(self, output, file_name):
|
||||
file_name += ".test"
|
||||
file_name += self.ext
|
||||
with open(os.path.join(self.test_files, file_name)) as f:
|
||||
expected = f.read()
|
||||
self.assertEqual(output.getvalue(), expected)
|
||||
|
||||
def replace_STree_version(self, line, output, index):
|
||||
idx = line.find(self.stree_version)
|
||||
return line.replace(self.stree_version, 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):
|
||||
with open(computed_file) as f:
|
||||
computed = f.read()
|
||||
expected_file += ".test"
|
||||
expected_file += self.ext
|
||||
with open(os.path.join(self.test_files, expected_file)) as f:
|
||||
expected = f.read()
|
||||
self.assertEqual(computed, expected)
|
||||
|
@@ -178,6 +178,8 @@ class UtilTest(TestBase):
|
||||
"model": "ODTE",
|
||||
"stratified": "0",
|
||||
"source_data": "Tanveer",
|
||||
"seeds": "[57, 31, 1714, 17, 23, 79, 83, 97, 7, 1]",
|
||||
"discretize": "0",
|
||||
}
|
||||
computed = EnvData().load()
|
||||
self.assertDictEqual(computed, expected)
|
||||
|
@@ -13,6 +13,7 @@ from .PairCheck_test import PairCheckTest
|
||||
from .Arguments_test import ArgumentsTest
|
||||
from .scripts.Be_Pair_check_test import BePairCheckTest
|
||||
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_Summary_test import BeSummaryTest
|
||||
from .scripts.Be_Grid_test import BeGridTest
|
||||
|
@@ -1,2 +1,2 @@
|
||||
iris
|
||||
wine
|
||||
iris,class
|
||||
wine,class
|
||||
|
305
benchmark/tests/datasets/hayes-roth.arff
Executable file
305
benchmark/tests/datasets/hayes-roth.arff
Executable file
@@ -0,0 +1,305 @@
|
||||
% 1. Title: Hayes-Roth & Hayes-Roth (1977) Database
|
||||
%
|
||||
% 2. Source Information:
|
||||
% (a) Creators: Barbara and Frederick Hayes-Roth
|
||||
% (b) Donor: David W. Aha (aha@ics.uci.edu) (714) 856-8779
|
||||
% (c) Date: March, 1989
|
||||
%
|
||||
% 3. Past Usage:
|
||||
% 1. Hayes-Roth, B., & Hayes-Roth, F. (1977). Concept learning and the
|
||||
% recognition and classification of exemplars. Journal of Verbal Learning
|
||||
% and Verbal Behavior, 16, 321-338.
|
||||
% -- Results:
|
||||
% -- Human subjects classification and recognition performance:
|
||||
% 1. decreases with distance from the prototype,
|
||||
% 2. is better on unseen prototypes than old instances, and
|
||||
% 3. improves with presentation frequency during learning.
|
||||
% 2. Anderson, J.R., & Kline, P.J. (1979). A learning system and its
|
||||
% psychological implications. In Proceedings of the Sixth International
|
||||
% Joint Conference on Artificial Intelligence (pp. 16-21). Tokyo, Japan:
|
||||
% Morgan Kaufmann.
|
||||
% -- Partitioned the results into 4 classes:
|
||||
% 1. prototypes
|
||||
% 2. near-prototypes with high presentation frequency during learning
|
||||
% 3. near-prototypes with low presentation frequency during learning
|
||||
% 4. instances that are far from protoypes
|
||||
% -- Described evidence that ACT's classification confidence and
|
||||
% recognition behaviors closely simulated human subjects' behaviors.
|
||||
% 3. Aha, D.W. (1989). Incremental learning of independent, overlapping, and
|
||||
% graded concept descriptions with an instance-based process framework.
|
||||
% Manuscript submitted for publication.
|
||||
% -- Used same partition as Anderson & Kline
|
||||
% -- Described evidence that Bloom's classification confidence behavior
|
||||
% is similar to the human subjects' behavior. Bloom fitted the data
|
||||
% more closely than did ACT.
|
||||
%
|
||||
% 4. Relevant Information:
|
||||
% This database contains 5 numeric-valued attributes. Only a subset of
|
||||
% 3 are used during testing (the latter 3). Furthermore, only 2 of the
|
||||
% 3 concepts are "used" during testing (i.e., those with the prototypes
|
||||
% 000 and 111). I've mapped all values to their zero-indexing equivalents.
|
||||
%
|
||||
% Some instances could be placed in either category 0 or 1. I've followed
|
||||
% the authors' suggestion, placing them in each category with equal
|
||||
% probability.
|
||||
%
|
||||
% I've replaced the actual values of the attributes (i.e., hobby has values
|
||||
% chess, sports and stamps) with numeric values. I think this is how
|
||||
% the authors' did this when testing the categorization models described
|
||||
% in the paper. I find this unfair. While the subjects were able to bring
|
||||
% background knowledge to bear on the attribute values and their
|
||||
% relationships, the algorithms were provided with no such knowledge. I'm
|
||||
% uncertain whether the 2 distractor attributes (name and hobby) are
|
||||
% presented to the authors' algorithms during testing. However, it is clear
|
||||
% that only the age, educational status, and marital status attributes are
|
||||
% given during the human subjects' transfer tests.
|
||||
%
|
||||
% 5. Number of Instances: 132 training instances, 28 test instances
|
||||
%
|
||||
% 6. Number of Attributes: 5 plus the class membership attribute. 3 concepts.
|
||||
%
|
||||
% 7. Attribute Information:
|
||||
% -- 1. name: distinct for each instance and represented numerically
|
||||
% -- 2. hobby: nominal values ranging between 1 and 3
|
||||
% -- 3. age: nominal values ranging between 1 and 4
|
||||
% -- 4. educational level: nominal values ranging between 1 and 4
|
||||
% -- 5. marital status: nominal values ranging between 1 and 4
|
||||
% -- 6. class: nominal value between 1 and 3
|
||||
%
|
||||
% 9. Missing Attribute Values: none
|
||||
%
|
||||
% 10. Class Distribution: see below
|
||||
%
|
||||
% 11. Detailed description of the experiment:
|
||||
% 1. 3 categories (1, 2, and neither -- which I call 3)
|
||||
% -- some of the instances could be classified in either class 1 or 2, and
|
||||
% they have been evenly distributed between the two classes
|
||||
% 2. 5 Attributes
|
||||
% -- A. name (a randomly-generated number between 1 and 132)
|
||||
% -- B. hobby (a randomly-generated number between 1 and 3)
|
||||
% -- C. age (a number between 1 and 4)
|
||||
% -- D. education level (a number between 1 and 4)
|
||||
% -- E. marital status (a number between 1 and 4)
|
||||
% 3. Classification:
|
||||
% -- only attributes C-E are diagnostic; values for A and B are ignored
|
||||
% -- Class Neither: if a 4 occurs for any attribute C-E
|
||||
% -- Class 1: Otherwise, if (# of 1's)>(# of 2's) for attributes C-E
|
||||
% -- Class 2: Otherwise, if (# of 2's)>(# of 1's) for attributes C-E
|
||||
% -- Either 1 or 2: Otherwise, if (# of 2's)=(# of 1's) for attributes C-E
|
||||
% 4. Prototypes:
|
||||
% -- Class 1: 111
|
||||
% -- Class 2: 222
|
||||
% -- Class Either: 333
|
||||
% -- Class Neither: 444
|
||||
% 5. Number of training instances: 132
|
||||
% -- Each instance presented 0, 1, or 10 times
|
||||
% -- None of the prototypes seen during training
|
||||
% -- 3 instances from each of categories 1, 2, and either are repeated
|
||||
% 10 times each
|
||||
% -- 3 additional instances from the Either category are shown during
|
||||
% learning
|
||||
% 5. Number of test instances: 28
|
||||
% -- All 9 class 1
|
||||
% -- All 9 class 2
|
||||
% -- All 6 class Either
|
||||
% -- All 4 prototypes
|
||||
% --------------------
|
||||
% -- 28 total
|
||||
%
|
||||
% Observations of interest:
|
||||
% 1. Relative classification confidence of
|
||||
% -- prototypes for classes 1 and 2 (2 instances)
|
||||
% (Anderson calls these Class 1 instances)
|
||||
% -- instances of class 1 with frequency 10 during training and
|
||||
% instances of class 2 with frequency 10 during training that
|
||||
% are 1 value away from their respective prototypes (6 instances)
|
||||
% (Anderson calls these Class 2 instances)
|
||||
% -- instances of class 1 with frequency 1 during training and
|
||||
% instances of class 2 with frequency 1 during training that
|
||||
% are 1 value away from their respective prototypes (6 instances)
|
||||
% (Anderson calls these Class 3 instances)
|
||||
% -- instances of class 1 with frequency 1 during training and
|
||||
% instances of class 2 with frequency 1 during training that
|
||||
% are 2 values away from their respective prototypes (6 instances)
|
||||
% (Anderson calls these Class 4 instances)
|
||||
% 2. Relative classification recognition of them also
|
||||
%
|
||||
% Some Expected results:
|
||||
% Both frequency and distance from prototype will effect the classification
|
||||
% accuracy of instances. Greater the frequency, higher the classification
|
||||
% confidence. Closer to prototype, higher the classification confidence.
|
||||
%
|
||||
% Information about the dataset
|
||||
% CLASSTYPE: nominal
|
||||
% CLASSINDEX: last
|
||||
%
|
||||
|
||||
@relation hayes-roth
|
||||
|
||||
@attribute hobby INTEGER
|
||||
@attribute age INTEGER
|
||||
@attribute educational_level INTEGER
|
||||
@attribute marital_status INTEGER
|
||||
@attribute class {1,2,3,4}
|
||||
|
||||
@data
|
||||
2,1,1,2,1
|
||||
2,1,3,2,2
|
||||
3,1,4,1,3
|
||||
2,4,2,2,3
|
||||
1,1,3,4,3
|
||||
1,1,3,2,2
|
||||
3,1,3,2,2
|
||||
3,4,2,4,3
|
||||
2,2,1,1,1
|
||||
3,2,1,1,1
|
||||
1,2,1,1,1
|
||||
2,2,3,4,3
|
||||
1,1,2,1,1
|
||||
2,1,2,2,2
|
||||
2,4,1,4,3
|
||||
1,1,3,3,1
|
||||
3,2,1,2,2
|
||||
1,2,1,1,1
|
||||
3,3,2,1,1
|
||||
3,1,3,2,1
|
||||
1,2,2,1,2
|
||||
3,2,1,3,1
|
||||
2,1,2,1,1
|
||||
3,2,1,3,1
|
||||
2,3,2,1,1
|
||||
3,2,2,1,2
|
||||
3,2,1,3,2
|
||||
2,1,2,2,2
|
||||
1,1,3,2,1
|
||||
3,2,1,1,1
|
||||
1,4,1,1,3
|
||||
2,2,1,3,1
|
||||
1,2,1,3,2
|
||||
1,1,1,2,1
|
||||
2,4,3,1,3
|
||||
3,1,2,2,2
|
||||
1,1,2,2,2
|
||||
3,2,2,1,2
|
||||
1,2,1,2,2
|
||||
3,4,3,2,3
|
||||
2,2,2,1,2
|
||||
2,2,1,2,2
|
||||
3,2,1,3,2
|
||||
3,2,1,1,1
|
||||
3,1,2,1,1
|
||||
1,2,1,3,2
|
||||
2,1,1,2,1
|
||||
1,1,1,2,1
|
||||
1,2,2,3,2
|
||||
3,3,1,1,1
|
||||
3,3,3,1,1
|
||||
3,2,1,2,2
|
||||
3,2,1,2,2
|
||||
3,1,2,1,1
|
||||
1,1,1,2,1
|
||||
2,1,3,2,1
|
||||
2,2,2,1,2
|
||||
2,1,2,1,1
|
||||
2,2,1,3,1
|
||||
2,1,2,2,2
|
||||
1,2,4,2,3
|
||||
2,2,1,2,2
|
||||
1,1,2,4,3
|
||||
1,3,2,1,1
|
||||
2,4,4,2,3
|
||||
2,3,2,1,1
|
||||
3,1,2,2,2
|
||||
1,1,2,2,2
|
||||
1,3,2,4,3
|
||||
1,1,2,2,2
|
||||
3,1,4,2,3
|
||||
2,1,3,2,2
|
||||
1,1,3,2,2
|
||||
3,1,3,2,1
|
||||
1,2,4,4,3
|
||||
1,4,2,1,3
|
||||
2,1,2,1,1
|
||||
3,4,1,2,3
|
||||
2,2,1,1,1
|
||||
1,1,2,1,1
|
||||
2,2,4,3,3
|
||||
3,1,2,2,2
|
||||
1,1,3,2,1
|
||||
1,2,1,3,1
|
||||
1,4,4,1,3
|
||||
3,3,3,2,2
|
||||
2,2,1,3,2
|
||||
3,3,2,1,2
|
||||
1,1,1,3,1
|
||||
2,2,1,2,2
|
||||
2,2,2,1,2
|
||||
2,3,2,3,2
|
||||
1,3,2,1,2
|
||||
2,2,1,2,2
|
||||
1,1,1,2,1
|
||||
3,2,2,1,2
|
||||
3,2,1,1,1
|
||||
1,1,2,1,1
|
||||
3,1,4,4,3
|
||||
3,3,2,1,2
|
||||
2,3,2,1,2
|
||||
2,1,3,1,1
|
||||
1,2,1,2,2
|
||||
3,1,1,2,1
|
||||
2,2,4,1,3
|
||||
1,2,2,1,2
|
||||
2,3,2,1,2
|
||||
2,2,1,4,3
|
||||
1,4,2,3,3
|
||||
2,2,1,1,1
|
||||
1,2,1,1,1
|
||||
2,2,3,2,2
|
||||
1,3,2,1,1
|
||||
3,1,2,1,1
|
||||
3,1,1,2,1
|
||||
3,3,1,4,3
|
||||
2,3,4,1,3
|
||||
1,2,3,3,2
|
||||
3,3,2,2,2
|
||||
3,3,4,2,3
|
||||
1,2,2,1,2
|
||||
2,1,1,4,3
|
||||
3,1,2,2,2
|
||||
3,2,2,4,3
|
||||
2,3,1,3,1
|
||||
2,1,1,2,1
|
||||
3,4,1,3,3
|
||||
1,1,4,3,3
|
||||
2,1,2,1,1
|
||||
1,2,1,2,2
|
||||
1,2,2,1,2
|
||||
3,1,1,2,1
|
||||
1,1,1,2,1
|
||||
1,1,2,1,1
|
||||
1,2,1,1,1
|
||||
1,1,1,3,1
|
||||
1,1,3,1,1
|
||||
1,3,1,1,1
|
||||
1,1,3,3,1
|
||||
1,3,1,3,1
|
||||
1,3,3,1,1
|
||||
1,2,2,1,2
|
||||
1,2,1,2,2
|
||||
1,1,2,2,2
|
||||
1,2,2,3,2
|
||||
1,2,3,2,2
|
||||
1,3,2,2,2
|
||||
1,2,3,3,2
|
||||
1,3,2,3,2
|
||||
1,3,3,2,2
|
||||
1,1,3,2,1
|
||||
1,3,2,1,2
|
||||
1,2,1,3,1
|
||||
1,2,3,1,2
|
||||
1,1,2,3,1
|
||||
1,3,1,2,2
|
||||
1,1,1,1,1
|
||||
1,2,2,2,2
|
||||
1,3,3,3,1
|
||||
1,4,4,4,3
|
225
benchmark/tests/datasets/iris.arff
Executable file
225
benchmark/tests/datasets/iris.arff
Executable file
@@ -0,0 +1,225 @@
|
||||
% 1. Title: Iris Plants Database
|
||||
%
|
||||
% 2. Sources:
|
||||
% (a) Creator: R.A. Fisher
|
||||
% (b) Donor: Michael Marshall (MARSHALL%PLU@io.arc.nasa.gov)
|
||||
% (c) Date: July, 1988
|
||||
%
|
||||
% 3. Past Usage:
|
||||
% - Publications: too many to mention!!! Here are a few.
|
||||
% 1. Fisher,R.A. "The use of multiple measurements in taxonomic problems"
|
||||
% Annual Eugenics, 7, Part II, 179-188 (1936); also in "Contributions
|
||||
% to Mathematical Statistics" (John Wiley, NY, 1950).
|
||||
% 2. Duda,R.O., & Hart,P.E. (1973) Pattern Classification and Scene Analysis.
|
||||
% (Q327.D83) John Wiley & Sons. ISBN 0-471-22361-1. See page 218.
|
||||
% 3. Dasarathy, B.V. (1980) "Nosing Around the Neighborhood: A New System
|
||||
% Structure and Classification Rule for Recognition in Partially Exposed
|
||||
% Environments". IEEE Transactions on Pattern Analysis and Machine
|
||||
% Intelligence, Vol. PAMI-2, No. 1, 67-71.
|
||||
% -- Results:
|
||||
% -- very low misclassification rates (0% for the setosa class)
|
||||
% 4. Gates, G.W. (1972) "The Reduced Nearest Neighbor Rule". IEEE
|
||||
% Transactions on Information Theory, May 1972, 431-433.
|
||||
% -- Results:
|
||||
% -- very low misclassification rates again
|
||||
% 5. See also: 1988 MLC Proceedings, 54-64. Cheeseman et al's AUTOCLASS II
|
||||
% conceptual clustering system finds 3 classes in the data.
|
||||
%
|
||||
% 4. Relevant Information:
|
||||
% --- This is perhaps the best known database to be found in the pattern
|
||||
% recognition literature. Fisher's paper is a classic in the field
|
||||
% and is referenced frequently to this day. (See Duda & Hart, for
|
||||
% example.) The data set contains 3 classes of 50 instances each,
|
||||
% where each class refers to a type of iris plant. One class is
|
||||
% linearly separable from the other 2; the latter are NOT linearly
|
||||
% separable from each other.
|
||||
% --- Predicted attribute: class of iris plant.
|
||||
% --- This is an exceedingly simple domain.
|
||||
%
|
||||
% 5. Number of Instances: 150 (50 in each of three classes)
|
||||
%
|
||||
% 6. Number of Attributes: 4 numeric, predictive attributes and the class
|
||||
%
|
||||
% 7. Attribute Information:
|
||||
% 1. sepal length in cm
|
||||
% 2. sepal width in cm
|
||||
% 3. petal length in cm
|
||||
% 4. petal width in cm
|
||||
% 5. class:
|
||||
% -- Iris Setosa
|
||||
% -- Iris Versicolour
|
||||
% -- Iris Virginica
|
||||
%
|
||||
% 8. Missing Attribute Values: None
|
||||
%
|
||||
% Summary Statistics:
|
||||
% Min Max Mean SD Class Correlation
|
||||
% sepal length: 4.3 7.9 5.84 0.83 0.7826
|
||||
% sepal width: 2.0 4.4 3.05 0.43 -0.4194
|
||||
% petal length: 1.0 6.9 3.76 1.76 0.9490 (high!)
|
||||
% petal width: 0.1 2.5 1.20 0.76 0.9565 (high!)
|
||||
%
|
||||
% 9. Class Distribution: 33.3% for each of 3 classes.
|
||||
|
||||
@RELATION iris
|
||||
|
||||
@ATTRIBUTE sepallength REAL
|
||||
@ATTRIBUTE sepalwidth REAL
|
||||
@ATTRIBUTE petallength REAL
|
||||
@ATTRIBUTE petalwidth REAL
|
||||
@ATTRIBUTE class {Iris-setosa,Iris-versicolor,Iris-virginica}
|
||||
|
||||
@DATA
|
||||
5.1,3.5,1.4,0.2,Iris-setosa
|
||||
4.9,3.0,1.4,0.2,Iris-setosa
|
||||
4.7,3.2,1.3,0.2,Iris-setosa
|
||||
4.6,3.1,1.5,0.2,Iris-setosa
|
||||
5.0,3.6,1.4,0.2,Iris-setosa
|
||||
5.4,3.9,1.7,0.4,Iris-setosa
|
||||
4.6,3.4,1.4,0.3,Iris-setosa
|
||||
5.0,3.4,1.5,0.2,Iris-setosa
|
||||
4.4,2.9,1.4,0.2,Iris-setosa
|
||||
4.9,3.1,1.5,0.1,Iris-setosa
|
||||
5.4,3.7,1.5,0.2,Iris-setosa
|
||||
4.8,3.4,1.6,0.2,Iris-setosa
|
||||
4.8,3.0,1.4,0.1,Iris-setosa
|
||||
4.3,3.0,1.1,0.1,Iris-setosa
|
||||
5.8,4.0,1.2,0.2,Iris-setosa
|
||||
5.7,4.4,1.5,0.4,Iris-setosa
|
||||
5.4,3.9,1.3,0.4,Iris-setosa
|
||||
5.1,3.5,1.4,0.3,Iris-setosa
|
||||
5.7,3.8,1.7,0.3,Iris-setosa
|
||||
5.1,3.8,1.5,0.3,Iris-setosa
|
||||
5.4,3.4,1.7,0.2,Iris-setosa
|
||||
5.1,3.7,1.5,0.4,Iris-setosa
|
||||
4.6,3.6,1.0,0.2,Iris-setosa
|
||||
5.1,3.3,1.7,0.5,Iris-setosa
|
||||
4.8,3.4,1.9,0.2,Iris-setosa
|
||||
5.0,3.0,1.6,0.2,Iris-setosa
|
||||
5.0,3.4,1.6,0.4,Iris-setosa
|
||||
5.2,3.5,1.5,0.2,Iris-setosa
|
||||
5.2,3.4,1.4,0.2,Iris-setosa
|
||||
4.7,3.2,1.6,0.2,Iris-setosa
|
||||
4.8,3.1,1.6,0.2,Iris-setosa
|
||||
5.4,3.4,1.5,0.4,Iris-setosa
|
||||
5.2,4.1,1.5,0.1,Iris-setosa
|
||||
5.5,4.2,1.4,0.2,Iris-setosa
|
||||
4.9,3.1,1.5,0.1,Iris-setosa
|
||||
5.0,3.2,1.2,0.2,Iris-setosa
|
||||
5.5,3.5,1.3,0.2,Iris-setosa
|
||||
4.9,3.1,1.5,0.1,Iris-setosa
|
||||
4.4,3.0,1.3,0.2,Iris-setosa
|
||||
5.1,3.4,1.5,0.2,Iris-setosa
|
||||
5.0,3.5,1.3,0.3,Iris-setosa
|
||||
4.5,2.3,1.3,0.3,Iris-setosa
|
||||
4.4,3.2,1.3,0.2,Iris-setosa
|
||||
5.0,3.5,1.6,0.6,Iris-setosa
|
||||
5.1,3.8,1.9,0.4,Iris-setosa
|
||||
4.8,3.0,1.4,0.3,Iris-setosa
|
||||
5.1,3.8,1.6,0.2,Iris-setosa
|
||||
4.6,3.2,1.4,0.2,Iris-setosa
|
||||
5.3,3.7,1.5,0.2,Iris-setosa
|
||||
5.0,3.3,1.4,0.2,Iris-setosa
|
||||
7.0,3.2,4.7,1.4,Iris-versicolor
|
||||
6.4,3.2,4.5,1.5,Iris-versicolor
|
||||
6.9,3.1,4.9,1.5,Iris-versicolor
|
||||
5.5,2.3,4.0,1.3,Iris-versicolor
|
||||
6.5,2.8,4.6,1.5,Iris-versicolor
|
||||
5.7,2.8,4.5,1.3,Iris-versicolor
|
||||
6.3,3.3,4.7,1.6,Iris-versicolor
|
||||
4.9,2.4,3.3,1.0,Iris-versicolor
|
||||
6.6,2.9,4.6,1.3,Iris-versicolor
|
||||
5.2,2.7,3.9,1.4,Iris-versicolor
|
||||
5.0,2.0,3.5,1.0,Iris-versicolor
|
||||
5.9,3.0,4.2,1.5,Iris-versicolor
|
||||
6.0,2.2,4.0,1.0,Iris-versicolor
|
||||
6.1,2.9,4.7,1.4,Iris-versicolor
|
||||
5.6,2.9,3.6,1.3,Iris-versicolor
|
||||
6.7,3.1,4.4,1.4,Iris-versicolor
|
||||
5.6,3.0,4.5,1.5,Iris-versicolor
|
||||
5.8,2.7,4.1,1.0,Iris-versicolor
|
||||
6.2,2.2,4.5,1.5,Iris-versicolor
|
||||
5.6,2.5,3.9,1.1,Iris-versicolor
|
||||
5.9,3.2,4.8,1.8,Iris-versicolor
|
||||
6.1,2.8,4.0,1.3,Iris-versicolor
|
||||
6.3,2.5,4.9,1.5,Iris-versicolor
|
||||
6.1,2.8,4.7,1.2,Iris-versicolor
|
||||
6.4,2.9,4.3,1.3,Iris-versicolor
|
||||
6.6,3.0,4.4,1.4,Iris-versicolor
|
||||
6.8,2.8,4.8,1.4,Iris-versicolor
|
||||
6.7,3.0,5.0,1.7,Iris-versicolor
|
||||
6.0,2.9,4.5,1.5,Iris-versicolor
|
||||
5.7,2.6,3.5,1.0,Iris-versicolor
|
||||
5.5,2.4,3.8,1.1,Iris-versicolor
|
||||
5.5,2.4,3.7,1.0,Iris-versicolor
|
||||
5.8,2.7,3.9,1.2,Iris-versicolor
|
||||
6.0,2.7,5.1,1.6,Iris-versicolor
|
||||
5.4,3.0,4.5,1.5,Iris-versicolor
|
||||
6.0,3.4,4.5,1.6,Iris-versicolor
|
||||
6.7,3.1,4.7,1.5,Iris-versicolor
|
||||
6.3,2.3,4.4,1.3,Iris-versicolor
|
||||
5.6,3.0,4.1,1.3,Iris-versicolor
|
||||
5.5,2.5,4.0,1.3,Iris-versicolor
|
||||
5.5,2.6,4.4,1.2,Iris-versicolor
|
||||
6.1,3.0,4.6,1.4,Iris-versicolor
|
||||
5.8,2.6,4.0,1.2,Iris-versicolor
|
||||
5.0,2.3,3.3,1.0,Iris-versicolor
|
||||
5.6,2.7,4.2,1.3,Iris-versicolor
|
||||
5.7,3.0,4.2,1.2,Iris-versicolor
|
||||
5.7,2.9,4.2,1.3,Iris-versicolor
|
||||
6.2,2.9,4.3,1.3,Iris-versicolor
|
||||
5.1,2.5,3.0,1.1,Iris-versicolor
|
||||
5.7,2.8,4.1,1.3,Iris-versicolor
|
||||
6.3,3.3,6.0,2.5,Iris-virginica
|
||||
5.8,2.7,5.1,1.9,Iris-virginica
|
||||
7.1,3.0,5.9,2.1,Iris-virginica
|
||||
6.3,2.9,5.6,1.8,Iris-virginica
|
||||
6.5,3.0,5.8,2.2,Iris-virginica
|
||||
7.6,3.0,6.6,2.1,Iris-virginica
|
||||
4.9,2.5,4.5,1.7,Iris-virginica
|
||||
7.3,2.9,6.3,1.8,Iris-virginica
|
||||
6.7,2.5,5.8,1.8,Iris-virginica
|
||||
7.2,3.6,6.1,2.5,Iris-virginica
|
||||
6.5,3.2,5.1,2.0,Iris-virginica
|
||||
6.4,2.7,5.3,1.9,Iris-virginica
|
||||
6.8,3.0,5.5,2.1,Iris-virginica
|
||||
5.7,2.5,5.0,2.0,Iris-virginica
|
||||
5.8,2.8,5.1,2.4,Iris-virginica
|
||||
6.4,3.2,5.3,2.3,Iris-virginica
|
||||
6.5,3.0,5.5,1.8,Iris-virginica
|
||||
7.7,3.8,6.7,2.2,Iris-virginica
|
||||
7.7,2.6,6.9,2.3,Iris-virginica
|
||||
6.0,2.2,5.0,1.5,Iris-virginica
|
||||
6.9,3.2,5.7,2.3,Iris-virginica
|
||||
5.6,2.8,4.9,2.0,Iris-virginica
|
||||
7.7,2.8,6.7,2.0,Iris-virginica
|
||||
6.3,2.7,4.9,1.8,Iris-virginica
|
||||
6.7,3.3,5.7,2.1,Iris-virginica
|
||||
7.2,3.2,6.0,1.8,Iris-virginica
|
||||
6.2,2.8,4.8,1.8,Iris-virginica
|
||||
6.1,3.0,4.9,1.8,Iris-virginica
|
||||
6.4,2.8,5.6,2.1,Iris-virginica
|
||||
7.2,3.0,5.8,1.6,Iris-virginica
|
||||
7.4,2.8,6.1,1.9,Iris-virginica
|
||||
7.9,3.8,6.4,2.0,Iris-virginica
|
||||
6.4,2.8,5.6,2.2,Iris-virginica
|
||||
6.3,2.8,5.1,1.5,Iris-virginica
|
||||
6.1,2.6,5.6,1.4,Iris-virginica
|
||||
7.7,3.0,6.1,2.3,Iris-virginica
|
||||
6.3,3.4,5.6,2.4,Iris-virginica
|
||||
6.4,3.1,5.5,1.8,Iris-virginica
|
||||
6.0,3.0,4.8,1.8,Iris-virginica
|
||||
6.9,3.1,5.4,2.1,Iris-virginica
|
||||
6.7,3.1,5.6,2.4,Iris-virginica
|
||||
6.9,3.1,5.1,2.3,Iris-virginica
|
||||
5.8,2.7,5.1,1.9,Iris-virginica
|
||||
6.8,3.2,5.9,2.3,Iris-virginica
|
||||
6.7,3.3,5.7,2.5,Iris-virginica
|
||||
6.7,3.0,5.2,2.3,Iris-virginica
|
||||
6.3,2.5,5.0,1.9,Iris-virginica
|
||||
6.5,3.0,5.2,2.0,Iris-virginica
|
||||
6.2,3.4,5.4,2.3,Iris-virginica
|
||||
5.9,3.0,5.1,1.8,Iris-virginica
|
||||
%
|
||||
%
|
||||
%
|
302
benchmark/tests/datasets/wine.arff
Executable file
302
benchmark/tests/datasets/wine.arff
Executable file
@@ -0,0 +1,302 @@
|
||||
% 1. Title of Database: Wine recognition data
|
||||
% Updated Sept 21, 1998 by C.Blake : Added attribute information
|
||||
%
|
||||
% 2. Sources:
|
||||
% (a) Forina, M. et al, PARVUS - An Extendible Package for Data
|
||||
% Exploration, Classification and Correlation. Institute of Pharmaceutical
|
||||
% and Food Analysis and Technologies, Via Brigata Salerno,
|
||||
% 16147 Genoa, Italy.
|
||||
%
|
||||
% (b) Stefan Aeberhard, email: stefan@coral.cs.jcu.edu.au
|
||||
% (c) July 1991
|
||||
% 3. Past Usage:
|
||||
%
|
||||
% (1)
|
||||
% S. Aeberhard, D. Coomans and O. de Vel,
|
||||
% Comparison of Classifiers in High Dimensional Settings,
|
||||
% Tech. Rep. no. 92-02, (1992), Dept. of Computer Science and Dept. of
|
||||
% Mathematics and Statistics, James Cook University of North Queensland.
|
||||
% (Also submitted to Technometrics).
|
||||
%
|
||||
% The data was used with many others for comparing various
|
||||
% classifiers. The classes are separable, though only RDA
|
||||
% has achieved 100% correct classification.
|
||||
% (RDA : 100%, QDA 99.4%, LDA 98.9%, 1NN 96.1% (z-transformed data))
|
||||
% (All results using the leave-one-out technique)
|
||||
%
|
||||
% In a classification context, this is a well posed problem
|
||||
% with "well behaved" class structures. A good data set
|
||||
% for first testing of a new classifier, but not very
|
||||
% challenging.
|
||||
%
|
||||
% (2)
|
||||
% S. Aeberhard, D. Coomans and O. de Vel,
|
||||
% "THE CLASSIFICATION PERFORMANCE OF RDA"
|
||||
% Tech. Rep. no. 92-01, (1992), Dept. of Computer Science and Dept. of
|
||||
% Mathematics and Statistics, James Cook University of North Queensland.
|
||||
% (Also submitted to Journal of Chemometrics).
|
||||
%
|
||||
% Here, the data was used to illustrate the superior performance of
|
||||
% the use of a new appreciation function with RDA.
|
||||
%
|
||||
% 4. Relevant Information:
|
||||
%
|
||||
% -- These data are the results of a chemical analysis of
|
||||
% wines grown in the same region in Italy but derived from three
|
||||
% different cultivars.
|
||||
% The analysis determined the quantities of 13 constituents
|
||||
% found in each of the three types of wines.
|
||||
%
|
||||
% -- I think that the initial data set had around 30 variables, but
|
||||
% for some reason I only have the 13 dimensional version.
|
||||
% I had a list of what the 30 or so variables were, but a.)
|
||||
% I lost it, and b.), I would not know which 13 variables
|
||||
% are included in the set.
|
||||
%
|
||||
% -- The attributes are (dontated by Riccardo Leardi,
|
||||
% riclea@anchem.unige.it )
|
||||
% 1) Alcohol
|
||||
% 2) Malic acid
|
||||
% 3) Ash
|
||||
% 4) Alcalinity of ash
|
||||
% 5) Magnesium
|
||||
% 6) Total phenols
|
||||
% 7) Flavanoids
|
||||
% 8) Nonflavanoid phenols
|
||||
% 9) Proanthocyanins
|
||||
% 10)Color intensity
|
||||
% 11)Hue
|
||||
% 12)OD280/OD315 of diluted wines
|
||||
% 13)Proline
|
||||
%
|
||||
% 5. Number of Instances
|
||||
%
|
||||
% class 1 59
|
||||
% class 2 71
|
||||
% class 3 48
|
||||
%
|
||||
% 6. Number of Attributes
|
||||
%
|
||||
% 13
|
||||
%
|
||||
% 7. For Each Attribute:
|
||||
%
|
||||
% All attributes are continuous
|
||||
%
|
||||
% No statistics available, but suggest to standardise
|
||||
% variables for certain uses (e.g. for us with classifiers
|
||||
% which are NOT scale invariant)
|
||||
%
|
||||
% NOTE: 1st attribute is class identifier (1-3)
|
||||
%
|
||||
% 8. Missing Attribute Values:
|
||||
%
|
||||
% None
|
||||
%
|
||||
% 9. Class Distribution: number of instances per class
|
||||
%
|
||||
% class 1 59
|
||||
% class 2 71
|
||||
% class 3 48
|
||||
%
|
||||
% Information about the dataset
|
||||
% CLASSTYPE: nominal
|
||||
% CLASSINDEX: first
|
||||
%
|
||||
|
||||
@relation wine
|
||||
|
||||
@attribute class {1,2,3}
|
||||
@attribute Alcohol REAL
|
||||
@attribute Malic_acid REAL
|
||||
@attribute Ash REAL
|
||||
@attribute Alcalinity_of_ash REAL
|
||||
@attribute Magnesium INTEGER
|
||||
@attribute Total_phenols REAL
|
||||
@attribute Flavanoids REAL
|
||||
@attribute Nonflavanoid_phenols REAL
|
||||
@attribute Proanthocyanins REAL
|
||||
@attribute Color_intensity REAL
|
||||
@attribute Hue REAL
|
||||
@attribute OD280/OD315_of_diluted_wines REAL
|
||||
@attribute Proline INTEGER
|
||||
|
||||
@data
|
||||
1,14.23,1.71,2.43,15.6,127,2.8,3.06,.28,2.29,5.64,1.04,3.92,1065
|
||||
1,13.2,1.78,2.14,11.2,100,2.65,2.76,.26,1.28,4.38,1.05,3.4,1050
|
||||
1,13.16,2.36,2.67,18.6,101,2.8,3.24,.3,2.81,5.68,1.03,3.17,1185
|
||||
1,14.37,1.95,2.5,16.8,113,3.85,3.49,.24,2.18,7.8,.86,3.45,1480
|
||||
1,13.24,2.59,2.87,21,118,2.8,2.69,.39,1.82,4.32,1.04,2.93,735
|
||||
1,14.2,1.76,2.45,15.2,112,3.27,3.39,.34,1.97,6.75,1.05,2.85,1450
|
||||
1,14.39,1.87,2.45,14.6,96,2.5,2.52,.3,1.98,5.25,1.02,3.58,1290
|
||||
1,14.06,2.15,2.61,17.6,121,2.6,2.51,.31,1.25,5.05,1.06,3.58,1295
|
||||
1,14.83,1.64,2.17,14,97,2.8,2.98,.29,1.98,5.2,1.08,2.85,1045
|
||||
1,13.86,1.35,2.27,16,98,2.98,3.15,.22,1.85,7.22,1.01,3.55,1045
|
||||
1,14.1,2.16,2.3,18,105,2.95,3.32,.22,2.38,5.75,1.25,3.17,1510
|
||||
1,14.12,1.48,2.32,16.8,95,2.2,2.43,.26,1.57,5,1.17,2.82,1280
|
||||
1,13.75,1.73,2.41,16,89,2.6,2.76,.29,1.81,5.6,1.15,2.9,1320
|
||||
1,14.75,1.73,2.39,11.4,91,3.1,3.69,.43,2.81,5.4,1.25,2.73,1150
|
||||
1,14.38,1.87,2.38,12,102,3.3,3.64,.29,2.96,7.5,1.2,3,1547
|
||||
1,13.63,1.81,2.7,17.2,112,2.85,2.91,.3,1.46,7.3,1.28,2.88,1310
|
||||
1,14.3,1.92,2.72,20,120,2.8,3.14,.33,1.97,6.2,1.07,2.65,1280
|
||||
1,13.83,1.57,2.62,20,115,2.95,3.4,.4,1.72,6.6,1.13,2.57,1130
|
||||
1,14.19,1.59,2.48,16.5,108,3.3,3.93,.32,1.86,8.7,1.23,2.82,1680
|
||||
1,13.64,3.1,2.56,15.2,116,2.7,3.03,.17,1.66,5.1,.96,3.36,845
|
||||
1,14.06,1.63,2.28,16,126,3,3.17,.24,2.1,5.65,1.09,3.71,780
|
||||
1,12.93,3.8,2.65,18.6,102,2.41,2.41,.25,1.98,4.5,1.03,3.52,770
|
||||
1,13.71,1.86,2.36,16.6,101,2.61,2.88,.27,1.69,3.8,1.11,4,1035
|
||||
1,12.85,1.6,2.52,17.8,95,2.48,2.37,.26,1.46,3.93,1.09,3.63,1015
|
||||
1,13.5,1.81,2.61,20,96,2.53,2.61,.28,1.66,3.52,1.12,3.82,845
|
||||
1,13.05,2.05,3.22,25,124,2.63,2.68,.47,1.92,3.58,1.13,3.2,830
|
||||
1,13.39,1.77,2.62,16.1,93,2.85,2.94,.34,1.45,4.8,.92,3.22,1195
|
||||
1,13.3,1.72,2.14,17,94,2.4,2.19,.27,1.35,3.95,1.02,2.77,1285
|
||||
1,13.87,1.9,2.8,19.4,107,2.95,2.97,.37,1.76,4.5,1.25,3.4,915
|
||||
1,14.02,1.68,2.21,16,96,2.65,2.33,.26,1.98,4.7,1.04,3.59,1035
|
||||
1,13.73,1.5,2.7,22.5,101,3,3.25,.29,2.38,5.7,1.19,2.71,1285
|
||||
1,13.58,1.66,2.36,19.1,106,2.86,3.19,.22,1.95,6.9,1.09,2.88,1515
|
||||
1,13.68,1.83,2.36,17.2,104,2.42,2.69,.42,1.97,3.84,1.23,2.87,990
|
||||
1,13.76,1.53,2.7,19.5,132,2.95,2.74,.5,1.35,5.4,1.25,3,1235
|
||||
1,13.51,1.8,2.65,19,110,2.35,2.53,.29,1.54,4.2,1.1,2.87,1095
|
||||
1,13.48,1.81,2.41,20.5,100,2.7,2.98,.26,1.86,5.1,1.04,3.47,920
|
||||
1,13.28,1.64,2.84,15.5,110,2.6,2.68,.34,1.36,4.6,1.09,2.78,880
|
||||
1,13.05,1.65,2.55,18,98,2.45,2.43,.29,1.44,4.25,1.12,2.51,1105
|
||||
1,13.07,1.5,2.1,15.5,98,2.4,2.64,.28,1.37,3.7,1.18,2.69,1020
|
||||
1,14.22,3.99,2.51,13.2,128,3,3.04,.2,2.08,5.1,.89,3.53,760
|
||||
1,13.56,1.71,2.31,16.2,117,3.15,3.29,.34,2.34,6.13,.95,3.38,795
|
||||
1,13.41,3.84,2.12,18.8,90,2.45,2.68,.27,1.48,4.28,.91,3,1035
|
||||
1,13.88,1.89,2.59,15,101,3.25,3.56,.17,1.7,5.43,.88,3.56,1095
|
||||
1,13.24,3.98,2.29,17.5,103,2.64,2.63,.32,1.66,4.36,.82,3,680
|
||||
1,13.05,1.77,2.1,17,107,3,3,.28,2.03,5.04,.88,3.35,885
|
||||
1,14.21,4.04,2.44,18.9,111,2.85,2.65,.3,1.25,5.24,.87,3.33,1080
|
||||
1,14.38,3.59,2.28,16,102,3.25,3.17,.27,2.19,4.9,1.04,3.44,1065
|
||||
1,13.9,1.68,2.12,16,101,3.1,3.39,.21,2.14,6.1,.91,3.33,985
|
||||
1,14.1,2.02,2.4,18.8,103,2.75,2.92,.32,2.38,6.2,1.07,2.75,1060
|
||||
1,13.94,1.73,2.27,17.4,108,2.88,3.54,.32,2.08,8.90,1.12,3.1,1260
|
||||
1,13.05,1.73,2.04,12.4,92,2.72,3.27,.17,2.91,7.2,1.12,2.91,1150
|
||||
1,13.83,1.65,2.6,17.2,94,2.45,2.99,.22,2.29,5.6,1.24,3.37,1265
|
||||
1,13.82,1.75,2.42,14,111,3.88,3.74,.32,1.87,7.05,1.01,3.26,1190
|
||||
1,13.77,1.9,2.68,17.1,115,3,2.79,.39,1.68,6.3,1.13,2.93,1375
|
||||
1,13.74,1.67,2.25,16.4,118,2.6,2.9,.21,1.62,5.85,.92,3.2,1060
|
||||
1,13.56,1.73,2.46,20.5,116,2.96,2.78,.2,2.45,6.25,.98,3.03,1120
|
||||
1,14.22,1.7,2.3,16.3,118,3.2,3,.26,2.03,6.38,.94,3.31,970
|
||||
1,13.29,1.97,2.68,16.8,102,3,3.23,.31,1.66,6,1.07,2.84,1270
|
||||
1,13.72,1.43,2.5,16.7,108,3.4,3.67,.19,2.04,6.8,.89,2.87,1285
|
||||
2,12.37,.94,1.36,10.6,88,1.98,.57,.28,.42,1.95,1.05,1.82,520
|
||||
2,12.33,1.1,2.28,16,101,2.05,1.09,.63,.41,3.27,1.25,1.67,680
|
||||
2,12.64,1.36,2.02,16.8,100,2.02,1.41,.53,.62,5.75,.98,1.59,450
|
||||
2,13.67,1.25,1.92,18,94,2.1,1.79,.32,.73,3.8,1.23,2.46,630
|
||||
2,12.37,1.13,2.16,19,87,3.5,3.1,.19,1.87,4.45,1.22,2.87,420
|
||||
2,12.17,1.45,2.53,19,104,1.89,1.75,.45,1.03,2.95,1.45,2.23,355
|
||||
2,12.37,1.21,2.56,18.1,98,2.42,2.65,.37,2.08,4.6,1.19,2.3,678
|
||||
2,13.11,1.01,1.7,15,78,2.98,3.18,.26,2.28,5.3,1.12,3.18,502
|
||||
2,12.37,1.17,1.92,19.6,78,2.11,2,.27,1.04,4.68,1.12,3.48,510
|
||||
2,13.34,.94,2.36,17,110,2.53,1.3,.55,.42,3.17,1.02,1.93,750
|
||||
2,12.21,1.19,1.75,16.8,151,1.85,1.28,.14,2.5,2.85,1.28,3.07,718
|
||||
2,12.29,1.61,2.21,20.4,103,1.1,1.02,.37,1.46,3.05,.906,1.82,870
|
||||
2,13.86,1.51,2.67,25,86,2.95,2.86,.21,1.87,3.38,1.36,3.16,410
|
||||
2,13.49,1.66,2.24,24,87,1.88,1.84,.27,1.03,3.74,.98,2.78,472
|
||||
2,12.99,1.67,2.6,30,139,3.3,2.89,.21,1.96,3.35,1.31,3.5,985
|
||||
2,11.96,1.09,2.3,21,101,3.38,2.14,.13,1.65,3.21,.99,3.13,886
|
||||
2,11.66,1.88,1.92,16,97,1.61,1.57,.34,1.15,3.8,1.23,2.14,428
|
||||
2,13.03,.9,1.71,16,86,1.95,2.03,.24,1.46,4.6,1.19,2.48,392
|
||||
2,11.84,2.89,2.23,18,112,1.72,1.32,.43,.95,2.65,.96,2.52,500
|
||||
2,12.33,.99,1.95,14.8,136,1.9,1.85,.35,2.76,3.4,1.06,2.31,750
|
||||
2,12.7,3.87,2.4,23,101,2.83,2.55,.43,1.95,2.57,1.19,3.13,463
|
||||
2,12,.92,2,19,86,2.42,2.26,.3,1.43,2.5,1.38,3.12,278
|
||||
2,12.72,1.81,2.2,18.8,86,2.2,2.53,.26,1.77,3.9,1.16,3.14,714
|
||||
2,12.08,1.13,2.51,24,78,2,1.58,.4,1.4,2.2,1.31,2.72,630
|
||||
2,13.05,3.86,2.32,22.5,85,1.65,1.59,.61,1.62,4.8,.84,2.01,515
|
||||
2,11.84,.89,2.58,18,94,2.2,2.21,.22,2.35,3.05,.79,3.08,520
|
||||
2,12.67,.98,2.24,18,99,2.2,1.94,.3,1.46,2.62,1.23,3.16,450
|
||||
2,12.16,1.61,2.31,22.8,90,1.78,1.69,.43,1.56,2.45,1.33,2.26,495
|
||||
2,11.65,1.67,2.62,26,88,1.92,1.61,.4,1.34,2.6,1.36,3.21,562
|
||||
2,11.64,2.06,2.46,21.6,84,1.95,1.69,.48,1.35,2.8,1,2.75,680
|
||||
2,12.08,1.33,2.3,23.6,70,2.2,1.59,.42,1.38,1.74,1.07,3.21,625
|
||||
2,12.08,1.83,2.32,18.5,81,1.6,1.5,.52,1.64,2.4,1.08,2.27,480
|
||||
2,12,1.51,2.42,22,86,1.45,1.25,.5,1.63,3.6,1.05,2.65,450
|
||||
2,12.69,1.53,2.26,20.7,80,1.38,1.46,.58,1.62,3.05,.96,2.06,495
|
||||
2,12.29,2.83,2.22,18,88,2.45,2.25,.25,1.99,2.15,1.15,3.3,290
|
||||
2,11.62,1.99,2.28,18,98,3.02,2.26,.17,1.35,3.25,1.16,2.96,345
|
||||
2,12.47,1.52,2.2,19,162,2.5,2.27,.32,3.28,2.6,1.16,2.63,937
|
||||
2,11.81,2.12,2.74,21.5,134,1.6,.99,.14,1.56,2.5,.95,2.26,625
|
||||
2,12.29,1.41,1.98,16,85,2.55,2.5,.29,1.77,2.9,1.23,2.74,428
|
||||
2,12.37,1.07,2.1,18.5,88,3.52,3.75,.24,1.95,4.5,1.04,2.77,660
|
||||
2,12.29,3.17,2.21,18,88,2.85,2.99,.45,2.81,2.3,1.42,2.83,406
|
||||
2,12.08,2.08,1.7,17.5,97,2.23,2.17,.26,1.4,3.3,1.27,2.96,710
|
||||
2,12.6,1.34,1.9,18.5,88,1.45,1.36,.29,1.35,2.45,1.04,2.77,562
|
||||
2,12.34,2.45,2.46,21,98,2.56,2.11,.34,1.31,2.8,.8,3.38,438
|
||||
2,11.82,1.72,1.88,19.5,86,2.5,1.64,.37,1.42,2.06,.94,2.44,415
|
||||
2,12.51,1.73,1.98,20.5,85,2.2,1.92,.32,1.48,2.94,1.04,3.57,672
|
||||
2,12.42,2.55,2.27,22,90,1.68,1.84,.66,1.42,2.7,.86,3.3,315
|
||||
2,12.25,1.73,2.12,19,80,1.65,2.03,.37,1.63,3.4,1,3.17,510
|
||||
2,12.72,1.75,2.28,22.5,84,1.38,1.76,.48,1.63,3.3,.88,2.42,488
|
||||
2,12.22,1.29,1.94,19,92,2.36,2.04,.39,2.08,2.7,.86,3.02,312
|
||||
2,11.61,1.35,2.7,20,94,2.74,2.92,.29,2.49,2.65,.96,3.26,680
|
||||
2,11.46,3.74,1.82,19.5,107,3.18,2.58,.24,3.58,2.9,.75,2.81,562
|
||||
2,12.52,2.43,2.17,21,88,2.55,2.27,.26,1.22,2,.9,2.78,325
|
||||
2,11.76,2.68,2.92,20,103,1.75,2.03,.6,1.05,3.8,1.23,2.5,607
|
||||
2,11.41,.74,2.5,21,88,2.48,2.01,.42,1.44,3.08,1.1,2.31,434
|
||||
2,12.08,1.39,2.5,22.5,84,2.56,2.29,.43,1.04,2.9,.93,3.19,385
|
||||
2,11.03,1.51,2.2,21.5,85,2.46,2.17,.52,2.01,1.9,1.71,2.87,407
|
||||
2,11.82,1.47,1.99,20.8,86,1.98,1.6,.3,1.53,1.95,.95,3.33,495
|
||||
2,12.42,1.61,2.19,22.5,108,2,2.09,.34,1.61,2.06,1.06,2.96,345
|
||||
2,12.77,3.43,1.98,16,80,1.63,1.25,.43,.83,3.4,.7,2.12,372
|
||||
2,12,3.43,2,19,87,2,1.64,.37,1.87,1.28,.93,3.05,564
|
||||
2,11.45,2.4,2.42,20,96,2.9,2.79,.32,1.83,3.25,.8,3.39,625
|
||||
2,11.56,2.05,3.23,28.5,119,3.18,5.08,.47,1.87,6,.93,3.69,465
|
||||
2,12.42,4.43,2.73,26.5,102,2.2,2.13,.43,1.71,2.08,.92,3.12,365
|
||||
2,13.05,5.8,2.13,21.5,86,2.62,2.65,.3,2.01,2.6,.73,3.1,380
|
||||
2,11.87,4.31,2.39,21,82,2.86,3.03,.21,2.91,2.8,.75,3.64,380
|
||||
2,12.07,2.16,2.17,21,85,2.6,2.65,.37,1.35,2.76,.86,3.28,378
|
||||
2,12.43,1.53,2.29,21.5,86,2.74,3.15,.39,1.77,3.94,.69,2.84,352
|
||||
2,11.79,2.13,2.78,28.5,92,2.13,2.24,.58,1.76,3,.97,2.44,466
|
||||
2,12.37,1.63,2.3,24.5,88,2.22,2.45,.4,1.9,2.12,.89,2.78,342
|
||||
2,12.04,4.3,2.38,22,80,2.1,1.75,.42,1.35,2.6,.79,2.57,580
|
||||
3,12.86,1.35,2.32,18,122,1.51,1.25,.21,.94,4.1,.76,1.29,630
|
||||
3,12.88,2.99,2.4,20,104,1.3,1.22,.24,.83,5.4,.74,1.42,530
|
||||
3,12.81,2.31,2.4,24,98,1.15,1.09,.27,.83,5.7,.66,1.36,560
|
||||
3,12.7,3.55,2.36,21.5,106,1.7,1.2,.17,.84,5,.78,1.29,600
|
||||
3,12.51,1.24,2.25,17.5,85,2,.58,.6,1.25,5.45,.75,1.51,650
|
||||
3,12.6,2.46,2.2,18.5,94,1.62,.66,.63,.94,7.1,.73,1.58,695
|
||||
3,12.25,4.72,2.54,21,89,1.38,.47,.53,.8,3.85,.75,1.27,720
|
||||
3,12.53,5.51,2.64,25,96,1.79,.6,.63,1.1,5,.82,1.69,515
|
||||
3,13.49,3.59,2.19,19.5,88,1.62,.48,.58,.88,5.7,.81,1.82,580
|
||||
3,12.84,2.96,2.61,24,101,2.32,.6,.53,.81,4.92,.89,2.15,590
|
||||
3,12.93,2.81,2.7,21,96,1.54,.5,.53,.75,4.6,.77,2.31,600
|
||||
3,13.36,2.56,2.35,20,89,1.4,.5,.37,.64,5.6,.7,2.47,780
|
||||
3,13.52,3.17,2.72,23.5,97,1.55,.52,.5,.55,4.35,.89,2.06,520
|
||||
3,13.62,4.95,2.35,20,92,2,.8,.47,1.02,4.4,.91,2.05,550
|
||||
3,12.25,3.88,2.2,18.5,112,1.38,.78,.29,1.14,8.21,.65,2,855
|
||||
3,13.16,3.57,2.15,21,102,1.5,.55,.43,1.3,4,.6,1.68,830
|
||||
3,13.88,5.04,2.23,20,80,.98,.34,.4,.68,4.9,.58,1.33,415
|
||||
3,12.87,4.61,2.48,21.5,86,1.7,.65,.47,.86,7.65,.54,1.86,625
|
||||
3,13.32,3.24,2.38,21.5,92,1.93,.76,.45,1.25,8.42,.55,1.62,650
|
||||
3,13.08,3.9,2.36,21.5,113,1.41,1.39,.34,1.14,9.40,.57,1.33,550
|
||||
3,13.5,3.12,2.62,24,123,1.4,1.57,.22,1.25,8.60,.59,1.3,500
|
||||
3,12.79,2.67,2.48,22,112,1.48,1.36,.24,1.26,10.8,.48,1.47,480
|
||||
3,13.11,1.9,2.75,25.5,116,2.2,1.28,.26,1.56,7.1,.61,1.33,425
|
||||
3,13.23,3.3,2.28,18.5,98,1.8,.83,.61,1.87,10.52,.56,1.51,675
|
||||
3,12.58,1.29,2.1,20,103,1.48,.58,.53,1.4,7.6,.58,1.55,640
|
||||
3,13.17,5.19,2.32,22,93,1.74,.63,.61,1.55,7.9,.6,1.48,725
|
||||
3,13.84,4.12,2.38,19.5,89,1.8,.83,.48,1.56,9.01,.57,1.64,480
|
||||
3,12.45,3.03,2.64,27,97,1.9,.58,.63,1.14,7.5,.67,1.73,880
|
||||
3,14.34,1.68,2.7,25,98,2.8,1.31,.53,2.7,13,.57,1.96,660
|
||||
3,13.48,1.67,2.64,22.5,89,2.6,1.1,.52,2.29,11.75,.57,1.78,620
|
||||
3,12.36,3.83,2.38,21,88,2.3,.92,.5,1.04,7.65,.56,1.58,520
|
||||
3,13.69,3.26,2.54,20,107,1.83,.56,.5,.8,5.88,.96,1.82,680
|
||||
3,12.85,3.27,2.58,22,106,1.65,.6,.6,.96,5.58,.87,2.11,570
|
||||
3,12.96,3.45,2.35,18.5,106,1.39,.7,.4,.94,5.28,.68,1.75,675
|
||||
3,13.78,2.76,2.3,22,90,1.35,.68,.41,1.03,9.58,.7,1.68,615
|
||||
3,13.73,4.36,2.26,22.5,88,1.28,.47,.52,1.15,6.62,.78,1.75,520
|
||||
3,13.45,3.7,2.6,23,111,1.7,.92,.43,1.46,10.68,.85,1.56,695
|
||||
3,12.82,3.37,2.3,19.5,88,1.48,.66,.4,.97,10.26,.72,1.75,685
|
||||
3,13.58,2.58,2.69,24.5,105,1.55,.84,.39,1.54,8.66,.74,1.8,750
|
||||
3,13.4,4.6,2.86,25,112,1.98,.96,.27,1.11,8.5,.67,1.92,630
|
||||
3,12.2,3.03,2.32,19,96,1.25,.49,.4,.73,5.5,.66,1.83,510
|
||||
3,12.77,2.39,2.28,19.5,86,1.39,.51,.48,.64,9.899999,.57,1.63,470
|
||||
3,14.16,2.51,2.48,20,91,1.68,.7,.44,1.24,9.7,.62,1.71,660
|
||||
3,13.71,5.65,2.45,20.5,95,1.68,.61,.52,1.06,7.7,.64,1.74,740
|
||||
3,13.4,3.91,2.48,23,102,1.8,.75,.43,1.41,7.3,.7,1.56,750
|
||||
3,13.27,4.28,2.26,20,120,1.59,.69,.43,1.35,10.2,.59,1.56,835
|
||||
3,13.17,2.59,2.37,20,120,1.65,.68,.53,1.46,9.3,.6,1.62,840
|
||||
3,14.13,4.1,2.74,24.5,96,2.05,.76,.56,1.35,9.2,.61,1.6,560
|
@@ -6,7 +6,7 @@
|
||||
"kernel": "liblinear",
|
||||
"multiclass_strategy": "ovr"
|
||||
},
|
||||
"v. 1.2.4, Computed on Test on 2022-02-22 at 12:00:00 took 1s"
|
||||
"v. 1.3.0, Computed on Test on 2022-02-22 at 12:00:00 took 1s"
|
||||
],
|
||||
"balloons": [
|
||||
0.625,
|
||||
@@ -15,6 +15,6 @@
|
||||
"kernel": "linear",
|
||||
"multiclass_strategy": "ovr"
|
||||
},
|
||||
"v. 1.2.4, Computed on Test on 2022-02-22 at 12:00:00 took 1s"
|
||||
"v. 1.3.0, Computed on Test on 2022-02-22 at 12:00:00 took 1s"
|
||||
]
|
||||
}
|
@@ -3,6 +3,8 @@
|
||||
"title": "Gridsearched hyperparams v022.1b random_init",
|
||||
"model": "ODTE",
|
||||
"version": "0.3.2",
|
||||
"language_version": "3.11x",
|
||||
"language": "Python",
|
||||
"stratified": false,
|
||||
"folds": 5,
|
||||
"date": "2022-04-20",
|
||||
|
@@ -3,6 +3,8 @@
|
||||
"title": "Test default paramters with RandomForest",
|
||||
"model": "RandomForest",
|
||||
"version": "-",
|
||||
"language_version": "3.11x",
|
||||
"language": "Python",
|
||||
"stratified": false,
|
||||
"folds": 5,
|
||||
"date": "2022-01-14",
|
||||
|
@@ -3,6 +3,8 @@
|
||||
"model": "STree",
|
||||
"stratified": false,
|
||||
"folds": 5,
|
||||
"language_version": "3.11x",
|
||||
"language": "Python",
|
||||
"date": "2021-09-30",
|
||||
"time": "11:42:07",
|
||||
"duration": 624.2505249977112,
|
||||
|
@@ -1,6 +1,8 @@
|
||||
{
|
||||
"score_name": "accuracy",
|
||||
"model": "STree",
|
||||
"language": "Python",
|
||||
"language_version": "3.11x",
|
||||
"stratified": false,
|
||||
"folds": 5,
|
||||
"date": "2021-10-27",
|
||||
|
@@ -1,6 +1,8 @@
|
||||
{
|
||||
"score_name": "accuracy",
|
||||
"model": "STree",
|
||||
"language_version": "3.11x",
|
||||
"language": "Python",
|
||||
"stratified": false,
|
||||
"folds": 5,
|
||||
"date": "2021-11-01",
|
||||
|
@@ -2,6 +2,7 @@ import os
|
||||
from openpyxl import load_workbook
|
||||
from ...Utils import NO_RESULTS, Folders, Files
|
||||
from ..TestBase import TestBase
|
||||
from ..._version import __version__
|
||||
|
||||
|
||||
class BeBenchmarkTest(TestBase):
|
||||
@@ -24,7 +25,7 @@ class BeBenchmarkTest(TestBase):
|
||||
|
||||
def test_be_benchmark_complete(self):
|
||||
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(), "")
|
||||
# Check output
|
||||
@@ -43,13 +44,23 @@ class BeBenchmarkTest(TestBase):
|
||||
Folders.exreport, Files.exreport_excel(self.score)
|
||||
)
|
||||
book = load_workbook(file_name)
|
||||
replace = None
|
||||
with_this = None
|
||||
for sheet_name in book.sheetnames:
|
||||
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):
|
||||
stdout, stderr = self.execute_script(
|
||||
"be_benchmark", ["-s", self.score, "-q", "1"]
|
||||
"be_benchmark", ["-s", self.score, "-q"]
|
||||
)
|
||||
self.assertEqual(stderr.getvalue(), "")
|
||||
# Check output
|
||||
|
@@ -67,7 +67,7 @@ class BeBestTest(TestBase):
|
||||
|
||||
def test_be_build_best_report(self):
|
||||
stdout, _ = self.execute_script(
|
||||
"be_build_best", ["-s", "accuracy", "-m", "ODTE", "-r", "1"]
|
||||
"be_build_best", ["-s", "accuracy", "-m", "ODTE", "-r"]
|
||||
)
|
||||
expected_data = {
|
||||
"balance-scale": [
|
||||
|
@@ -4,6 +4,10 @@ from ...Utils import Folders, Files
|
||||
from ..TestBase import TestBase
|
||||
|
||||
|
||||
def get_test():
|
||||
return "hola"
|
||||
|
||||
|
||||
class BeGridTest(TestBase):
|
||||
def setUp(self):
|
||||
self.prepare_scripts_env()
|
||||
@@ -65,7 +69,7 @@ class BeGridTest(TestBase):
|
||||
def test_be_grid_no_input(self):
|
||||
stdout, stderr = self.execute_script(
|
||||
"be_grid",
|
||||
["-m", "ODTE", "-s", "f1-weighted", "-q", "1"],
|
||||
["-m", "ODTE", "-s", "f1-weighted", "-q"],
|
||||
)
|
||||
self.assertEqual(stderr.getvalue(), "")
|
||||
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
|
||||
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
|
||||
|
||||
|
||||
@@ -7,19 +10,90 @@ class BeListTest(TestBase):
|
||||
def setUp(self):
|
||||
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"])
|
||||
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(
|
||||
"be_list", ["-m", "Wodt", "-s", "f1-macro"]
|
||||
)
|
||||
self.assertEqual(stderr.getvalue(), "")
|
||||
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):
|
||||
source = os.path.join(source_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
|
||||
swap_files(Folders.hidden_results, Folders.results, file_name)
|
||||
try:
|
||||
# list and move nan result to hidden
|
||||
stdout, stderr = self.execute_script("be_list", ["--nan", "1"])
|
||||
# list and move nan result to hidden again
|
||||
stdout, stderr = self.execute_script("be_list", "")
|
||||
self.assertEqual(stderr.getvalue(), "")
|
||||
self.check_output_file(stdout, "be_list_nan")
|
||||
self.check_output_file(stdout, "be_list_hide")
|
||||
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)
|
||||
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):
|
||||
stdout, stderr = self.execute_script("be_list", ["--nan", "1"])
|
||||
@patch("benchmark.Results.get_input", side_effect=iter(["h 0", "q"]))
|
||||
def test_be_list_already_hidden(self, input_data):
|
||||
stdout, stderr = self.execute_script("be_list", ["--hidden"])
|
||||
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):
|
||||
path = os.getcwd()
|
||||
|
@@ -1,4 +1,5 @@
|
||||
import os
|
||||
import json
|
||||
from io import StringIO
|
||||
from unittest.mock import patch
|
||||
from ...Results import Report
|
||||
@@ -30,7 +31,7 @@ class BeMainTest(TestBase):
|
||||
def test_be_main_complete(self):
|
||||
stdout, _ = self.execute_script(
|
||||
"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
|
||||
report_name = stdout.getvalue().splitlines()[-1].split("in ")[1]
|
||||
@@ -66,10 +67,8 @@ class BeMainTest(TestBase):
|
||||
"STree",
|
||||
"--title",
|
||||
"test",
|
||||
"-f",
|
||||
"1",
|
||||
"-b",
|
||||
"-r",
|
||||
"1",
|
||||
],
|
||||
)
|
||||
# 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]
|
||||
)
|
||||
|
||||
@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):
|
||||
model = "GBC"
|
||||
stdout, stderr = self.execute_script(
|
||||
@@ -90,10 +131,8 @@ class BeMainTest(TestBase):
|
||||
model,
|
||||
"--title",
|
||||
"test",
|
||||
"-f",
|
||||
"1",
|
||||
"-b",
|
||||
"-r",
|
||||
"1",
|
||||
],
|
||||
)
|
||||
self.assertEqual(stderr.getvalue(), "")
|
||||
@@ -117,9 +156,7 @@ class BeMainTest(TestBase):
|
||||
"--title",
|
||||
"test",
|
||||
"-g",
|
||||
"1",
|
||||
"-r",
|
||||
"1",
|
||||
],
|
||||
)
|
||||
self.assertEqual(stderr.getvalue(), "")
|
||||
@@ -142,9 +179,7 @@ class BeMainTest(TestBase):
|
||||
"--title",
|
||||
"test",
|
||||
"-g",
|
||||
"1",
|
||||
"-r",
|
||||
"1",
|
||||
],
|
||||
)
|
||||
# keep the report name to delete it after
|
||||
|
@@ -18,7 +18,7 @@ class BePrintStrees(TestBase):
|
||||
for name in self.datasets:
|
||||
stdout, _ = self.execute_script(
|
||||
"be_print_strees",
|
||||
["-d", name, "-q", "1"],
|
||||
["-d", name, "-q"],
|
||||
)
|
||||
file_name = os.path.join(Folders.img, f"stree_{name}.png")
|
||||
self.files.append(file_name)
|
||||
@@ -33,7 +33,7 @@ class BePrintStrees(TestBase):
|
||||
for name in self.datasets:
|
||||
stdout, _ = self.execute_script(
|
||||
"be_print_strees",
|
||||
["-d", name, "-q", "1", "-c", "1"],
|
||||
["-d", name, "-q", "-c"],
|
||||
)
|
||||
file_name = os.path.join(Folders.img, f"stree_{name}.png")
|
||||
self.files.append(file_name)
|
||||
|
@@ -1,7 +1,10 @@
|
||||
import os
|
||||
from openpyxl import load_workbook
|
||||
from ...Utils import Folders
|
||||
from io import StringIO
|
||||
from unittest.mock import patch
|
||||
from ...Utils import Folders, Files
|
||||
from ..TestBase import TestBase
|
||||
from ..._version import __version__
|
||||
|
||||
|
||||
class BeReportTest(TestBase):
|
||||
@@ -14,6 +17,7 @@ class BeReportTest(TestBase):
|
||||
"results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.xlsx",
|
||||
]
|
||||
self.remove_files(files, Folders.results)
|
||||
self.remove_files([Files.datasets_report_excel], os.getcwd())
|
||||
return super().tearDown()
|
||||
|
||||
def test_be_report(self):
|
||||
@@ -21,55 +25,99 @@ class BeReportTest(TestBase):
|
||||
"results",
|
||||
"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.check_output_file(stdout, "report")
|
||||
|
||||
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(stdout.getvalue(), "unknown does not exists!\n")
|
||||
|
||||
def test_be_report_compare(self):
|
||||
file_name = "results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json"
|
||||
stdout, stderr = self.execute_script(
|
||||
"be_report", ["-f", file_name, "-c", "1"]
|
||||
"be_report", ["file", file_name, "-c"]
|
||||
)
|
||||
self.assertEqual(stderr.getvalue(), "")
|
||||
self.check_output_file(stdout, "report_compared")
|
||||
|
||||
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.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):
|
||||
stdout, stderr = self.execute_script("be_report", ["datasets", "-x"])
|
||||
self.assertEqual(stderr.getvalue(), "")
|
||||
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)
|
||||
book = load_workbook(file_name)
|
||||
sheet = book["Datasets"]
|
||||
self.check_excel_sheet(
|
||||
sheet,
|
||||
"exreport_excel_Datasets",
|
||||
replace=self.benchmark_version,
|
||||
with_this=__version__,
|
||||
)
|
||||
|
||||
def test_be_report_best(self):
|
||||
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.check_output_file(stdout, "report_best")
|
||||
|
||||
def test_be_report_grid(self):
|
||||
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.check_output_file(stdout, "report_grid")
|
||||
file_name = "report_grid.test"
|
||||
with open(os.path.join(self.test_files, file_name)) as f:
|
||||
expected = f.read().splitlines()
|
||||
output_text = stdout.getvalue().splitlines()
|
||||
# Compare replacing STree version
|
||||
for line, index in zip(expected, range(len(expected))):
|
||||
if "1.2.4" in line:
|
||||
# replace STree version
|
||||
line = self.replace_STree_version(line, output_text, index)
|
||||
self.assertEqual(line, output_text[index])
|
||||
|
||||
def test_be_report_best_both(self):
|
||||
stdout, stderr = self.execute_script(
|
||||
"be_report",
|
||||
["-s", "accuracy", "-m", "STree", "-b", "1", "-g", "1"],
|
||||
)
|
||||
@patch("sys.stderr", new_callable=StringIO)
|
||||
def test_be_report_unknown_subcommand(self, stderr):
|
||||
with self.assertRaises(SystemExit) as msg:
|
||||
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.check_output_file(stdout, "report_best")
|
||||
self.check_output_file(stdout, "report_without_subcommand")
|
||||
|
||||
def test_be_report_excel_compared(self):
|
||||
file_name = "results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json"
|
||||
stdout, stderr = self.execute_script(
|
||||
"be_report",
|
||||
["-f", file_name, "-x", "1", "-c", "1"],
|
||||
["file", file_name, "-x", "-c"],
|
||||
)
|
||||
file_name = os.path.join(
|
||||
Folders.results, file_name.replace(".json", ".xlsx")
|
||||
@@ -84,7 +132,7 @@ class BeReportTest(TestBase):
|
||||
file_name = "results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json"
|
||||
stdout, stderr = self.execute_script(
|
||||
"be_report",
|
||||
["-f", file_name, "-x", "1"],
|
||||
["file", file_name, "-x"],
|
||||
)
|
||||
file_name = os.path.join(
|
||||
Folders.results, file_name.replace(".json", ".xlsx")
|
||||
@@ -99,7 +147,7 @@ class BeReportTest(TestBase):
|
||||
file_name = "results_accuracy_ODTE_Galgo_2022-04-20_10:52:20_0.json"
|
||||
stdout, stderr = self.execute_script(
|
||||
"be_report",
|
||||
["-f", file_name, "-q", "1"],
|
||||
["file", file_name, "-q"],
|
||||
)
|
||||
file_name = os.path.join(
|
||||
Folders.results, file_name.replace(".json", ".sql")
|
||||
|
@@ -7,5 +7,5 @@ Dataset Score File/Message
|
||||
balance-scale 0.963520 results_accuracy_ODTE_Galgo_2022-04-20_10:52:20_0.json {'base_estimator__C': 57, 'base_estimator__gamma': 0.1, 'base_estimator__kernel': 'rbf', 'base_estimator__multiclass_strategy': 'ovr', 'n_estimators': 100, 'n_jobs': -1}
|
||||
balloons 0.785000 results_accuracy_ODTE_Galgo_2022-04-20_10:52:20_0.json {'base_estimator__C': 5, 'base_estimator__gamma': 0.14, 'base_estimator__kernel': 'rbf', 'base_estimator__multiclass_strategy': 'ovr', 'n_estimators': 100, 'n_jobs': -1}
|
||||
******************************************************************************************************************************************************************
|
||||
* Scores compared to stree_default accuracy (liblinear-ovr) .: 0.0434 *
|
||||
* accuracy compared to STree_default (liblinear-ovr) .: 0.0434 *
|
||||
******************************************************************************************************************************************************************
|
||||
|
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* Report STree ver. 1.2.4 with 5 Folds cross validation and 10 random seeds. 2022-05-09 00:15:25 *
|
||||
[94m* test *
|
||||
[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* Score is accuracy *
|
||||
[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* test *
|
||||
[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* Score is accuracy *
|
||||
[94m*************************************************************************************************************************
|
||||
|
||||
Dataset Samp 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'}
|
||||
[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* Accuracy compared to stree_default (liblinear-ovr) .: 0.0422 *
|
||||
[94m***********************************************************************************************************************
|
||||
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'}
|
||||
[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* accuracy compared to STree_default (liblinear-ovr) .: 0.0422 *
|
||||
[94m*************************************************************************************************************************
|
||||
Results in results/results_accuracy_STree_iMac27_2022-05-09_00:15:25_0.json
|
||||
|
@@ -1,16 +1,16 @@
|
||||
[94m***********************************************************************************************************************
|
||||
[94m* Report STree ver. 1.2.4 with 5 Folds cross validation and 10 random seeds. 2022-05-08 20:14:43 *
|
||||
[94m* test *
|
||||
[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* Score is accuracy *
|
||||
[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* test *
|
||||
[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* Score is accuracy *
|
||||
[94m*************************************************************************************************************************
|
||||
|
||||
Dataset Samp 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 {}
|
||||
[94mballoons 16 4 2 4.64 2.82 2.66 0.663333±0.3009 0.000664±0.0002 {}
|
||||
[94m***********************************************************************************************************************
|
||||
[94m* Accuracy compared to stree_default (liblinear-ovr) .: 0.0390 *
|
||||
[94m***********************************************************************************************************************
|
||||
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 {}
|
||||
[94mballoons 16 4 2 4.64 2.82 2.66 0.663333±0.3009 0.000664±0.0002 {}
|
||||
[94m*************************************************************************************************************************
|
||||
[94m* accuracy compared to STree_default (liblinear-ovr) .: 0.0390 *
|
||||
[94m*************************************************************************************************************************
|
||||
Results in results/results_accuracy_STree_iMac27_2022-05-08_20:14:43_0.json
|
||||
|
@@ -1,15 +1,15 @@
|
||||
[94m***********************************************************************************************************************
|
||||
[94m* Report STree ver. 1.2.4 with 5 Folds cross validation and 10 random seeds. 2022-05-08 19:38:28 *
|
||||
[94m* test *
|
||||
[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* Score is accuracy *
|
||||
[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* Test with only one dataset *
|
||||
[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* Score is accuracy *
|
||||
[94m*************************************************************************************************************************
|
||||
|
||||
Dataset Samp 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 {}
|
||||
[94m***********************************************************************************************************************
|
||||
[94m* Accuracy compared to stree_default (liblinear-ovr) .: 0.0165 *
|
||||
[94m***********************************************************************************************************************
|
||||
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 {}
|
||||
[94m*************************************************************************************************************************
|
||||
[94m* accuracy compared to STree_default (liblinear-ovr) .: 0.0165 *
|
||||
[94m*************************************************************************************************************************
|
||||
Partial result file removed: results/results_accuracy_STree_iMac27_2022-05-08_19:38:28_0.json
|
||||
|
@@ -1,16 +1,16 @@
|
||||
[94m***********************************************************************************************************************
|
||||
[94m* Report STree ver. 1.2.4 with 5 Folds cross validation and 10 random seeds. 2022-05-09 00:21:06 *
|
||||
[94m* test *
|
||||
[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* Score is accuracy *
|
||||
[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* test *
|
||||
[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* Score is accuracy *
|
||||
[94m*************************************************************************************************************************
|
||||
|
||||
Dataset Samp 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'}
|
||||
[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* Accuracy compared to stree_default (liblinear-ovr) .: 0.0391 *
|
||||
[94m***********************************************************************************************************************
|
||||
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'}
|
||||
[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* accuracy compared to STree_default (liblinear-ovr) .: 0.0391 *
|
||||
[94m*************************************************************************************************************************
|
||||
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*
|
||||
[96m* [96m*
|
||||
[96m*********************************************************************************
|
||||
[94mDate 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
|
||||
[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
|
||||
[96m2021-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
|
||||
[96m2022-01-14 results_accuracy_RandomForest_iMac27_2022-01-14_12:39:30_0.json 0.03627 0.076 Test default paramters with RandomForest
|
||||
[94m # Date File Score Time(h) Title
|
||||
=== ========== =============================================================== ======== ======= ============================================
|
||||
[96m 0 2021-09-30 results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json 0.04544 0.173 With gridsearched 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 2021-10-27 results_accuracy_STree_iMac27_2021-10-27_09:40:40_0.json 0.04158 0.943 default A
|
||||
[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 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*
|
||||
[96m* [96m*
|
||||
[96m*********************************************************************************
|
||||
[94mDate 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
|
||||
[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
|
||||
[96m2021-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
|
||||
[96m2022-01-14 results_accuracy_RandomForest_iMac27_2022-01-14_12:39:30_0.json 0.03627 0.076 Test default paramters with RandomForest
|
||||
[94m # Date File Score Time(h) Title
|
||||
=== ========== =============================================================== ======== ======= ============================================
|
||||
[96m 0 2021-09-30 results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json 0.04544 0.173 With gridsearched 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 2021-10-27 results_accuracy_STree_iMac27_2021-10-27_09:40:40_0.json 0.04158 0.943 default A
|
||||
[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 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*
|
||||
[96m* [96m*
|
||||
[96m*********************************************************************************
|
||||
[94mDate 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
|
||||
[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
|
||||
[96m2021-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
|
||||
[96m2022-01-14 results_accuracy_RandomForest_iMac27_2022-01-14_12:39:30_0.json 0.03627 0.076 Test default paramters with RandomForest
|
||||
[94m # Date File Score Time(h) Title
|
||||
=== ========== =============================================================== ======== ======= ============================================
|
||||
[96m 0 2021-09-30 results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json 0.04544 0.173 With gridsearched 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 2021-10-27 results_accuracy_STree_iMac27_2021-10-27_09:40:40_0.json 0.04158 0.943 default A
|
||||
[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 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 **
|
||||
|
@@ -26,10 +26,10 @@
|
||||
* [93mresults_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json [96m*
|
||||
[96m* [96m*
|
||||
[96m*********************************************************************************
|
||||
[94mDate 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
|
||||
[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
|
||||
[96m2021-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
|
||||
[96m2022-01-14 results_accuracy_RandomForest_iMac27_2022-01-14_12:39:30_0.json 0.03627 0.076 Test default paramters with RandomForest
|
||||
[94m # Date File Score Time(h) Title
|
||||
=== ========== =============================================================== ======== ======= ============================================
|
||||
[96m 0 2021-09-30 results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json 0.04544 0.173 With gridsearched 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 2021-10-27 results_accuracy_STree_iMac27_2021-10-27_09:40:40_0.json 0.04158 0.943 default A
|
||||
[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 2022-01-14 results_accuracy_RandomForest_iMac27_2022-01-14_12:39:30_0.json 0.03627 0.076 Test default paramters with RandomForest
|
||||
|
@@ -1,4 +1,4 @@
|
||||
1;1;" Report STree ver. 1.2.3 with 5 Folds cross validation and 10 random seeds. 2021-09-30 11:42:07"
|
||||
1;1;" STree ver. 1.2.3 Python ver. 3.11x with 5 Folds cross validation and 10 random seeds. 2021-09-30 11:42:07"
|
||||
2;1;" With gridsearched hyperparameters"
|
||||
3;1;" Score is accuracy"
|
||||
3;2;" Execution time"
|
||||
@@ -45,4 +45,4 @@
|
||||
8;10;"0.0008541679382324218"
|
||||
8;11;"3.629469326417878e-05"
|
||||
8;12;"{'C': 7, 'gamma': 0.1, 'kernel': 'rbf', 'max_iter': 10000.0, 'multiclass_strategy': 'ovr'}"
|
||||
10;1;"** Accuracy compared to stree_default (liblinear-ovr) .: 0.0454"
|
||||
10;1;"** accuracy compared to STree_default (liblinear-ovr) .: 0.0454"
|
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,4 +1,4 @@
|
||||
1;1;" Report ODTE ver. 0.3.2 with 5 Folds cross validation and 10 random seeds. 2022-04-20 10:52:20"
|
||||
1;1;" ODTE ver. 0.3.2 Python ver. 3.11x with 5 Folds cross validation and 10 random seeds. 2022-04-20 10:52:20"
|
||||
2;1;" Gridsearched hyperparams v022.1b random_init"
|
||||
3;1;" Score is accuracy"
|
||||
3;2;" Execution time"
|
||||
@@ -45,4 +45,4 @@
|
||||
8;10;"0.1156062078475952"
|
||||
8;11;"0.0127842418285999"
|
||||
8;12;"{'base_estimator__C': 5, 'base_estimator__gamma': 0.14, 'base_estimator__kernel': 'rbf', 'base_estimator__multiclass_strategy': 'ovr', 'n_estimators': 100, 'n_jobs': -1}"
|
||||
10;1;"** Accuracy compared to stree_default (liblinear-ovr) .: 0.0434"
|
||||
10;1;"** accuracy compared to STree_default (liblinear-ovr) .: 0.0434"
|
@@ -1,4 +1,4 @@
|
||||
1;1;" Report STree ver. 1.2.3 with 5 Folds cross validation and 10 random seeds. 2021-10-27 09:40:40"
|
||||
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"
|
||||
@@ -43,4 +43,4 @@
|
||||
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"
|
||||
10;1;"** accuracy compared to STree_default (liblinear-ovr) .: 0.0416"
|
@@ -1,4 +1,4 @@
|
||||
1;1;" Report STree ver. 1.2.3 with 5 Folds cross validation and 10 random seeds. 2021-09-30 11:42:07"
|
||||
1;1;" STree ver. 1.2.3 Python ver. 3.11x with 5 Folds cross validation and 10 random seeds. 2021-09-30 11:42:07"
|
||||
2;1;" With gridsearched hyperparameters"
|
||||
3;1;" Score is accuracy"
|
||||
3;2;" Execution time"
|
||||
@@ -49,4 +49,4 @@
|
||||
11;2;"✔"
|
||||
11;3;1
|
||||
11;4;"Equal to best"
|
||||
13;1;"** Accuracy compared to stree_default (liblinear-ovr) .: 0.0454"
|
||||
13;1;"** accuracy compared to STree_default (liblinear-ovr) .: 0.0454"
|
25
benchmark/tests/test_files/exreport_excel_Datasets.test
Normal file
25
benchmark/tests/test_files/exreport_excel_Datasets.test
Normal file
@@ -0,0 +1,25 @@
|
||||
1;1;"Datasets used in benchmark ver. 0.2.0"
|
||||
2;1;" Default score accuracy"
|
||||
2;2;"Cross validation"
|
||||
2;5;"5 Folds"
|
||||
3;2;"Stratified"
|
||||
3;5;"False"
|
||||
4;2;"Discretized"
|
||||
4;5;"False"
|
||||
5;2;"Seeds"
|
||||
5;5;"[57, 31, 1714, 17, 23, 79, 83, 97, 7, 1]"
|
||||
6;1;"Dataset"
|
||||
6;2;"Samples"
|
||||
6;3;"Features"
|
||||
6;4;"Classes"
|
||||
6;5;"Balance"
|
||||
7;1;"balance-scale"
|
||||
7;2;"625"
|
||||
7;3;"4"
|
||||
7;4;"3"
|
||||
7;5;" 7.84%/ 46.08%/ 46.08%"
|
||||
8;1;"balloons"
|
||||
8;2;"16"
|
||||
8;3;"4"
|
||||
8;4;"2"
|
||||
8;5;"56.25%/ 43.75%"
|
@@ -1,4 +1,4 @@
|
||||
1;1;" Report ODTE ver. 0.3.2 with 5 Folds cross validation and 10 random seeds. 2022-04-20 10:52:20"
|
||||
1;1;" ODTE ver. 0.3.2 Python ver. 3.11x with 5 Folds cross validation and 10 random seeds. 2022-04-20 10:52:20"
|
||||
2;1;" Gridsearched hyperparams v022.1b random_init"
|
||||
3;1;" Score is accuracy"
|
||||
3;2;" Execution time"
|
||||
@@ -45,4 +45,4 @@
|
||||
8;10;"0.1156062078475952"
|
||||
8;11;"0.0127842418285999"
|
||||
8;12;"{'base_estimator__C': 5, 'base_estimator__gamma': 0.14, 'base_estimator__kernel': 'rbf', 'base_estimator__multiclass_strategy': 'ovr', 'n_estimators': 100, 'n_jobs': -1}"
|
||||
10;1;"** Accuracy compared to stree_default (liblinear-ovr) .: 0.0434"
|
||||
10;1;"** accuracy compared to STree_default (liblinear-ovr) .: 0.0434"
|
||||
|
@@ -1,4 +1,4 @@
|
||||
1;1;" Report RandomForest ver. - with 5 Folds cross validation and 10 random seeds. 2022-01-14 12:39:30"
|
||||
1;1;" RandomForest ver. - Python ver. 3.11x with 5 Folds cross validation and 10 random seeds. 2022-01-14 12:39:30"
|
||||
2;1;" Test default paramters with RandomForest"
|
||||
3;1;" Score is accuracy"
|
||||
3;2;" Execution time"
|
||||
@@ -45,4 +45,4 @@
|
||||
8;10;"0.07016648769378662"
|
||||
8;11;"0.002460508923990468"
|
||||
8;12;"{}"
|
||||
10;1;"** Accuracy compared to stree_default (liblinear-ovr) .: 0.0363"
|
||||
10;1;"** accuracy compared to STree_default (liblinear-ovr) .: 0.0363"
|
||||
|
@@ -1,4 +1,4 @@
|
||||
1;1;" Report STree ver. 1.2.3 with 5 Folds cross validation and 10 random seeds. 2021-09-30 11:42:07"
|
||||
1;1;" STree ver. 1.2.3 Python ver. 3.11x with 5 Folds cross validation and 10 random seeds. 2021-09-30 11:42:07"
|
||||
2;1;" With gridsearched hyperparameters"
|
||||
3;1;" Score is accuracy"
|
||||
3;2;" Execution time"
|
||||
@@ -45,4 +45,4 @@
|
||||
8;10;"0.0008541679382324218"
|
||||
8;11;"3.629469326417878e-05"
|
||||
8;12;"{'C': 7, 'gamma': 0.1, 'kernel': 'rbf', 'max_iter': 10000.0, 'multiclass_strategy': 'ovr'}"
|
||||
10;1;"** Accuracy compared to stree_default (liblinear-ovr) .: 0.0454"
|
||||
10;1;"** accuracy compared to STree_default (liblinear-ovr) .: 0.0454"
|
||||
|
@@ -1,15 +1,15 @@
|
||||
[94m***********************************************************************************************************************
|
||||
[94m* Report STree ver. 1.2.3 with 5 Folds cross validation and 10 random seeds. 2021-09-30 11:42:07 *
|
||||
[94m* With gridsearched hyperparameters *
|
||||
[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* Score is accuracy *
|
||||
[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* With gridsearched hyperparameters *
|
||||
[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* Score is accuracy *
|
||||
[94m*************************************************************************************************************************
|
||||
|
||||
Dataset Samp 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'}
|
||||
[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* Accuracy compared to stree_default (liblinear-ovr) .: 0.0454 *
|
||||
[94m***********************************************************************************************************************
|
||||
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'}
|
||||
[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* accuracy compared to STree_default (liblinear-ovr) .: 0.0454 *
|
||||
[94m*************************************************************************************************************************
|
||||
|
@@ -7,5 +7,5 @@ Dataset Score File/Message
|
||||
balance-scale 0.980000 results_accuracy_STree_iMac27_2021-10-27_09:40:40_0.json {'splitter': 'best', 'max_features': 'auto'}
|
||||
balloons 0.860000 results_accuracy_STree_iMac27_2021-09-30_11:42:07_0.json {'C': 7, 'gamma': 0.1, 'kernel': 'rbf', 'max_iter': 10000.0, 'multiclass_strategy': 'ovr'}
|
||||
******************************************************************************************************************************************************************
|
||||
* Scores compared to stree_default accuracy (liblinear-ovr) .: 0.0457 *
|
||||
* accuracy compared to STree_default (liblinear-ovr) .: 0.0457 *
|
||||
******************************************************************************************************************************************************************
|
||||
|
@@ -1,16 +1,16 @@
|
||||
[94m***********************************************************************************************************************
|
||||
[94m* Report STree ver. 1.2.3 with 5 Folds cross validation and 10 random seeds. 2021-09-30 11:42:07 *
|
||||
[94m* With gridsearched hyperparameters *
|
||||
[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* Score is accuracy *
|
||||
[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* With gridsearched hyperparameters *
|
||||
[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* Score is accuracy *
|
||||
[94m*************************************************************************************************************************
|
||||
|
||||
Dataset Samp 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'}
|
||||
[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* ✔ Equal to best .....: 1 *
|
||||
[94m* Accuracy compared to stree_default (liblinear-ovr) .: 0.0454 *
|
||||
[94m***********************************************************************************************************************
|
||||
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'}
|
||||
[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* ✔ Equal to best .....: 1 *
|
||||
[94m* accuracy compared to STree_default (liblinear-ovr) .: 0.0454 *
|
||||
[94m*************************************************************************************************************************
|
||||
|
@@ -1,4 +1,6 @@
|
||||
[94mDataset Samp. Feat. Cls Balance
|
||||
============================== ===== ===== === ========================================
|
||||
[96mbalance-scale 625 4 3 7.84%/ 46.08%/ 46.08%
|
||||
[94mballoons 16 4 2 56.25%/ 43.75%
|
||||
[94mDatasets used in benchmark ver. 0.2.0
|
||||
|
||||
Dataset Sampl. Feat. Cls Balance
|
||||
============================== ====== ===== === ============================================================
|
||||
[96mbalance-scale 625 4 3 7.84%/ 46.08%/ 46.08%
|
||||
[94mballoons 16 4 2 56.25%/ 43.75%
|
||||
|
@@ -7,5 +7,5 @@ Dataset Score File/Message
|
||||
balance-scale 0.919995 v. 1.2.4, Computed on Test on 2022-02-22 at 12:00:00 took 1s {'C': 1.0, 'kernel': 'liblinear', 'multiclass_strategy': 'ovr'}
|
||||
balloons 0.625000 v. 1.2.4, Computed on Test on 2022-02-22 at 12:00:00 took 1s {'C': 1.0, 'kernel': 'linear', 'multiclass_strategy': 'ovr'}
|
||||
******************************************************************************************************************************************************************
|
||||
* Scores compared to stree_default accuracy (liblinear-ovr) .: 0.0384 *
|
||||
* accuracy compared to STree_default (liblinear-ovr) .: 0.0384 *
|
||||
******************************************************************************************************************************************************************
|
||||
|
@@ -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
|
||||
========== ================================================================ ======== ======= =======================
|
||||
[93m2022-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 # 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
|
||||
|
@@ -1,5 +1,5 @@
|
||||
[94mDate 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
|
||||
[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
|
||||
[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
|
||||
|
@@ -1,5 +1,5 @@
|
||||
[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
|
||||
[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
|
||||
|
@@ -1,7 +1,7 @@
|
||||
[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
|
||||
[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
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user