From 0cac8b36078325fe9fc6006315f39314096090f9 Mon Sep 17 00:00:00 2001 From: Charlie Meyers Date: Sat, 6 Jul 2024 23:29:53 +0200 Subject: [PATCH 01/35] better main.py, linting --- deckard/__init__.py | 2 + deckard/__main__.py | 130 +++------- deckard/layers/__init__.py | 46 ++++ deckard/layers/afr.py | 17 +- deckard/layers/attack.py | 28 +-- deckard/layers/compile.py | 24 +- deckard/layers/data.py | 28 +-- deckard/layers/deploy.py | 23 -- deckard/layers/experiment.py | 28 +-- deckard/layers/find_best.py | 138 ++++++++--- deckard/layers/generate_grid.py | 27 +- deckard/layers/generate_webpage.py | 41 +-- deckard/layers/hydra_test.py | 57 ++++- deckard/layers/model.py | 28 +-- deckard/layers/optimise.py | 69 ++++-- deckard/layers/parse.py | 20 +- deckard/layers/prepare_queue.py | 60 +++-- deckard/layers/query_kepler.py | 188 ++++++++------ deckard/layers/utils.py | 12 +- deckard/layers/watcher.py | 234 +++++++++--------- examples/gzip/conf/default.yaml | 2 + examples/gzip/dvc.yaml | 29 +-- examples/power/plots/tmp.py | 22 ++ examples/pytorch/cifar10/.dvc/tmp/btime | 0 examples/pytorch/cifar10/.dvc/tmp/dag.md | 32 +++ examples/pytorch/cifar10/.dvc/tmp/lock | 1 + examples/pytorch/cifar10/.dvc/tmp/rwlock | 1 + examples/pytorch/cifar10/.dvc/tmp/rwlock.lock | 1 + 28 files changed, 743 insertions(+), 545 deletions(-) delete mode 100644 deckard/layers/deploy.py create mode 100644 examples/power/plots/tmp.py create mode 100644 examples/pytorch/cifar10/.dvc/tmp/btime create mode 100644 examples/pytorch/cifar10/.dvc/tmp/dag.md create mode 100644 examples/pytorch/cifar10/.dvc/tmp/lock create mode 100644 examples/pytorch/cifar10/.dvc/tmp/rwlock create mode 100644 examples/pytorch/cifar10/.dvc/tmp/rwlock.lock diff --git a/deckard/__init__.py b/deckard/__init__.py index 9d6190ae..2251a03e 100644 --- a/deckard/__init__.py +++ b/deckard/__init__.py @@ -15,6 +15,8 @@ from .base import FileConfig as FileConfig from .base import ScorerDict as ScorerDict +from .layers import * # noqa: F401, F403 + # from deckard import layers # noqa: F401 # Semantic Version diff --git a/deckard/__main__.py b/deckard/__main__.py index cbd1505f..aade275a 100644 --- a/deckard/__main__.py +++ b/deckard/__main__.py @@ -1,106 +1,44 @@ #!/usr/bin/env python3 import argparse -import subprocess import logging -from pathlib import Path from omegaconf import OmegaConf -from .layers.parse import save_params_file - -OmegaConf.register_new_resolver("eval", eval) +from deckard.layers import deckard_layer_dict logger = logging.getLogger(__name__) -layer_list = list(Path(Path(__file__).parent, "layers").glob("*.py")) -layer_list = [layer.stem for layer in layer_list] -if "__init__" in layer_list: - layer_list.remove("__init__") -layer_list.append(None) - - -def run_submodule(submodule, args): - if len(args) == 0: - cmd = f"python -m deckard.layers.{submodule}" - else: - cmd = f"python -m deckard.layers.{submodule} {args}" - logger.info(f"Running {cmd}") - with subprocess.Popen( - cmd, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - shell=True, - ) as proc: - for line in proc.stdout: - print(line.rstrip().decode("utf-8")) - if proc.returncode != 0: - logger.error(f"Error running {cmd}") - for line in proc.stderr: - logger.error(line.rstrip().decode("utf-8")) - return 1 - else: - return 0 -def parse_and_repro(args, default_config="default.yaml", config_dir="conf"): - if len(args) == 0: - assert ( - save_params_file( - config_dir=( - Path(Path(), config_dir) - if not Path(config_dir).is_absolute() - else Path(config_dir) - ), - config_file=default_config, - ) - is None - ) - assert Path(Path(), "params.yaml").exists() - else: - cmd = f"python -m deckard.layers.parse {args} --config_file {default_config}" - # error = f"error parsing command: {cmd} {args}" - with subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True) as proc: - for line in proc.stdout: - print(line.rstrip().decode("utf-8")) - if Path(Path(), "dvc.yaml").exists(): - cmd = "dvc repro" - with subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True) as proc: - for line in proc.stdout: - print(line.rstrip().decode("utf-8")) - - else: - raise ValueError("No dvc.yaml file found. Please construct a pipeline.") - return 0 - +def main(args): + # Get the layer and the main function for the layer. + layer = args.layer + if layer not in deckard_layer_dict: + raise ValueError(f"Layer {layer} not found.") + print("Trying to run layer", layer) + parser, sub_main = deckard_layer_dict[layer] + # Parse the arguments. + args = parser.parse_args(args.args) + # Print the arguments and values + import yaml + + print(yaml.dump(OmegaConf.to_container(args))) + input("Press Enter to continue...") + # Run the main function. + sub_main(args) + + +parser = argparse.ArgumentParser() +# Choose which layers to run. +parser.add_argument("layer", help="The layers to run.") +# The rest of the arguments are passed to the layer. +parser.add_argument( + "args", nargs=argparse.REMAINDER, help="Arguments to pass to the layer." +) +# parse the layer to know which subparser to use. +args = parser.parse_args() if __name__ == "__main__": - logging.basicConfig(level=logging.INFO) - parser = argparse.ArgumentParser() - parser.add_argument( - "--submodule", - type=str, - help=f"Submodule to run. Choices: {layer_list}", - ) - parser.add_argument( - "--config_file", - type=str, - help="default hydra configuration file that you would like to reproduce with dvc repro.", - ) - parser.add_argument("--config_dir", type=str, default="conf") - parser.add_argument("other_args", type=str, nargs="*") - args = parser.parse_args() - submodule = args.submodule - if submodule is not None: - assert ( - args.config_file is None - ), "config_file and submodule cannot be specified at the same time" - if submodule not in layer_list and submodule is not None: - raise ValueError(f"Submodule {submodule} not found. Choices: {layer_list}") - if len(args.other_args) > 0: - other_args = " ".join(args.other_args) - else: - other_args = [] - if submodule is None: - assert ( - parse_and_repro(other_args, args.config_file, config_dir=args.config_dir) - == 0 - ) - else: - assert run_submodule(submodule, other_args) == 0 + print("Running deckard") + import sys + + print(sys.argv) + input("Press Enter to continue...") + main(args) diff --git a/deckard/layers/__init__.py b/deckard/layers/__init__.py index e69de29b..17f7c1ec 100644 --- a/deckard/layers/__init__.py +++ b/deckard/layers/__init__.py @@ -0,0 +1,46 @@ +from .afr import parser as afr_parser +from .afr import main as afr_main +from .attack import parser as attack_parser +from .attack import main as attack_main +from .clean_data import parser as clean_data_parser +from .clean_data import main as clean_data_main +from .compile import parser as compile_parser +from .compile import main as compile_main +from .data import parser as data_parser +from .data import main as data_main +from .experiment import parser as experiment_parser +from .experiment import main as experiment_main +from .generate_grid import parser as generated_grid_parser +from .generate_grid import main as generated_grid_main +from .hydra_test import main as hydra_test_main +from .model import parser as model_parser +from .model import main as model_main +from .optimise import main as optimise_main +from .parse import parser as parse_parser +from .parse import main as parse_main +from .plots import parser as plots_parser +from .plots import main as plots_main +from .prepare_queue import main as prepare_queue_main +from .query_kepler import parser as query_kepler_parser +from .query_kepler import main as query_kepler_main +from .watcher import parser as watcher_parser +from .watcher import main as watcher_main + + +deckard_layer_dict = { + "afr": (afr_parser, afr_main), + "attack": (attack_parser, attack_main), + "clean_data": (clean_data_parser, clean_data_main), + "compile": (compile_parser, compile_main), + "data": (data_parser, data_main), + "experiment": (experiment_parser, experiment_main), + "generate_grid": (generated_grid_parser, generated_grid_main), + "model": (model_parser, model_main), + "parse": (parse_parser, parse_main), + "plots": (plots_parser, plots_main), + "query_kepler": (query_kepler_parser, query_kepler_main), + "watcher": (watcher_parser, watcher_main), + "hydra_test": (None, hydra_test_main), + "optimise": (None, optimise_main), + "prepare_queue": (None, prepare_queue_main), +} diff --git a/deckard/layers/afr.py b/deckard/layers/afr.py index 41c7c4dc..764bbbe5 100644 --- a/deckard/layers/afr.py +++ b/deckard/layers/afr.py @@ -920,13 +920,14 @@ def main(args): ) +parser = argparse.ArgumentParser() +parser.add_argument("--target", type=str, default="adv_failures") +parser.add_argument("--duration_col", type=str, default="adv_fit_time") +parser.add_argument("--dataset", type=str, default="mnist") +parser.add_argument("--data_file", type=str, default="data.csv") +parser.add_argument("--config_file", type=str, default="afr.yaml") +parser.add_argument("--plots_folder", type=str, default="plots") + if "__main__" == __name__: - afr_parser = argparse.ArgumentParser() - afr_parser.add_argument("--target", type=str, default="adv_failures") - afr_parser.add_argument("--duration_col", type=str, default="adv_fit_time") - afr_parser.add_argument("--dataset", type=str, default=None) - afr_parser.add_argument("--data_file", type=str, default="data.csv") - afr_parser.add_argument("--config_file", type=str, default="afr.yaml") - afr_parser.add_argument("--plots_folder", type=str, default="plots") - args = afr_parser.parse_args() + args = parser.parse_args() main(args) diff --git a/deckard/layers/attack.py b/deckard/layers/attack.py index ebe34146..8b03b495 100644 --- a/deckard/layers/attack.py +++ b/deckard/layers/attack.py @@ -9,18 +9,18 @@ logger = logging.getLogger(__name__) -attack_parser = argparse.ArgumentParser() -attack_parser.add_argument("stage", type=str, nargs="*", default=None) -attack_parser.add_argument("--verbosity", type=str, default="INFO") -attack_parser.add_argument("--params_file", type=str, default="params.yaml") -attack_parser.add_argument("--pipeline_file", type=str, default="dvc.yaml") -attack_parser.add_argument("--config_dir", type=str, default="conf") -attack_parser.add_argument("--config_file", type=str, default="default") -attack_parser.add_argument("--workdir", type=str, default=".") -attack_parser.add_argument("--overrides", nargs="*", default=[], type=str) - - -def attack_main(args): +parser = argparse.ArgumentParser() +parser.add_argument("stage", type=str, nargs="*", default=None) +parser.add_argument("--verbosity", type=str, default="INFO") +parser.add_argument("--params_file", type=str, default="params.yaml") +parser.add_argument("--pipeline_file", type=str, default="dvc.yaml") +parser.add_argument("--config_dir", type=str, default="conf") +parser.add_argument("--config_file", type=str, default="default") +parser.add_argument("--workdir", type=str, default=".") +parser.add_argument("--overrides", nargs="*", default=[], type=str) + + +def main(args): config_dir = Path(args.workdir, args.config_dir).absolute().as_posix() logging.basicConfig( level=args.verbosity, @@ -49,5 +49,5 @@ def attack_main(args): if __name__ == "__main__": - args = attack_parser.parse_args() - attack_main(args) + args = parser.parse_args() + main(args) diff --git a/deckard/layers/compile.py b/deckard/layers/compile.py index 4a33e818..fb03a9fb 100644 --- a/deckard/layers/compile.py +++ b/deckard/layers/compile.py @@ -4,6 +4,7 @@ import logging from tqdm import tqdm import yaml +import argparse logger = logging.getLogger(__name__) @@ -196,15 +197,15 @@ def load_results(results_file, results_folder) -> pd.DataFrame: return results -if __name__ == "__main__": - import argparse - - parser = argparse.ArgumentParser() - parser.add_argument("--results_file", type=str, default="results.csv") - parser.add_argument("--report_folder", type=str, default="reports", required=True) - parser.add_argument("--results_folder", type=str, default=".") - parser.add_argument("--exclude", type=list, default=None, nargs="*") - parser.add_argument("--verbose", type=str, default="INFO") +parser = argparse.ArgumentParser() +parser.add_argument("--results_file", type=str, default="results.csv") +parser.add_argument("--report_folder", type=str, default="reports", required=True) +parser.add_argument("--results_folder", type=str, default=".") +parser.add_argument("--exclude", type=list, default=None, nargs="*") +parser.add_argument("--verbose", type=str, default="INFO") + + +def main(parse_results, save_results, parser): args = parser.parse_args() logging.basicConfig(level=args.verbose) report_folder = args.report_folder @@ -215,3 +216,8 @@ def load_results(results_file, results_folder) -> pd.DataFrame: assert Path( report_file, ).exists(), f"Results file {report_file} does not exist. Something went wrong." + + +if __name__ == "__main__": + + main(parse_results, save_results, parser) diff --git a/deckard/layers/data.py b/deckard/layers/data.py index 95768bbc..00f55390 100644 --- a/deckard/layers/data.py +++ b/deckard/layers/data.py @@ -9,18 +9,18 @@ logger = logging.getLogger(__name__) -data_parser = argparse.ArgumentParser() -data_parser.add_argument("stage", type=str, nargs="*", default=None) -data_parser.add_argument("--verbosity", type=str, default="INFO") -data_parser.add_argument("--params_file", type=str, default="params.yaml") -data_parser.add_argument("--pipeline_file", type=str, default="dvc.yaml") -data_parser.add_argument("--config_dir", type=str, default="conf") -data_parser.add_argument("--config_file", type=str, default="default") -data_parser.add_argument("--workdir", type=str, default=".") -data_parser.add_argument("--overrides", nargs="*", default=[], type=str) - - -def data_main(args): +parser = argparse.ArgumentParser() +parser.add_argument("stage", type=str, nargs="*", default=None) +parser.add_argument("--verbosity", type=str, default="INFO") +parser.add_argument("--params_file", type=str, default="params.yaml") +parser.add_argument("--pipeline_file", type=str, default="dvc.yaml") +parser.add_argument("--config_dir", type=str, default="conf") +parser.add_argument("--config_file", type=str, default="default") +parser.add_argument("--workdir", type=str, default=".") +parser.add_argument("--overrides", nargs="*", default=[], type=str) + + +def main(args): config_dir = Path(args.workdir, args.config_dir).absolute().as_posix() logging.basicConfig( level=args.verbosity, @@ -49,5 +49,5 @@ def data_main(args): if __name__ == "__main__": - args = data_parser.parse_args() - data_main(args) + args = parser.parse_args() + main(args) diff --git a/deckard/layers/deploy.py b/deckard/layers/deploy.py deleted file mode 100644 index a1fe99ed..00000000 --- a/deckard/layers/deploy.py +++ /dev/null @@ -1,23 +0,0 @@ -import logging -import argparse -from pathlib import Path -import yaml -from ..iaac import GCP_Config - - -logger = logging.getLogger(__name__) -logging.basicConfig(level=logging.INFO) -if __name__ == "__main__": - iaac_parser = argparse.ArgumentParser() - iaac_parser.add_argument("--verbosity", type=str, default="INFO") - iaac_parser.add_argument("--config_dir", type=str, default="conf/deploy") - iaac_parser.add_argument("--config_file", type=str, default="default.yaml") - iaac_parser.add_argument("--workdir", type=str, default=".") - args = iaac_parser.parse_args() - config_dir = Path(args.workdir, args.config_dir).resolve().as_posix() - config_file = Path(config_dir, args.config_file).resolve().as_posix() - with open(config_file, "r") as f: - params = yaml.load(f, Loader=yaml.FullLoader) - gcp = GCP_Config(**params) - logging.basicConfig(level=args.verbosity) - assert gcp() is None, "Error creating cluster" diff --git a/deckard/layers/experiment.py b/deckard/layers/experiment.py index b4336cb8..940921ea 100644 --- a/deckard/layers/experiment.py +++ b/deckard/layers/experiment.py @@ -9,18 +9,18 @@ logger = logging.getLogger(__name__) -experiment_parser = argparse.ArgumentParser() -experiment_parser.add_argument("stage", type=str, nargs="*", default=None) -experiment_parser.add_argument("--verbosity", type=str, default="INFO") -experiment_parser.add_argument("--params_file", type=str, default="params.yaml") -experiment_parser.add_argument("--pipeline_file", type=str, default="dvc.yaml") -experiment_parser.add_argument("--config_dir", type=str, default="conf") -experiment_parser.add_argument("--config_file", type=str, default="default") -experiment_parser.add_argument("--workdir", type=str, default=".") -experiment_parser.add_argument("--overrides", nargs="*", default=[], type=str) - - -def experiment_main(args): +parser = argparse.ArgumentParser() +parser.add_argument("stage", type=str, nargs="*", default=None) +parser.add_argument("--verbosity", type=str, default="INFO") +parser.add_argument("--params_file", type=str, default="params.yaml") +parser.add_argument("--pipeline_file", type=str, default="dvc.yaml") +parser.add_argument("--config_dir", type=str, default="conf") +parser.add_argument("--config_file", type=str, default="default") +parser.add_argument("--workdir", type=str, default=".") +parser.add_argument("--overrides", nargs="*", default=[], type=str) + + +def main(args): config_dir = Path(args.workdir, args.config_dir).absolute().as_posix() logging.basicConfig( level=args.verbosity, @@ -48,5 +48,5 @@ def experiment_main(args): if __name__ == "__main__": - args = experiment_parser.parse_args() - experiment_main(args) + args = parser.parse_args() + main(args) diff --git a/deckard/layers/find_best.py b/deckard/layers/find_best.py index 9cb34315..462f8223 100644 --- a/deckard/layers/find_best.py +++ b/deckard/layers/find_best.py @@ -89,9 +89,15 @@ def find_optuna_best( ], f"Direction {direction} not recognized." directions = [False if x == "maximize" else True for x in directions] assert isinstance(new_df, pd.DataFrame), f"df is not a dataframe: {type(df)}" + study = optuna.create_study( + study_name=study_name, + storage=storage_name, + load_if_exists=True, + direction=direction, + ) + if study_csv is not None: - Path(study_csv).parent.mkdir(parents=True, exist_ok=True) - df.to_csv(study_csv) + save_study(study_csv, study) # To dotlist best_params = flatten_dict(study.best_params) more_params = flatten_dict(study.best_trial.user_attrs) @@ -115,6 +121,8 @@ def find_optuna_best( pass elif key.startswith("+"): # appends to config key = "++" + key[1:] # force override + elif key.startswith("~"): # appends to config + pass else: key = "++" + key # force override if config_subdir is None: @@ -122,7 +130,7 @@ def find_optuna_best( else: # if we are using a subdir, we need to remove the directory from the key if ( key.startswith(f"++{config_subdir}.") - or key.startswith(f"~~{config_subdir}.") + or key.startswith(f"~{config_subdir}.") or key.startswith(f"--{config_subdir}.") ): key = key.replace(f"{config_subdir}.", "") @@ -130,21 +138,78 @@ def find_optuna_best( logger.info(f"Adding {key} to param list") else: logger.debug(f"Skipping {key} because it is not in {config_subdir}") - params = override_default_with_best( - config_folder, - default_config, - overrides, - config_subdir=config_subdir, + return overrides + + +def find_best_params(study): + best_params = flatten_dict(study.best_params) + more_params = flatten_dict(study.best_trial.user_attrs) + even_more_params = flatten_dict(study.best_trial.system_attrs) + logger.debug(f"Best params: {best_params}") + logger.debug(f"Best user params: {more_params}") + logger.debug(f"Best system params: {even_more_params}") + # Merge all the params + best_params = OmegaConf.to_container( + OmegaConf.merge(best_params, more_params, even_more_params), + resolve=False, ) - if params_file is not None: - params_file = create_new_config_in_subdir( - params_file, - config_folder, - default_config, - config_subdir, - params, - ) - return params + # to dotlist + best_params = flatten_dict(best_params) + return best_params + + + +def prepare_overrides(config_subdir, best_params): + overrides = [] + # Changing the keys to hydra override format + for key, value in best_params.items(): + if ( + key.startswith("++") or key.startswith("~") or key.startswith("--") + ): # reserved meaning + pass + elif key.startswith("+"): # appends to config + key = "++" + key[1:] # force override + elif key.startswith("~"): # appends to config + pass + else: + key = "++" + key # force override + if config_subdir is None: + overrides.append(f"{key}={value}") + else: # if we are using a subdir, we need to remove the directory from the key + if ( + key.startswith(f"++{config_subdir}.") + or key.startswith(f"~{config_subdir}.") + or key.startswith(f"--{config_subdir}.") + ): + key = key.replace(f"{config_subdir}.", "") + overrides.append(f"{key}={value}") + logger.info(f"Adding {key} to param list") + else: + logger.debug(f"Skipping {key} because it is not in {config_subdir}") + return overrides + + +def find_best_params(study): + best_params = flatten_dict(study.best_params) + more_params = flatten_dict(study.best_trial.user_attrs) + even_more_params = flatten_dict(study.best_trial.system_attrs) + logger.debug(f"Best params: {best_params}") + logger.debug(f"Best user params: {more_params}") + logger.debug(f"Best system params: {even_more_params}") + # Merge all the params + best_params = OmegaConf.to_container( + OmegaConf.merge(best_params, more_params, even_more_params), + resolve=False, + ) + # to dotlist + best_params = flatten_dict(best_params) + return best_params + + +def save_study(study_csv, study): + df = study.trials_dataframe(attrs=("number", "value", "params", "state")) + Path(study_csv).parent.mkdir(parents=True, exist_ok=True) + df.to_csv(study_csv) def create_new_config_in_subdir( @@ -180,7 +245,7 @@ def create_new_config_in_subdir( return params_file -def override_default_with_best( +def override_config( config_folder, default_config, overrides, @@ -195,27 +260,25 @@ def override_default_with_best( return cfg -if __name__ == "__main__": - parser = argparse.ArgumentParser() - parser.add_argument("--params_file", type=str, default=True) - - parser.add_argument("--study_csv", type=str, default=None) - parser.add_argument("--config_folder", type=str, default=Path(Path(), "conf")) - parser.add_argument("--default_config", type=str, default="default") - parser.add_argument("--config_subdir", type=str, default=None) - parser.add_argument("--study_name", type=str, required=True) - parser.add_argument("--config_name", type=str) - parser.add_argument("--verbosity", type=str, default="INFO") - parser.add_argument("--storage_name", type=str, required=True) - parser.add_argument("--direction", type=str, default="maximize") - parser.add_argument("--study_type", type=str, default="optuna") - args = parser.parse_args() +parser = argparse.ArgumentParser() +parser.add_argument("--params_file", type=str, default=True) + +parser.add_argument("--study_csv", type=str, default=None) +parser.add_argument("--config_folder", type=str, default=Path(Path(), "conf")) +parser.add_argument("--default_config", type=str, default="default") +parser.add_argument("--config_subdir", type=str, default=None) +parser.add_argument("--study_name", type=str, required=True) +parser.add_argument("--config_name", type=str) +parser.add_argument("--verbosity", type=str, default="INFO") +parser.add_argument("--storage_name", type=str, required=True) +parser.add_argument("--direction", type=str, default="maximize") +parser.add_argument("--study_type", type=str, default="optuna") + +def main(find_optuna_best, args): args.config_folder = Path(args.config_folder).resolve().as_posix() logging if args.study_type == "optuna": - study_name = args.study_name - storage_name = args.storage_name direction = args.direction if len(direction) == 1: direction = direction[0] @@ -231,3 +294,8 @@ def override_default_with_best( ) else: raise NotImplementedError(f"Study type {args.study_type} not implemented.") + + +if __name__ == "__main__": + args = parser.parse_args() + main(find_optuna_best, args) diff --git a/deckard/layers/generate_grid.py b/deckard/layers/generate_grid.py index 487ce801..af32c9db 100644 --- a/deckard/layers/generate_grid.py +++ b/deckard/layers/generate_grid.py @@ -4,6 +4,7 @@ import yaml from functools import reduce from operator import mul +import argparse from ..base.utils import make_grid, my_hash logger = logging.getLogger(__name__) @@ -38,15 +39,6 @@ def load_config(config_path): return config -def dict_to_overrides(dictionary): - new = {} - for key, value in dictionary.items(): - for k, v in value.items(): - new_key = "++" + key + "." + k - new[new_key] = v - return new - - def generate_grid_from_folders(conf_dir, regex): this_dir = os.getcwd() conf_dir = os.path.relpath(conf_dir, this_dir) @@ -74,7 +66,7 @@ def generate_grid_from_folders(conf_dir, regex): return big_list -def generate_queue( +def main( conf_root, grid_dir, regex, @@ -87,7 +79,6 @@ def generate_queue( big_list = generate_grid_from_folders(conf_dir, regex) i = 0 for entry in big_list: - new = dict_to_overrides(entry) path = Path(conf_root, queue_folder) name = my_hash(entry) path.mkdir(parents=True, exist_ok=True) @@ -96,7 +87,7 @@ def generate_queue( default = yaml.safe_load(stream) except yaml.YAMLError as exc: logger.error(exc) - default["hydra"]["sweeper"]["params"] = new + default["hydra"]["sweeper"]["params"] = entry big_list[i] = default with open(Path(path, name + ".yaml"), "w") as outfile: yaml.dump(big_list[i], outfile, default_flow_style=False) @@ -105,9 +96,11 @@ def generate_queue( return big_list -conf_root = "conf" -grid_folder = "grid" -regex = "*.yaml" +parser = argparse.ArgumentParser() +parser.add_argument("--config_folder", type=str, default="conf") +parser.add_argument("--grid_folder", type=str, default="grid") +parser.add_argument("--regex", type=str, default="*.yaml") -big_list = generate_queue(conf_root, grid_folder, regex) -print(yaml.dump(big_list[0])) +if __name__ == "__main__": + args = parser.parse_args() + main(args.config_folder, args.grid_folder, args.regex) diff --git a/deckard/layers/generate_webpage.py b/deckard/layers/generate_webpage.py index bd2699c7..55491e33 100644 --- a/deckard/layers/generate_webpage.py +++ b/deckard/layers/generate_webpage.py @@ -1,6 +1,7 @@ -import os import csv +from pathlib import Path from bs4 import BeautifulSoup +import argparse def generate_html_file(csv_file_path, output_folder): @@ -10,28 +11,27 @@ def generate_html_file(csv_file_path, output_folder): data = list(reader) # Get the title of the CSV file - file_name = os.path.basename(csv_file_path) - title = os.path.splitext(file_name)[0] - + file_name = Path(csv_file_path).name + title = Path(file_name).stem.replace("_", " ").replace("-", " ").title() # Create an HTML file path and open the file - html_file_path = os.path.join(output_folder, f"{title}.html") + html_file_path = Path(output_folder, f"{title}.html") with open(html_file_path, "w") as html_file: # Create a BeautifulSoup object soup = BeautifulSoup("", "html.parser") - # Add the title to the HTML file soup.append(BeautifulSoup(f"

{title}

", "html.parser")) - # Create an HTML table from the CSV data table_html = "" for row in data: table_html += "" for cell in row: # Check if the cell is a string representing a valid path - if isinstance(cell, str) and os.path.exists(cell): + if isinstance(cell, str) and Path(cell).exists(): # Create a hyperlink with the capitalized name of the file - file_name = os.path.basename(cell) - link_title = os.path.splitext(file_name)[0] + file_name = Path(cell).name + link_title = ( + Path(file_name).stem.replace("_", " ").replace("-", " ") + ) cell = f'{link_title.capitalize()}' table_html += f"" @@ -45,19 +45,20 @@ def generate_html_file(csv_file_path, output_folder): html_file.write(soup.prettify()) -def parse_folder(folder_path): +def main(folder_path, regex="*.csv"): # Create the output folder if it doesn't exist - os.makedirs(folder_path, exist_ok=True) + Path(folder_path).mkdir(parents=True, exist_ok=True) # Iterate over the CSV files in the folder - for file_name in os.listdir(folder_path): - if file_name.endswith(".csv"): - csv_file_path = os.path.join(folder_path, file_name) - generate_html_file(csv_file_path, folder_path) + for file_name in Path(folder_path).glob(regex): + if file_name.is_file(): + generate_html_file(file_name, folder_path) + +parser = argparse.ArgumentParser() +parser.add_argument("--folder_path", type=str, default="output/reports") -# Define the folder path containing CSV files -folder_path = "output/reports" # Update with your folder path -# Parse the folder and generate HTML files -parse_folder(folder_path) +if __name__ == "__main__": + args = parser.parse_args() + main(args.folder_path) diff --git a/deckard/layers/hydra_test.py b/deckard/layers/hydra_test.py index b21fc076..fc240ccf 100644 --- a/deckard/layers/hydra_test.py +++ b/deckard/layers/hydra_test.py @@ -1,17 +1,56 @@ from omegaconf import DictConfig, OmegaConf -from pathlib import Path import hydra -import os +import sys +from pathlib import Path + + +working_dir = Path().cwd() +config_dir = "conf" +config_path = Path(working_dir, config_dir).as_posix() +config_file = "default" + -working_dir = os.getcwd() -config_path = Path(working_dir, "conf").as_posix() +def main(): + # Use sys calls to look for --working_dir, --config_dir, and --config_file + args = sys.argv + if "--working_dir" in args: + working_dir = args[args.index("--working_dir") + 1] + # remove working_dir from args + args.pop(args.index("--working_dir")) + args.pop(args.index(working_dir)) + else: + working_dir = Path().cwd() + if "--config_dir" in args: + config_dir = args[args.index("--config_dir") + 1] + # remove config_dir from args + args.pop(args.index("--config_dir")) + args.pop(args.index(config_dir)) + else: + config_dir = "conf" + if "--config_file" in args: + config_file = args[args.index("--config_file") + 1] + # remove config_file from args + args.pop(args.index("--config_file")) + args.pop(args.index(config_file)) + else: + config_file = "default" + if "--version_base" in args: + version_base = args[args.index("--version_base") + 1] + # remove version_base from args + args.pop(args.index("--version_base")) + args.pop(args.index(version_base)) + else: + version_base = "1.3" + @hydra.main( + version_base=version_base, config_path=config_path, config_name=config_file + ) + def hydra_main(cfg: DictConfig) -> None: + print(OmegaConf.to_yaml(cfg)) + return 0 -@hydra.main(version_base=None, config_path=config_path, config_name="default") -def my_app(cfg: DictConfig) -> None: - print(OmegaConf.to_yaml(cfg)) - return 0 + return hydra_main() if __name__ == "__main__": - my_app() + main() diff --git a/deckard/layers/model.py b/deckard/layers/model.py index 5b098570..90bc5af3 100644 --- a/deckard/layers/model.py +++ b/deckard/layers/model.py @@ -9,18 +9,18 @@ logger = logging.getLogger(__name__) -model_parser = argparse.ArgumentParser() -model_parser.add_argument("stage", type=str, nargs="*", default=None) -model_parser.add_argument("--verbosity", type=str, default="INFO") -model_parser.add_argument("--params_file", type=str, default="params.yaml") -model_parser.add_argument("--pipeline_file", type=str, default="dvc.yaml") -model_parser.add_argument("--config_dir", type=str, default="conf") -model_parser.add_argument("--config_file", type=str, default="default") -model_parser.add_argument("--workdir", type=str, default=".") -model_parser.add_argument("--overrides", nargs="*", default=[], type=str) - - -def model_main(args): +parser = argparse.ArgumentParser() +parser.add_argument("stage", type=str, nargs="*", default=None) +parser.add_argument("--verbosity", type=str, default="INFO") +parser.add_argument("--params_file", type=str, default="params.yaml") +parser.add_argument("--pipeline_file", type=str, default="dvc.yaml") +parser.add_argument("--config_dir", type=str, default="conf") +parser.add_argument("--config_file", type=str, default="default") +parser.add_argument("--workdir", type=str, default=".") +parser.add_argument("--overrides", nargs="*", default=[], type=str) + + +def main(args): config_dir = Path(args.workdir, args.config_dir).absolute().as_posix() logging.basicConfig( level=args.verbosity, @@ -49,5 +49,5 @@ def model_main(args): if __name__ == "__main__": - args = model_parser.parse_args() - model_main(args) + args = parser.parse_args() + main(args) diff --git a/deckard/layers/optimise.py b/deckard/layers/optimise.py index 9f96bd9c..8c4e0617 100644 --- a/deckard/layers/optimise.py +++ b/deckard/layers/optimise.py @@ -1,11 +1,11 @@ import logging -import os import traceback from pathlib import Path import yaml from hydra.utils import instantiate from omegaconf import DictConfig, OmegaConf import hydra +import sys from ..base.utils import my_hash, unflatten_dict from .utils import deckard_nones @@ -15,15 +15,7 @@ __all__ = ["write_stage", "optimise", "parse_stage", "get_files"] -config_path = os.environ.get( - "DECKARD_CONFIG_PATH", - str(Path(Path.cwd(), "conf").absolute().as_posix()), -) -assert Path( - config_path, -).exists(), f"{config_path} does not exist. Please specify a config path by running `export DECKARD_CONFIG_PATH=` " -config_name = os.environ.get("DECKARD_DEFAULT_CONFIG", "default.yaml") -full_path = Path(config_path, config_name).as_posix() +logger = logging.getLogger(__name__) def get_files( @@ -83,13 +75,6 @@ def get_files( return cfg -# def save_file(cfg, folder, params_file): -# path = Path(folder, Path(params_file).name) -# with open(path, "w") as f: -# yaml.safe_dump(cfg, f) -# assert Path(path).exists() - - def merge_params(default, params) -> dict: """ Overwrite default params with params if key is found in default. @@ -246,9 +231,6 @@ def write_stage(params: dict, stage: str, path=None, working_dir=None) -> None: stage_params = {"stages": {stage: {}}} stage_params["stages"][stage] = dvc["stages"][stage] path.mkdir(exist_ok=True, parents=True) - # with open(path / "dvc.yaml", "w") as f: - # yaml.dump(stage_params, f, default_flow_style=False) - # assert Path(path / "dvc.yaml").exists(), f"File {path/'dvc.yaml'} does not exist." with open(Path(path, "params.yaml"), "w") as f: yaml.dump(params, f, default_flow_style=False) assert Path( @@ -260,13 +242,13 @@ def write_stage(params: dict, stage: str, path=None, working_dir=None) -> None: def optimise(cfg: DictConfig) -> None: cfg = OmegaConf.to_container(OmegaConf.create(cfg), resolve=True) raise_exception = cfg.pop("raise_exception", True) - working_dir = Path(config_path).parent direction = cfg.get("direction", "minimize") direction = [direction] if not isinstance(direction, list) else direction optimizers = cfg.get("optimizers", None) optimizers = [optimizers] if not isinstance(optimizers, list) else optimizers assert len(optimizers) == len(direction) stage = cfg.pop("stage", None) + working_dir = globals().get("working_dir", Path.cwd()) cfg = parse_stage(params=cfg, stage=stage, path=working_dir) exp = instantiate(cfg) files = exp.files.get_filenames() @@ -320,12 +302,49 @@ def optimise(cfg: DictConfig) -> None: return scores -if __name__ == "__main__": - logger = logging.getLogger(__name__) +def main(): + # Use sys calls to look for --working_dir, --config_dir, and --config_file + args = sys.argv + global working_dir + if "--working_dir" in args: + working_dir = args[args.index("--working_dir") + 1] + # remove working_dir from args + args.pop(args.index("--working_dir")) + args.pop(args.index(working_dir)) + else: + working_dir = Path(".").cwd() + print(working_dir) + if "--config_dir" in args: + config_dir = args[args.index("--config_dir") + 1] + # remove config_dir from args + args.pop(args.index("--config_dir")) + args.pop(args.index(config_dir)) + else: + config_dir = "conf" + config_dir = Path(working_dir, config_dir).as_posix() + if "--config_file" in args: + config_file = args[args.index("--config_file") + 1] + # remove config_file from args + args.pop(args.index("--config_file")) + args.pop(args.index(config_file)) + else: + config_file = "default" + if "--version_base" in args: + version_base = args[args.index("--version_base") + 1] + # remove version_base from args + args.pop(args.index("--version_base")) + args.pop(args.index(version_base)) + else: + version_base = "1.3" - @hydra.main(config_path=config_path, config_name=config_name, version_base="1.3") + @hydra.main(config_path=config_dir, config_name=config_file, version_base="1.3") def hydra_optimise(cfg: DictConfig) -> float: score = optimise(cfg) return score - hydra_optimise() + del working_dir + return hydra_optimise() + + +if __name__ == "__main__": + main() diff --git a/deckard/layers/parse.py b/deckard/layers/parse.py index 44a2200b..4c50bef7 100644 --- a/deckard/layers/parse.py +++ b/deckard/layers/parse.py @@ -6,16 +6,16 @@ from .utils import save_params_file logger = logging.getLogger(__name__) -hydra_parser = argparse.ArgumentParser() -hydra_parser.add_argument("overrides", type=str, nargs="*", default=None) -hydra_parser.add_argument("--verbosity", type=str, default="INFO") -hydra_parser.add_argument("--params_file", type=str, default="params.yaml") -hydra_parser.add_argument("--config_dir", type=str, default="conf") -hydra_parser.add_argument("--config_file", type=str, default="default") -hydra_parser.add_argument("--workdir", type=str, default=".") +parser = argparse.ArgumentParser() +parser.add_argument("overrides", type=str, nargs="*", default=None) +parser.add_argument("--verbosity", type=str, default="INFO") +parser.add_argument("--params_file", type=str, default="params.yaml") +parser.add_argument("--config_dir", type=str, default="conf") +parser.add_argument("--config_file", type=str, default="default") +parser.add_argument("--workdir", type=str, default=".") -def parse_hydra_config(args) -> None: +def main(args) -> None: logging.basicConfig(level=args.verbosity) config_dir = Path(Path(), args.config_dir).resolve().as_posix() OmegaConf.register_new_resolver("eval", eval) @@ -34,5 +34,5 @@ def parse_hydra_config(args) -> None: if __name__ == "__main__": - args = hydra_parser.parse_args() - parse_hydra_config(args) + args = parser.parse_args() + main(args) diff --git a/deckard/layers/prepare_queue.py b/deckard/layers/prepare_queue.py index 6c4aeb94..3dd6267d 100644 --- a/deckard/layers/prepare_queue.py +++ b/deckard/layers/prepare_queue.py @@ -1,5 +1,5 @@ import logging -import os +import sys from copy import deepcopy from pathlib import Path import yaml @@ -273,27 +273,59 @@ def prepare_experiment_folder(cfg: DictConfig) -> None: return exp, scorer, direction, folder, id_ -if __name__ == "__main__": - logger = logging.getLogger(__name__) - config_path = os.environ.pop( - "DECKARD_CONFIG_PATH", - str(Path(Path(), "conf").absolute().as_posix()), - ) - config_name = os.environ.pop("DECKARD_DEFAULT_CONFIG", "default.yaml") +def main(): + # Use sys calls to look for --working_dir, --config_dir, and --config_file + args = sys.argv + global working_dir + if "--working_dir" in args: + working_dir = args[args.index("--working_dir") + 1] + # remove working_dir from args + args.pop(args.index("--working_dir")) + args.pop(args.index(working_dir)) + else: + working_dir = Path(".").cwd() + print(working_dir) + if "--config_dir" in args: + config_dir = args[args.index("--config_dir") + 1] + # remove config_dir from args + args.pop(args.index("--config_dir")) + args.pop(args.index(config_dir)) + else: + config_dir = "conf" + config_dir = Path(working_dir, config_dir).as_posix() + if "--config_file" in args: + config_file = args[args.index("--config_file") + 1] + # remove config_file from args + args.pop(args.index("--config_file")) + args.pop(args.index(config_file)) + else: + config_file = "default" + if "--version_base" in args: + version_base = args[args.index("--version_base") + 1] + # remove version_base from args + args.pop(args.index("--version_base")) + args.pop(args.index(version_base)) + else: + version_base = "1.3" - @hydra.main(config_path=config_path, config_name=config_name, version_base="1.3") + @hydra.main( + config_path=config_dir, config_name=config_file, version_base=version_base + ) def hydra_prepare(cfg: DictConfig) -> float: exp, scorer, direction, folder, id_ = prepare_experiment_folder(cfg) assert isinstance(exp, Experiment), f"Expected Experiment, got {type(exp)}." assert isinstance(scorer, (str, list)), f"Expected list, got {type(scorer)}." assert isinstance(direction, str), f"Expected str, got {type(direction)}." - assert direction in [ - "minimize", - "maximize", - ], f"Expected 'minimize' or 'maximize', got {direction}." + assert len(scorer) == len( + direction + ), "Length of scorer and direction must match." assert Path( folder, ).exists(), f"Folder {folder} does not exist for experiment {id_}." return 0 - hydra_prepare() + return hydra_prepare() + + +if __name__ == "__main__": + main() diff --git a/deckard/layers/query_kepler.py b/deckard/layers/query_kepler.py index deb310b2..65d0c290 100644 --- a/deckard/layers/query_kepler.py +++ b/deckard/layers/query_kepler.py @@ -1,29 +1,41 @@ -import logging from datetime import datetime -import pandas as pd +from pathlib import Path import argparse +import sys +from dataclasses import dataclass +from hydra.utils import instantiate +import yaml from prometheus_api_client import PrometheusConnect - -v100 = 250 / 3600 -p100 = 250 / 3600 -l4 = 72 / 3600 +try: + from prometheus_api_client import PrometheusConnect +except ImportError: + ImportError("Please install prometheus_api_client") + sys.exit(1) +from .compile import load_results, save_results +@dataclass class PromQuery: - def __init__(self): - self.prom_host = "34.147.65.220" - self.prom_port = "9090" - self.prom_address = "http://" + self.prom_host + ":" + self.prom_port + "/" - self.warmup = 0 - self.cooldown = 0 - self.step = 1 - self.total = 0 - self.query = "" - self.start = 0 - self.end = 0 - self.service = "" - self.namespace = "" + prom_host = "34.147.65.220" + prom_port = "9090" + prom_address = None + warmup = 0 + cooldown = 0 + step = 1 + total = 0 + query = "" + start = 0 + end = 0 + service = "" + namespace = "" + input_file = "" + output_file = "" + device_power_dict = {} + device_id = "device_id" + start_time_string = "_start_time" + end_time_string = "_end_time" + power_string = "_power" def query_prometheus(self): """ @@ -31,7 +43,16 @@ def query_prometheus(self): step. :return: """ - prom = PrometheusConnect(url=self.prom_address, disable_ssl=True) + if self.prom_address is None: + prom_address = "http://" + self.prom_host + ":" + self.prom_port + else: + prom_address = self.prom_address + is_https = prom_address.startswith("https") + should_disable = not is_https + prom = PrometheusConnect( + url=prom_address, + disable_ssl=should_disable, + ) start = datetime.fromtimestamp((self.start + self.warmup)) end = datetime.fromtimestamp((self.end - self.cooldown)) result = prom.custom_query_range( @@ -48,82 +69,85 @@ def query_prometheus(self): def get_power(self): self.query = ( "sum(increase((kepler_container_joules_total[" - + self.caluculate_minutes() + + self.calculate_minutes() + "])))" ) - def caluculate_minutes(self): + def calculate_minutes(self): self.total = self.end - self.start print("total_time:", self.total) if abs(self.total) < 60: return "1m" return str(int(self.total / 60)) + "m" + def load(self): + result_file = Path(self.input_file).name + result_folder = Path(self.input_file).parent + data = load_results(results_file=result_file, results_folder=result_folder) + return data -def run_query(input_file, output_file): - new_columns = [ - "train_power", - "predict_power", - "predict_proba_power", - "predict_log_proba_power", - "adv_fit_power", - "adv_predict_power", - ] - start_times = [ - "train_start_time", - "predict_start_time", - "predict_proba_start_time", - "predict_log_proba_start_time", - "adv_fit_start_time", - "adv_predict_start_time", - ] - end_times = [ - "train_end_time", - "predict_end_time", - "predict_proba_end_time", - "predict_log_proba_end_time", - "adv_fit_end_time", - "adv_predict_end_time", - ] - - promObj = PromQuery() - data = pd.read_csv(input_file, index_col=0) - for new_column in new_columns: - data[new_column] = 0 - data["peak_power"] = 0 - for index, row in data.iterrows(): - for start_time in start_times: - promObj.start = data[start_time] - promObj.end = data[end_times[start_times.index(start_time)]] - promObj.get_power() - consumed_power = promObj.query_prometheus() - peak_power = 0 - if "v100" in row["device_id"]: - peak_power = 250 - elif "p100" in row["device_id"]: - peak_power = 250 - elif "l4" in row["device_id"]: - peak_power = 72 - data.at[index, new_columns[start_times.index(start_time)]] = consumed_power - data.at[index, "peak_power"] = peak_power - data.to_csv(output_file) + def run_query(self, data): + data = self.load() + start_times = [col for col in data.columns if self.start_time_string in col] + end_times = [col for col in data.columns if self.end_time_string in col] + new_columns = [ + col.replace(self.start_time_string, self.power_string) + for col in start_times + ] + for new_column in new_columns: + data[new_column] = 0 + for index, _ in data.iterrows(): + for start_time in start_times: + self.start = data[start_time] + self.end = data[end_times[start_times.index(start_time)]] + self.get_power() + consumed_power = self.query_prometheus() + data.at[index, new_columns[start_times.index(start_time)]] = ( + consumed_power + ) + for device in self.device_power_dict.keys(): + data.loc[data[self.device_id] == device, "peak_power"] = ( + self.device_power_dict[device] + ) + return data + def save(self, data): + output_file = Path(self.output_file).name + output_folder = Path(self.output_file).parent + save_results(data, results_file=output_file, results_folder=output_folder) -if __name__ == "__main__": - logger = logging.getLogger(__name__) - dvc_parser = argparse.ArgumentParser() - dvc_parser.add_argument("--input_file", type=str, default=None) - dvc_parser.add_argument("--output_file", type=str, default=None) - dvc_parser.add_argument("--verbosity", type=str, default="INFO") + def __call__(self): + data = self.run_query() + self.save(data) + + +parser = argparse.ArgumentParser() +parser.add_argument("--input_file", type=str, default=None) +parser.add_argument("--output_file", type=str, default=None) +parser.add_argument("--verbosity", type=str, default="INFO") +parser.add_argument("--prometheus_config", type=str, default=None) - args = dvc_parser.parse_args() + +def main(args): input_file = args.input_file output_file = args.output_file + # Read the prometheus config from yaml + with Path(args.prometheus_config).open("r") as stream: + prometheus_config = yaml.safe_load(stream) + if prometheus_config is None: + promObj = PromQuery(input_file=input_file, output_file=output_file) + else: + prometheus_config["_target_"] = "deckard.layers.compile.PromQuery" + prometheus_config["input_file"] = ( + input_file if input_file is not None else prometheus_config["input_file"] + ) + prometheus_config["output_file"] = ( + output_file if output_file is not None else prometheus_config["output_file"] + ) + promObj = instantiate(prometheus_config) + promObj() - logging.basicConfig( - level=args.verbosity, - format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", - ) - logger.info("Quering the Prometheus for power metrics") - results = run_query(input_file=input_file, output_file=output_file) +if __name__ == "__main__": + args = parser.parse_args() + main(args) diff --git a/deckard/layers/utils.py b/deckard/layers/utils.py index 7ce37a15..dc4659ca 100644 --- a/deckard/layers/utils.py +++ b/deckard/layers/utils.py @@ -82,18 +82,9 @@ def get_overrides(overrides=None): elif k.startswith("+"): overrides[f"++{k[1:]}"] = v elif k.startswith("~"): - overrides[f"~{k[2:]}"] = v + pass else: overrides[f"++{k}"] = v - - # assert isinstance(overrides, dict), f"Expected list, got {type(overrides)}" - # if key is not None and len(overrides) > 0: - # overrides.pop(f"{key}.name", None) - # overrides.pop(f"files.{key}_file", None) - # overrides[f"++{key}.name"] = Path(file).stem - # overrides[f"++files.{key}_file"] = Path(file).stem - # overrides[f"{key}"] = Path(file).stem - # overrides["++stage"] = key return overrides @@ -218,7 +209,6 @@ def get_dvc_stage_params( def prepare_files(params_file, stage, params, id_): # Turns the dictionary into a FileConfig object. # This creates a new directory at files.directory - # It also creates a new directory at files.directory/files.data_dir # It also creates a new directory at files.directory/files.reports_dir # If a stage is specified, it also creates a new directory at files.directory/files.reports/stage params["files"]["_target_"] = "deckard.base.files.FileConfig" diff --git a/deckard/layers/watcher.py b/deckard/layers/watcher.py index 2668b972..b3e4ea70 100644 --- a/deckard/layers/watcher.py +++ b/deckard/layers/watcher.py @@ -3,10 +3,10 @@ import logging import time from pathlib import Path - import watchdog.events import watchdog.observers from gevent import joinall +from hydra.utils import instantiate from pssh.clients import ParallelSSHClient PROGRESS_FILE = "progress.json" @@ -23,28 +23,45 @@ def createSSHClient(hosts, port, user, password): class JSONHandler(watchdog.events.PatternMatchingEventHandler): - def __init__(self, servers, port, user, password, filename, destination, **kwargs): + def __init__( + self, + servers, + port, + user, + password, + filename, + destination, + regex, + total, + recursive=True, + completed=0, + transformer: dict = None, + ): # Set the patterns for PatternMatchingEventHandler + self.regex = regex watchdog.events.PatternMatchingEventHandler.__init__( self, - patterns=[REGEX], + patterns=[self.regex], ignore_directories=True, case_sensitive=False, ) + self.total = total self.ssh = createSSHClient(servers, port, user, password) logger.info("Initiated SSH client") self.filename = filename self.destination = destination - self.recurse = kwargs["recursive"] if "recurse" in kwargs else False + self.recursive = recursive + self.transformer = transformer logger.info( "Source file is {} and destination is {}".format( self.filename, self.destination, ), ) - logger.info("Regex is {}".format(REGEX)) + logger.info("Regex is {}".format(self.regex)) def on_created(self, event): + self.completed += 1 logger.info("Watchdog received created event - % s." % event.src_path) events.append(event.src_path) self.filename = event.src_path @@ -54,136 +71,115 @@ def on_created(self, event): except Exception as e: logger.warning("Could not transform json") logger.warning(e) - if "TOTAL" and "QUEUE" in locals(): + if self.destination is not None: try: - self.calculate_progress(TOTAL, QUEUE) - logger.info("Calculated progress") + self.send_json_with_scp() + logger.info("Sent JSON") + except KeyboardInterrupt as e: + logger.warning("Keyboard interrupt") + raise e except Exception as e: - logger.warning("Could not calculate progress") + logger.warning("Could not send json") logger.warning(e) - try: - self.send_json_with_scp() - logger.info("Sent JSON") - except KeyboardInterrupt as e: - logger.warning("Keyboard interrupt") - raise e - except Exception as e: - logger.warning("Could not send json") - logger.warning(e) - - # Event is created, you can process it now - - def calculate_progress(total, queue): - progress = (total - queue) / total - dict_ = {"complete": progress, "remaining": 1 - progress} - with open(PROGRESS_FILE, "w") as f: - json.dump(dict_, f) - return dict_ def transform_json(self): - pass + if self.transformer is None: + pass + else: + transformer = instantiate(self.transformer) + with open(self.filename, "r") as f: + data = json.load(f) + data = transformer(data) + with open(self.filename, "w") as f: + json.dump(data, f) + return 0 def send_json_with_scp(self): remotename = Path(self.destination, self.filename).as_posix() - cmds = self.ssh.scp_send(self.filename, remotename, recurse=self.recurse) + cmds = self.ssh.scp_send(self.filename, remotename, recurse=self.recursive) joinall(cmds, raise_error=True) -if __name__ == "__main__": - parser = argparse.ArgumentParser( - description="Process some json files and send them to a server. Or send and then process. Your choice.", - ) - parser.add_argument( - "--source", - "-i", - type=str, - required=True, - help="The source to watch for files.", - ) - parser.add_argument( - "--destination", - "-o", - type=str, - required=True, - help="The destination to send the files to.", - ) - parser.add_argument( - "--server", - "-s", - type=str, - required=True, - help="The server to send the files to.", - ) - parser.add_argument("--port", "-p", type=int, help="The port to send the files to.") - parser.add_argument( - "--user", - "-u", - type=str, - required=True, - help="The user to send the files to.", - ) - parser.add_argument( - "--password", - "-k", - type=str, - required=True, - help="The password to send the files to.", - ) - parser.add_argument("--original", type=str, help="The original queue file.") - parser.add_argument("--queue", type=str, help="The current queue file.") - parser.add_argument( - "--regex", - "-e", - type=str, - required=True, - help="The regex to watch for.", - ) - parser.add_argument( - "--recursive", - "-r", - type=bool, - default=True, - help="Whether to recurse or not.", - ) - parser.add_argument( - "--n_jobs", - "-j", - type=int, - default=8, - help="The number of jobs to run in parallel.", - ) - parser.add_argument( - "--log", - "-l", - type=int, - default=logging.INFO, - help="The log level.", - ) - args = parser.parse_args() - # Set up logging - logging.basicConfig( - level=args.log, - format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", - ) - if args.regex is not None: - REGEX = args.regex - else: - raise ValueError("You must specify a regex to watch for.") +parser = argparse.ArgumentParser( + description="Process some json files and send them to a server. Or send and then process. Your choice.", +) +parser.add_argument( + "--source", + "-i", + type=str, + required=True, + help="The source to watch for files.", +) +parser.add_argument( + "--destination", + "-o", + type=str, + required=True, + help="The destination to send the files to.", +) +parser.add_argument( + "--server", + "-s", + type=str, + required=True, + help="The server to send the files to.", +) +parser.add_argument("--port", "-p", type=int, help="The port to send the files to.") +parser.add_argument( + "--user", + "-u", + type=str, + required=True, + help="The user to send the files to.", +) +parser.add_argument( + "--password", + "-k", + type=str, + required=True, + help="The password to send the files to.", +) +parser.add_argument("--original", type=str, help="The original completed file.") +parser.add_argument( + "--regex", + "-e", + type=str, + required=True, + help="The regex to watch for.", +) +parser.add_argument( + "--recursive", + "-r", + type=bool, + default=True, + help="Whether to recurse or not.", +) +parser.add_argument( + "--n_jobs", + "-j", + type=int, + default=8, + help="The number of jobs to run in parallel.", +) +parser.add_argument( + "--log", + "-l", + type=int, + default=logging.INFO, + help="The log level.", +) + + +def main(args): # Assuming this is watching some long-running process (like a model training), # you may find it beneficial to watch the progress. # First, generate an "original" file that contains one line # for every experiment configuration you would like to test. # The contents don't matter. It only counts lines. # Then, when each experiment is complete, pop a line from that file. - # This is called the "queue" file. + # This is called the "completed" file. # If these files exist, you will get a log to stdout and a # progress.json file containing the "completed" and "remaining" amounts. - if args.original is not None: - with open(args.original, "r") as f: - TOTAL = len(f.readlines()) - if args.queue is not None: - with open(args.queue, "r") as f: - QUEUE = len(f.readlines()) # SUPPORTS PARALELL HOSTS. Specify n jobs or write a list of hosts here. hosts = [args.server] * args.n_jobs src_path = Path(args.source).parent @@ -205,3 +201,9 @@ def send_json_with_scp(self): except KeyboardInterrupt: observer.stop() observer.join() + + +if __name__ == "__main__": + + args = parser.parse_args() + main(args) diff --git a/examples/gzip/conf/default.yaml b/examples/gzip/conf/default.yaml index a0a93718..a6512a4b 100644 --- a/examples/gzip/conf/default.yaml +++ b/examples/gzip/conf/default.yaml @@ -5,9 +5,11 @@ defaults: - model: default - files: default - scorers: default + - device_id: ${oc.env:DECKARD_DEVICE_ID, "cpu"} - override hydra/sweeper : optuna - override hydra/sweeper/sampler : grid - override hydra/launcher : joblib +devic_id : ${oc.env:DECKARD_DEVICE_ID, "cpu"} dataset : kdd_nsl model_name : gzip_knn stage : train diff --git a/examples/gzip/dvc.yaml b/examples/gzip/dvc.yaml index b7d4c8d6..5e4d756f 100644 --- a/examples/gzip/dvc.yaml +++ b/examples/gzip/dvc.yaml @@ -38,20 +38,21 @@ stages: - raw_data/ deps: - data_prep.py - parse_params: - cmd: python -m deckard.layers.parse - deps: - - conf/default.yaml - - conf/data/default.yaml - - conf/model/default.yaml - - conf/files/default.yaml - - conf/scorers/default.yaml - outs: - - params.yaml: - cache: true - desc : "Parsed parameters for the experiment" - persist: true - push : true + # parse_params: + # cmd: python -m deckard.layers.parse + # deps: + # - conf/default.yaml + # - conf/data/ + # - conf/model/ + # - conf/files/ + # - conf/scorers/ + # - conf/attack/ + # outs: + # - params.yaml: + # cache: true + # desc : "Parsed parameters for the experiment" + # persist: true + # push : true train: cmd: python -m deckard.layers.experiment train diff --git a/examples/power/plots/tmp.py b/examples/power/plots/tmp.py new file mode 100644 index 00000000..170159ee --- /dev/null +++ b/examples/power/plots/tmp.py @@ -0,0 +1,22 @@ +from lifelines import CoxPHFitter, WeibullAFTFitter, LogNormalAFTFitter, LogLogisticAFTFitter +from lifelines.datasets import load_rossi +from lifelines.calibration import survival_probability_calibration +from lifelines.datasets import load_rossi +import matplotlib.pyplot as plt + +rossi = load_rossi() +regression_dataset = load_rossi() + + +models = { + "weibull": WeibullAFTFitter(), + "log-normal": LogNormalAFTFitter(), + "log-logistic": LogLogisticAFTFitter(), + "cox": CoxPHFitter(), +} +fig, ax = plt.subplots(1, len(models), figsize=(17, 5)) +i = 0 +for model_name, model in models.items(): + model.fit(rossi, duration_col="week", event_col="arrest") + survival_probability_calibration(model, regression_dataset, t0=10, ax=ax[i]) + i += 1 diff --git a/examples/pytorch/cifar10/.dvc/tmp/btime b/examples/pytorch/cifar10/.dvc/tmp/btime new file mode 100644 index 00000000..e69de29b diff --git a/examples/pytorch/cifar10/.dvc/tmp/dag.md b/examples/pytorch/cifar10/.dvc/tmp/dag.md new file mode 100644 index 00000000..3d7f5899 --- /dev/null +++ b/examples/pytorch/cifar10/.dvc/tmp/dag.md @@ -0,0 +1,32 @@ +```mermaid +flowchart TD + node1["afr"] + node2["attack"] + node3["attacks@ResNet101"] + node4["attacks@ResNet152"] + node5["attacks@ResNet18"] + node6["attacks@ResNet34"] + node7["attacks@ResNet50"] + node8["clean@attack"] + node9["compile@attack"] + node10["copy_results"] + node11["plot"] + node12["train"] + node1-->node10 + node2-->node3 + node2-->node4 + node2-->node5 + node2-->node6 + node2-->node7 + node2-->node9 + node3-->node9 + node4-->node9 + node5-->node9 + node6-->node9 + node7-->node9 + node8-->node1 + node8-->node11 + node9-->node8 + node11-->node10 + node12-->node2 +``` \ No newline at end of file diff --git a/examples/pytorch/cifar10/.dvc/tmp/lock b/examples/pytorch/cifar10/.dvc/tmp/lock new file mode 100644 index 00000000..c023d83f --- /dev/null +++ b/examples/pytorch/cifar10/.dvc/tmp/lock @@ -0,0 +1 @@ + 433502 diff --git a/examples/pytorch/cifar10/.dvc/tmp/rwlock b/examples/pytorch/cifar10/.dvc/tmp/rwlock new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/examples/pytorch/cifar10/.dvc/tmp/rwlock @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/examples/pytorch/cifar10/.dvc/tmp/rwlock.lock b/examples/pytorch/cifar10/.dvc/tmp/rwlock.lock new file mode 100644 index 00000000..c023d83f --- /dev/null +++ b/examples/pytorch/cifar10/.dvc/tmp/rwlock.lock @@ -0,0 +1 @@ + 433502 From af68900121fa2105d1bf827a399c23e56dc18620 Mon Sep 17 00:00:00 2001 From: Charlie Meyers Date: Sat, 6 Jul 2024 23:34:44 +0200 Subject: [PATCH 02/35] remove tmp --- deckard/__main__.py | 4 +++- deckard/layers/find_best.py | 17 ++--------------- deckard/layers/hydra_test.py | 4 +++- deckard/layers/prepare_queue.py | 6 ++++-- deckard/layers/query_kepler.py | 2 -- examples/power/plots/tmp.py | 22 ---------------------- examples/pytorch/cifar10/.dvc/tmp/dag.md | 2 +- examples/pytorch/cifar10/.dvc/tmp/rwlock | 2 +- 8 files changed, 14 insertions(+), 45 deletions(-) delete mode 100644 examples/power/plots/tmp.py diff --git a/deckard/__main__.py b/deckard/__main__.py index aade275a..d1998021 100644 --- a/deckard/__main__.py +++ b/deckard/__main__.py @@ -30,7 +30,9 @@ def main(args): parser.add_argument("layer", help="The layers to run.") # The rest of the arguments are passed to the layer. parser.add_argument( - "args", nargs=argparse.REMAINDER, help="Arguments to pass to the layer." + "args", + nargs=argparse.REMAINDER, + help="Arguments to pass to the layer.", ) # parse the layer to know which subparser to use. args = parser.parse_args() diff --git a/deckard/layers/find_best.py b/deckard/layers/find_best.py index 462f8223..48ac854d 100644 --- a/deckard/layers/find_best.py +++ b/deckard/layers/find_best.py @@ -141,21 +141,6 @@ def find_optuna_best( return overrides -def find_best_params(study): - best_params = flatten_dict(study.best_params) - more_params = flatten_dict(study.best_trial.user_attrs) - even_more_params = flatten_dict(study.best_trial.system_attrs) - logger.debug(f"Best params: {best_params}") - logger.debug(f"Best user params: {more_params}") - logger.debug(f"Best system params: {even_more_params}") - # Merge all the params - best_params = OmegaConf.to_container( - OmegaConf.merge(best_params, more_params, even_more_params), - resolve=False, - ) - # to dotlist - best_params = flatten_dict(best_params) - return best_params @@ -206,6 +191,8 @@ def find_best_params(study): return best_params + + def save_study(study_csv, study): df = study.trials_dataframe(attrs=("number", "value", "params", "state")) Path(study_csv).parent.mkdir(parents=True, exist_ok=True) diff --git a/deckard/layers/hydra_test.py b/deckard/layers/hydra_test.py index fc240ccf..39f311f3 100644 --- a/deckard/layers/hydra_test.py +++ b/deckard/layers/hydra_test.py @@ -43,7 +43,9 @@ def main(): version_base = "1.3" @hydra.main( - version_base=version_base, config_path=config_path, config_name=config_file + version_base=version_base, + config_path=config_path, + config_name=config_file, ) def hydra_main(cfg: DictConfig) -> None: print(OmegaConf.to_yaml(cfg)) diff --git a/deckard/layers/prepare_queue.py b/deckard/layers/prepare_queue.py index 3dd6267d..26126358 100644 --- a/deckard/layers/prepare_queue.py +++ b/deckard/layers/prepare_queue.py @@ -309,7 +309,9 @@ def main(): version_base = "1.3" @hydra.main( - config_path=config_dir, config_name=config_file, version_base=version_base + config_path=config_dir, + config_name=config_file, + version_base=version_base, ) def hydra_prepare(cfg: DictConfig) -> float: exp, scorer, direction, folder, id_ = prepare_experiment_folder(cfg) @@ -317,7 +319,7 @@ def hydra_prepare(cfg: DictConfig) -> float: assert isinstance(scorer, (str, list)), f"Expected list, got {type(scorer)}." assert isinstance(direction, str), f"Expected str, got {type(direction)}." assert len(scorer) == len( - direction + direction, ), "Length of scorer and direction must match." assert Path( folder, diff --git a/deckard/layers/query_kepler.py b/deckard/layers/query_kepler.py index 65d0c290..e63d0a49 100644 --- a/deckard/layers/query_kepler.py +++ b/deckard/layers/query_kepler.py @@ -5,8 +5,6 @@ from dataclasses import dataclass from hydra.utils import instantiate import yaml -from prometheus_api_client import PrometheusConnect - try: from prometheus_api_client import PrometheusConnect except ImportError: diff --git a/examples/power/plots/tmp.py b/examples/power/plots/tmp.py deleted file mode 100644 index 170159ee..00000000 --- a/examples/power/plots/tmp.py +++ /dev/null @@ -1,22 +0,0 @@ -from lifelines import CoxPHFitter, WeibullAFTFitter, LogNormalAFTFitter, LogLogisticAFTFitter -from lifelines.datasets import load_rossi -from lifelines.calibration import survival_probability_calibration -from lifelines.datasets import load_rossi -import matplotlib.pyplot as plt - -rossi = load_rossi() -regression_dataset = load_rossi() - - -models = { - "weibull": WeibullAFTFitter(), - "log-normal": LogNormalAFTFitter(), - "log-logistic": LogLogisticAFTFitter(), - "cox": CoxPHFitter(), -} -fig, ax = plt.subplots(1, len(models), figsize=(17, 5)) -i = 0 -for model_name, model in models.items(): - model.fit(rossi, duration_col="week", event_col="arrest") - survival_probability_calibration(model, regression_dataset, t0=10, ax=ax[i]) - i += 1 diff --git a/examples/pytorch/cifar10/.dvc/tmp/dag.md b/examples/pytorch/cifar10/.dvc/tmp/dag.md index 3d7f5899..17469b30 100644 --- a/examples/pytorch/cifar10/.dvc/tmp/dag.md +++ b/examples/pytorch/cifar10/.dvc/tmp/dag.md @@ -29,4 +29,4 @@ flowchart TD node9-->node8 node11-->node10 node12-->node2 -``` \ No newline at end of file +``` diff --git a/examples/pytorch/cifar10/.dvc/tmp/rwlock b/examples/pytorch/cifar10/.dvc/tmp/rwlock index 9e26dfee..0967ef42 100644 --- a/examples/pytorch/cifar10/.dvc/tmp/rwlock +++ b/examples/pytorch/cifar10/.dvc/tmp/rwlock @@ -1 +1 @@ -{} \ No newline at end of file +{} From d567a143b9324c501dc1d07a66465f38467386ca Mon Sep 17 00:00:00 2001 From: Charlie Meyers Date: Sat, 6 Jul 2024 23:35:17 +0200 Subject: [PATCH 03/35] linting --- deckard/layers/find_best.py | 5 ----- deckard/layers/query_kepler.py | 1 + 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/deckard/layers/find_best.py b/deckard/layers/find_best.py index 48ac854d..268b903a 100644 --- a/deckard/layers/find_best.py +++ b/deckard/layers/find_best.py @@ -141,9 +141,6 @@ def find_optuna_best( return overrides - - - def prepare_overrides(config_subdir, best_params): overrides = [] # Changing the keys to hydra override format @@ -191,8 +188,6 @@ def find_best_params(study): return best_params - - def save_study(study_csv, study): df = study.trials_dataframe(attrs=("number", "value", "params", "state")) Path(study_csv).parent.mkdir(parents=True, exist_ok=True) diff --git a/deckard/layers/query_kepler.py b/deckard/layers/query_kepler.py index e63d0a49..bcb47e53 100644 --- a/deckard/layers/query_kepler.py +++ b/deckard/layers/query_kepler.py @@ -5,6 +5,7 @@ from dataclasses import dataclass from hydra.utils import instantiate import yaml + try: from prometheus_api_client import PrometheusConnect except ImportError: From e4ffd7cab56ab8051bd2ffbc4bb3d8b2d803f392 Mon Sep 17 00:00:00 2001 From: Charlie Meyers Date: Sat, 13 Jul 2024 12:34:11 +0200 Subject: [PATCH 04/35] better main, linting --- deckard/__init__.py | 2 - deckard/__main__.py | 45 +++- deckard/layers/__init__.py | 46 ---- deckard/layers/afr.py | 17 +- deckard/layers/attack.py | 28 +-- deckard/layers/compile.py | 24 +- deckard/layers/data.py | 28 +-- deckard/layers/deploy.py | 23 ++ deckard/layers/experiment.py | 28 +-- deckard/layers/find_best.py | 120 +++------ deckard/layers/generate_grid.py | 27 +- deckard/layers/generate_webpage.py | 41 ++- deckard/layers/hydra_test.py | 6 +- deckard/layers/model.py | 28 +-- deckard/layers/optimise.py | 69 ++---- deckard/layers/parse.py | 20 +- deckard/layers/prepare_queue.py | 8 +- deckard/layers/query_kepler.py | 178 ++++++------- deckard/layers/utils.py | 12 +- deckard/layers/watcher.py | 234 +++++++++--------- examples/gzip/conf/default.yaml | 2 - examples/gzip/dvc.yaml | 29 ++- examples/pytorch/cifar10/.dvc/tmp/btime | 0 examples/pytorch/cifar10/.dvc/tmp/dag.md | 32 --- examples/pytorch/cifar10/.dvc/tmp/lock | 1 - examples/pytorch/cifar10/.dvc/tmp/rwlock.lock | 1 - 26 files changed, 466 insertions(+), 583 deletions(-) create mode 100644 deckard/layers/deploy.py delete mode 100644 examples/pytorch/cifar10/.dvc/tmp/btime delete mode 100644 examples/pytorch/cifar10/.dvc/tmp/dag.md delete mode 100644 examples/pytorch/cifar10/.dvc/tmp/lock delete mode 100644 examples/pytorch/cifar10/.dvc/tmp/rwlock.lock diff --git a/deckard/__init__.py b/deckard/__init__.py index 2251a03e..9d6190ae 100644 --- a/deckard/__init__.py +++ b/deckard/__init__.py @@ -15,8 +15,6 @@ from .base import FileConfig as FileConfig from .base import ScorerDict as ScorerDict -from .layers import * # noqa: F401, F403 - # from deckard import layers # noqa: F401 # Semantic Version diff --git a/deckard/__main__.py b/deckard/__main__.py index d1998021..79ff3b1f 100644 --- a/deckard/__main__.py +++ b/deckard/__main__.py @@ -1,8 +1,12 @@ #!/usr/bin/env python3 import argparse +import subprocess import logging +from pathlib import Path from omegaconf import OmegaConf -from deckard.layers import deckard_layer_dict +from .layers.parse import save_params_file + +OmegaConf.register_new_resolver("eval", eval) logger = logging.getLogger(__name__) @@ -38,9 +42,36 @@ def main(args): args = parser.parse_args() if __name__ == "__main__": - print("Running deckard") - import sys - - print(sys.argv) - input("Press Enter to continue...") - main(args) + logging.basicConfig(level=logging.INFO) + parser = argparse.ArgumentParser() + parser.add_argument( + "--submodule", + type=str, + help=f"Submodule to run. Choices: {layer_list}", + ) + parser.add_argument( + "--config_file", + type=str, + help="default hydra configuration file that you would like to reproduce with dvc repro.", + ) + parser.add_argument("--config_dir", type=str, default="conf") + parser.add_argument("other_args", type=str, nargs="*") + args = parser.parse_args() + submodule = args.submodule + if submodule is not None: + assert ( + args.config_file is None + ), "config_file and submodule cannot be specified at the same time" + if submodule not in layer_list and submodule is not None: + raise ValueError(f"Submodule {submodule} not found. Choices: {layer_list}") + if len(args.other_args) > 0: + other_args = " ".join(args.other_args) + else: + other_args = [] + if submodule is None: + assert ( + parse_and_repro(other_args, args.config_file, config_dir=args.config_dir) + == 0 + ) + else: + assert run_submodule(submodule, other_args) == 0 diff --git a/deckard/layers/__init__.py b/deckard/layers/__init__.py index 17f7c1ec..e69de29b 100644 --- a/deckard/layers/__init__.py +++ b/deckard/layers/__init__.py @@ -1,46 +0,0 @@ -from .afr import parser as afr_parser -from .afr import main as afr_main -from .attack import parser as attack_parser -from .attack import main as attack_main -from .clean_data import parser as clean_data_parser -from .clean_data import main as clean_data_main -from .compile import parser as compile_parser -from .compile import main as compile_main -from .data import parser as data_parser -from .data import main as data_main -from .experiment import parser as experiment_parser -from .experiment import main as experiment_main -from .generate_grid import parser as generated_grid_parser -from .generate_grid import main as generated_grid_main -from .hydra_test import main as hydra_test_main -from .model import parser as model_parser -from .model import main as model_main -from .optimise import main as optimise_main -from .parse import parser as parse_parser -from .parse import main as parse_main -from .plots import parser as plots_parser -from .plots import main as plots_main -from .prepare_queue import main as prepare_queue_main -from .query_kepler import parser as query_kepler_parser -from .query_kepler import main as query_kepler_main -from .watcher import parser as watcher_parser -from .watcher import main as watcher_main - - -deckard_layer_dict = { - "afr": (afr_parser, afr_main), - "attack": (attack_parser, attack_main), - "clean_data": (clean_data_parser, clean_data_main), - "compile": (compile_parser, compile_main), - "data": (data_parser, data_main), - "experiment": (experiment_parser, experiment_main), - "generate_grid": (generated_grid_parser, generated_grid_main), - "model": (model_parser, model_main), - "parse": (parse_parser, parse_main), - "plots": (plots_parser, plots_main), - "query_kepler": (query_kepler_parser, query_kepler_main), - "watcher": (watcher_parser, watcher_main), - "hydra_test": (None, hydra_test_main), - "optimise": (None, optimise_main), - "prepare_queue": (None, prepare_queue_main), -} diff --git a/deckard/layers/afr.py b/deckard/layers/afr.py index 764bbbe5..41c7c4dc 100644 --- a/deckard/layers/afr.py +++ b/deckard/layers/afr.py @@ -920,14 +920,13 @@ def main(args): ) -parser = argparse.ArgumentParser() -parser.add_argument("--target", type=str, default="adv_failures") -parser.add_argument("--duration_col", type=str, default="adv_fit_time") -parser.add_argument("--dataset", type=str, default="mnist") -parser.add_argument("--data_file", type=str, default="data.csv") -parser.add_argument("--config_file", type=str, default="afr.yaml") -parser.add_argument("--plots_folder", type=str, default="plots") - if "__main__" == __name__: - args = parser.parse_args() + afr_parser = argparse.ArgumentParser() + afr_parser.add_argument("--target", type=str, default="adv_failures") + afr_parser.add_argument("--duration_col", type=str, default="adv_fit_time") + afr_parser.add_argument("--dataset", type=str, default=None) + afr_parser.add_argument("--data_file", type=str, default="data.csv") + afr_parser.add_argument("--config_file", type=str, default="afr.yaml") + afr_parser.add_argument("--plots_folder", type=str, default="plots") + args = afr_parser.parse_args() main(args) diff --git a/deckard/layers/attack.py b/deckard/layers/attack.py index 8b03b495..ebe34146 100644 --- a/deckard/layers/attack.py +++ b/deckard/layers/attack.py @@ -9,18 +9,18 @@ logger = logging.getLogger(__name__) -parser = argparse.ArgumentParser() -parser.add_argument("stage", type=str, nargs="*", default=None) -parser.add_argument("--verbosity", type=str, default="INFO") -parser.add_argument("--params_file", type=str, default="params.yaml") -parser.add_argument("--pipeline_file", type=str, default="dvc.yaml") -parser.add_argument("--config_dir", type=str, default="conf") -parser.add_argument("--config_file", type=str, default="default") -parser.add_argument("--workdir", type=str, default=".") -parser.add_argument("--overrides", nargs="*", default=[], type=str) - - -def main(args): +attack_parser = argparse.ArgumentParser() +attack_parser.add_argument("stage", type=str, nargs="*", default=None) +attack_parser.add_argument("--verbosity", type=str, default="INFO") +attack_parser.add_argument("--params_file", type=str, default="params.yaml") +attack_parser.add_argument("--pipeline_file", type=str, default="dvc.yaml") +attack_parser.add_argument("--config_dir", type=str, default="conf") +attack_parser.add_argument("--config_file", type=str, default="default") +attack_parser.add_argument("--workdir", type=str, default=".") +attack_parser.add_argument("--overrides", nargs="*", default=[], type=str) + + +def attack_main(args): config_dir = Path(args.workdir, args.config_dir).absolute().as_posix() logging.basicConfig( level=args.verbosity, @@ -49,5 +49,5 @@ def main(args): if __name__ == "__main__": - args = parser.parse_args() - main(args) + args = attack_parser.parse_args() + attack_main(args) diff --git a/deckard/layers/compile.py b/deckard/layers/compile.py index fb03a9fb..4a33e818 100644 --- a/deckard/layers/compile.py +++ b/deckard/layers/compile.py @@ -4,7 +4,6 @@ import logging from tqdm import tqdm import yaml -import argparse logger = logging.getLogger(__name__) @@ -197,15 +196,15 @@ def load_results(results_file, results_folder) -> pd.DataFrame: return results -parser = argparse.ArgumentParser() -parser.add_argument("--results_file", type=str, default="results.csv") -parser.add_argument("--report_folder", type=str, default="reports", required=True) -parser.add_argument("--results_folder", type=str, default=".") -parser.add_argument("--exclude", type=list, default=None, nargs="*") -parser.add_argument("--verbose", type=str, default="INFO") - - -def main(parse_results, save_results, parser): +if __name__ == "__main__": + import argparse + + parser = argparse.ArgumentParser() + parser.add_argument("--results_file", type=str, default="results.csv") + parser.add_argument("--report_folder", type=str, default="reports", required=True) + parser.add_argument("--results_folder", type=str, default=".") + parser.add_argument("--exclude", type=list, default=None, nargs="*") + parser.add_argument("--verbose", type=str, default="INFO") args = parser.parse_args() logging.basicConfig(level=args.verbose) report_folder = args.report_folder @@ -216,8 +215,3 @@ def main(parse_results, save_results, parser): assert Path( report_file, ).exists(), f"Results file {report_file} does not exist. Something went wrong." - - -if __name__ == "__main__": - - main(parse_results, save_results, parser) diff --git a/deckard/layers/data.py b/deckard/layers/data.py index 00f55390..95768bbc 100644 --- a/deckard/layers/data.py +++ b/deckard/layers/data.py @@ -9,18 +9,18 @@ logger = logging.getLogger(__name__) -parser = argparse.ArgumentParser() -parser.add_argument("stage", type=str, nargs="*", default=None) -parser.add_argument("--verbosity", type=str, default="INFO") -parser.add_argument("--params_file", type=str, default="params.yaml") -parser.add_argument("--pipeline_file", type=str, default="dvc.yaml") -parser.add_argument("--config_dir", type=str, default="conf") -parser.add_argument("--config_file", type=str, default="default") -parser.add_argument("--workdir", type=str, default=".") -parser.add_argument("--overrides", nargs="*", default=[], type=str) - - -def main(args): +data_parser = argparse.ArgumentParser() +data_parser.add_argument("stage", type=str, nargs="*", default=None) +data_parser.add_argument("--verbosity", type=str, default="INFO") +data_parser.add_argument("--params_file", type=str, default="params.yaml") +data_parser.add_argument("--pipeline_file", type=str, default="dvc.yaml") +data_parser.add_argument("--config_dir", type=str, default="conf") +data_parser.add_argument("--config_file", type=str, default="default") +data_parser.add_argument("--workdir", type=str, default=".") +data_parser.add_argument("--overrides", nargs="*", default=[], type=str) + + +def data_main(args): config_dir = Path(args.workdir, args.config_dir).absolute().as_posix() logging.basicConfig( level=args.verbosity, @@ -49,5 +49,5 @@ def main(args): if __name__ == "__main__": - args = parser.parse_args() - main(args) + args = data_parser.parse_args() + data_main(args) diff --git a/deckard/layers/deploy.py b/deckard/layers/deploy.py new file mode 100644 index 00000000..a1fe99ed --- /dev/null +++ b/deckard/layers/deploy.py @@ -0,0 +1,23 @@ +import logging +import argparse +from pathlib import Path +import yaml +from ..iaac import GCP_Config + + +logger = logging.getLogger(__name__) +logging.basicConfig(level=logging.INFO) +if __name__ == "__main__": + iaac_parser = argparse.ArgumentParser() + iaac_parser.add_argument("--verbosity", type=str, default="INFO") + iaac_parser.add_argument("--config_dir", type=str, default="conf/deploy") + iaac_parser.add_argument("--config_file", type=str, default="default.yaml") + iaac_parser.add_argument("--workdir", type=str, default=".") + args = iaac_parser.parse_args() + config_dir = Path(args.workdir, args.config_dir).resolve().as_posix() + config_file = Path(config_dir, args.config_file).resolve().as_posix() + with open(config_file, "r") as f: + params = yaml.load(f, Loader=yaml.FullLoader) + gcp = GCP_Config(**params) + logging.basicConfig(level=args.verbosity) + assert gcp() is None, "Error creating cluster" diff --git a/deckard/layers/experiment.py b/deckard/layers/experiment.py index 940921ea..b4336cb8 100644 --- a/deckard/layers/experiment.py +++ b/deckard/layers/experiment.py @@ -9,18 +9,18 @@ logger = logging.getLogger(__name__) -parser = argparse.ArgumentParser() -parser.add_argument("stage", type=str, nargs="*", default=None) -parser.add_argument("--verbosity", type=str, default="INFO") -parser.add_argument("--params_file", type=str, default="params.yaml") -parser.add_argument("--pipeline_file", type=str, default="dvc.yaml") -parser.add_argument("--config_dir", type=str, default="conf") -parser.add_argument("--config_file", type=str, default="default") -parser.add_argument("--workdir", type=str, default=".") -parser.add_argument("--overrides", nargs="*", default=[], type=str) - - -def main(args): +experiment_parser = argparse.ArgumentParser() +experiment_parser.add_argument("stage", type=str, nargs="*", default=None) +experiment_parser.add_argument("--verbosity", type=str, default="INFO") +experiment_parser.add_argument("--params_file", type=str, default="params.yaml") +experiment_parser.add_argument("--pipeline_file", type=str, default="dvc.yaml") +experiment_parser.add_argument("--config_dir", type=str, default="conf") +experiment_parser.add_argument("--config_file", type=str, default="default") +experiment_parser.add_argument("--workdir", type=str, default=".") +experiment_parser.add_argument("--overrides", nargs="*", default=[], type=str) + + +def experiment_main(args): config_dir = Path(args.workdir, args.config_dir).absolute().as_posix() logging.basicConfig( level=args.verbosity, @@ -48,5 +48,5 @@ def main(args): if __name__ == "__main__": - args = parser.parse_args() - main(args) + args = experiment_parser.parse_args() + experiment_main(args) diff --git a/deckard/layers/find_best.py b/deckard/layers/find_best.py index 268b903a..9cb34315 100644 --- a/deckard/layers/find_best.py +++ b/deckard/layers/find_best.py @@ -89,15 +89,9 @@ def find_optuna_best( ], f"Direction {direction} not recognized." directions = [False if x == "maximize" else True for x in directions] assert isinstance(new_df, pd.DataFrame), f"df is not a dataframe: {type(df)}" - study = optuna.create_study( - study_name=study_name, - storage=storage_name, - load_if_exists=True, - direction=direction, - ) - if study_csv is not None: - save_study(study_csv, study) + Path(study_csv).parent.mkdir(parents=True, exist_ok=True) + df.to_csv(study_csv) # To dotlist best_params = flatten_dict(study.best_params) more_params = flatten_dict(study.best_trial.user_attrs) @@ -121,38 +115,6 @@ def find_optuna_best( pass elif key.startswith("+"): # appends to config key = "++" + key[1:] # force override - elif key.startswith("~"): # appends to config - pass - else: - key = "++" + key # force override - if config_subdir is None: - overrides.append(f"{key}={value}") - else: # if we are using a subdir, we need to remove the directory from the key - if ( - key.startswith(f"++{config_subdir}.") - or key.startswith(f"~{config_subdir}.") - or key.startswith(f"--{config_subdir}.") - ): - key = key.replace(f"{config_subdir}.", "") - overrides.append(f"{key}={value}") - logger.info(f"Adding {key} to param list") - else: - logger.debug(f"Skipping {key} because it is not in {config_subdir}") - return overrides - - -def prepare_overrides(config_subdir, best_params): - overrides = [] - # Changing the keys to hydra override format - for key, value in best_params.items(): - if ( - key.startswith("++") or key.startswith("~") or key.startswith("--") - ): # reserved meaning - pass - elif key.startswith("+"): # appends to config - key = "++" + key[1:] # force override - elif key.startswith("~"): # appends to config - pass else: key = "++" + key # force override if config_subdir is None: @@ -160,7 +122,7 @@ def prepare_overrides(config_subdir, best_params): else: # if we are using a subdir, we need to remove the directory from the key if ( key.startswith(f"++{config_subdir}.") - or key.startswith(f"~{config_subdir}.") + or key.startswith(f"~~{config_subdir}.") or key.startswith(f"--{config_subdir}.") ): key = key.replace(f"{config_subdir}.", "") @@ -168,30 +130,21 @@ def prepare_overrides(config_subdir, best_params): logger.info(f"Adding {key} to param list") else: logger.debug(f"Skipping {key} because it is not in {config_subdir}") - return overrides - - -def find_best_params(study): - best_params = flatten_dict(study.best_params) - more_params = flatten_dict(study.best_trial.user_attrs) - even_more_params = flatten_dict(study.best_trial.system_attrs) - logger.debug(f"Best params: {best_params}") - logger.debug(f"Best user params: {more_params}") - logger.debug(f"Best system params: {even_more_params}") - # Merge all the params - best_params = OmegaConf.to_container( - OmegaConf.merge(best_params, more_params, even_more_params), - resolve=False, + params = override_default_with_best( + config_folder, + default_config, + overrides, + config_subdir=config_subdir, ) - # to dotlist - best_params = flatten_dict(best_params) - return best_params - - -def save_study(study_csv, study): - df = study.trials_dataframe(attrs=("number", "value", "params", "state")) - Path(study_csv).parent.mkdir(parents=True, exist_ok=True) - df.to_csv(study_csv) + if params_file is not None: + params_file = create_new_config_in_subdir( + params_file, + config_folder, + default_config, + config_subdir, + params, + ) + return params def create_new_config_in_subdir( @@ -227,7 +180,7 @@ def create_new_config_in_subdir( return params_file -def override_config( +def override_default_with_best( config_folder, default_config, overrides, @@ -242,25 +195,27 @@ def override_config( return cfg -parser = argparse.ArgumentParser() -parser.add_argument("--params_file", type=str, default=True) - -parser.add_argument("--study_csv", type=str, default=None) -parser.add_argument("--config_folder", type=str, default=Path(Path(), "conf")) -parser.add_argument("--default_config", type=str, default="default") -parser.add_argument("--config_subdir", type=str, default=None) -parser.add_argument("--study_name", type=str, required=True) -parser.add_argument("--config_name", type=str) -parser.add_argument("--verbosity", type=str, default="INFO") -parser.add_argument("--storage_name", type=str, required=True) -parser.add_argument("--direction", type=str, default="maximize") -parser.add_argument("--study_type", type=str, default="optuna") - +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("--params_file", type=str, default=True) + + parser.add_argument("--study_csv", type=str, default=None) + parser.add_argument("--config_folder", type=str, default=Path(Path(), "conf")) + parser.add_argument("--default_config", type=str, default="default") + parser.add_argument("--config_subdir", type=str, default=None) + parser.add_argument("--study_name", type=str, required=True) + parser.add_argument("--config_name", type=str) + parser.add_argument("--verbosity", type=str, default="INFO") + parser.add_argument("--storage_name", type=str, required=True) + parser.add_argument("--direction", type=str, default="maximize") + parser.add_argument("--study_type", type=str, default="optuna") + args = parser.parse_args() -def main(find_optuna_best, args): args.config_folder = Path(args.config_folder).resolve().as_posix() logging if args.study_type == "optuna": + study_name = args.study_name + storage_name = args.storage_name direction = args.direction if len(direction) == 1: direction = direction[0] @@ -276,8 +231,3 @@ def main(find_optuna_best, args): ) else: raise NotImplementedError(f"Study type {args.study_type} not implemented.") - - -if __name__ == "__main__": - args = parser.parse_args() - main(find_optuna_best, args) diff --git a/deckard/layers/generate_grid.py b/deckard/layers/generate_grid.py index af32c9db..487ce801 100644 --- a/deckard/layers/generate_grid.py +++ b/deckard/layers/generate_grid.py @@ -4,7 +4,6 @@ import yaml from functools import reduce from operator import mul -import argparse from ..base.utils import make_grid, my_hash logger = logging.getLogger(__name__) @@ -39,6 +38,15 @@ def load_config(config_path): return config +def dict_to_overrides(dictionary): + new = {} + for key, value in dictionary.items(): + for k, v in value.items(): + new_key = "++" + key + "." + k + new[new_key] = v + return new + + def generate_grid_from_folders(conf_dir, regex): this_dir = os.getcwd() conf_dir = os.path.relpath(conf_dir, this_dir) @@ -66,7 +74,7 @@ def generate_grid_from_folders(conf_dir, regex): return big_list -def main( +def generate_queue( conf_root, grid_dir, regex, @@ -79,6 +87,7 @@ def main( big_list = generate_grid_from_folders(conf_dir, regex) i = 0 for entry in big_list: + new = dict_to_overrides(entry) path = Path(conf_root, queue_folder) name = my_hash(entry) path.mkdir(parents=True, exist_ok=True) @@ -87,7 +96,7 @@ def main( default = yaml.safe_load(stream) except yaml.YAMLError as exc: logger.error(exc) - default["hydra"]["sweeper"]["params"] = entry + default["hydra"]["sweeper"]["params"] = new big_list[i] = default with open(Path(path, name + ".yaml"), "w") as outfile: yaml.dump(big_list[i], outfile, default_flow_style=False) @@ -96,11 +105,9 @@ def main( return big_list -parser = argparse.ArgumentParser() -parser.add_argument("--config_folder", type=str, default="conf") -parser.add_argument("--grid_folder", type=str, default="grid") -parser.add_argument("--regex", type=str, default="*.yaml") +conf_root = "conf" +grid_folder = "grid" +regex = "*.yaml" -if __name__ == "__main__": - args = parser.parse_args() - main(args.config_folder, args.grid_folder, args.regex) +big_list = generate_queue(conf_root, grid_folder, regex) +print(yaml.dump(big_list[0])) diff --git a/deckard/layers/generate_webpage.py b/deckard/layers/generate_webpage.py index 55491e33..bd2699c7 100644 --- a/deckard/layers/generate_webpage.py +++ b/deckard/layers/generate_webpage.py @@ -1,7 +1,6 @@ +import os import csv -from pathlib import Path from bs4 import BeautifulSoup -import argparse def generate_html_file(csv_file_path, output_folder): @@ -11,27 +10,28 @@ def generate_html_file(csv_file_path, output_folder): data = list(reader) # Get the title of the CSV file - file_name = Path(csv_file_path).name - title = Path(file_name).stem.replace("_", " ").replace("-", " ").title() + file_name = os.path.basename(csv_file_path) + title = os.path.splitext(file_name)[0] + # Create an HTML file path and open the file - html_file_path = Path(output_folder, f"{title}.html") + html_file_path = os.path.join(output_folder, f"{title}.html") with open(html_file_path, "w") as html_file: # Create a BeautifulSoup object soup = BeautifulSoup("", "html.parser") + # Add the title to the HTML file soup.append(BeautifulSoup(f"

{title}

", "html.parser")) + # Create an HTML table from the CSV data table_html = "
{cell}
" for row in data: table_html += "" for cell in row: # Check if the cell is a string representing a valid path - if isinstance(cell, str) and Path(cell).exists(): + if isinstance(cell, str) and os.path.exists(cell): # Create a hyperlink with the capitalized name of the file - file_name = Path(cell).name - link_title = ( - Path(file_name).stem.replace("_", " ").replace("-", " ") - ) + file_name = os.path.basename(cell) + link_title = os.path.splitext(file_name)[0] cell = f'{link_title.capitalize()}' table_html += f"" @@ -45,20 +45,19 @@ def generate_html_file(csv_file_path, output_folder): html_file.write(soup.prettify()) -def main(folder_path, regex="*.csv"): +def parse_folder(folder_path): # Create the output folder if it doesn't exist - Path(folder_path).mkdir(parents=True, exist_ok=True) + os.makedirs(folder_path, exist_ok=True) # Iterate over the CSV files in the folder - for file_name in Path(folder_path).glob(regex): - if file_name.is_file(): - generate_html_file(file_name, folder_path) - + for file_name in os.listdir(folder_path): + if file_name.endswith(".csv"): + csv_file_path = os.path.join(folder_path, file_name) + generate_html_file(csv_file_path, folder_path) -parser = argparse.ArgumentParser() -parser.add_argument("--folder_path", type=str, default="output/reports") +# Define the folder path containing CSV files +folder_path = "output/reports" # Update with your folder path -if __name__ == "__main__": - args = parser.parse_args() - main(args.folder_path) +# Parse the folder and generate HTML files +parse_folder(folder_path) diff --git a/deckard/layers/hydra_test.py b/deckard/layers/hydra_test.py index 39f311f3..dd668fac 100644 --- a/deckard/layers/hydra_test.py +++ b/deckard/layers/hydra_test.py @@ -1,6 +1,4 @@ from omegaconf import DictConfig, OmegaConf -import hydra -import sys from pathlib import Path @@ -51,8 +49,6 @@ def hydra_main(cfg: DictConfig) -> None: print(OmegaConf.to_yaml(cfg)) return 0 - return hydra_main() - if __name__ == "__main__": - main() + my_app() diff --git a/deckard/layers/model.py b/deckard/layers/model.py index 90bc5af3..5b098570 100644 --- a/deckard/layers/model.py +++ b/deckard/layers/model.py @@ -9,18 +9,18 @@ logger = logging.getLogger(__name__) -parser = argparse.ArgumentParser() -parser.add_argument("stage", type=str, nargs="*", default=None) -parser.add_argument("--verbosity", type=str, default="INFO") -parser.add_argument("--params_file", type=str, default="params.yaml") -parser.add_argument("--pipeline_file", type=str, default="dvc.yaml") -parser.add_argument("--config_dir", type=str, default="conf") -parser.add_argument("--config_file", type=str, default="default") -parser.add_argument("--workdir", type=str, default=".") -parser.add_argument("--overrides", nargs="*", default=[], type=str) - - -def main(args): +model_parser = argparse.ArgumentParser() +model_parser.add_argument("stage", type=str, nargs="*", default=None) +model_parser.add_argument("--verbosity", type=str, default="INFO") +model_parser.add_argument("--params_file", type=str, default="params.yaml") +model_parser.add_argument("--pipeline_file", type=str, default="dvc.yaml") +model_parser.add_argument("--config_dir", type=str, default="conf") +model_parser.add_argument("--config_file", type=str, default="default") +model_parser.add_argument("--workdir", type=str, default=".") +model_parser.add_argument("--overrides", nargs="*", default=[], type=str) + + +def model_main(args): config_dir = Path(args.workdir, args.config_dir).absolute().as_posix() logging.basicConfig( level=args.verbosity, @@ -49,5 +49,5 @@ def main(args): if __name__ == "__main__": - args = parser.parse_args() - main(args) + args = model_parser.parse_args() + model_main(args) diff --git a/deckard/layers/optimise.py b/deckard/layers/optimise.py index 8c4e0617..9f96bd9c 100644 --- a/deckard/layers/optimise.py +++ b/deckard/layers/optimise.py @@ -1,11 +1,11 @@ import logging +import os import traceback from pathlib import Path import yaml from hydra.utils import instantiate from omegaconf import DictConfig, OmegaConf import hydra -import sys from ..base.utils import my_hash, unflatten_dict from .utils import deckard_nones @@ -15,7 +15,15 @@ __all__ = ["write_stage", "optimise", "parse_stage", "get_files"] -logger = logging.getLogger(__name__) +config_path = os.environ.get( + "DECKARD_CONFIG_PATH", + str(Path(Path.cwd(), "conf").absolute().as_posix()), +) +assert Path( + config_path, +).exists(), f"{config_path} does not exist. Please specify a config path by running `export DECKARD_CONFIG_PATH=` " +config_name = os.environ.get("DECKARD_DEFAULT_CONFIG", "default.yaml") +full_path = Path(config_path, config_name).as_posix() def get_files( @@ -75,6 +83,13 @@ def get_files( return cfg +# def save_file(cfg, folder, params_file): +# path = Path(folder, Path(params_file).name) +# with open(path, "w") as f: +# yaml.safe_dump(cfg, f) +# assert Path(path).exists() + + def merge_params(default, params) -> dict: """ Overwrite default params with params if key is found in default. @@ -231,6 +246,9 @@ def write_stage(params: dict, stage: str, path=None, working_dir=None) -> None: stage_params = {"stages": {stage: {}}} stage_params["stages"][stage] = dvc["stages"][stage] path.mkdir(exist_ok=True, parents=True) + # with open(path / "dvc.yaml", "w") as f: + # yaml.dump(stage_params, f, default_flow_style=False) + # assert Path(path / "dvc.yaml").exists(), f"File {path/'dvc.yaml'} does not exist." with open(Path(path, "params.yaml"), "w") as f: yaml.dump(params, f, default_flow_style=False) assert Path( @@ -242,13 +260,13 @@ def write_stage(params: dict, stage: str, path=None, working_dir=None) -> None: def optimise(cfg: DictConfig) -> None: cfg = OmegaConf.to_container(OmegaConf.create(cfg), resolve=True) raise_exception = cfg.pop("raise_exception", True) + working_dir = Path(config_path).parent direction = cfg.get("direction", "minimize") direction = [direction] if not isinstance(direction, list) else direction optimizers = cfg.get("optimizers", None) optimizers = [optimizers] if not isinstance(optimizers, list) else optimizers assert len(optimizers) == len(direction) stage = cfg.pop("stage", None) - working_dir = globals().get("working_dir", Path.cwd()) cfg = parse_stage(params=cfg, stage=stage, path=working_dir) exp = instantiate(cfg) files = exp.files.get_filenames() @@ -302,49 +320,12 @@ def optimise(cfg: DictConfig) -> None: return scores -def main(): - # Use sys calls to look for --working_dir, --config_dir, and --config_file - args = sys.argv - global working_dir - if "--working_dir" in args: - working_dir = args[args.index("--working_dir") + 1] - # remove working_dir from args - args.pop(args.index("--working_dir")) - args.pop(args.index(working_dir)) - else: - working_dir = Path(".").cwd() - print(working_dir) - if "--config_dir" in args: - config_dir = args[args.index("--config_dir") + 1] - # remove config_dir from args - args.pop(args.index("--config_dir")) - args.pop(args.index(config_dir)) - else: - config_dir = "conf" - config_dir = Path(working_dir, config_dir).as_posix() - if "--config_file" in args: - config_file = args[args.index("--config_file") + 1] - # remove config_file from args - args.pop(args.index("--config_file")) - args.pop(args.index(config_file)) - else: - config_file = "default" - if "--version_base" in args: - version_base = args[args.index("--version_base") + 1] - # remove version_base from args - args.pop(args.index("--version_base")) - args.pop(args.index(version_base)) - else: - version_base = "1.3" +if __name__ == "__main__": + logger = logging.getLogger(__name__) - @hydra.main(config_path=config_dir, config_name=config_file, version_base="1.3") + @hydra.main(config_path=config_path, config_name=config_name, version_base="1.3") def hydra_optimise(cfg: DictConfig) -> float: score = optimise(cfg) return score - del working_dir - return hydra_optimise() - - -if __name__ == "__main__": - main() + hydra_optimise() diff --git a/deckard/layers/parse.py b/deckard/layers/parse.py index 4c50bef7..44a2200b 100644 --- a/deckard/layers/parse.py +++ b/deckard/layers/parse.py @@ -6,16 +6,16 @@ from .utils import save_params_file logger = logging.getLogger(__name__) -parser = argparse.ArgumentParser() -parser.add_argument("overrides", type=str, nargs="*", default=None) -parser.add_argument("--verbosity", type=str, default="INFO") -parser.add_argument("--params_file", type=str, default="params.yaml") -parser.add_argument("--config_dir", type=str, default="conf") -parser.add_argument("--config_file", type=str, default="default") -parser.add_argument("--workdir", type=str, default=".") +hydra_parser = argparse.ArgumentParser() +hydra_parser.add_argument("overrides", type=str, nargs="*", default=None) +hydra_parser.add_argument("--verbosity", type=str, default="INFO") +hydra_parser.add_argument("--params_file", type=str, default="params.yaml") +hydra_parser.add_argument("--config_dir", type=str, default="conf") +hydra_parser.add_argument("--config_file", type=str, default="default") +hydra_parser.add_argument("--workdir", type=str, default=".") -def main(args) -> None: +def parse_hydra_config(args) -> None: logging.basicConfig(level=args.verbosity) config_dir = Path(Path(), args.config_dir).resolve().as_posix() OmegaConf.register_new_resolver("eval", eval) @@ -34,5 +34,5 @@ def main(args) -> None: if __name__ == "__main__": - args = parser.parse_args() - main(args) + args = hydra_parser.parse_args() + parse_hydra_config(args) diff --git a/deckard/layers/prepare_queue.py b/deckard/layers/prepare_queue.py index 26126358..7c3036d5 100644 --- a/deckard/layers/prepare_queue.py +++ b/deckard/layers/prepare_queue.py @@ -1,5 +1,5 @@ import logging -import sys +import os from copy import deepcopy from pathlib import Path import yaml @@ -326,8 +326,4 @@ def hydra_prepare(cfg: DictConfig) -> float: ).exists(), f"Folder {folder} does not exist for experiment {id_}." return 0 - return hydra_prepare() - - -if __name__ == "__main__": - main() + hydra_prepare() diff --git a/deckard/layers/query_kepler.py b/deckard/layers/query_kepler.py index bcb47e53..f5ad8d87 100644 --- a/deckard/layers/query_kepler.py +++ b/deckard/layers/query_kepler.py @@ -1,9 +1,8 @@ from datetime import datetime -from pathlib import Path import argparse +import logging import sys from dataclasses import dataclass -from hydra.utils import instantiate import yaml try: @@ -11,30 +10,27 @@ except ImportError: ImportError("Please install prometheus_api_client") sys.exit(1) -from .compile import load_results, save_results +v100 = 250 / 3600 +p100 = 250 / 3600 +l4 = 72 / 3600 + @dataclass class PromQuery: - prom_host = "34.147.65.220" - prom_port = "9090" - prom_address = None - warmup = 0 - cooldown = 0 - step = 1 - total = 0 - query = "" - start = 0 - end = 0 - service = "" - namespace = "" - input_file = "" - output_file = "" - device_power_dict = {} - device_id = "device_id" - start_time_string = "_start_time" - end_time_string = "_end_time" - power_string = "_power" + def __init__(self): + self.prom_host = "34.147.65.220" + self.prom_port = "9090" + self.prom_address = "http://" + self.prom_host + ":" + self.prom_port + "/" + self.warmup = 0 + self.cooldown = 0 + self.step = 1 + self.total = 0 + self.query = "" + self.start = 0 + self.end = 0 + self.service = "" + self.namespace = "" def query_prometheus(self): """ @@ -42,16 +38,7 @@ def query_prometheus(self): step. :return: """ - if self.prom_address is None: - prom_address = "http://" + self.prom_host + ":" + self.prom_port - else: - prom_address = self.prom_address - is_https = prom_address.startswith("https") - should_disable = not is_https - prom = PrometheusConnect( - url=prom_address, - disable_ssl=should_disable, - ) + prom = PrometheusConnect(url=self.prom_address, disable_ssl=True) start = datetime.fromtimestamp((self.start + self.warmup)) end = datetime.fromtimestamp((self.end - self.cooldown)) result = prom.custom_query_range( @@ -68,85 +55,82 @@ def query_prometheus(self): def get_power(self): self.query = ( "sum(increase((kepler_container_joules_total[" - + self.calculate_minutes() + + self.caluculate_minutes() + "])))" ) - def calculate_minutes(self): + def caluculate_minutes(self): self.total = self.end - self.start print("total_time:", self.total) if abs(self.total) < 60: return "1m" return str(int(self.total / 60)) + "m" - def load(self): - result_file = Path(self.input_file).name - result_folder = Path(self.input_file).parent - data = load_results(results_file=result_file, results_folder=result_folder) - return data - - def run_query(self, data): - data = self.load() - start_times = [col for col in data.columns if self.start_time_string in col] - end_times = [col for col in data.columns if self.end_time_string in col] - new_columns = [ - col.replace(self.start_time_string, self.power_string) - for col in start_times - ] - for new_column in new_columns: - data[new_column] = 0 - for index, _ in data.iterrows(): - for start_time in start_times: - self.start = data[start_time] - self.end = data[end_times[start_times.index(start_time)]] - self.get_power() - consumed_power = self.query_prometheus() - data.at[index, new_columns[start_times.index(start_time)]] = ( - consumed_power - ) - for device in self.device_power_dict.keys(): - data.loc[data[self.device_id] == device, "peak_power"] = ( - self.device_power_dict[device] - ) - return data - - def save(self, data): - output_file = Path(self.output_file).name - output_folder = Path(self.output_file).parent - save_results(data, results_file=output_file, results_folder=output_folder) - - def __call__(self): - data = self.run_query() - self.save(data) +def run_query(input_file, output_file): + new_columns = [ + "train_power", + "predict_power", + "predict_proba_power", + "predict_log_proba_power", + "adv_fit_power", + "adv_predict_power", + ] + start_times = [ + "train_start_time", + "predict_start_time", + "predict_proba_start_time", + "predict_log_proba_start_time", + "adv_fit_start_time", + "adv_predict_start_time", + ] + end_times = [ + "train_end_time", + "predict_end_time", + "predict_proba_end_time", + "predict_log_proba_end_time", + "adv_fit_end_time", + "adv_predict_end_time", + ] + + promObj = PromQuery() + data = pd.read_csv(input_file, index_col=0) + for new_column in new_columns: + data[new_column] = 0 + data["peak_power"] = 0 + for index, row in data.iterrows(): + for start_time in start_times: + promObj.start = data[start_time] + promObj.end = data[end_times[start_times.index(start_time)]] + promObj.get_power() + consumed_power = promObj.query_prometheus() + peak_power = 0 + if "v100" in row["device_id"]: + peak_power = 250 + elif "p100" in row["device_id"]: + peak_power = 250 + elif "l4" in row["device_id"]: + peak_power = 72 + data.at[index, new_columns[start_times.index(start_time)]] = consumed_power + data.at[index, "peak_power"] = peak_power + data.to_csv(output_file) -parser = argparse.ArgumentParser() -parser.add_argument("--input_file", type=str, default=None) -parser.add_argument("--output_file", type=str, default=None) -parser.add_argument("--verbosity", type=str, default="INFO") -parser.add_argument("--prometheus_config", type=str, default=None) +if __name__ == "__main__": + logger = logging.getLogger(__name__) + dvc_parser = argparse.ArgumentParser() + dvc_parser.add_argument("--input_file", type=str, default=None) + dvc_parser.add_argument("--output_file", type=str, default=None) + dvc_parser.add_argument("--verbosity", type=str, default="INFO") -def main(args): + args = dvc_parser.parse_args() input_file = args.input_file output_file = args.output_file - # Read the prometheus config from yaml - with Path(args.prometheus_config).open("r") as stream: - prometheus_config = yaml.safe_load(stream) - if prometheus_config is None: - promObj = PromQuery(input_file=input_file, output_file=output_file) - else: - prometheus_config["_target_"] = "deckard.layers.compile.PromQuery" - prometheus_config["input_file"] = ( - input_file if input_file is not None else prometheus_config["input_file"] - ) - prometheus_config["output_file"] = ( - output_file if output_file is not None else prometheus_config["output_file"] - ) - promObj = instantiate(prometheus_config) - promObj() + logging.basicConfig( + level=args.verbosity, + format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", + ) + logger.info("Quering the Prometheus for power metrics") -if __name__ == "__main__": - args = parser.parse_args() - main(args) + results = run_query(input_file=input_file, output_file=output_file) diff --git a/deckard/layers/utils.py b/deckard/layers/utils.py index dc4659ca..7ce37a15 100644 --- a/deckard/layers/utils.py +++ b/deckard/layers/utils.py @@ -82,9 +82,18 @@ def get_overrides(overrides=None): elif k.startswith("+"): overrides[f"++{k[1:]}"] = v elif k.startswith("~"): - pass + overrides[f"~{k[2:]}"] = v else: overrides[f"++{k}"] = v + + # assert isinstance(overrides, dict), f"Expected list, got {type(overrides)}" + # if key is not None and len(overrides) > 0: + # overrides.pop(f"{key}.name", None) + # overrides.pop(f"files.{key}_file", None) + # overrides[f"++{key}.name"] = Path(file).stem + # overrides[f"++files.{key}_file"] = Path(file).stem + # overrides[f"{key}"] = Path(file).stem + # overrides["++stage"] = key return overrides @@ -209,6 +218,7 @@ def get_dvc_stage_params( def prepare_files(params_file, stage, params, id_): # Turns the dictionary into a FileConfig object. # This creates a new directory at files.directory + # It also creates a new directory at files.directory/files.data_dir # It also creates a new directory at files.directory/files.reports_dir # If a stage is specified, it also creates a new directory at files.directory/files.reports/stage params["files"]["_target_"] = "deckard.base.files.FileConfig" diff --git a/deckard/layers/watcher.py b/deckard/layers/watcher.py index b3e4ea70..2668b972 100644 --- a/deckard/layers/watcher.py +++ b/deckard/layers/watcher.py @@ -3,10 +3,10 @@ import logging import time from pathlib import Path + import watchdog.events import watchdog.observers from gevent import joinall -from hydra.utils import instantiate from pssh.clients import ParallelSSHClient PROGRESS_FILE = "progress.json" @@ -23,45 +23,28 @@ def createSSHClient(hosts, port, user, password): class JSONHandler(watchdog.events.PatternMatchingEventHandler): - def __init__( - self, - servers, - port, - user, - password, - filename, - destination, - regex, - total, - recursive=True, - completed=0, - transformer: dict = None, - ): + def __init__(self, servers, port, user, password, filename, destination, **kwargs): # Set the patterns for PatternMatchingEventHandler - self.regex = regex watchdog.events.PatternMatchingEventHandler.__init__( self, - patterns=[self.regex], + patterns=[REGEX], ignore_directories=True, case_sensitive=False, ) - self.total = total self.ssh = createSSHClient(servers, port, user, password) logger.info("Initiated SSH client") self.filename = filename self.destination = destination - self.recursive = recursive - self.transformer = transformer + self.recurse = kwargs["recursive"] if "recurse" in kwargs else False logger.info( "Source file is {} and destination is {}".format( self.filename, self.destination, ), ) - logger.info("Regex is {}".format(self.regex)) + logger.info("Regex is {}".format(REGEX)) def on_created(self, event): - self.completed += 1 logger.info("Watchdog received created event - % s." % event.src_path) events.append(event.src_path) self.filename = event.src_path @@ -71,115 +54,136 @@ def on_created(self, event): except Exception as e: logger.warning("Could not transform json") logger.warning(e) - if self.destination is not None: + if "TOTAL" and "QUEUE" in locals(): try: - self.send_json_with_scp() - logger.info("Sent JSON") - except KeyboardInterrupt as e: - logger.warning("Keyboard interrupt") - raise e + self.calculate_progress(TOTAL, QUEUE) + logger.info("Calculated progress") except Exception as e: - logger.warning("Could not send json") + logger.warning("Could not calculate progress") logger.warning(e) + try: + self.send_json_with_scp() + logger.info("Sent JSON") + except KeyboardInterrupt as e: + logger.warning("Keyboard interrupt") + raise e + except Exception as e: + logger.warning("Could not send json") + logger.warning(e) + + # Event is created, you can process it now + + def calculate_progress(total, queue): + progress = (total - queue) / total + dict_ = {"complete": progress, "remaining": 1 - progress} + with open(PROGRESS_FILE, "w") as f: + json.dump(dict_, f) + return dict_ def transform_json(self): - if self.transformer is None: - pass - else: - transformer = instantiate(self.transformer) - with open(self.filename, "r") as f: - data = json.load(f) - data = transformer(data) - with open(self.filename, "w") as f: - json.dump(data, f) - return 0 + pass def send_json_with_scp(self): remotename = Path(self.destination, self.filename).as_posix() - cmds = self.ssh.scp_send(self.filename, remotename, recurse=self.recursive) + cmds = self.ssh.scp_send(self.filename, remotename, recurse=self.recurse) joinall(cmds, raise_error=True) -parser = argparse.ArgumentParser( - description="Process some json files and send them to a server. Or send and then process. Your choice.", -) -parser.add_argument( - "--source", - "-i", - type=str, - required=True, - help="The source to watch for files.", -) -parser.add_argument( - "--destination", - "-o", - type=str, - required=True, - help="The destination to send the files to.", -) -parser.add_argument( - "--server", - "-s", - type=str, - required=True, - help="The server to send the files to.", -) -parser.add_argument("--port", "-p", type=int, help="The port to send the files to.") -parser.add_argument( - "--user", - "-u", - type=str, - required=True, - help="The user to send the files to.", -) -parser.add_argument( - "--password", - "-k", - type=str, - required=True, - help="The password to send the files to.", -) -parser.add_argument("--original", type=str, help="The original completed file.") -parser.add_argument( - "--regex", - "-e", - type=str, - required=True, - help="The regex to watch for.", -) -parser.add_argument( - "--recursive", - "-r", - type=bool, - default=True, - help="Whether to recurse or not.", -) -parser.add_argument( - "--n_jobs", - "-j", - type=int, - default=8, - help="The number of jobs to run in parallel.", -) -parser.add_argument( - "--log", - "-l", - type=int, - default=logging.INFO, - help="The log level.", -) - - -def main(args): +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description="Process some json files and send them to a server. Or send and then process. Your choice.", + ) + parser.add_argument( + "--source", + "-i", + type=str, + required=True, + help="The source to watch for files.", + ) + parser.add_argument( + "--destination", + "-o", + type=str, + required=True, + help="The destination to send the files to.", + ) + parser.add_argument( + "--server", + "-s", + type=str, + required=True, + help="The server to send the files to.", + ) + parser.add_argument("--port", "-p", type=int, help="The port to send the files to.") + parser.add_argument( + "--user", + "-u", + type=str, + required=True, + help="The user to send the files to.", + ) + parser.add_argument( + "--password", + "-k", + type=str, + required=True, + help="The password to send the files to.", + ) + parser.add_argument("--original", type=str, help="The original queue file.") + parser.add_argument("--queue", type=str, help="The current queue file.") + parser.add_argument( + "--regex", + "-e", + type=str, + required=True, + help="The regex to watch for.", + ) + parser.add_argument( + "--recursive", + "-r", + type=bool, + default=True, + help="Whether to recurse or not.", + ) + parser.add_argument( + "--n_jobs", + "-j", + type=int, + default=8, + help="The number of jobs to run in parallel.", + ) + parser.add_argument( + "--log", + "-l", + type=int, + default=logging.INFO, + help="The log level.", + ) + args = parser.parse_args() + # Set up logging + logging.basicConfig( + level=args.log, + format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", + ) + if args.regex is not None: + REGEX = args.regex + else: + raise ValueError("You must specify a regex to watch for.") # Assuming this is watching some long-running process (like a model training), # you may find it beneficial to watch the progress. # First, generate an "original" file that contains one line # for every experiment configuration you would like to test. # The contents don't matter. It only counts lines. # Then, when each experiment is complete, pop a line from that file. - # This is called the "completed" file. + # This is called the "queue" file. # If these files exist, you will get a log to stdout and a # progress.json file containing the "completed" and "remaining" amounts. + if args.original is not None: + with open(args.original, "r") as f: + TOTAL = len(f.readlines()) + if args.queue is not None: + with open(args.queue, "r") as f: + QUEUE = len(f.readlines()) # SUPPORTS PARALELL HOSTS. Specify n jobs or write a list of hosts here. hosts = [args.server] * args.n_jobs src_path = Path(args.source).parent @@ -201,9 +205,3 @@ def main(args): except KeyboardInterrupt: observer.stop() observer.join() - - -if __name__ == "__main__": - - args = parser.parse_args() - main(args) diff --git a/examples/gzip/conf/default.yaml b/examples/gzip/conf/default.yaml index a6512a4b..a0a93718 100644 --- a/examples/gzip/conf/default.yaml +++ b/examples/gzip/conf/default.yaml @@ -5,11 +5,9 @@ defaults: - model: default - files: default - scorers: default - - device_id: ${oc.env:DECKARD_DEVICE_ID, "cpu"} - override hydra/sweeper : optuna - override hydra/sweeper/sampler : grid - override hydra/launcher : joblib -devic_id : ${oc.env:DECKARD_DEVICE_ID, "cpu"} dataset : kdd_nsl model_name : gzip_knn stage : train diff --git a/examples/gzip/dvc.yaml b/examples/gzip/dvc.yaml index 5e4d756f..b7d4c8d6 100644 --- a/examples/gzip/dvc.yaml +++ b/examples/gzip/dvc.yaml @@ -38,21 +38,20 @@ stages: - raw_data/ deps: - data_prep.py - # parse_params: - # cmd: python -m deckard.layers.parse - # deps: - # - conf/default.yaml - # - conf/data/ - # - conf/model/ - # - conf/files/ - # - conf/scorers/ - # - conf/attack/ - # outs: - # - params.yaml: - # cache: true - # desc : "Parsed parameters for the experiment" - # persist: true - # push : true + parse_params: + cmd: python -m deckard.layers.parse + deps: + - conf/default.yaml + - conf/data/default.yaml + - conf/model/default.yaml + - conf/files/default.yaml + - conf/scorers/default.yaml + outs: + - params.yaml: + cache: true + desc : "Parsed parameters for the experiment" + persist: true + push : true train: cmd: python -m deckard.layers.experiment train diff --git a/examples/pytorch/cifar10/.dvc/tmp/btime b/examples/pytorch/cifar10/.dvc/tmp/btime deleted file mode 100644 index e69de29b..00000000 diff --git a/examples/pytorch/cifar10/.dvc/tmp/dag.md b/examples/pytorch/cifar10/.dvc/tmp/dag.md deleted file mode 100644 index 17469b30..00000000 --- a/examples/pytorch/cifar10/.dvc/tmp/dag.md +++ /dev/null @@ -1,32 +0,0 @@ -```mermaid -flowchart TD - node1["afr"] - node2["attack"] - node3["attacks@ResNet101"] - node4["attacks@ResNet152"] - node5["attacks@ResNet18"] - node6["attacks@ResNet34"] - node7["attacks@ResNet50"] - node8["clean@attack"] - node9["compile@attack"] - node10["copy_results"] - node11["plot"] - node12["train"] - node1-->node10 - node2-->node3 - node2-->node4 - node2-->node5 - node2-->node6 - node2-->node7 - node2-->node9 - node3-->node9 - node4-->node9 - node5-->node9 - node6-->node9 - node7-->node9 - node8-->node1 - node8-->node11 - node9-->node8 - node11-->node10 - node12-->node2 -``` diff --git a/examples/pytorch/cifar10/.dvc/tmp/lock b/examples/pytorch/cifar10/.dvc/tmp/lock deleted file mode 100644 index c023d83f..00000000 --- a/examples/pytorch/cifar10/.dvc/tmp/lock +++ /dev/null @@ -1 +0,0 @@ - 433502 diff --git a/examples/pytorch/cifar10/.dvc/tmp/rwlock.lock b/examples/pytorch/cifar10/.dvc/tmp/rwlock.lock deleted file mode 100644 index c023d83f..00000000 --- a/examples/pytorch/cifar10/.dvc/tmp/rwlock.lock +++ /dev/null @@ -1 +0,0 @@ - 433502 From d0622b28d05730357291676f3c39dce98634b300 Mon Sep 17 00:00:00 2001 From: Charlie Meyers Date: Sat, 13 Jul 2024 12:34:31 +0200 Subject: [PATCH 05/35] removed old notebook --- examples/classification/plots.ipynb | 252 ---------------------------- 1 file changed, 252 deletions(-) delete mode 100644 examples/classification/plots.ipynb diff --git a/examples/classification/plots.ipynb b/examples/classification/plots.ipynb deleted file mode 100644 index 1ef9111e..00000000 --- a/examples/classification/plots.ipynb +++ /dev/null @@ -1,252 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import seaborn as sns\n", - "import pandas as pd\n", - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "\n", - "\n", - "# Load data\n", - "df = pd.read_csv(\"output/attack.csv\")" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "dict_keys(['attacks', 'defences', 'params'])\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_3723846/651469242.py:12: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " attack_results['Kernel'] = attack_results['model.init.kwargs.kernel']\n" - ] - } - ], - "source": [ - "from deckard.layers.compile import clean_data_for_plotting\n", - "import yaml\n", - "\n", - "with open(\"conf/compile.yaml\", \"r\") as f:\n", - " config = yaml.load(f, Loader=yaml.FullLoader)\n", - "print(config.keys())\n", - "def_gen_dict = config[\"defences\"]\n", - "atk_gen_dict = config[\"attacks\"]\n", - "control_dict = config[\"params\"]\n", - "\n", - "df = clean_data_for_plotting(df, def_gen_dict, atk_gen_dict, control_dict)\n", - "attack_results = df.dropna(subset=[\"accuracy\", \"adv_accuracy\"])" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots(2, 2)\n", - "graph5 = sns.lineplot(\n", - " x=\"attack.init.kwargs.eps\",\n", - " y=\"accuracy\",\n", - " data=attack_results,\n", - " style=\"model.init.kwargs.kernel\",\n", - " ax=ax[0, 0],\n", - " legend=False,\n", - " color=\"darkred\",\n", - " style_order=[\"rbf\", \"poly\", \"linear\"],\n", - ")\n", - "graph5.set(xscale=\"log\", xlabel=\"Perturbation Distance\", ylabel=\"Accuracy\")\n", - "graph6 = sns.lineplot(\n", - " x=\"attack.init.kwargs.eps_step\",\n", - " y=\"accuracy\",\n", - " data=attack_results,\n", - " style=\"model.init.kwargs.kernel\",\n", - " ax=ax[0, 1],\n", - " color=\"darkred\",\n", - " style_order=[\"rbf\", \"poly\", \"linear\"],\n", - ")\n", - "graph6.set(xscale=\"log\", xlabel=\"Perturbation Step\", ylabel=\"Accuracy\")\n", - "graph7 = sns.lineplot(\n", - " x=\"attack.init.kwargs.max_iter\",\n", - " y=\"accuracy\",\n", - " data=attack_results,\n", - " style=\"Kernel\",\n", - " ax=ax[1, 0],\n", - " legend=False,\n", - " color=\"darkred\",\n", - " style_order=[\"rbf\", \"poly\", \"linear\"],\n", - ")\n", - "graph7.set(xscale=\"log\", xlabel=\"Maximum Iterations\", ylabel=\"Accuracy\")\n", - "graph8 = sns.lineplot(\n", - " x=\"attack.init.kwargs.batch_size\",\n", - " y=\"accuracy\",\n", - " data=attack_results,\n", - " style=\"Kernel\",\n", - " ax=ax[1, 1],\n", - " legend=False,\n", - " color=\"darkred\",\n", - " style_order=[\"rbf\", \"poly\", \"linear\"],\n", - ")\n", - "graph8.set(xscale=\"log\", xlabel=\"Batch Size\", ylabel=\"Accuracy\")\n", - "graph6.legend(loc=\"center left\", bbox_to_anchor=(1, 0.5), ncol=1, title=\"Kernel\")\n", - "fig.tight_layout()\n", - "fig.savefig(\"plots/accuracy_vs_attack_parameters.pdf\")\n", - "plt.gcf().clear()" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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/IZPP/2U5557jgsuuICXXnqJ4447jt/+9rfcddddnH766axdu5aKigqOOuoozjrrLJ544gmWLVvGeeedh9fr5frrrwfg8ssv59133+WVV16hd+/e/Pa3v+WLL76oV38ze/Zsvv32W5599ln69+/PSy+9xBFHHMHXX3/NyJEj2/xarr76au6880569erFL3/5S8455xw+/PDDRsfNnTuXpUuXUl1dnQoJhYWFOz3/M888wy9/+UueeeYZjjnmGJRSFBUV8e6773LCCSfw/vvvp64nvfvuuxx88MEA2LbNwIED+dvf/kZRUREfffQR559/Pv369eOkk05KPWbBggXk5uby5ptvAk5x/YwZMzjqqKN45plnWLNmTaP6nWuuuYZvv/2Wf/3rXxQXF7NixQpCoVCLfm4NX1csFmP69Onst99+vP/++5imyc0338wRRxzBkiVLUj09DduZdPXVV3PHHXcwcuRIrr76ambOnMmKFSswTZOVK1dyxBFHcPPNN/Poo4+ydetWZs+ezezZs1sV2Lor27IJ1cSoqQgTrI6iAR6/iaZpKKVQyglHtq1QluXcZpP6DqBQaGigAE2B0kADTSfRc+T0Imk6aOD0KBnJLx3d0DAMDU3XU4/RdK1eL5SuO+dM3adraJosUSBER5EA1AHGjx/P7373O8BZZPH3v/89xcXFnHfeeQBce+21PPDAAyxZsoR//OMflJSUcN9996V2rt+4cSNXXHEF1157LcFgkEceeYSnnnqKadOmAU7AGjhwYOr51q5dy2OPPcbatWvp378/4ASSN954g8cee4xbb721za/llltu4aCDDgLgyiuv5OijjyYcDjdakDI7Oxufz0ckEmnxUNr999/P1VdfzT/+8Y/Uc2iaxo9+9CMWLlzICSecwMKFCzn77LN5+OGHWbZsGcOHD+ejjz7iN7/5DeBs5Fl3Fe+hQ4eyaNEinn/++XoBKCsri4cffjgVNB588EE0TeOhhx7C6/Wy++67s2HDhtS/ETg/14kTJzJp0iTAKSRu6+t67rnnsG2bhx9+OPWB9thjj5Gfn8/ChQs5/PDDm2xnsodo7ty5HH300QDccMMN7LHHHqxYsYLRo0czb948TjvttFSAGzlyJPfeey8HHXQQDzzwwE4XD+2urLhNsDpKTVmYcCCGbmj4c1zoRvt0fNcNT6mwlLjNtmysWONj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LJnKLoQQuyqt/eXvvfceM2bMoH///miaxssvv1zv/rPOOstZpK3O1xFHHLHT895///0MGTIEr9fLlClT+PTTTzvoFfRMBx98cOrf48svv2x0/+OPP05+fn6nt6szNPV72hpDhgxJ/ewqKyt3erxSzjT2WMQiHrVQlkI3NHRDl/AjhBC7IK0BKBAIMH78eO6///5mjzniiCPYtGlT6uuvf/3rDs/53HPPMWfOHK677jq++OILxo8fz/Tp09myZUt7N79HO++889i0aRN77rknq1ev7vQP4yFDhnD33Xd36nO2xcEHH8zjjz+euv7ZZ5/xwgsv7PRxylZYMSf4xKKWU9ycCD5S3CyEELsurUNgRx55JEceeeQOj/F4PPTt27fF5/zjH//Ieeedx9lnnw3Agw8+yD//+U8effRRrrzyyiYfE4lEiEQiqevV1dUtfr6eyu/3t+rfRTh69epFYWFhs/c3tYaPITO6hBCi3WX8lJGFCxfSu3dvRo0axQUXXEBZWVmzx0ajUT7//HMOO+yw1G26rnPYYYexaNGiZh83b9488vLyUl8lJSXt+hpaTCmIBtLzpVS7v5yXX36ZkSNH4vV6mT59OuvWrat3/yuvvMJee+2F1+tl2LBh3HDDDcTj8cSPQnH99dczaNAgPB4P/fv35+KLLwacXpU1a9bw61//OjWctDPJYbmdtemBBx5g+PDhuN1uRo0axZNPPtnsOQ899FBmz55d77atW7fidrtZsGDBTtuULGi24jbxmEUsEneGumLOBqWGqaHrEn6EEKIjZHQR9BFHHMHxxx/P0KFDWblyJb/97W858sgjWbRoEYZhNDp+27ZtWJZFnz596t3ep08fli1b1uzzXHXVVcyZMyd1vbq6Oj0hKBaEW/t3/vMC/HYjuLPa7XTBYJBbbrmFJ554ArfbzYUXXsgpp5zChx9+CMD777/PGWecwb333suBBx7IypUrOf/88wG47rrreOGFF7jrrrt49tln2WOPPSgtLeWrr74C4MUXX2T8+PGcf/75nHfeee3WppdeeolLLrmEu+++m8MOO4zXXnuNs88+m4EDB3LIIYc0Ot+5557L7NmzufPOO/F4PAA89dRTDBgwgEMPPbTesUoplNpe0wMQC1vEvHGokz1lKrsQQnSOjA5Ap5xySury2LFjGTduHMOHD2fhwoVMmzat3Z7H4/GkPsBE6w0ZMgTVoAcpFotx3333MWXKFADmz5/PmDFj+PTTT5k8eTI33HADV155JWeeeSYAw4YN46abbuI3v/kN1113HWvXrqVv374cdthhuFwuBg0axOTJkwEoLCzEMAxycnJaNQy3szbdcccdnHXWWVx44YUAzJkzh48//pg77rijyQB0/PHHM3v2bF555RVOOukkwOlpOvPMM1EKbNtmwZtvYytFLGw5OadOAAKnqFqmsAshROfL6ADU0LBhwyguLmbFihVNBqDi4mIMw2Dz5s31bt+8eXPXqFdx+Z2emHQ9dzsyTZN99tkndX306NHk5+ezdOlSJk+ezFdffcWHH37ILbfckjrGsizC4TDBYJATTzyRu+++m2HDhnHEEUdw1FFHMWPGDEyz7b+yO2vT0qVLU71QSQcccAD33HNPk+fzer38/Oc/55FHHuWEn53A559/wTfffMPfn3+RWMSqN6zoDNUle3icwCPT2IUQIn26VABav349ZWVl9OvXr8n73W43e++9NwsWLODYY48FEn+FL1jQqFYjI2lauw5DZbLa2lpuuOEGjj/++Eb3eb1eSkpKWL58OW+99RZvvvkmF154IbfffjvvvvsuLpcrDS0m1ctl23Zqh/WzzjibfaZMYtUPa3j0scc4+KBDGDxoMCTCjtTvCCFEZkprsUFtbS1ffvllai2ZVatW8eWXX7J27Vpqa2u5/PLL+fjjj1m9ejULFizgpz/9KSNGjGD69Ompc0ybNo377rsvdX3OnDk89NBDzJ8/n6VLl3LBBRcQCARSs8JE54jH4yxevDh1ffny5VRWVjJmzBgA9tprL5YvX86IESMafSVrYHw+HzNmzODee+9l4cKFLFq0iK+//hpwwq5lWe3apjFjxqTqgcCZiv7BBx8wZswY4lHL6dUBrJhNPGphxW322GMse++1N489/ijPP/8sZ511dp2eHQk/QgiRqdLaA7R48eJ6tRXJQuQzzzyTBx54gCVLljB//nwqKyvp378/hx9+ODfddFO9ep2VK1eybdu21PWTTz6ZrVu3cu2111JaWsqECRN44403GhVGi47lcrm46KKLuPfeezFNk9mzZ7Pvvvum6niuvfZajjnmGAYNGsQJJ5yArut89dVXfPPNN9x88808/vjjWJbFlClT8Pv9PPXUU/h8PgYPHgw4dUfvvfcep5xyCh6Ph+Li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g/rTq08RN99yE/F4nCuv+g19+vVi6PDBzJ//eL3H7exnJIQQouPJVhhppBosAx2PRnjgvJPT0pYLHnoOl8fb6sf99dm/MvuiC3li/pMc/uPp7L3PXuw7ZV/eXrAQ0zSZN+9WjvnJ0Xyx+L+43W4A3nnnbXJzcnn9n2/UO9e1113Dbb+/jREjRnLtdddw+hk/Z+m3yzFNk5UrV3LMT47mhutv5C9/eZhtW7dyya8v4ZJLL+bhhx5p02u++ZabuPXW3/P7ebfxf/93P2eedTorvvuBwsJCbNtmwIAB/PWZZyksLGLRx4u48Fe/pG/ffpx4wompcyxc+A4DBwxkwVvvsOijjzj/l+fx8ceLmDr1QD54/yP+9rfnuXD2BUybdhgDBw4kFotx9IyjdvozEkII0bGkByhNuuo+YHU98OD/cfEls3nphZc5+qhjeP5vz2PbNn9+8C+M3XMsY0aP4eGHHmHdurW8++7C1OOysrL484N/YY/d92CP3fdI3T7n0jkcdeTR7DZyN6695jrWrF3DipUrAPjD7bcx85RTufiiSxg5YiT77bc/d915F089/SThcLhN7T/99DM45eRTGDF8BDfdeDO1tbV8tvhTAFwuF9ddez177z2JoUOHcurMUznzjLP4+wt/q3eOwoJC7vrj3YzabRRnnXU2u+02imAwyJVXXMXIESO54jdX4na7+fCjDwFa/DMSQgjRsdrcA/T+++/z5z//mZUrV/L3v/+dAQMG8OSTTzJ06FCmTp3anm3snpz8U28VaNPt4YKHnktLc0y3p1XHv/jSC2zZsoV333mPSZP2AeDrr79i5coVFBbn1zs2HA7zw6ofUtf33GPPJns6xo4dm7rcr28/ALZu2cLoUaNZ8vUSvv56CX999pnUMUopbNtm1epVjBk9plXtd55vXOpyVlYWubm5bNmyNXXbAw/+H4/Pf5x169YSCoWIRqOMHz++3jl23313dH373xF9evdmjz32TF03DIOiwiK2bt0CtPxnJIQQomO1KQC98MILnH766Zx22mn897//JRKJAFBVVcWtt97K66+/3q6N7I6aqrjRNK1Nw1DpMH78BL788r88Pv9x9t57EpqmUVsbYK+99mL+4082Or5Xca/UZX9WVpPnNF2u1GUtkQxt2wagtraW8849n1/9anajxw0qGdSm1+Cq83zJ51SJ53vu+ee4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OSR1PVmIfOaZZ/L444/zm9/8hkAgwPnnn09lZSVTp07ljTfeqDf9fOXKlWzbti11/eSTT2br1q1ce+21lJaWMmHCBN54441GhdHpVL8HqOtviTFkyJBGPTCxWIx77rqHyZOnAPDIw48xbvyefPbZp+yzz2RuvuUmLp/7G844/QwAhg0bxnXX3cBvr76Sa353LevWraVPn75MO/QwXC4XgwYNYp99nMUsCwsLMQyDnJycVg3DxWIx7r33PsaPq1+75na7eejPD+P3+9lj9z247trrufKqK7jh+hvJy8sjJycHwzDqPdcjDz/app+VEO2p3maVdUNNcuZTvX2eWr9ZJYDh0psdYmoYajw+GXYSXUebAtBBBx3ULk9+8MEHs6NliDRN48Ybb+TGG29s9pjVq1c3um327NkZNeTV2PbQUy//uHTyrpjU+GgFVuLn1GGF0u28J4tpmkyatE/q+uhRo8nPz2fpsmXss89klny9hI8WfcTvb5uXOsayLMLhMMFgkJ8dfwJ/+tO9jBo9ksMPn84RRxzJMUcfg2m2ff9et9vNuLHjGt0+buw4/H5/6vqUKftSW1vLunXr2m2dKyFaQilFPGLVm6bdaAXhBj01raXpWqL4t6lQ42p0n9mOPcNCZJIWf5osWbKEPffcE13XU0MRzRk3rvGHjHAopertA1Y3/mma1uQwlAboJIKQrbA1MA0Nl951F1Ksra3l2muu49hjj2t0n9frpaSkhG++/pYFb7/FggULuPiS2fzxrjtY8OY7jWrOWsrn83XZn5fouqy43WiIqeGU7br32VbbNqvcYaipsy2CDDsJ4WhxAJowYQKlpaX07t2bCRMmoGlak703rakB6rGSU78AlGrxCJiWCD62gljcxtLAZTrrB2XaxqrxeJzPP1+cGrZa/t1yKisrGTN6NAATJ0zku+++Y8TwEc2ew+fzcczRMzjm6Bn88pcXMHbcHnzzzddMnLgXLre73X7Plny9hFAohM/nA+DTTz4hOzu7k9aCEl2NbSdmOzUVaprYFmFXNqusO0273t5OdUKN2999N6sUoiO1OACtWrWKXr16pS6LNlLb849CJfYEa92bl645q5BatiISszF0DZehYeiZM/bucrm4dM4l3HXn3ZimySW/vjixTYkTiK6++ncce9xPKSkp4fjjf5bqWfzf/77hxhtu4okn5mNZFvtMnozf5+eZZ57G5/MxaJAzJDVk8GDe/+B9TjrxZDweD8XFxW1uazQa5fxfnMdVV/2WNWtWc+PNN3DBLy9Ez6Cfp+g4SiliEavpupk6u24n16xpy2aVmq41GGJqPtR4/CamS4adhOhoLQ5AdWsh1qxZw/7779+oHiMej/PRRx9J3cQOqNT/a9unwLfxXIbunMNWinBMYRoqY1aU9vv9zL3sN5xx5uls2LiBqQdM5c8PPpS6//AfT+fll17hlltu5o47b8flcjFq1CjOOWsWAHn5+dx+x21cfsVcLMtizz335KUXXqaoqAiA6669ngtnX8jo3XcjEons0iKMhxxyKCNGjGDaYYcQiUQ4+aRTUgsciu5D2Ypt62tZv7yCmrJwvVDT6s0qcYadmhpi2r7ztonH59zn8siwkxCZpk2boRqGwaZNmxrtrl5WVkbv3r27/BDYjjZT29XNUG3LJhax0BNDWaGYhaFpu7wzfN1CaZeuYXbgitKH/fhQxo+fwJ13/LFDzt9VJVfE7opbYXTXzVCVSoSepRWsX15BuDbW7LGmx8Cz01CzfdVgGXYSou267GaoyfV+GiorKyMrK6stp+wxtqfNRA1VO22Kqmlgaon6oMTWGq7EitId8Zfng39+gEcfe4T33v2AsXuObffzdzUzfnI073/wfrqbIXDen8rW17JuWQXrl9UPPS6PwYDd8uk1KKdRqJHNKoXoWVoVgI4//njAqVk566yz6u2fZVkWS5YsYf/9m98uQNDqlVJbK1kfZNsQjdvEU/VB7VcoPf/xJwmFna1QBpUMapdz7qoZPzmaDz78oMn7rvjNlVx5xVUd+vwPPvCXjPuZ9CRKKco2BFi/tJz1yysI1dQPPf13y6dkdAF9hubKOjVCCKCVASgvLw9w3mxycnJSs2bAWWNl33335bzzzmvfFnZjqgPTkK6DTrJQWrVrofSAAQPaoYXtq24AaaiwoLDDnz8TfybdnVKK8g0B1i0rZ/2y+qHH9BgMGJnPwETokd4dIURDrQpAjz32GOCs/Dt37tydDnd9+OGHTJo0qVN3Whf1JQulLaWw4gpTV11mx/nWkADSMyilKN8YYP2yCtYtqyBUHU3dZ7p1+o/Mp2RMoYQeIcROtakG6LrrWjZD5sgjj+TLL79k2LBhbXmajGbbrV/bo6HWl5+3TbI+SCm27zivOxutdrcgJNpGJX+fM/DXQSlFxaYA65Y6NT1BCT1CiHbQ9n0FWqANE8wyntvtRtd1Nm7cSK9evXC73a0qMrbiNlbMQjN0YpZN3FZYbZ/B3SZKQUQlgpGuYXTWjvMi8yhFLBZjW9lWUBqm3rZVttubE3qCqeGtYFWD0DMin4FjCug7NA+jnbdxEUL0DB0agLojXdcZOnQomzZtYuPGja1+vG0r7LiNpmvELYWtVNp6YWzlVCHpmjNUJr1BPZQC03BTmN03rWvVKKWoKA2yfmk56xqEHsPlhJ6SMQX0HSahRwix6yQAtYHb7WbQoEHE4/FWr3kUrIlStr4Gf7aHlVtricZssrzp+2dQCgKROFHLIs/npijHTY7HJf1BPYUGuqaja+lZqE8pRWVpMDFlvZxAZcPQk8fAMYX0k9AjhGhnEoDaSNM0XC5XqzfmtCIahhbGNNzELANb01Hp/GfQIMtr4rUUVaEYlaEIvbIVvXK9ZHvk10O0P6UUlZtDrF9WzrqlFQQqI6n7DJdOvxF5lIwupO/wXNkSQgjRYTr0E06Wfm+epRSWUhgZ8jMyDI2CLDcxy6a0JkJ5MEbvXA+9s7145C9vsYuUUlRtCbFuqVPTU1tRJ/SYTugZOLqAfsPzMN0SeoTo6mwFccvGUoq4pZx6V9vGshVRy6a2MkKxruhF+64E3RpSBJ0mtu3U/7gybMNNl6HTK9tDKGqxvjxIWW2UfnleirI9mLL0v2iFZOhZv6yCdUvL64Ue3dToN9yp6ZHQI0TXsbNgE47ZzgSfuI2lwLJt7MR3Z88nha7phKujeHPTO+miTQHo0EMP5cUXXyQ/P7/e7dXV1Rx77LG8/fbbANTU1OxyA7srSylsW6G7MjNU+NwGXpdBIBrnh621BKNxhhRl7/KeZaJ7U0pRvTXEuqUVrFtWTm15w9DjDG/1GyGhR4hMUi/YxBVxZSeWTVHELJtwvJlgk+zoUKDrGobm7DxgaOAyNLwuF4am0fBv/a2B9O8Z2qYAtHDhQqLRaKPbw+Ew778v+yG1hGUpbEXGDIE1RdMg22PiMXVKqyNke1z0ypFFLUV9Simqt4VTw1s1ZeHUfbqh0Xd4HiWjC+g3Ih+XR0KPEJ3Jsp0QE7dtLIsmg000bjm3Ked22wabpoONqWm4DQ3DZThbLGXuR9hOtSoALVmyJHX522+/pbS0NHXdsizeeOMNWZG3hSyVmAKfWSNgTXIZOj6XwbqKID6XQXYaZ62JzFG1dXshc6PQMyzPGd6S0CNEh2gu2MRtRTRuEY0rInHLOa5BsHEGopw/wJ3eGSfYmIaO4dK6fLBpqVZ9kk2YMAFNc3YXP/TQQxvd7/P5+NOf/tRujevObLsjdwJrf9kek/JAlHUVQUb0zsYlG0r2SNXbQokVmcup3tY49AwcXUD/kRJ6hGgry07U1ign2Fi2s2Buk8GmTrhxPk8UoPX4YNNSrQpAq1atQinFsGHD+PTTT+nVq1fqPrfbTe/evTEMeeNribitutxaO/k+N2WBMBsqQgwuypL/kHqI6rIQ65c6e29Vb92+4ayma/QdlkvJ6EL6j8zDJT2DQjQptR9jM8EmEreIxhQRy0r01Ow42BiG893lcvZ1lGDTNq16xxo8eDDQPvtg9XR2F5whp+uQ53NTWh0my2NKPVA3VlMWdrahWFpBVcPQMzSXgWOcnh63hB7RgzUMNsnamuSwVDhuEYs3HWxAoRKbEBmasxJ/Mti4Jdh0iha/e7366qsceeSRuFwuXn311R0e+5Of/GSXG9bdxS3VJfffcps6HtNgfUUIn9uQxRK7kZqysFPTs6yCqi31Q0+fobmUJIa33D75Nxfdm1KkpnfHk0NNiWATjysilu0Em7iVCjTJL03bcbBJDk1JsEm/Fr+THXvssZSWltK7d2+OPfbYZo/TNK3V20P0RFHLpqsuq5PjNSkLRFhXHmRE7xxcRhd9IYLa8nBqG4rKzQ1Cz5AcBo4pZICEHtFN7CjYxOJOjU0y3NQNNk6Pff1gY+g6uo4Emy6sxe9qdYe9ZAhs18Wt9G2C2h4KfB7KAhE2VYYoKfTLf/RdSG1FOLE4YQWVm4Op2zUNeg/JpWRMIQN2k9Ajuo5ksHGGnhTx5LCU7QxLNRdsLJWYEaWc338JNj1Li9/hCgsL+e677yguLuacc87hnnvuIScnfUtYd3VRy0Lvql1AJOuBXGyqDuH3GBRnSz1QJqutiKSGtypLmwo9BfQfWYDHL6FHZA4n2CR6a5oINpG4RSTuDEvFUdjJtWyaCDZmItiYuobH1DE0vUssQyI6Tovf7aLRKNXV1RQXFzN//nxuu+02CUBtZNvOQohdfeTIbeq44wbrEvVAWW758MwkgcpIqpC5okHo6TU4J9XT4/Gndzl60fM0FWzi1vbtFKJx56thsLHV9llROk6hsKk7qwy7dA1Dgo1ohRZ/Yu23334ce+yx7L333iiluPjii/H5fE0e++ijj7ZbA7sjWyksnP9gu7ocr8m22gjry0MM65Ut9UBpFqiKpPbeqti0PfSgQe/BOZSMLmTAKAk9omPsbJ+oesFGqab3iWoy2BhNbqcgxK5ocQB66qmnuOuuu1i5ciWaplFVVUU4HN75A0UjqX3AusligoV+px7I7w4xsEDqgTpbMvSsX1pB+abA9js06D0oUci8Wz7eLAk9om12GGziO9gnqsEGmC3dJ0qIztDiANSnTx9+//vfAzB06FCefPJJioqKOqxh3VlyVkFXLoKuS9ch1+tiU1UYv9ukKNud7iZ1e8GqCOuXO4XM5Rvrh55eg3IoGV3AgFEFEnrEDrVlA0xrB/tESbARXUmbijZWrVrVouPGjh3L66+/TklJSVueptuyE3uyGN1gCCzJ49KJxnVnvzC3jl/qgdpdsDrK+mXOhqNlGwL17us1KJuBowsZOKoAb7aEnp5ONsAUYuc69FNq9erVxGKxjnyKLskp5rO7xJtIxapqtv6vAhRohoama+iJ75rhfOnJy7pGyLKp8VRSlOfBZeropo5uOAuB6YZzWTecYkW9zm2GoaWOda7r6Kaz71xPFqqJpmp6Goae4pJsp5B5VD4+6XXrEWQDTCHaj/yZngbOsHjmv9NsW1rBuo82t/pxNUBpO7UhGbhSoShxWTf1RKiqE6LqBCjdqHN/UyEsg4NZKvQsq6BsfW29+4pLshk4uoCBowrw5Ujo6S62z4aSDTCF6CwSgNLAUpm/E/zmr8rYuHgrAEWj8skdmIWynemoylIo2/lu2wpl2XUuK+Ixm1jcJstlYGoadtzGthJTWa3E5bjCtm2suErct/2YulTyDT8GMTJnhfFGwcx0Pnh2JZjZtqL0hyq2rasfeooGZlMyuoCBoyX0dCWyAaYQmU0CUBoolbk7wSul2PT5NjZ/VQZAn/FF9Nu7uNU9HtWhOIYOu/XNwecyWvX8ySCUDEVWIizZcec2K3l/IlhZdQNUvE7Iqvt4q6kQtrPHJ54v7gS+eu3s4GBWNCArMbxVgD9XQk8m2dEGmPX2iZINMIXIaBKA0iBu2Rk5A0wpxfpFm9m2tBKA/pN60Wd822b61V0faGivLMwWFnxrmoZhahgmQMuDU0drNpjVCVtWsmfLqhOs4rZT9N6CYGbbisJ+fgaOLpTQkwayAaYQPYsEoDSIWQrdzKx3QmUr1r6/ifIV1QAM3L8PvcYUtPl8mgaFfjfbasP43AYDC5peNLOryNRgJlrPVlAVjBJr4QaYJPprZZ8oIbqXNgWgdevWtWhq+5///Gf69OnTlqfo1mK2jaFlTva0LZvV72ykak0taDD4R/0oHJG3y+c1DI0cr4uNlSGyPAYFfunVEOmlFGyoDLKhIrTTDTANWdVciG6tTctUDRkyhIMOOoiHHnqIioqKZo879dRTycrKanPjuiOVWHBMy5AFwqyYzQ//WU/Vmlo0XWPotAHtEn6SvC5nCft1ZUFCscwpYhY9U2l1mA0VIXI8LnrleCjO9lCQ5SbXZ5LtMfG5DdyJQnYhRPfWpo/hxYsXM3nyZG688Ub69evHsccey9///ncikUh7t48hQ4agaVqjr1/96ldNHv/44483Otbr9bZ7u9rKsp19wIwM6DOPRyxW/nsdNRuD6KbG8OkDyR/c/hvc5vpcBKJx1leEEoWgQnS+rTUR1pUHyXKbeFwZ8heIECJt2vQuMHHiRG6//XbWrl3Lv/71L3r16sX5559Pnz59OOecc9q1gZ999hmbNm1Kfb355psAnHjiic0+Jjc3t95j1qxZ065t2hWWrVAZsA1GLBRnxetrCWwOYbh1RhwxiJz+HdNbp2lQ4PewrTbM5irZP050vopglLVlQdymjs8tNVxCiDYGoCRN0zjkkEN46KGHeOuttxg6dCjz589vr7YB0KtXL/r27Zv6eu211xg+fDgHHXTQDttV9zGZVIcUT0yL1dO4DUY0EOP7f64lVB7B9BqMOGoQWX06tkjZNDSy3S42VIWoCMrq4KLz1ITirC4LApDtyZzaOyFEeu1SAFq/fj1/+MMfmDBhApMnTyY7O5v777+/vdrWSDQa5amnnuKcc87Z4bo0tbW1DB48mJKSEn7605/yv//9b4fnjUQiVFdX1/vqKJbtzEJJ1xBYpDrK96+tIVIVxZVlMvKYwfiLOmeI0Oc20NBYXx4kLPVAohMEonFWlwWIx23y/LJHmhBiuzYFoD//+c8cdNBBDBkyhCeeeIKTTz6ZlStX8v777/PLX/6yvduY8vLLL1NZWclZZ53V7DGjRo3i0Ucf5ZVXXuGpp57Ctm32339/1q9f3+xj5s2bR15eXuqrIzdvtWzb2Qk+DSUIofII3722hmhtHE+ui92OGYw3r3NnZuX5XNRGYqyrCCHlQKIjhWMWa8qCBKJx8mUGohCiAU0p1eqPoZKSEmbOnMlpp53G+PHjO6JdTZo+fTput5t//OMfLX5MLBZjzJgxzJw5k5tuuqnJYyKRSL0C7urqakpKSqiqqiI3N3eX213Xmg3VLP68lH79stv1vDsT2Bpi5b/XYUVsvAUeRhxRgsufnuGAuKWoCEYYUpRFv/yuvT6QyEwxy2bV1gBlgQjF2V5Zp0eIDLN1S4i+/XxM2at/u563urqavLy8Fn1+t+kTcO3atZ2+meeaNWt46623ePHFF1v1OJfLxcSJE1mxYkWzx3g8Hjwez642sWXS0OtRsynAD29uwI7Z+Ht5GT69BNOTvkJQ09DI9rhYXxnC5zHJ98nQhGg/cVuxtjxIWSBCUZaEHyFE01ocgJYsWdLik44bN65NjdmRxx57jN69e3P00Ue36nGWZfH1119z1FFHtXubuoKqtbWsensDylJk9/Mz7LABGBkwC8bnNgjHbNaVB/H1zpFpyaJd2ArWlwfZUh2mwO9Jy1CzEKJraHEAmjBhApqmkRwx21EPkGW1b4Grbds89thjnHnmmZhm/SafccYZDBgwgHnz5gFw4403su+++zJixAgqKyu5/fbbWbNmDeeee267tqkrqPihmtULN4KC3EHZDD2kP7qZOZ8I+X4XW2vDrK8MMrQ4mzROjBPdQHKV501VYfL9bkxZzFAIsQMtDkCrVq1KXf7vf//L3Llzufzyy9lvv/0AWLRoEXfeeSd/+MMf2r2Rb731FmvXrm1yjaG1a9ei1/kzr6KigvPOO4/S0lIKCgrYe++9+eijj9h9993bvV2ZbNvyStZ9UApAwbBcBh/UDy3DEoazX5iHLdUR/G6TfnmZs2Cl6Ho2J1d59pq4jMwJ+kKIzNSmIujJkydz/fXXNxpWev3117nmmmv4/PPP262B6dCaIqrWWrO+msVfdGwR9Javy9nw6RYAikbnU7Jfn4wLP3WFIhYRy2JknxzypB5ItMG22gg/bA3gMw18aaxvE0K0TCYUQbfpz6Svv/6aoUOHNrp96NChfPvtt205pWgHSik2fbE1FX56jy2kZP/MDj8APo+BUrC2PEgkZqe7OaKLqQjGWFMWxGXoEn6EEC3WpgA0ZswY5s2bRzQaTd0WjUaZN28eY8aMabfGiZZTSrHhky2U/rcMgH57F9N/n16dPluvrfL9bmrDcTZUBmV9INFiNeE4a8oCoCDHK6s8CyFark3vGA8++CAzZsxg4MCBqRlfyVlir732Wvu1TrSIshVrPyyl/LsqAAbu25teexSmuVWto2lOCNpcHcbvNukr9UBiJ4LROKu3BYjGbQqzZKFDIUTrtCkATZ48mR9++IGnn36aZcuWAXDyySdz6qmnkpXVMRtqiqbZlmLNuxupXFUDGgw6sB9FI/PS3aw2cRkaWW6TDZUh/G6TXJ/8RS+aFonZqVWei7I6aQ0vIUS30uZPmKysLKZOncqgQYNSQ2ELFiwA4Cc/+Un7tE7skB23WbVgA9XrA2g6DDm4P/lD27dou7P5PSYVgSjrKgKMdOXgzqBp+yIzxCybNWUBKoNRWeVZCNFmbQpAP/zwA8cddxxff/11am2gurUm7b0OkGjMilr88OZ6aktDaIbGsMMGkDuwc7fX6Cj5fjfbasJsqAgypDhbPuBEiiWrPAsh2kmb/ry+5JJLGDp0KFu2bMHv9/PNN9/w7rvvMmnSJBYuXNjOTRQNxcMWK/61jtrSELpLZ8QRJd0m/ECiHijLQ2l1mC014XQ3R2QIpWCdrPIshGgnbeoBWrRoEW+//TbFxcXouo5hGEydOpV58+Zx8cUX89///re92ykSYoEYK95YR7gyiuk1GD69BH9x9ysYdhkafrfJhooQfpdJjtQD9WjOKs8hNlWHyfPJKs9CiF3Xpr+hLMsiJycHgOLiYjZu3AjA4MGDWb58efu1TtQTqYny3T/XEq6M4vKbjDx6ULcMP0lZHpO4rVhXGSQal/WBerLN1WE2VAbJ8ZhSFyaEaBdt+rN6zz335KuvvmLo0KFMmTKFP/zhD7jdbv7yl78wbNiw9m6jAMKVEVb8ax2xYBx3josRR5bgyen+U38L/G621ToffkOKpB6oJyqrjbK2PIjfNPG6ZKFDIUT7aFMA+t3vfkcgEACczUePOeYYDjzwQIqKinjuuefatYECgtvCrPz3OuJhC2++mxFHlODK6hlbRmxfHyhClsekd0737fESjVWGYqwuC8gqz0J0cUrZxOwoMTtO3I5SEa3BG8kF2ncrjNZoUwCaPn166vKIESNYtmwZ5eXlFBQUdJmVh9MlakUIxwNAy4qWa0uDrPzPeuyYjb/Yy/DpAzF72Iq3LkPH6zJYXxHC5zJlxd8eoibsLHSIQmrAhOgilFLE7ChxFSNmxYjZEcJWmKgVJq5iWHYcBVRFIuTF05sX2u1dpbCwa608nC6BeIDaeBXQZ6fHVq+v5Ye3NqAsRXZfH8N+PBDD3TP/Cs72mJQHoqyvCDKid7bs9t3NhWIWq8sCxOI2BbLKsxAZRylF3I4RU1HiVpyoHSFshYhaYSxixK146lhDNzE0E4/hQzcNdE0jZFSksfUO+bMqDWwslLLRtOY/xCtXVbN64UaUDbkDsxg6bQB6Dy/+zPe5KQuE2VARYnBRltQDdVORmM3qbQFqI3GKZZVnIdJKKYjbMeIqmujRiRK2gk6PDjHidhylQGN70HFpXrxuEz3D36QlAKWBrSzittVsL0bZ91WsfX8TKMgfmsPgg/qjy7RfdB3yfG5Kq8NkeUx65ciHY3cTs2zWlgepCEbpJas8C9Fp6gYdp2cnRjgeJBKvG3RsQMPQje1Bx5X5Qac5EoDSQmFh4aJxIfPW/5Wz/uMtABTtlkfJAX3R9K75y9UR3GbdeiCDbKkH6jYsW7GuPMi22jDFssqzEB1ie9CJEbejxFSMSDxM2AoSV3EsO4atFBqgaQambmJqbryurC4bdJojnx5pEFcWtorXu00pxeavytj0+TYAeu1RwIApvaWovAnJeqB1Ug/UbSgFGypCbJZVnoVoN3E7nihGdoqSw6mg4xQj28pZX03XdEzdham58Lp86Dsoz+hOJAClgVIKy47Xu77xs61s+bocgL4Ti+g7sVjCzw4k64E2VYYpKfRLb0EXphRsrAyxoTIoqzwL0QaWHSemYsQtpyg5HA8TscLEVDTRo+MEHU3TEz06LrymF13vmZNqkiQApYHCwlLOhrHKVqxbtJmyZZUADJjSm957yoy6nUnWA22qDuH3GBRnSz1QV7WlJsz6yiA5Xpes8izEDli2lQg6ztBVNB4iYoeJJqad28oGBZqmpYKOx/Rg9PCg0xwJQGlgKxtb2SilWPPeJipWVgNQMrUvxaPy09u4LsRt6rjjBusqQvjcBllu+XXuapKrPPtMQ1Z5FiLBTgSdmO3U6UStiDPzyo5hqRiWstAUkAw6mLiNbAk6rSSfGGkSsSJsXltDxcpqbBTVo7MZObT77OjeWXK8JmWBCOvKQgzvnY1Lhk+6jMpQjDVlAUxdx++RtyLR89i25dTo2LHEKskxQlYgUbMTT5VKaBqYugsDE7fhR9dMGfZvB/KukyZxFWPzxloMYJVp82LpNua/XsZ+AwuYNqyY4QV+qQFqoQKfh7JAhNKqEAMLpB6oK6hNrPJsK8iXVZ5FN+dsA1GnR8eObl80MBF0FAoNp0fH0Fx4DR+GKUGnI8k7T5rE7SjhGo0sIO7VGZTnZW1VmHfXlPPumnKG5Ps4bFgx+5cU4DWlW3NHdB1yvS42VoXxu02KsmXl4EwWilmsKgsQjdsUyirPohvZ0TYQydWRVeLYVI2OBJ20kQCUJpaysAJO92Z2vod504byfXmAt37YxifrK1ldGeLhL9bx9JINHDi4kMOGFTMw15fmVmcuj0snGtdZVxHE59bxSz1QRorGZZVn0fUlt4FIBp2oHSFihYgkg44dJ5l0utrqyD2JfEqkicJCCzkzwdzZJpqmsVtRNrsVZfPzcXHeW1PGgh+2sTkQ5T8rt/GfldsYXZzFtKHFTB6QL2vfNCHHZ7KtNsL68hDDemdjygKSGSVmKdaUBakMxijK8shfvCLjNVod2Y4Rigea3AZC1w1MzdXlV0fuSSQApYllW7ijzp8Ivpz6wwC5HpNjduvDUSN7878tNbz1wzY+31TFsm0Blm0L8OSSDRw0uJBDhxbTR6Z/11Po91AWCOOrMhiYL/VAmcKyFevLA2yrDVMoCx2KDNPsNhCJHcydoKPQNNBwVkeWoNP1SQBKAx0NK6bwOB1A5BR4mz5O0xjbJ5exfXIpD0V5Z1UZ76wuozwU4x/fbeG177Ywrk8O04YVM7FvHkYH9XjE7Ti2iqNhYGh6Ri+e5dQDudlUGSbLbUqNSQZIrvJcmljl2ZCZeiJNlAJLxZ06HduZaRWOhxpsA2GjoXX7bSCEBKC0UUHnP6YIin45O/+QLvS5+dnu/Th2dF++2FTFglXbWLK5hq8SX4U+F4cOLeKQIcUU+BrvMdYWtm1RHaukPLyVmIqhaxo6BrqmY+gmpmbi0t0YuomOjqEZaFoiJGlG6lhdMzq1J8bj0onEdWd9GbeBT9aXSRulYJOs8izSoKltICJWiJiKYdmJtXTQeuw2EEICUNpYAeeDoEpX7O5reS+FoWvsMyCffQbks7k2woJV21iY6BX6+7elvLi0lEn985k2tIg9eue06a8WpSAQr6E8vJmaWDVuw43X8CUWb7SxlEU8HiWoFAorNQaenN2gaVoi+GhomBhoqUJAUzNxGR40TcdIBiTdCUlGvcC0ax+UOd7t9UBDe2VJPVCabK0Ns64yJKs8iw7jbAMRT6yOHCUaDxNKbgOhYti2jSK535XzHuQ1PRndky06hwSgNIlUa7iAakOR427bf4h9sj2cOnYAJ+zej083VLLgh20sLwvw6YZKPt1QSd9sD9OGFvGjwUXktHChuYgVpjy8jaroNhQaue78Vv9FZCuFUtb27yjidji1AjZKoUiEJo3ErsM6hqaDE4PQNTOxHoaJSzcTvUzbA5KeOF7XTAxNR2vQRk2DQr+bbbVhvG5d6oHSoDwQZU1ZEK+pyyrPYpeltoFILBrYom0gdA+G/O6JZkgASpN4rY4LiLi1Xe7tcBs6UwcVMnVQIWurQiz4YRsfrC2ntDbC019v5Pn/bWLfxAKLIwubXmAxbsepipRTHt1CzIrhN7NxGW0bStM1DTQT521n5+dwglJiexCc7zEVIRoPYSV6nZKSLdc0HT0RfHScUOR0Y5vOiqm606OEASu3BdC0XIqyfRiajqE7w3MSiDpOVSjG6rIApqaTJas8i1Zo+TYQzurIzjYQWRi6/J6J1pHfmDRRQafHwvK277DAoDwfZ08sYebY/ny4toK3ftjGmqoQ768t5/215QzO277Aos9loJSiJlpFWWQzwXgAr+Ejz9O5W3I4gSkRWFpAKVI9S9uH5eLE45F6gSk5JBeMxtm23qCkMMuZtYGBrmu4dBcu3Y1LN3HprsQ01mSNU2JITndqmwxZer7FaiPOKs+WBQVZ8hYjmuasjhxNBJ0YUTva/DYQmrM6smwDIdqTvDuliRZKfPd3zD+B1zSYNqyYQ4cWsbIiyFs/bGPRugrWVIV45L/reObrDUwZmMPE/jZZ3hpMzSTXXdAlZjpoGmiaQUujY54bygNhaoIG2Xlu0J1eplA8REAFsJSFshNxKVHMpGma01OU6GHSNA2X4UqEJufL6UlKhKXEUFyyQDx5uacJxSxWbwsQkVWeRUJz20DErAhxFUtsA+H8pyfbQIjOJAEoTcyw81+2mdWx49OapjGiMIsRhVn8fNwA3ltTzls/bKW0NsrC1VUsXA2D8w32G+RmXB/olnWBGuT7vVSFotR4oHcLVtR2epYUcWUlephswvEwQRXCVlai3qBe6TeGnijoJhGENBO37sI0TdyaOxGUjMRwXbKOyUgFLUPr2j/85CrPNeE4xbI+VY+TXB05pqKJbSDq7HfVxDYQhmbKNhAirSQApUMcXJbzX7wnp/P+CXymxn6DdEb20viuzOarjS6+3WqxptJiTWWQV10h9hngZt8SD8UdHMw6m65Dlsdka20Er0sndydLBeiaDhqtGJZzhuNsbCzbCUgxO0rYDqNiNpZtA4rt1d+kZr/pmoaBE4Tcuhufy4fH8CR6nNy4DGfmSiaLWYo15UEqA1GKsr3ygdaNyTYQorvI7HfVbkqLOEMjIU2R0wlBQymojVVRHt5KIF6N2/Ayvk8RE/pCddjm0w0RPlkXoTKseHd1hHdXRxhZZLLfIA+793J12AKLnc1t6kTjNltrInhMA4+r/YaoNE1zenMwcOk7L/x2ApPCxpktZ9lx4nacsBWhPFKeCEoaZmJ5fY/pxmf68Jre1BCc2/BgZkA9hK1wVnmuiVCYJas8dxdNbQMRtoJE4qHENhAWSjlJx5BtIEQXJAEoHcLb1wDK93TsG0UoHqQyso3KaBkaBjkN6nxyvTqHDfdx6DAvy7bGWLQ2wvJtcb4vc75yPRpTSjwcPMSL2+z6b2rZHpPKUJQtNWH65/vSFu6cwKSRqmQyGtfLOENwTjAKxUNUR6tx6ruVM5ymG7h1D37Th9flxa27U3VKbt29y7MLW8JZ5TlIaU2YfFnluUuSbSBETyUBKA20sPOhV60rBnVQAIpZMSqjZVRGtxK34/jNHMwdTBPVNY3de7vZvbeb8qDFx+uifLohQnVE8eaKMEu3xDh772xyPV38z3sNcrxuKgJRfC6D4pzMrVXRNA2X5mqyR8myLSccWTHKIkGsoAVoaBq4DBeGZuAzfPhdftyGOzWc5k7c1x6UgtKqEBsqQ+R53bgk/GS05reBCCWKkWPYSqXW5XKWlXDjdfl7ZEG/6P4kAKVDyHkzqdJt2rtWVCmb6mglZeEthKwgfsOP353TqnMU+g2OGuXj8JFevi6N8crSIOurLe77uIZZe2fTJ7tr1wcZiXqgLTURPC6DHG/X+88gOU3fY9T/BXJqj5xeo+pYDeWRCueTLzGc5tJcuE03ftOPx/Ti0s1Ez5G71cNp22ojrKsIkeU2ZZXnDOOsjtyybSCMxKKBsg2E6Gm63jt/N2CFNEycHiC3HmuXcyoFwXgN5ZGt1ESrcBku8tyFu1QfYuoaE/u7KckzeOTzWrYFbe7/uIYz98pieGH77DeWLm5TJxK32VIdxm368XSTD3Bd0/EYbjwNhtTqDqcF48HEcFqd+g3d2det4XCaW3fj0l2NhtMqAlHWlAVwmzq+Nq5kLnZdS7aBgGSPjlOnI9tACOHI+AB0/fXXc8MNN9S7bdSoUSxbtqzZx/ztb3/jmmuuYfXq1YwcOZLbbruNo446qqOb2mLJIbCoR2Fh7fL5IlaYirBT56NQ5Lhy2/UNrjjLYPa+OTz2RS1rKi0e+qyWk8dmMbF/117nJcdjUhGMsrU6TP98f7cu3q07nOaj/jIAlm0l1mmJNjmcZuomPtOHz/DjNlyEYxrryqIYmotsWeW5UzTcBiJmhZ0p5nYUS8WxlAVKJYKOiYmJx8iWbSCE2IEu8e61xx578NZbb6Wum2bzzf7oo4+YOXMm8+bN45hjjuGZZ57h2GOP5YsvvmDPPffsjObulBF1PmltL8TsSJvPY9lxqqIVlEW2ELWiZO3C9hU7k+XW+cU+Ofx1SYCvN8d4ZkmAipDFIcO8nVJs2yE0yPW5KQ/E8LmiFOV07UDXVsmC6oa2D6fFqIpUUWaXE47FKa0KYyuDfK+Xmlo3Xt2Hy/Dg0lyYhhuXZsq2BG1kN9zvyooQtkNELadHx7ItZzuYettA+OXnLUQbdIn/akzTpG/fvi069p577uGII47g8ssvB+Cmm27izTff5L777uPBBx9s8jGRSIRIZHsQqa6u3vVGNyMetjASawDpWWApZ92Ypj6AmqOUojZWRVl4K8F4NR7DT76noKOanOIyNH4+IYt/Lg/x3uoI//o+THnI5rjd/V12qryhg99tsLkmjMelk90F64E6SsPhtEjMprImiFtzke01sFScSDxIQFU7SxxpiR23Nad41mN48Zre1P5spubG1F1pn7afCZraBiJsBYlaEeIqjt3E6sguwy+LBgrRjrrEu/33339P//798Xq97LfffsybN49BgwY1eeyiRYuYM2dOvdumT5/Oyy+/3Oz5582b12iYraOEq5z9bQKaIsuno4hjK6vFC+6F4gHKI1upjlRg6CY57sJOnYqqaxozRvsp9Om8sjTEJ+ujVIZtfj4hG28XnSbvcelELJvNiXogKehtLGbZlFaHCUTi5Ps9zv5MmIC33nGWbWHZMWIqTCgaQEWcGhRd05xiW0zchheP4Uss8uhy1o/RXWjdsAC3/jYQzqKBzW0DkSpGltWRhegUGR+ApkyZwuOPP86oUaPYtGkTN9xwAwceeCDffPMNOTmNZzeVlpbSp0+ferf16dOH0tLSZp/jqquuqheaqqurKSkpab8XUUek2glA1boi12M4MzKwdrpnesyKUhHZRkW0DNuOk+XKSWu39wGDveT7dJ7+MsDybXEe+KSGc/bOJq+dN3ftLDkek8pgjC09oB6otSxbUVoVpioYJc/v3uEHc2p9oga328ombsexVJzaeDXV0QoUCg0N0zAxcOEyPHgNHy7dhak7vUVdZTitpdtAJIOObAMhRPpl/DvLkUcembo8btw4pkyZwuDBg3n++eeZNWtWuzyHx+PB4+mc9WDCVc6sryrdJs/rQqmIs+txMx1Atm1RFaukPLyFiBXCZ2bhdrVuWntH2aO3mwum6Dz6eS0bayzu+7iaWXvn0Den6xVeahrk+lyUB6L4XGaPrQdqyLZhc3WIikCMXJ+bto506pqO23BDg2iUXAXbUnFC8Vpqo5Wp/aKSm8w2Hk5zO8NsaRhOa8k2EEo5wU62gRAis2V8AGooPz+f3XbbjRUrVjR5f9++fdm8eXO92zZv3tziGqKOFkkMgVXpihFeHQXYqvFMMKUgEKumPLKFmlg1bsND7i5Oa+8IJXkmF+2bw8Of17I1YHP/J9WcMTGbkUVdb5q8oYPPbbClJozXbZDl6XpBrj0pG7bWhtlWEyXX68bogF4xXdPQDReuBn2gSoGt4olp3s5wmh1x9lNzNpB19kfzGF48ujOcZhpmuw2ntWwbCBtnE1xje9CR1ZGF6DK6XACqra1l5cqVnH766U3ev99++7FgwQIuvfTS1G1vvvkm++23Xye1cMfCdQJQbmIV6HiDABS2Qqlp7Roaue78jF6grNBvMHtKDvP/G+CHijgPL67lxD39TBqQuassN8frMqiOxymtCjGoyI+rIz71uwIF5YEoW6ojZHlcGJ2cBTUNjMTwV6PhNNsiriwsFac6WoWtylOPMfXGw2muxHCaqbkaTTZoahuISL3VkeN1Vkd21ksyNQ9el0uCjhBdXMYHoLlz5zJjxgwGDx7Mxo0bue666zAMg5kzZwJwxhlnMGDAAObNmwfAJZdcwkEHHcSdd97J0UcfzbPPPsvixYv5y1/+ks6XkRJJDYEpcj06NmDZzm0xK0ZVtJyK6BbiVhy/a8fbV2QSv1vnvH2yeW5JgC9LYzz3dZDykM2Ph3e9afI5XpPKYNSpB8rzk8HZs8NUhKKUVofxuY2M2wNO1w3cGLRsOM2pvEkOR7l1Fx7di8vwEEmspSPbQAjR+Zw/PtTOD+xAGf/pun79embOnElZWRm9evVi6tSpfPzxx/Tq1QuAtWvXotepWN1///155pln+N3vfsdvf/tbRo4cycsvv5wRawAppVI9QDWGIsutEYjpxOwoVZEKysNbCFoBfIYfvycz6nxaw9Q1Zo7PosAX5p1VYd5cEaYiZPOzPfyYXWiavKZBrtdNeW0Ur8ukKLtn1QNVh2JsqgxjGlqXWiF7R8NpVmI4LWKHCcRrUcqu06Pjwmt6ZXVkIXZB1FIEoopA1CYQUwTrXA5EFYGYnbhfEYzZ1EZh7wEBTjwofW3O+AD07LPP7vD+hQsXNrrtxBNP5MQTT+ygFrVdJBDHjjmJV3mTU4MNAvEAFdEyXJpJboPd2rsaXdM4apSPAp/OS98GWbwhSlXY5vQJ2fhcXed1GQZ4XAZbqsN4XT2nHigQsdhUFUZHw99NtrjQNBLF0xn/didERojbiQATaxBiojbBWP2gE4g6wSZmt/55AtE2PKgdyTtCJ6ouCwFQqyn8ieniHt1L2AqRbea2ajHETLffIA/5Pp2nvqzl+7I4//eJM0Ms39d1ehR8boPqUJzN1WFKCn3dvh4oFLUorQoRtxS5PnlrEKI7sJVqFFp21jsTjrftuQwNstwaWW6dLJdGllvDX+dytlvHn7gcrKlh+ID0jnTIu1wnqt4WBpwp8LmJAGToJll61xvuaokxvVxcMDmHR7+opbTW5k8fV3PO3tkMyO06v3bJeqCtNRr9crtvPVAkbrOpKkwoZpHn7Xoz+IToCWylCMdVvbASqNtTU+dysgcnFFO0pdJG10iFlSyXjt+tJYKMnrit/mW/W8dj0OKaz9IIuI30jgp0nU+ibiC7wENtP5OVFTFyPd30k7SBgXkmF+2byyOf17C51uaBT2r4+YRsRvfqGh+ymgY5XhdltTG8riiFWd2vHihm2ZRWhQlEYuT53M5qfUKIDqWUImrRqCcmGN1+uTaaHIqyE4FH0da6Yb8rGVTq99DU661xJQKNW8Nral26HKMlJAB1ok3ZP/DG4PlsyMrhIM+MdDen0xT4dH6VmCa/sjzOY1/UcvzufqaUdI1p8qah4Tb1VD1Qd6mNgdat8iyEaF7Mqt8TE2yiVyYZdIKJy/E2lsB4DBr1vjQVaJKXfS6ty+7X2JEkAHWibaFtbNM+xcwaRF4P6QFK8rl0zp2Uzd++CfLFxih//58zTf6IkV1jmrw/WQ9UFWZgN6kH2r7Kc3SXVnkWoruxbLXTWpmGvTXRxuvZtoipQ3YirNQdckr2xCQv++tc7kqzajOZBKBO1C+rHwCaq5IcT8/7BTZ1jVPGOhupvrUyzNs/ONPkTxrbNabJZ3tNqoJRttbo9Mv1de16IJVc5TlGjtfVIas8C5EJbOXUwdSrj0lcr23YW5O4PRxv2ziTniwCdm3vffEnin+TtzWspUl3HUxPJgGoE/XNcrbj0Mwast3pXQAqXTRNY/pIZ5r8C/8L8t9NzjT5M/fKwu/K7E9hXYNsj4uy2ig+t0GBv+vWA5XVJld5NjHlDVh0EUopwnEa9b4EGlwONhiKasu7rUadIuAW9s54zZYXAfdklopTbZdREZOFEHuMPHcByjbR9Diaqxrole4mpc3kgR7yvTpP/LeWHyri3P9xDbP2zqbQn9n1NS5Tw23rbKmK4DG7Zj1QZTBzV3kWPYdSiphFkwGm4Uymur0zbS0C9pnJQt+mZzL5XfXrZ3yu7l8E3BGUUgTtGqriFVRb5VTFE19WOdXxCqqscmqtakAxoWI/zuGYtLVVAlAnqgjEUPE8NHcZcb2CnhyAAHYrdnHhvjk8uriWLQGbP31cwzl7Z1OSl9m/lsl6oC3VYQYW+DC70PhRTSjeJVd5FpkvbjeujandybozbS0Cdhs0WRtTr4emwZCTFAG3j5gdpSoRbKoTwaYqXk61VZH6HlexnZ7HwKRtfXPtJ7M/abqZzdUR7Fg+uruMGqs83c3JCP1zTGbvl8ujn9eyqcbigU9r+Pn4LHbvndnDS6l6INOgX563S0wdD0QsNlY5i3F2xZ4r0XksO1E309RMpmiyQLj+CsGRNhYBG5pTBOxv2CvT1PBT4naXDNt2CFvZ1FpVid6a+sEmGXRCdqBF58rW8sg1CskzCpzv7kLyPYXke4rI9xRSEQ4xvHf/Dn5FOyYBqBNtqQmjYvkAVEkASsn36lw4JYcn/1vLd2VxHv8iwLG72+w/yJvupjUrVQ8UiOBz6+RneD1QWFZ57rFspQinwsyOZzIlw02ojbUZTS2el93MTKZk0HG3YvE8sWvCdig1JFVt1f9eFa+gxqrAZufdcm485OpF28ONUUiuWUi+1/nK9RbgMl1oBmgG0MS/cWVVGC3NQ/DyTtiJonEbN4UooDpeke7mZBSvqXHO3tm8+G2QT9dHeenbEOVBm6NG+TJ2HN5largsnc3VEdwZXA8UjdtsrAoTjFrk+7rGApSiaUopIsnF8xr0yjScyVR324O2DjTI4nldh6XiVMcrt/feJGtuUpfLiajwTs+joZOr55OrF5KrF5CnF5JnFpJrFpHnKSTfW4DP7Uc3NTC07SFH73pBVgJQJzpybD+WV4/mkRVvUhWXHqCGDF3jhD38FPh0/v19mHdXR6gI25wyNitju7z9HoOqUIwt1RFKCnwYGdbOuOVscVEbjjm9VJnVvB4vZjXdK1NvmKlB0LHamGa8JvXCSnO1MsmiYJ8pdTOZwiksrm00JFV3mKrGqoIWRF2flpUKN7l6YSrg5JmF5LoKyfXkYXh0NFNDaxhwutnvgwSgTlbkcQqfZQisaZqmcdhwZ5r8374OsqQ0RnW4hrP2yibLnZlFuzleF1XBGFtNnb4ZVA8kqzx3rtbtoO0EnVgnLJ6XnRiK6gprbfVUycLi5Cyp7QXGFanenJYWFucZiXCjFTpBxygkTy8gz+UMU3ncHjQX6C4tMTzVtXtxdoUEoE5WnAxA8TKUUj3ql6019u7vIc+jM/+/AVZXWtz3cQ2zJmVTnIHT5J16IJNtAWd9oDx/+oeZnFWew5TLKs9tko4dtFvTOyOL53UdtrIJWNWpYLO97mb7NPGgXduic2XreeQaiZ4brZAcLXHZKCTPLCDLzEUzNHQXaG6cXhwdNENz6nCM7teLsyskAHWyQk8xAFEVIaJCeDV/mluUuUYUufjVlBwe+byWbUGb+z6u4ey9shmcn3m/tk49kEZpdRi3qeNLZz2Qgq21Ecpqo7LKcxPWV8XZVGM1OZMpebmtO2g3tXheo56aBrU0rdlBW2SeSLKwONVzU78Xp7qlhcWaZ3tBsV5IrlbQoCcnH5fhAl1DM3F6cdx1enH05guORdMy75Okm/MYXrz4CROkKl6O1y0BaEf65hhctG8Oj35Ry4Zqiwc/reHU8VmM7ZN5s678HoPKYIwtNREG5qevHqisNsrWmjB+tyGrPNdRWmPxr+9CfLt150MJSbJ4Xs9mKYuaZM1NM/U3LS4sNvK3TwvXnd6bPL2QXArI04vwaL5EzY0GOuguwAW6mRyikl6c9iYBKA2yyE8FoD7ugeluTsbL9epcMDmHp76qZdnWOE/+N8CM0TYHDsm8afK5PhdVwSheU6dPbufXA1UGo5TWhPGaBm5Z6BCAypDNf1aEWLwhisIZshxeaJLjaXomU6p+RhbP69aUUoTsQP1AU2+YqhWFxXpWYiq4E2pyErOncjUn4GRpueiaiabh7CFYtxfHlQw22g6njYv2JwEoDbK0PMrURimEbgWPqXHWxGxeXhrk43VRXl0WojxkM2N0Zk2T1zXI8rjYVhvF6+rceqDUKs+ahifD91XrDMGozdurwny4JpJacXjPPi6OHOmjd3bm1ZKJ9hWzo3VWJ96+1k3dsNPiwmIzEW6MQnKNZMhJ1OFQgEu50dBQsL3mRnpxMp4EoDTI1vJB0SOnwiulAIWNcv5fqe3XlPM9eV0phZ267Hw/aKSN1xfmvdVhPiq12RIzmD7Sg6FT77iGj1PY2HWeq/nn3tE5WtZGG5to3IKAIttjoOvUe/7kOewmzlvgKqCPtx/9PP3p4+1HnpnXor8Eg9E6qzx7evaHe8xSfLAmwjs/hAkldvUeVmBy1ChfRtaPidZTyqbWqq43S6phgXHQrmnRubKNXGdoykyEGzNZg+PU4fjJRrM1lALQpBenG5F3gzTIIg+A6gwPQNXxCj6rWcjK8P+wlNVEMNhReLGbDDntsveLAVnDnYubgMe37PopO0zLVo1vllf30sfbj76efvT19qOPpx99PX3p7e2LR/cAzirPmypDxG1Frrfn/idt2YrPN0b5z/chqiLO71nfbIOjRvkYXWzKh1EX4hQWVzS7JUN1vAKbna8h4NI85NcNNnWCTq5WSI6Wj6lcKAuUrbb34miJ3hrNCTh1p41LL0730XPfLdMoW8sHMnctoI2R1XxcvYBvg4tbNHuhY2joaM7/a9r2a5rzXUPHVhCKgVI6uqaR4zYwdR09cWxzj3Nu3/F928+x/T69zvkaXa932Xk0Sicat8n2uslxu9B1ffu5k8+j6Ylz6ShlUxYtozSyidLwRrZFtxK2w6wJrmJNcFWjn1CRu5je7r5k0YssiinxD0DF+5BrFPSoD3ulFP/bEuNf34XYEnB+X/O9OtNHetmrvzujhkhFsrC4st5mmnVnTjmFxaGdnidVWJwcmkos5pesxcnVC/DYfjSloWzAUk4vjtLQrPq9OLoPNJeWKkKWXpyeQQJQGiR7gDJpCMxWNsuDX/JxzVusi6xM3T7IM4K9cw4iW89NhQG9QSjRtKYCQ+Pj6gWNOkGhYchJnrMlttRaPPJ5LeUhG8ulcdZe2QwtyJxf62jcJhyzKcn3kdvKeqCYHWNrZAulkU1sDm9yvkc2URouJWDVUhbdRll02/YHJJYScWluisw+FLn6UOTqS7GrD0VmX4pcvXHrmVc4vitWVcT55/Igayqd3gC/S+PQYV72H+TJ2NXDu7NUYXGq56aiUYFxrVXVop5gn56V6rnZ3ntTkOrFydZz0ZWBsgCb7b04loaykr04gK6he5yAk1r8T98ecjT5PemxMueTogdJ9gDVWJXYykLX0lezEbZD/Lf2Az6rfodKqwwAHZ09svZhSs40+nsGp61tLdE722D2vjk89kUt66os/vJZDaeMy2J838yYJu82nV6g0powHpfRquJkl+6iv28A/X0DGt1XFa3mf9tWsyawgZC2jbL4ZspipVTEtxJTUUpj6yiNrWv0uBwjnyJXH4rNvomA1IdiV1/yjEI0resUTjec0u7S4cAhXg4e6sXnkg+0jhJXsUZTwqsbzJyKqehOz2NgpnpunALjxPTwVC9OAW7di7LV9oCT7MWJATFneEolenHQwfAmenEabuEgvTiiGRKA0sBHFjoGNhY1VhV5ZmGnt6E8tpVPa97my9oPiaqI0y49i72zf8Q+OQeTY+Z3epvaKsej88vJOTzzVYD/bYnx1JcBKkbZHDTEkxFvfNkek8pgjM3VYQYU+HZ5arWyIRR0k2MNYr+CEfUWOrSURWV8G9tipZTFNlMW35y6HLRrqLEqqbEqWc3yeuc0NReFZm8nFJlOKEr2IHl13y61tz01NaV9nwFufjzCR5636wS4TOQUFtc02EyzvF7dTaCFhcVZem6dnpuCOkNTzm1ZejaapjuTIhK9N6lenLBTixNHNd2LYzbewkF6cURbSABKA03TyTMLqIhvoype3mkBSCnFmsj3fFK9gOWhr0iub9HL1Y8pOdMYmzUFl16/50TZCjvojJ3rHs0pCMyAUNGQ29A4Y2IWry4N8eHaCP9c7kyT/+noXQ8cu0xz1geqDEbxuAz65Hrafi4FW2ojbK2NkOVpvMqzoRmpnp2GQlYg0VOUCEWJy+WxLcRVjC2xDWyJbWj0uCw9t04gcobTil19yDeLOq33Uqa077qIHW5yrZu6M6daWlic7KWpV1icCjn5mNr24V5lqzpDVEAosaGrcgIOdaaNSy+O6EwSgNIk1yh0AlAnFEJbKs43gc/4pGYBpdHtwyLDvXuwb+5hDPOOafLNxY4q7DCY2TqYYAcUVhg0l3L+Gkt3sGhA1zR+OsZHoV/ntWUhFq2NUBmy+fn4LNxmetuq65DlMdlWG8Hn0sn1tW19oLLA9lWeXa18TT4ji4HGMAZ6htW73VY2VfEytsUTvUZ1AlKtVUXAriYQqWZN5Lv6rwmDQlfvVL1RMiQVm33xGVlten0NyZT2lrGV05tcf0uG+gXGYTu40/NoaOQY+fWKieuGnDyjEK/ur/d+kerFsQELVAzilt1gRhVOL44bNLf04ojMIO8gaZJnFkKkYwuhA1YNn9e8x+LahdRa1YAz1DE+az8m5x5KL1e/Jh+nlMIOAQpcRRpmno6ma9h5CjuksGqTvUJ2xvUKaZrGj4Z4yffq/HVJgKVbYzzwaQ1n751Nrie9QyTJeqAtNWE8ZuvqgQCqgjFKq8N4TL1dV3nWNZ0CVy8KXL0Y6Rtb776IHdoeiuoEpLL4ZuIqxrbYJrbFNkGDSTt+PTvVW+SEI2c4rcDshdGCXiOZ0r6dUoqwHWxyrZvkMFWNVdmiwmKv7t9ed9OowLiQHCOvyV69VC9O3NloF1uhLEVyXZx6vTgeJ+Q06sXRM++PJtGzSQBKk+SwV0esBbQluoFPahawpPYTLJwtqnOMfPbJOZi9sg/Eb2Q3+1hlKayAQvfquAp1DP/2Nyw9MYvCyHZ6hqygjR0Eq0Y5vULuzPkrblxfN7kence/qGV9tcV9i5zd5Pukebgk22NSGYqypSZM//yWD8/VhONsqgxhahpeV+e9Bo/uo79nCP09Q+rdrpRNlVWRCESliVoj53K1VUHQriUYqa03oxCcAvsCs1e94bRkQPLrOQA9bkp7XMWcXpompoQne3FaW1ic7LlJ1d0kCow9zcwCTPXixMG2FMomFXCgQS9OYqdx3aU36sVBz5w/hoTYGQlAaZJnOAGovYbAlLJZEf4fn1Qv4Ifw0tTt/d2DmZJ7GLv798LQdvzPbUcUdhTMXB2zQHdWN22CpmsYfjD8BnasTq9QKLN6hYYUmMzed/tu8vd/XMOZe2UxvLDztqdoRIMcr5vKYBSvadCrBfVAyVWebSAnQ1Z51jSdfLOIfLOI4b7d690XtSOp+qKyesXYm4mpxH3xzY16jdz4sKK9CAeLsb298Lt6M6XPAA4pGYDPzIxZfa2llE3ArtnhZpqtKywuSNXaNBymytJzdjiTT9kKFU+GGxJ1OS3oxUneLov/iW5GAlCa5CZ6gHZ1CCxqR1gS+JhPqhc4Hyo44/ij/ROZkjONEs/wnQYRpRR20Pkrz1WkYebqLX6Tq9crFAErkFm9QsVZ26fJr6m0eOizWk4a62ev/rtQiLyLDB38bpOttRG8LoMcX/P/GUZitrPKc1yRu4PjMolb99DPPYh+7kH1bldKUWNVNpidVsqW6GZqrHKiWgjca3G516Yesxj4fINGvlmU6i1K1RuZfck2ctMatKN2OBFomtqSoYLqeEWqF3ZHXJq70WJ+9bZmMAvqFRY3RSlnWErZ1JlZpVCqTi9OYtq4nlzd2F2nF0eXgmPRs3SNd9RuKM8oANoegJLbVHxe+16quNGjeZmYPZV9cg6hwFXcovOouMIKguHXMAt0jP9v78zjoyrv/f95nrPNTGYmG5AECKTsyCKyCqigYmnxouDtBZeL6C3aVvRaeGmLgheXVqxSa92VVvH2V0XxIm0REMWibIJioiiLslchrFlnMss55/n9cWYmM8kEMiGZySTft68xM+c855znPCTn+cz3+S72pj34GGeQ7IBkD1mFfAJGVeuwCmWoHD8b4cIbX3qw83gQb3zpRVmNiSt62FL2oFdlDn/IH0hVHNDi+PQEDRPHKmrgDRjIaqLTdGuCMWZl6JWz8QP0s0Lav6/Bse8DECwISTuNPvllKOxQBg9ORASSX/hQpp9CmX4K+3xfxZxTZbaQf1FejEDKlfPqRTQmSrRjcXSum6Y6Ftdabs7tWNwQEV+caCtOqIQDgFgrjh1AVNg4WXEIIhYSQCkibAHyixr4zJpG51r53n8Q2yrXY5d3R6RMRbbcASNdV2CIcwy0BHK2mD4rqZicxaBkcbBmipSK6yvkSa1VSJEY/nNIBt7dW4OPD/mx9lsfztSYuO4CR8rC5F2ajDJvACcqfeiS5QCPzudjCBwr96GyRrcqyreh+SpuSHsnB37cO7deSLsQAh6zMuJfFLYenQ4eR5l+EgHhw9HAYRwNHK53nUwppzYTdpRAcoe+fEQ7FldGfG5q/W8SdSyOV5LhbI7F8YiJqIqx4gB1C3FGrDgKp0KcBNEESAClCI3bYOMO+EwvKvUzsKn1s/2GMYWBPd4SfFK1Ht9FOZV21/pglPtK9LEPBk8gi68wQ47OCofSiUFyNr70RCIwFmUVcqfeKsQZw+R+DuTYOf62uwbbvwug3GdixhAnbKkIk2eA266izBOEXfGjg8taljNMgdLKGpR7A8i0q2grX9abEtLOGINTyoRTykSRrU/MPkPoOKOfxOlgaa1AComjcDmGCuMMDvh2xRynMBUAQzCUAPRscEgx5ReiI6fCYqchx+KGiLbixJRwCIeNkxWHIJICCaAUkinlRL6FdkJ9AeQzvSiu3oztlf9ERaRMhYSBoTIVBVq3esecC8tpGZAyrCgvriVJfJzNKiSH8golySo0trsNWXaOv5Z48M0pHS9sq8J/DXOmJJOwxAGHJuFElR+aIsGpyjhZ6cfp6gDcdjXGKpSutFRIu8RkdFQK4qZz8BrVUckeawVSuFRImAzuql+KQaoNDXdKZ3csbogYX5zoQpx1rDjhQpxkxSGI5EMCKIVkyjk4Hvyunh/QmeAJbK/6EMXVWyLfUh3ciWGucRjuHAeXnJnwtYSwhAcMQM4OLXmlwDk52iokMgWMmtRYhQZ0UvGLURyv7KjG0SoDz3xSiZ8Oc6HAlfwoKy2cH6jSB69NxskqH5xxsjynG6ms0u6QnOgm9UI39IrZHi4VAgBuKbvJfkJCCCvp37msOAz1CnGSFYcgWgckgFJIZlQkmBACh/zfYFvlenxT8yVqy1R0DpWpGNn0h7Vphalz1Vry4hkts+SVKExmkF2pswoVZsq462IX/rSjGic9Jp7fVokZQ5zo0yH5DseWP1AQ3oABhyYnnOW5tdFaq7SHS4U0hriFOBuy4thCYeMSlXAgiHSBBFAKcYdyAe2r+Qr7a76Oqd7dyz4Qo1xXNlimorFEl7OQczi42voexnGtQknKK5TjkHDnKBdeK/bgQJmOP++oxk8GODCia5LD5BmQ6VBgGCKtxU9plYE139Zg14m6Vdo12BPMfN3SxC3EGW3FiVeIM2TFAacSDgSR7pAASiFhC9Dx4HcAastUjHJfiQ5K/nmdu6FyFq2dVFiFHCrHbSOceHOnByXHgnjrKytM/qpeyQ2T5wzgaSp+0qFKuzCsqEcrGaCV9was1u+GUyFOgmhXtHoBtGjRIqxYsQJ79uyB3W7HmDFj8Lvf/Q59+/Zt8JilS5fi1ltvjdmmaRp8Pl9Ldzchumm9oDINGrdjhOtyDHNe2ixFJIUhYHgFuFa/nEW6cFarkGmC25rXKiRzhhsGZyDH7sOHB3x4f78VJv+TgQ7IaSAcU0VrrtIuDAGhAyIYEjySJXCkTAZJY1SIkyDaOa1eAH300UeYPXs2RowYAV3Xcf/99+OHP/whdu3ahYyMhsWC2+3G3r17I59b4zc4t5yNX3V9CoYAFM6bJddLpJyF6+zlLNKJaKuQ8AO6J2QVqhZgUvNZhThj+HEfO7JsHO/s8mLH0QAq/CZuHuKEvQ2MY3PSGqu0xxU8cq3gYQoDU1vns4AgiOTT6gXQ2rVrYz4vXboUnTp1wo4dO3DZZZc1eBxjDPn557eMlAx8ukBQFxBCBxggcQ6ZM6iSZEUBNfJZfT7lLNIFxhiYDVBtDViFtOaZ4EZ305Bl5/h/JdXYd1rH89usCLEse+tYykkl8UPaOSb1dSS9Srsww0taAExYy1kKg+Ri4DYGroashG3s74AgiOah1QugulRUVAAAcnJyztquuroa3bt3h2maGDp0KB599FEMGDAgblu/3w+/vzYpWmVlZfN1+BzopkCWQ0amXUVAN+EN6vAFDXiDOgzDjBFFimT9rCuKmqucRTrR0lah/h0V/GKkC698Xo3SahPPfFKJ/xrmRBd32v3JNAvhkPa139bgeHVqqrRbxTwBEQRgwCr7oDBITpDgIQgiYdLqaW6aJn75y19i7NixGDhwYIPt+vbti1deeQWDBw9GRUUFFi9ejDFjxuDrr79G165d67VftGgRHnrooZbsegSZSQBjMIUAZwymacKuypGCmLlQYZpWHaiAbkZEkT9ooiZo1BNFkm69mrucRbpwVquQMK1JsYlWoa6ZMu662I0/76jC8WoTL2yrwn8OcaJfx/Svy5UIqQppjyt4ZAYpA+D2UESWSoKHIIimwYQQ5y5200r4xS9+gTVr1mDTpk1xhUxDBINB9O/fHzfccAMeeeSRevvjWYAKCwtRUVEBt9vdLH0Ps/fQcazd+hk65bkgcxnl3iC65zjgdpx9Uo0RRYYJjy+ImgoTOhMQLhMiA1BlGYrEoMq82XyK0hEhQlYhrwmz2koFEInyacKEXRM08VqxB/vP6OAMuO4CB0YVpq6afLI4Xm1g9TfJC2mPFjzCDIWhy1YIOrdHWXjIYZkg0p4jFcfRM7szJvUb3qznraysRGZmZqPm77SxAN15551YtWoVPv7444TEDwAoioKLLroI+/bti7tf0zRoWnImNIUrkLgMw9TBmQzOGOQ4lcDrwjmgcQ5N4TCCAg5dgtKNQ85hMCTArxuo9uvw+g14AwaCRhBCCMgShyrxdiWKYqxC7iirkC/kK5SgVciucMwa7sTyr7z4/GgAb3/txZkaEz/qnbpq8i1JskLaI4JHt5ZxGbdC0CWHJXiYwlJSOJcgiPZBqxdAQgjcddddeOedd7Bhwwb84Ac/SPgchmFg586dmDRpUgv0MDEkLkOCAkMEwQw15NvTuAe8EAJ6jYCpAxkdJNhz5ai8MQryYFmK/LoBf9CMK4ogAEmy/Im0diCK6voKGTUmjKpQXqGwr1Ajlg1lznD9IKuQ6gf7rVD5shoT0wa1nTB5b9DEPw/4sKmFQtqFiLLwGFbCQaYwSDaA2zmYGqpw3s6WcQmivWEKE61h8anVC6DZs2fj9ddfx9/+9je4XC6UlpYCADIzM2G32wEAN998M7p06YJFixYBAB5++GFcfPHF6NWrF8rLy/HEE0/g8OHDmDVrVsruIxpFUqELHyAEZIlZIuQcCEPAX21CUhlcXWSoLh7X+sA5YFcl2FUJ0aIooBvwhUSRx6/D04AoUkOvtiaKwlYhbpMgu0KV6ast65CoaZxViDGGib3tyLZz/N/XXhQfC6DCZ2Lm0Aw4WlmW40QIGgKbj/jx4f7mDWmPCJ6whSckeLgGSA5ea+EhwUMQaY0pzNDLsF4wYYTfh/YxhAs8AZxxMDDIPLUSpNULoBdeeAEAMH78+Jjtr776Km655RYAwJEjR8CjRERZWRluu+02lJaWIjs7G8OGDcOWLVtwwQUXJKvbZ0XhKoJCwBACGap0TrFh+E0EawQ0twRHJwmylthkyzlgUyXYQqIIiBJFugl/MCSKAgZqggYqfW1bFDGZQXIy8AwBuQlWoZFdNWTZOP63uBoHynQ890kVfjrMiRxHahP/JUokpH1fDSp85x/SHiN4ggJgDFwGuMrAMxm4yknwEEQaEE/QhMWMIQwIYUbEDBjAwCAxCZxxcEiQmARV0qBwNfLiTILMZXBm7S9TDBQ4XKm8zfRygk4WiThRJcrh7yrx8fZv4c8ohdCd6JxlR64rfpFTIQSCHqsAoyOXw5Yjg7do1I21fFZXFAV0E0HdgCJLyFBlyG3QJ0PodaxCpjinVeholY5XPqtGhV/AqTL81zAnCjNb/XcKCCGw66RVpf18QtrDFdHNUHkJwBI8TGHgdoBrHExBm0jGSRDpjBACpjAsqwyihI0wYQgTptBhyRiE6uAxcMYtUQNL2MhchcIUKFyBKtkiQkbickj8hD4z6/O5vkCdrPIjP1PDBZ0zm/Ve26QTdFtCCjk/B2E0KCZMQyBQZUK2M2R0kqEmoawAi2MpCouiKr+O09V+VPqCVui+IsOhymgrPsAxVqGAVYPMqArlFeLxrUKdXTLuHO3GKzuqcazKwAvbq/CfF2bggk7xBW1r4GCZjtV7vTjUhJD2sOAROmAGQ4JHCll43KEoLdWqjt4WncMJorUQFjSWmDFhCD1itQkvPQGoFTRg4NwSNAwSJMahcjsUrkQsNDKXI+KF81ohExY3nKXvMn9DkABKATKXwSBBwIASJwJM95nQfQK2LAmOjjKkFFZwjxZFHTI0eAI6yr0BnPYEcNrjh8QYMjQZaiMi2dIBxhiYBnBNguy28gmdzVcoy8ZxxygX/lJcjW9O61j6uQfX9jcxtrstxXcSS1ND2oUuagWPqLXwyM5QeQkSPARx3gghImIm1jpT+17ULjpZgobxkDCxBI3CVahcg8xVqFyBzJW4VhqZyW1W0CQKCaAUwJgEYcpgTI/51i2EQKDaBOMMGfky7NlSq0ryxjjgtMlw2mTkuW2o8uk44wmgoiaIipoAbIqMDE1GK+ryecGkOFah6vpWIZtsLX+t2OXF9u8CWLm7BmU1Jib1tSclQ/LZKPeZWPdtbUg7AzCya8Mh7TEV04VVMZ0pVqJNyRaqp9WMRWgJoq1iRByAo52BjdCSkwHESBpAYjyUGoWHlpwU2HlGSNioEREjMbmesAmLGyIxSAClAA4OiSkIMj/kkAo3dYFAtQElgyOjkwLF0brVuSJz5DhV5GSo8AZ0VNboOFXtR5nXSiiZocqwyed28E4HzmoV8lo1yLgC/GSAA9l2jve+9eGjQ36U+UxcPyijRbMlN0RjQ9rPVTGdqSR4CAJAlICJFTaGMGHCAEStoLEsNAwsZJ0JOwDL3AGVq5Y/DVeifGdihUzYWZhoWUgApQiJaZB4FRgHgjUmjICALUeGo4MMKZ2cRhng0GQ4NBkdXRqq/DrKvH6Ue3RU+XxQZQkZmtxmcuXUtQrpHsMSQ9UC4AyXd1ORpQFvf+3Dl6VBVPiqMGOIHdGJvmsfkyLmoSkgQg9O65tdU6xH8ULaf5At4+pQSLswBEy/oIrpRLunVsSY9RyErUgnUS90O7zcxGD9jWohPxpr6UmJcQKOXm4KW2uI1gX9i6QKoUCTGXSfCWECrs4KtDSv4C5JDFkOBVkOBTVuHVU+HaeqfCiv8cM0TNg1CTZZAmPRpl8RSYgV3irqCANrS2hfTNuoNiL6aCtyLvqMteetPTY66gGoNVZFf442UTMwINz30A7mYBA2AD4GeBiEh6G3g+HGAQxv7RE4XG7g+W3VmHGRhBwHC52VRa7Gas8MBgYTAobwwRc0YIbulcFaNpU4h4TQA5XHruGbQuCz7+uHtP+4tx19M2XAYDCqBFVMJ9osDYVuhy02QlimUAEAzLLEh5ebOCzRonEbFEmFwizHYInXWXKqY6mhLwrpDQmgFCFzGUKSYPgF7LkSbFmtz9xpmAa8uhfeoNcSHnXUAhNWZfqwsAhvhwhN6RKQkwnYAyaqfEGUeYM46RWQGCzHaak2ioxF5AeL+sSselBR/4GFlqTAgZCZGYyBg9e2Yiy2DQDGOBizWiHkQBjOX1F7/drrIepcQG0frT5E949FziGEgAgIBL0Gulca6OGowTNfHsOZGh2vfAb88uJC9MrJsI5kda7Mas+hCx2G0GGYBnQRhG7qCJoB+A0/DBFEMCyQIAAT+OY08M8DwEmP1c9MjeGqbhqGdtDAJauPnCqmE2mGEKLWCfhcodus1jE4OnTbJjkgMwWqpELh2lmdghsTuk20LUgApQATAjKTISky9KAB2dZ6qovrpg5v0BI9nHE4FAe6u7rDoTgiD4fI1M1iRQKLEgTRbcI/g7qJcq+Ok1UBlHsD8AdNZKgyXDYVciiRZa2giJJELL4gaZWoAJyAmWsiO8/AI7mZeHzzPhyu9OGxTYcwe0R3jOya3eDhjAEqJADxa9OZpvWNVhdB7D1Vjf/bdRr7yyy/K7sMXNZFxvCuApItAK9WA6YIQAFkqfahLwsFkkkmeSK5RIduGw04BkdbYePlolG5HWrIf0aRtBiLjMSjLTWWtabVPy+IlEJPwFQgAJusggkFJtchaan9Iw0aQXh0D3xBHyQuIUPJQI+sHsjSsuBUnVB4Mwk0Fch1AD1yBar8Os5U+1Fa6UeFNwjOBFw2K7dQW4BLHJqLo9CZiUWdBuOJ9/ei+GgF/rjtEK4v92FS3zxITSifwcBxtMyHt3YfQ/GJKgCAyhl+1LsTrruwM5xOGaZswmQ6dKFDNwPQTR0+owZ+o8ayJJk1MEwDBoyI5S7seBmeOGQmk0Aizkpt6LYR10HYCOWiCROx0PDoXDQ2KFwJhW6rEedfmcmhXDSxPjUUuk00J/SESxE2WQWECkMOpiTPT8AIwBP0wKf7oHAFTsWJwuxCuFU3XKoLEm+5JTnGGNw2BW6bgq7ZDmtprMqHk9V+lHmDsMkcbrsCRUr/hx1jDC6XioVTBuLFDfuxdlcp3thbilO+IKb3yoOiSZC1htMdCFPA1E0YQROnqgP424ET2HS0PPQNGZjQuxNuGFWIjpn2RvXHFEZkSc0SSEHoZhA+wwe/WYOg4UfQ9KNGeGCYoW/koeVEObJ0UJswjb5hty0aDt223gOxwdvRwkRiUlTpAw0qV6J+X2Kjm2rDudP/b5xIX0gApQi7KsPwa6ix1yTNH8On++ANeuE3/FAlFW7VjSJ3EVyqCy7VlZKHkSxxdHRp6OjS4A1YeYVKK3w44wnAEAIuLZxbKL0nWokz3HF5T+Rn2bB0yyG8f/g0yg0Dtw/qCrM6CDBAtsngMoMZtASP0K16WjUwsfrQKbx34CSChjX5jO6Rixmju6Mw25FQPziToEpWnZ54hAWSLoIIhsSRLoLw6fUFkmmaCJuQGOMRqxEJpNZD3WR6DYduW0vOnLE6uWhkKDwjkjFYbiB0O9qnhiDSBRJAqYABGaqEQNAGr2K22GWEEPAZPniCHuiGbokezY2O9o5wqS44FWermqAcqrUE1jnTjoqaIE5V+3G8yo9jFT6oEofLJsOmpO8DljGGfx/aFZ1cGp58/xt8+l05KgI65l3eB7agQNCrQ/ea4AqHYpchVAnv7T+BFV8ehSdgLScM6OzGLWOK0C+/eWvUhYkIpIZ8kIQZEUWW9UhHUAQQ0H3wm/7IMltYIIVD+xlj1tJalEWAfDQSJzp0O9pB2DANmAiFbjMWiZaUGI/JRRMO3dZCGYNlLseGakdZayh0m2jr0G93CpAZh8QAVVPAm7lslBACNXoNPEFrCcMm29DB1gG59ly4VBccsqPVTzqcM2RnqMjOUFGY40C5N4jjlT6c9vhx2hOAU5Ph1GRIaRrJdGnvjsjJUPGbd3fjmxPVuH/NLiycfAHyc50wdROQOT7efwp/3X4Yp6oDAIDuOQ7MHFOE4d2zU/rvxxmHKmmNEEi1/ke6CMKv18Bv+hEwfAiaAfhCUW5h+4O1hBJy0o7Kp9Laf1fPl3ih27EWGzNOLpromk4SNClU04mpUCQ1jpCh0G2CiAcJoBQgSwyywaDYVEgqgynM81p+MoVpRW7pXpimCZtsQ54jDzm2HEv0KIktk7QmbIqE/EwJeW4NlT4dZR4/Siv8OFHlC/kSpafj9IDOmXjiJ4Px4D++RmmlD796+0vMv7o/qv06Xtt6GP864wUAdHBq+M9R3TC+b6e0EHyxAimj3v5w4cbI8lrImhQw/PAZNSGBFIRPeGMEEmPMWmKLWWZrfU6xMYKmXui2US8XDQOL3AcPCRpV0kKh2xoUrsb1nYm20pCgIYimkX4zRxtA4QwwTbjcDqhcgW5ay1OJYAoTnqAH3qA1UdplOzo7OyNHs0SPTW5dxTjPF8YYMu0KMu0KumQ7UOYN4GSlH6eq/Sj3BmFTJLhsclo5TnfNduCJn1yI37y7C98cr8a8FTsj+1yajGnDCzFpUEGbKTQLhC0YlqNsPKw8SLW5j4yQo7bf8Fkv0wfd1OEXPhhCjyz1tJRACoduGzGCpm5Np1BCy9D/6oZua5IDClOsjMGSLTZUO46wIUFDEMmBBFAKkCQGmXFkOG1QfAqCZrBRAiico6cmWAPGGByyA91c3ZBly4JbdScsotIVReLo5LKhk8sGjz/kOF1Z6zjt1hRkaOkxkWQ7VPx2yiAsXrcX2w6egSpzXHthZ1w3tCucWvv782SMRbLw2lHfchktkGr9kIIImAH4dC8CDQkksBj/I84kCAgYQo9YbcJLT1b72lzhnEcvOdWGbodrOsWcl9dfcmptViqCICza3xM2xagyh12WoWocDrsNNt0GT9ADNJBqRzd1VAer4dN94ODIUDJQlFWELC0LLtXVfDl60pSMUJRY56yQ43SVtTx2rDIAhUtw22Vocut2nLYpEu77cX+U/KscRbkO5Drj+9cQsQIpHlb2YMtqFKwjkCw/pJqI43ZY0FjVtrVQLhoFMlfOmjGYBA1BtA1IACUZt11BQaYNsipB0SRk+DJQ5i+LaRPO0ePX/ZC5jAwlA10zuyJTy4RTdUKmyIx6SJwhJ8OqTt8t11oiK63wocwbQFAPIKOVO05LnGFY94YzRBONw1oKs0RMvEXgsEAyhFG7VEWh2wTRLqGZNEXYXCoYZ7DLdpjChN/wwxPwRHL0OBUnuru6w6254VScLZqYsK1hUyQUZNqR77ah0mdlnD5W4cOJKh94KAmjXaXxbI9EBFJDJleCINoNJIBSgKRw2OzW0GuSBg4OT8ADl+pCD0cPuFU3MpQMMrWfJ3Udp8trAjgRcpw+4/XDochw2WTIaeQ4TRAEQTQPJIBSgKxwKJplgcjUMnFB7gVwqs60yNGTrqhyreN0tV9HmSeAYxU1OOUJQAgBl01BhpoejtMEQRDE+UMCKAUomhQRQKqkIi8jL8U9al+EEyl2zrKj3BvAySo/Tlb7cbQiAE2W4LYpbSr0nCAIgqgPCaAkY8tQIMk8afW/iIaROEOuU0OuU0NR0MAZTwDHK3044w1AN0xkqApctvSvQ0YQBEHUhwRQkpFkDomsC60OmyKhc5YdBZk2VNboVh2ySh9KK2ogcw4XOU4TBEG0KUgAEUQUjDFkOhRkOpRQHbLaJItnvH44VBkujRynCYIg0h0SQATRAKrM0cltQye3DVW+IMo8ARyt8OGUJwBAwKUpcJDjNEEQRFpCAoggGoHLpsBlUyzH6UjGaT/KKwKwyRLcdiWt6pARBJFehMu6CACht5HtIqZd6CdEnXa126O3RT6J2n0x2+teI2qfiLpAdL9EVCOB+tcQAgjoJoDUZr0nAUQQCSBLHB2cGjo4NXTPNXDGG0BpRQ3OeAMwTBNOVYGTHKcJolFET6zNPqnHOaY5JnURtS/eNcKF5BgLH8NC762WDAzRTWvPEPXMCJ+s9kAwZtWmi3m0sOh9tZtYZEfUNVjtdhazndU7NpyCLtyOMWa9wtsYwMEjfQm34zxyBXAePp+1HaFzcxY+H1Je75AEEEE0EbsqoYtqR4HbhkpfMOQ47UdppQ8yY3DbFdgUcpxubzT3pB4zeTfjpC5qT3bWST0yBzdxUmeR8wowxmLOZbVv4qQe53gWPhC1ky8A6wtJnfPWndQ5Y5Fzhc8XmaxRO2mz0Plq29TdXysyYn9GCY0GxUj87Q0dC9a4dtHj29C16x3bDr7EkQAiiPOEc4Ysh4oshxpynA5adcg8AZz2WI7TbpvSauuQpTNCCJgCMIWAKawJ2wxvM60p3jRF7bZQGxGe/qMmYmGVf7cmdhGuBR+uCh+5YpMn9ehJunZij5qYgaj3jZ/Uo9txzmv389B5mmlSrzuJAjjrhNvYST16zOKKnyZO6ix6zKL6SxBhSAARRDOiyRLy3BI6uTRU+3Wc8QRwrMKHk9U+MDA4NbldO06bQkSEiWHWChYhAEOIiKCxipZG7QdixUrofDw0MXMees+tyTvy4oCicavqu8QgcQZF4pA4a5ZJPUbUxJtwmzipxxNSNKkTRPNCAoggWgDGWMRxukvIcfpElQ8nq/yoqAxCk3ird5wWdawmYStLWKBELC/RlpbQz/DyiDU1W++EsJJPggFSyAphCRVLtEicQZY4ZB56zy3RYn3mlsgJtWMMkCIixzqHxKOET+gziQOCIBqCBBBBtDDRjtPeXB1l3iCOldfgjCcAwxRw2WRkaOfvOF13Ocg0rQUb02xgiSj8OSpOI+zLEb3MwjggRSwtlqiQwCBLgMy59ZIQES+KxGOFScjXQgp95iGhIoWWV2qFC1kzCIJIHiSACCKJOFQZDlVGgduGipogTnv8KK3041iFD4rE4FBloIHloPD76GiTiC8K4i8HhcUH5wwyY1BkFnc5KCxYJFZfpJzN8kIQBJGukAAiiBTAOUN2horsDMtxuswTxPFKH6r8OjhAy0EEQRAtDAkggkgxmiwhP1NCnluDbgpaDiIIgkgCJIAIopXAGIMikeghCIJIBq03BIUgCIIgCKKFIAFEEARBEES7Iy0E0HPPPYeioiLYbDaMGjUK27dvP2v75cuXo1+/frDZbBg0aBBWr16dpJ4SBEEQBJEOtHoB9Oabb2Lu3LlYuHAhPv/8c1x44YWYOHEiTpw4Ebf9li1bcMMNN+CnP/0piouLMWXKFEyZMgVfffVVkntOEARBEERrhYnoKnmtkFGjRmHEiBF49tlnAQCmaaKwsBB33XUX5s2bV6/99OnT4fF4sGrVqsi2iy++GEOGDMGLL77YqGtWVlYiMzMTFRUVcLvdzXMjBEEQBEG0KInM363aAhQIBLBjxw5MmDAhso1zjgkTJmDr1q1xj9m6dWtMewCYOHFig+0BwO/3o7KyMuZFEARBEETbpVULoFOnTsEwDOTl5cVsz8vLQ2lpadxjSktLE2oPAIsWLUJmZmbkVVhYeP6dJwiCIAii1dKqBVCyuO+++1BRURF5/etf/0p1lwiCIAiCaEFadSLEDh06QJIkHD9+PGb78ePHkZ+fH/eY/Pz8hNoDgKZp0DTt/DtMEARBEERa0KotQKqqYtiwYVi/fn1km2maWL9+PUaPHh33mNGjR8e0B4D333+/wfYEQRAEQbQ/WrUFCADmzp2LmTNnYvjw4Rg5ciSeeuopeDwe3HrrrQCAm2++GV26dMGiRYsAAHfffTfGjRuH3//+97j66quxbNkyfPbZZ3j55ZdTeRsEQRAEQbQiWr0Amj59Ok6ePIn/+Z//QWlpKYYMGYK1a9dGHJ2PHDkCzmsNWWPGjMHrr7+OBQsW4P7770fv3r2xcuVKDBw4MFW3QBAEQRBEK6PV5wFKBZQHiCAIgiDSj0Tm71ZvAUoFYU1I+YAIgiAIIn0Iz9uNse2QAIpDVVUVAFA+IIIgCIJIQ6qqqpCZmXnWNrQEFgfTNHH06FG4XC4wxprtvJWVlSgsLMS//vUvWlprYWiskwONc3KgcU4ONM7Jo6XGWgiBqqoqdO7cOcY/OB5kAYoD5xxdu3ZtsfO73W7640oSNNbJgcY5OdA4Jwca5+TREmN9LstPmFadB4ggCIIgCKIlIAFEEARBEES7gwRQEtE0DQsXLqSyG0mAxjo50DgnBxrn5EDjnDxaw1iTEzRBEARBEO0OsgARBEEQBNHuIAFEEARBEES7gwQQQRAEQRDtDhJABEEQBEG0O0gANTPPPfccioqKYLPZMGrUKGzfvv2s7ZcvX45+/frBZrNh0KBBWL16dZJ6mt4kMs5LlizBpZdeiuzsbGRnZ2PChAnn/Hchakn0dzrMsmXLwBjDlClTWraDbYREx7m8vByzZ89GQUEBNE1Dnz596PnRCBId56eeegp9+/aF3W5HYWEh5syZA5/Pl6Tepicff/wxJk+ejM6dO4MxhpUrV57zmA0bNmDo0KHQNA29evXC0qVLW7yfEESzsWzZMqGqqnjllVfE119/LW677TaRlZUljh8/Hrf95s2bhSRJ4vHHHxe7du0SCxYsEIqiiJ07dya55+lFouN84403iueee04UFxeL3bt3i1tuuUVkZmaK7777Lsk9Tz8SHeswBw8eFF26dBGXXnqpuPbaa5PT2TQm0XH2+/1i+PDhYtKkSWLTpk3i4MGDYsOGDaKkpCTJPU8vEh3nv/71r0LTNPHXv/5VHDx4ULz33nuioKBAzJkzJ8k9Ty9Wr14t5s+fL1asWCEAiHfeeees7Q8cOCAcDoeYO3eu2LVrl3jmmWeEJEli7dq1LdpPEkDNyMiRI8Xs2bMjnw3DEJ07dxaLFi2K237atGni6quvjtk2atQo8bOf/axF+5nuJDrOddF1XbhcLvHaa6+1VBfbDE0Za13XxZgxY8Sf/vQnMXPmTBJAjSDRcX7hhRdEjx49RCAQSFYX2wSJjvPs2bPFFVdcEbNt7ty5YuzYsS3az7ZEYwTQr371KzFgwICYbdOnTxcTJ05swZ4JQUtgzUQgEMCOHTswYcKEyDbOOSZMmICtW7fGPWbr1q0x7QFg4sSJDbYnmjbOdfF6vQgGg8jJyWmpbrYJmjrWDz/8MDp16oSf/vSnyehm2tOUcf773/+O0aNHY/bs2cjLy8PAgQPx6KOPwjCMZHU77WjKOI8ZMwY7duyILJMdOHAAq1evxqRJk5LS5/ZCquZCKobaTJw6dQqGYSAvLy9me15eHvbs2RP3mNLS0rjtS0tLW6yf6U5Txrkuv/71r9G5c+d6f3BELE0Z602bNuHPf/4zSkpKktDDtkFTxvnAgQP48MMPcdNNN2H16tXYt28f7rjjDgSDQSxcuDAZ3U47mjLON954I06dOoVLLrkEQgjouo6f//znuP/++5PR5XZDQ3NhZWUlampqYLfbW+S6ZAEi2hWPPfYYli1bhnfeeQc2my3V3WlTVFVVYcaMGViyZAk6dOiQ6u60aUzTRKdOnfDyyy9j2LBhmD59OubPn48XX3wx1V1rU2zYsAGPPvoonn/+eXz++edYsWIF3n33XTzyyCOp7hrRDJAFqJno0KEDJEnC8ePHY7YfP34c+fn5cY/Jz89PqD3RtHEOs3jxYjz22GP44IMPMHjw4JbsZpsg0bHev38/Dh06hMmTJ0e2maYJAJBlGXv37kXPnj1bttNpSFN+pwsKCqAoCiRJimzr378/SktLEQgEoKpqi/Y5HWnKOD/wwAOYMWMGZs2aBQAYNGgQPB4Pbr/9dsyfPx+ckw2hOWhoLnS73S1m/QHIAtRsqKqKYcOGYf369ZFtpmli/fr1GD16dNxjRo8eHdMeAN5///0G2xNNG2cAePzxx/HII49g7dq1GD58eDK6mvYkOtb9+vXDzp07UVJSEnldc801uPzyy1FSUoLCwsJkdj9taMrv9NixY7Fv376IwASAb775BgUFBSR+GqAp4+z1euuJnLDoFFRGs9lI2VzYoi7W7Yxly5YJTdPE0qVLxa5du8Ttt98usrKyRGlpqRBCiBkzZoh58+ZF2m/evFnIsiwWL14sdu/eLRYuXEhh8I0g0XF+7LHHhKqq4u233xbHjh2LvKqqqlJ1C2lDomNdF4oCaxyJjvORI0eEy+USd955p9i7d69YtWqV6NSpk/jNb36TqltICxId54ULFwqXyyXeeOMNceDAAbFu3TrRs2dPMW3atFTdQlpQVVUliouLRXFxsQAgnnzySVFcXCwOHz4shBBi3rx5YsaMGZH24TD4e++9V+zevVs899xzFAafjjzzzDOiW7duQlVVMXLkSPHJJ59E9o0bN07MnDkzpv1bb70l+vTpI1RVFQMGDBDvvvtuknucniQyzt27dxcA6r0WLlyY/I6nIYn+TkdDAqjxJDrOW7ZsEaNGjRKapokePXqI3/72t0LX9ST3Ov1IZJyDwaB48MEHRc+ePYXNZhOFhYXijjvuEGVlZcnveBrxz3/+M+4zNzy2M2fOFOPGjat3zJAhQ4SqqqJHjx7i1VdfbfF+MiHIjkcQBEEQRPuCfIAIgiAIgmh3kAAiCIIgCKLdQQKIIAiCIIh2BwkggiAIgiDaHSSACIIgCIJod5AAIgiCIAii3UECiCAIgiCIdgcJIIIgCIIg2h0kgAiCaHaKiorw1FNPNbr90qVLkZWVldA1xo8fj1/+8pcJHQMAjDGsXLky4eMIgmhbkAAiiHbAoUOHwBhDSUlJzPZbbrkFU6ZMSUmfopk+fTq++eabhI5ZsWIFHnnkkcjnREUXQRDtGznVHSAIgrDb7bDb7Qkdk5OT00K9aVkCgQBVbCeIVgBZgAiijbB27VpccsklyMrKQm5uLv7t3/4N+/fvBwD84Ac/AABcdNFFYIxh/PjxePDBB/Haa6/hb3/7GxhjYIxhw4YNAIBf//rX6NOnDxwOB3r06IEHHngAwWAw5nr/+Mc/MGLECNhsNnTo0AFTp05tsG9/+tOfkJWVhfXr18fdX3cJ7MEHH8SQIUPwl7/8BUVFRcjMzMT111+PqqqqSJvoJbDx48fj8OHDmDNnTuReGsvChQtRUFCAL7/8Es8++ywGDhwY2bdy5UowxvDiiy9Gtk2YMAELFiwAAOzfvx/XXnst8vLy4HQ6MWLECHzwwQcx5y8qKsIjjzyCm2++GW63G7fffjsAYMmSJSgsLITD4cDUqVPx5JNPxozBF198gcsvvxwulwtutxvDhg3DZ5991uB9lJeXY9asWejYsSPcbjeuuOIKfPHFF/XG9KWXXopcd9q0aaioqIi02bBhA0aOHImMjAxkZWVh7NixOHz4cKPHkiDSCRJABNFG8Hg8mDt3Lj777DOsX78enHNMnToVpmli+/btAIAPPvgAx44dw4oVK3DPPfdg2rRp+NGPfoRjx47h2LFjGDNmDADA5XJh6dKl2LVrF/74xz9iyZIl+MMf/hC51rvvvoupU6di0qRJKC4uxvr16zFy5Mi4/Xr88ccxb948rFu3DldeeWWj72f//v1YuXIlVq1ahVWrVuGjjz7CY489FrftihUr0LVrVzz88MORezkXQgjcdddd+N///V9s3LgRgwcPxrhx47Br1y6cPHkSAPDRRx+hQ4cOEWEYDAaxdetWjB8/HgBQXV2NSZMmYf369SguLsaPfvQjTJ48GUeOHIm51uLFi3HhhReiuLgYDzzwADZv3oyf//znuPvuu1FSUoKrrroKv/3tb2OOuemmm9C1a1d8+umn2LFjB+bNmwdFURq8n//4j//AiRMnsGbNGuzYsQNDhw7FlVdeiTNnzkTa7Nu3D2+99Rb+8Y9/YO3atSguLsYdd9wBANB1HVOmTMG4cePw5ZdfYuvWrbj99tsTEpMEkVa0eL15giBSwsmTJwUAsXPnTnHw4EEBQBQXF8e0mTlzprj22mvPea4nnnhCDBs2LPJ59OjR4qabbmqwfffu3cUf/vAH8atf/UoUFBSIr7766qznf/XVV0VmZmbk88KFC4XD4RCVlZWRbffee68YNWpU5PO4cePE3XffXe+a5wKAWL58ubjxxhtF//79xXfffRfZZ5qmyM3NFcuXLxdCCDFkyBCxaNEikZ+fL4QQYtOmTUJRFOHxeBo8/4ABA8QzzzwT068pU6bEtJk+fbq4+uqrY7bddNNNMWPgcrnE0qVLz3k/QgixceNG4Xa7hc/ni9nes2dP8dJLLwkhrDGVJCnmftesWSM45+LYsWPi9OnTAoDYsGFDo65JEOkOWYAIoo3w7bff4oYbbkCPHj3gdrtRVFQEAPWsEY3hzTffxNixY5Gfnw+n04kFCxbEnKekpOSc1pzf//73WLJkCTZt2oQBAwYk3IeioiK4XK7I54KCApw4cSLh88Rjzpw52LZtGz7++GN06dIlsp0xhssuuwwbNmxAeXk5du3ahTvuuAN+vx979uzBRx99hBEjRsDhcACwLED33HMP+vfvj6ysLDidTuzevbvemA8fPjzm8969e+tZzOp+njt3LmbNmoUJEybgscceiyxnxuOLL75AdXU1cnNz4XQ6I6+DBw/GHNetW7eY+x09ejRM08TevXuRk5ODW265BRMnTsTkyZPxxz/+sVGWNIJIV0gAEUQbYfLkyThz5gyWLFmCbdu2Ydu2bQAsp9tE2Lp1K2666SZMmjQJq1atQnFxMebPnx9znsY4LF966aUwDANvvfVWYjcSou5yD2MMpmk26Vx1ueqqq/D999/jvffeq7dv/Pjx2LBhAzZu3IiLLroIbrc7Ioo++ugjjBs3LtL2nnvuwTvvvINHH30UGzduRElJCQYNGlRvzDMyMhLu44MPPoivv/4aV199NT788ENccMEFeOedd+K2ra6uRkFBAUpKSmJee/fuxb333tvoa7766qvYunUrxowZgzfffBN9+vTBJ598knDfCSIdIAFEEG2A06dPY+/evViwYAGuvPJK9O/fH2VlZZH94agjwzBijlNVtd62LVu2oHv37pg/fz6GDx+O3r1713OEHTx4cIMOzWFGjhyJNWvW4NFHH8XixYvP5/YaRbx7aYhrrrkGr7/+OmbNmoVly5bF7Av7AS1fvjzi6zN+/Hh88MEH2Lx5c2QbAGzevBm33HILpk6dikGDBiE/Px+HDh065/X79u2LTz/9NGZb3c8A0KdPH8yZMwfr1q3Dddddh1dffTXu+YYOHYrS0lLIsoxevXrFvDp06BBpd+TIERw9ejTy+ZNPPgHnHH379o1su+iii3Dfffdhy5YtGDhwIF5//fVz3g9BpCMkgAiiDZCdnY3c3Fy8/PLL2LdvHz788EPMnTs3sr9Tp06w2+1Yu3Ytjh8/Hon8KSoqwpdffom9e/fi1KlTCAaD6N27N44cOYJly5Zh//79ePrpp+tZHhYuXIg33ngDCxcuxO7du7Fz50787ne/q9evMWPGYPXq1XjooYdicvQ8++yzCTlEN4aioiJ8/PHH+P7773Hq1CkAwPfff49+/fpFnMCjmTp1Kv7yl7/g1ltvxdtvvx3ZPnjwYGRnZ+P111+PEUArV66E3+/H2LFjI2179+6NFStWoKSkBF988QVuvPHGRlmp7rrrLqxevRpPPvkkvv32W7z00ktYs2ZNxOG4pqYGd955JzZs2IDDhw9j8+bN+PTTT9G/f/+49zVhwgSMHj0aU6ZMwbp163Do0CFs2bIF8+fPj4kcs9lsmDlzJr744gts3LgR//3f/41p06YhPz8fBw8exH333YetW7fi8OHDWLduHb799tvINQmirUECiCDaAJxzLFu2DDt27MDAgQMxZ84cPPHEE5H9sizj6aefxksvvYTOnTvj2muvBQDcdttt6Nu3L4YPH46OHTti8+bNuOaaazBnzhzceeedGDJkCLZs2YIHHngg5nrjx4/H8uXL8fe//x1DhgzBFVdcEVdkAMAll1yCd999FwsWLMAzzzwDADh16tRZfVqawsMPP4xDhw6hZ8+e6NixIwAramvv3r3wer1xj/nJT36C1157DTNmzMCKFSsAWEttl156KRhjuOSSSwBYosjtdmP48OExy1lPPvkksrOzMWbMGEyePBkTJ07E0KFDz9nXsWPH4sUXX8STTz6JCy+8EGvXrsWcOXNgs9kAAJIk4fTp07j55pvRp08fTJs2DT/+8Y/x0EMPxb0vxhhWr16Nyy67DLfeeiv69OmD66+/HocPH0ZeXl7kur169cJ1112HSZMm4Yc//CEGDx6M559/HgDgcDiwZ88e/Pu//zv69OmD22+/HbNnz8bPfvazhP4dCCJdYEIIkepOEARBtHduu+027NmzBxs3bmyR8z/44INYuXJlvWzgBNFeoUzQBEEQKWDx4sW46qqrkJGRgTVr1uC1116LWGMIgmh5SAARBEGkgO3bt+Pxxx9HVVUVevTogaeffhqzZs1KdbcIot1AS2AEQRAEQbQ7yAmaIAiCIIh2BwkggiAIgiDaHSSACIIgCIJod5AAIgiCIAii3UECiCAIgiCIdgcJIIIgCIIg2h0kgAiCIAiCaHeQACIIgiAIot3x/wFGbGWj6klUbgAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "sns.lineplot(\n", - " data=df,\n", - " y=\"adv_fit_time\",\n", - " x=\"attack.init.kwargs.eps\",\n", - " hue=\"model.init.kwargs.kernel\",\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjMAAAGxCAYAAACXwjeMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAADRbklEQVR4nOydd3zU9f3Hn9/v9/bIHpAQIGxkiggiqDhaREVxVmvdWlv3Xq3bal2ttfanVqto1WpbB666EBw4EJElyExY2esut+++3+/vj0sOQhLIuOTuks/z8QjkvvN9l+T7fX3fU9J1XUcgEAgEAoEgRZETbYBAIBAIBAJBdxBiRiAQCAQCQUojxIxAIBAIBIKURogZgUAgEAgEKY0QMwKBQCAQCFIaIWYEAoFAIBCkNELMCAQCgUAgSGmEmBEIBAKBQJDSGBJtQE+jaRplZWU4nU4kSUq0OQKBQCAQCDqArus0NjZSUFCALO/b99LnxUxZWRlFRUWJNkMgEAgEAkEX2LFjB4MGDdrnNn1ezDidTiD6YaSlpSXYGoFAIBAIBB3B7XZTVFQUu4/viz4vZppDS2lpaULMCAQCgUCQYnQkRUQkAAsEAoFAIEhphJgRCAQCgUCQ0ggxIxAIBAKBIKXp8zkzAoFA0NdQVZVwOJxoMwSCbmE0GlEUJS7HEmJGIBAIUgRd16moqKChoSHRpggEcSEjI4MBAwZ0uw+cEDMCgUCQIjQLmby8PGw2m2gEKkhZdF3H5/NRVVUFwMCBA7t1PCFmBAKBIAVQVTUmZLKzsxNtjkDQbaxWKwBVVVXk5eV1K+QkEoAFAoEgBWjOkbHZbAm2RCCIH82/z93NARNiRiAQCFIIEVoS9CXi9fssxIxAIBAIOszs2bO55pprOrz9ggULyMjIaHd9aWkpkiSxcuXKDh/zrrvuYvLkyR3evpnO2p4qJPP7Gjp0KI899liPn0eIGYFAIBAkjKKiIsrLyxk/fnyH97nhhhtYtGhR7PX555/P/Pnze8A6QaogxIxAIBAIEoaiKAwYMACDoeP1KA6HIyWToEOhUKJN6BCpYueeCDEjEAgEfYDZs2dz5ZVXcs0115CZmUl+fj7PPPMMXq+XCy64AKfTyYgRI/jf//4X2+ezzz5j2rRpmM1mBg4cyC233EIkEomt93q9nHvuuTgcDgYOHMijjz7a6rzBYJAbbriBwsJC7HY706dPZ8mSJR22e+8w05IlS5AkiUWLFjF16lRsNhuHHnooGzZsiO2zZ5jprrvu4oUXXmDhwoVIkoQkSR0+/3vvvUd6ejovv/wya9euRZZlqqurAairq0OWZc4888zY9vfddx+zZs0CotVlF110EcXFxVitVkaPHs1f/vKXFsdv9hj94Q9/oKCggNGjRwPw1VdfMXnyZCwWC1OnTuWtt95q8RnU19dz9tlnk5ubi9VqZeTIkTz//PMd/kz3fF8AO3bs4IwzziAjI4OsrCxOOukkSktL92ln88/ljTfe4Mgjj8RmszFp0iS+/vrrFuf68ssvOeyww7BarRQVFXHVVVfh9Xo7bGu8EGKmG2iqRjioJtoMgUAgAOCFF14gJyeHZcuWceWVV/Lb3/6W008/nUMPPZQVK1bw85//nHPOOQefz8euXbs47rjjOPjgg1m1ahVPPvkk//jHP7jvvvtix7vxxhv57LPPWLhwIR999BFLlixhxYoVLc55xRVX8PXXX/Pqq6+yevVqTj/9dI499lg2bdrUrffyu9/9jkcffZTly5djMBi48MIL29zuhhtu4IwzzuDYY4+lvLyc8vJyDj300P0e/5VXXuGss87i5Zdf5uyzz2bcuHFkZ2fz2WefAfDFF1+0eA1R8Td79mwANE1j0KBB/Oc//2HdunXccccd3Hbbbfz73/9ucZ5FixaxYcMGPv74Y959913cbjfz5s1jwoQJrFixgnvvvZebb765xT63334769at43//+x/r16/nySefJCcnp0Of297vKxwOM2fOHJxOJ1988QVLly7F4XBw7LHHtvDA7G1nM7/73e+44YYbWLlyJaNGjeKss86KCd4tW7Zw7LHHcuqpp7J69Wpee+01vvzyS6644ooO2RpX9D6Oy+XSAd3lcsX92J6GgF5R0qBrqhb3YwsEAsGe+P1+fd26dbrf729z/RFHHKHPmjUr9joSieh2u10/55xzYsvKy8t1QP/666/12267TR89erSuabuvX3/72990h8Ohq6qqNzY26iaTSf/3v/8dW19bW6tbrVb96quv1nVd17dt26YriqLv2rWrhS1HH320fuutt+q6ruvPP/+8np6e3u77Kikp0QH9hx9+0HVd1xcvXqwD+ieffBLb5r333tOB2Hu/88479UmTJsXWn3feefpJJ53U7jn2/Iyuvvpq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eDHuvvvu9P2OBijWOzoTVBnLJXpfF4Ax1j/4/X74/f4OPaewsLCHStOzEokEr0jN2ADCNTOMdaPly5fjy1/+MvLz81FUVISvfe1r+OSTTwAAxx13HADgtNNOgxAC06dPx1133YUnn3wSf//73yGEgBACK1euBAD86Ec/wujRoxEIBDBy5Ej85Cc/QTKZzHq9F154ARMnToTP50NxcTFmz57datn++Mc/Ij8/HytWrGjx8aZ/vd91112YMGECnnrqKYwYMQJ5eXm4/PLLUVtbm94ns5lp+vTp2L17N2655Zb0e2mv+fPno7S0FFu2bMFDDz2EcePGpR9bunQphBB49NFH09tmzJiBO++8EwDwySef4JJLLkFJSQlCoRAmTpyIV199Nev4I0aMwN13343vfve7iEQiuO666wAACxcuRFlZGQKBAGbPno37778/6xxs3rwZ55xzDsLhMCKRCM444wy88847rb6PqqoqXHvttRg0aBAikQjOPfdcbN68udk5feyxx9Kve+mll6K6ujq9z8qVKzFp0iQEg0Hk5+dj2rRp2L17d5vnsLWyrly5Etdccw2qq6vTP5e77roLABCPx3HrrbfimGOOQTAYxOTJk9OfP6DxM7F06VKccMIJ8Pl8uOCCC/DZZ5+1WR7GehOHGca6UX19PebNm4d33nkHK1asgJQSs2fPhlIK69evBwC8+uqr2LdvHxYvXoxbb70Vl156KS688ELs27cP+/btw9SpUwEA4XAYTzzxBLZu3Yrf/OY3WLhwIR544IH0a7300kuYPXs2LrroImzcuBErVqzApEmTWizXr3/9a9x222145ZVXcN5557X7/XzyySdYunQpXnzxRbz44otYtWoV7r333hb3Xbx4MYYNG4af//zn6ffSFiLCjTfeiD//+c9YvXo1xo8fj7PPPhtbt27FoUOHAACrVq1CcXFx+iKbTCaxbt06TJ8+HQBQV1eHiy66CCtWrMDGjRtx4YUXYubMmdizZ0/Wa91333049dRTsXHjRvzkJz/B2rVr8f3vfx833XQTNm3ahPPPPx+//OUvs54zZ84cDBs2DG+//TY2bNiA2267DYZhtPp+vvWtb+HgwYN4+eWXsWHDBpx++uk477zzUFFRkd5nx44d+Otf/4oXXngBy5cvx8aNG3H99dcDAGzbxqxZs3D22Wdjy5YtWLduHa677rp2BcPWyjp16lQ8+OCDiEQi6Z/LrbfeCgC44YYbsG7dOixatAhbtmzBt771LVx44YX4+OOP08eNRqP45S9/iT//+c9Yu3YtqqqqcPnll7dZHsZ6VY+vy83YUezQoUMEgN577z3auXMnAaCNGzdm7XPVVVfRJZdc0uax/vM//5POOOOM9P0pU6bQnDlzWt1/+PDh9MADD9APf/hDKi0tpffff/+Ix3/88ccpLy8vfX/+/PkUCASopqYmve0HP/gBTZ48OX3/7LPPpptuuqnZa7YFAD333HN0xRVX0NixY+nzzz9PP6aUoqKiInruueeIiGjChAm0YMECGjJkCBERrVmzhgzDoPr6+laPf/LJJ9Pvfve7rHLNmjUra5/LLruMLr744qxtc+bMyToH4XCYnnjiiTbfDxHR6tWrKRKJUCwWy9o+atQoeuyxx4jIPaeapmW935dffpmklLRv3z46fPgwAaCVK1e26zUzHamsTX+2RES7d+8mTdNo7969WdvPO+88uv3229PPA0Bvvvlm+vFt27YRAHrrrbc6XEbGegrXzDDWjT7++GN8+9vfxsiRIxGJRDBixAgAaFZL0B7PPvsspk2bhiFDhiAUCuHOO+/MOs6mTZvarGX5r//6LyxcuBBr1qzBySef3OEyjBgxAuFwOH2/tLQUBw8e7PBxWnLLLbfgrbfewuuvv45jjjkmvV0Iga985StYuXIlqqqqsHXrVlx//fWIx+P48MMPsWrVKkycOBGBQACAWzNz6623YuzYscjPz0coFMK2bduanfMzzzwz6/727dub1WQ1vT9v3jxce+21mDFjBu699950k2FLNm/ejLq6OhQVFSEUCqVvO3fuzHresccem/V+p0yZAqUUtm/fjsLCQlx99dW44IILMHPmTPzmN79pVw1XR8sKAO+99x4cx8Ho0aOzyrtq1aqs5+q6jokTJ6bvjxkzBvn5+di2bVu7ysVYb+Aww1g3mjlzJioqKrBw4UK89dZbeOuttwC4HU47Yt26dZgzZw4uuugivPjii9i4cSPuuOOOrOO0p7PuWWedBcdx8Ne//rVjb8TTtElFCAGlVKeO1dT555+PvXv34h//+Eezx6ZPn46VK1di9erVOO200xCJRNIBZ9WqVTj77LPT+956661YsmQJ7rnnHqxevRqbNm3CKaec0uycB4PBDpfxrrvuwgcffICLL74Yr732Gk466SQsWbKkxX3r6upQWlqKTZs2Zd22b9+OH/zgB+1+zccffxzr1q3D1KlT8eyzz2L06NF48803u7WsqfJqmoYNGzZklXfbtm34zW9+0+7yMtYfcJhhrJscPnwY27dvx5133onzzjsPY8eORWVlZfrx1OgZx3GynmeaZrNtb7zxBoYPH4477rgDZ555Jk444YRmnUDHjx/famfelEmTJuHll1/GPffcg/vuu68rb69dWnovrfn617+OZ555Btdeey0WLVqU9Viq38xzzz2X7hszffp0vPrqq1i7dm16GwCsXbsWV199NWbPno1TTjkFQ4YMwa5du9p8/RNPPBFvv/121ram9wFg9OjRuOWWW/DKK6/gG9/4Bh5//PEWj3f66adj//790HUdxx9/fNatuLg4vd+ePXvwxRdfpO+/+eabkFLixBNPTG877bTTcPvtt+ONN97AuHHj8Mwzz7T5fo5U1pZ+Lqeddhocx8HBgweblXfIkCHp/Wzbzur0vH37dlRVVWHs2LHtKhNjvYHDDGPdpKCgAEVFRfjDH/6AHTt24LXXXsO8efPSjw8ePBh+vx/Lly/HgQMH0iNYRowYgS1btmD79u0oLy9HMpnECSecgD179mDRokX45JNP8Nvf/rbZX9nz58/HX/7yF8yfPx/btm3De++9h1/96lfNyjV16lQsW7YMP/vZz7LmgHnooYc61Bm4PUaMGIHXX38de/fuRXl5OQBg7969GDNmTLoDdKbZs2fjqaeewjXXXIO//e1v6e3jx49HQUEBnnnmmawws3TpUsTjcUybNi297wknnIDFixdj06ZN2Lx5M6644op21R7deOONWLZsGe6//358/PHHeOyxx/Dyyy+nO9s2NDTghhtuwMqVK7F7926sXbsWb7/9dvoi3vR9zZgxA1OmTMGsWbPwyiuvYNeuXXjjjTdwxx13ZIUBn8+Hq666Cps3b8bq1avxH//xH7j00ksxZMgQ7Ny5E7fffjvWrVuH3bt345VXXsHHH3/cZnBoq6wjRoxAXV0dVqxYgfLyckSjUYwePRpz5szBd7/7XSxevBg7d+7E+vXrsWDBArz00kvpYxuGgRtvvBFvvfUWNmzYgKuvvhpf+tKXWu1szlif6OtOO4wNJP/85z9p7NixZFkWjR8/nlauXEkAaMmSJUREtHDhQiorKyMpJZ199tlERHTw4EE6//zzKRQKEQD617/+RURuZ9uioiIKhUJ02WWX0QMPPNCsE+fzzz9PEyZMINM0qbi4mL7xjW+kH2vaGXfVqlUUDAbpt7/9LRG5nVGHDx+efrylDsCnnnpq1us98MADWc9p2gF43bp1NH78eLIsi1K/XlIdn1Pvi4iyzgkR0bPPPks+n4+ef/759LZLLrmEdF2n2tpaIiJyHIcKCgroS1/6UlaZdu7cSeeccw75/X4qKyujhx56qN0dk//whz/QMcccQ36/n2bNmkW/+MUv0h2N4/E4XX755VRWVkamadLQoUPphhtuoIaGhlbfV01NDd144400dOhQMgyDysrKaM6cObRnz56sc/rII4/Q0KFDyefz0Te/+U2qqKggIqL9+/fTrFmzqLS0lEzTpOHDh9NPf/pTchynWdkztVVWIqLvf//7VFRURABo/vz5RESUSCTopz/9KY0YMYIMw6DS0lKaPXs2bdmyhYgaPxPPP/88jRw5kizLohkzZtDu3buPWB7GepsgIurDLMUYY/3G9773PXz44YdYvXp1jxz/rrvuwtKlS5vNAt1fPfHEE7j55ptRVVXV10Vh7Ih4BmDG2FHrvvvuw/nnn49gMIiXX34ZTz75JB555JG+LhZjrIO4zwxj7Ki1fv16nH/++TjllFPw6KOP4re//S2uvfbavi5Wi04++eSsIdSZt6effrqvi8dYn+JmJsYYywG7d+9utpxFSklJSdZ8QIwdbTjMMMYYYyyncTMTY4wxxnIahxnGGGOM5TQOM4wxxhjLaRxmGGOMMZbTOMwwxhhjLKdxmGGMMcZYTuMwwxhjjLGcxmGGMcYYYznt/wdHNvb7zPQ4NwAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "sns.lineplot(\n", - " data=df,\n", - " y=\"adv_fit_time\",\n", - " x=\"attack.init.kwargs.eps_step\",\n", - " hue=\"model.init.kwargs.kernel\",\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAGxCAYAAACKvAkXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAC60klEQVR4nOzdeXxU1fn48c+9d/ZM9oRsBAgQFpFVBTcqVivSSl1arWhV6tZWUanVurQuuH5/tVZrbdVqFa1atWq1rdZWqSjiisomiBATwpKNkGSSzH7v/f0xmUmGJJCEJJPlefvKC2fudibL3GfO85xzFNM0TYQQQgghhhE10Q0QQgghhOhvEgAJIYQQYtiRAEgIIYQQw44EQEIIIYQYdiQAEkIIIcSwIwGQEEIIIYYdCYCEEEIIMexIACSEEEKIYceS6AYMRIZhsHv3bpKTk1EUJdHNEUIIIUQXmKZJY2Mj+fn5qOr++3gkAOrA7t27KSwsTHQzhBBCCNEDO3bsYOTIkfvdRwKgDiQnJwORb2BKSkqCWyOEEEKIrvB4PBQWFsbu4/sjAVAHommvlJQUCYCEEEKIQaYr5StSBC2EEEKIYUcCICGEEEIMOxIACSGEEGLYkRogIYQYBnRdJxQKJboZQhwUq9WKpmm9ci4JgIQQYggzTZPKykrq6+sT3RQhekVaWhq5ubkHPU+fBEBCCDGERYOfESNG4HK5ZHJXMWiZponX66W6uhqAvLy8gzqfBEBCCDFE6boeC34yMzMT3RwhDprT6QSgurqaESNGHFQ6TIqghRBiiIrW/LhcrgS3RIjeE/19PtiaNgmAhBBiiJO0lxhKeuv3WQIgIYQQfWrevHksXbq0y/svX76ctLS0TreXlZWhKApr167t8jlvvfVWZsyY0eX9o7rb9sFiIL+uMWPGcP/99/f5dSQAEkIIMagUFhZSUVHBoYce2uVjrrnmGlasWBF7vHjxYk477bQ+aJ0YLCQAEkIIMahomkZubi4WS9fH8bjd7kFZCB4MBhPdhC4ZLO1sSwIgIYQYpubNm8cVV1zB0qVLSU9PJycnh0cffZTm5mZ+9KMfkZyczPjx4/n3v/8dO+add95h9uzZ2O128vLyuP766wmHw7Htzc3NnH/++bjdbvLy8rj33nvbXTcQCHDNNddQUFBAUlISc+bMYeXKlV1u974psJUrV6IoCitWrODwww/H5XJx9NFHs2XLltgxbVNgt956K08++SSvvvoqiqKgKEqXr//aa6+RmprKM888w8aNG1FVlZqaGgD27t2LqqqcffbZsf3vuOMOjj32WCAyKu+iiy6iqKgIp9PJxIkT+d3vfhd3/mjP1J133kl+fj4TJ04E4P3332fGjBk4HA4OP/xwXnnllbjvQV1dHeeeey7Z2dk4nU6Ki4t54oknuvw9bfu6AHbs2MFZZ51FWloaGRkZnHrqqZSVle23ndGfy8svv8zxxx+Py+Vi+vTpfPDBB3HXeu+995g7dy5Op5PCwkKuvPJKmpubu9zW3iIBUD8zdINQQE90M4QQAoAnn3ySrKwsPv74Y6644gp++tOfcuaZZ3L00Ufz2WefcdJJJ3Heeefh9XrZtWsX3/72tzniiCNYt24dDz30EH/+85+54447Yue79tpreeedd3j11Vf573//y8qVK/nss8/irrlkyRI++OADnnvuOdavX8+ZZ57JySefzNatWw/qtfzyl7/k3nvvZc2aNVgsFi688MIO97vmmms466yzOPnkk6moqKCiooKjjz76gOd/9tlnWbRoEc888wznnnsuU6ZMITMzk3feeQeAVatWxT2GSMA4b948AAzDYOTIkfztb39j06ZN3Hzzzdx444288MILcddZsWIFW7Zs4c033+Rf//oXHo+HhQsXMnXqVD777DNuv/12rrvuurhjbrrpJjZt2sS///1vNm/ezEMPPURWVlaXvm/7vq5QKMT8+fNJTk5m1apVrF69GrfbzcknnxzX07NvO6N++ctfcs0117B27VomTJjAokWLYkFySUkJJ598Mt/73vdYv349zz//PO+99x5LlizpUlt7lSnaaWhoMAGzoaGh18/dVO83K8saTEM3ev3cQgjRls/nMzdt2mT6fL4Otx933HHmscceG3scDofNpKQk87zzzos9V1FRYQLmBx98YN54443mxIkTTcNoff/6wx/+YLrdblPXdbOxsdG02WzmCy+8ENteW1trOp1O86qrrjJN0zS3b99uappm7tq1K64tJ5xwgnnDDTeYpmmaTzzxhJmamtrp6yotLTUB8/PPPzdN0zTffvttEzDfeuut2D6vvfaaCcRe+y233GJOnz49tv2CCy4wTz311E6v0fZ7dNVVV5kPPvigmZqaaq5cuTJu+xlnnGFefvnlpmma5tKlS81rr73WTE9PNzdv3mwGg0HT5XKZ//3vfzs9/+WXX25+73vfi2tXTk6OGQgEYs899NBDZmZmZtzP8dFHH437HixcuND80Y9+dMDX05XX9Ze//KXdzzkQCJhOp9P8z3/+02k7oz+Xxx57LPbcF198YQLm5s2bTdM0zYsuusi89NJL49qyatUqU1XV2OsbPXq0ed9993Xa9v39Xnfn/i0TISZAyBcmFNCxOeXbL4RIrGnTpsX+X9M0MjMzmTp1auy5nJwcIDLx3ObNmznqqKPihiEfc8wxNDU1sXPnTurq6ggGg8yZMye2PSMjI5bGAdiwYQO6rjNhwoS4dgQCgYOu0Wn7WqKzBFdXVzNq1KiDOu+LL75IdXU1q1ev5ogjjojbdtxxx/GnP/0JiPT23HXXXXz11VesXLmSvXv3EgqFOOaYY2L7/+EPf+Dxxx+nvLwcn89HMBhsNzpt6tSp2Gy22OMtW7Ywbdo0HA5H7LnZs2fHHfPTn/6U733ve7Feu9NOO+2AvVqdva5169axbds2kpOT4/b3+/2UlJR02s6ozn4OkyZNYt26daxfvz6WaoPIDM+GYVBaWsrkyZP32+beJHfgBAgFdYL+sARAQoiEs1qtcY8VRYl7LhrsGIbRK9drampC0zQ+/fTTdrP4ut3ugzp3X7V75syZfPbZZzz++OMcfvjhcQFgdDj51q1b2bRpE8ceeyxffvklK1eupK6uLlaTBPDcc89xzTXXcO+993LUUUeRnJzMPffcw0cffRR3vaSkpG63ccGCBWzfvp3XX3+dN998kxNOOIHLL7+c3/zmN91+XU1NTRx22GFxQUpUdnb2Adu5v59DU1MTP/7xj7nyyivbHXewgWp3yR04AYywia85hDvdceCdhRBigJg8eTIvvfQSpmnGbmyrV68mOTmZkSNHkpGRgdVq5aOPPordzOrq6vjqq6847rjjgMhNV9d1qqurmTt3bsJei81mQ9e7Vo85btw47r33XubNm4emaTz44IOxbVOnTiU9PZ077riDGTNm4Ha7mTdvHv/v//0/6urqYvU/EPleHX300Vx22WWx59r2qHRm4sSJPP300wQCAex2OwCffPJJu/2ys7O54IILuOCCC5g7dy7XXnvtfgOgzl7XrFmzeP755xkxYgQpKSkHbF93zJo1i02bNjF+/PhePW9PSBF0ggSaQuh673yiEkKI/nDZZZexY8cOrrjiCr788kteffVVbrnlFq6++mpUVcXtdnPRRRdx7bXX8r///Y+NGzeyePFiVLX1VjNhwgTOPfdczj//fF5++WVKS0v5+OOPufvuu3nttdc6vO7HH3/MpEmT2LVrV6+9ljFjxrB+/Xq2bNnCnj17YssqnHDCCXEBTtt2v/3227z00ktxEwgqisI3vvENnnnmmViwM23aNAKBACtWrIgFfgDFxcWsWbOG//znP3z11VfcdNNNHQYy+zrnnHMwDINLL72UzZs385///CcW2EQD0ZtvvplXX32Vbdu28cUXX/Cvf/0rLp3Undd17rnnkpWVxamnnsqqVasoLS1l5cqVXHnllezcufOA7d2f6667jvfff58lS5awdu1atm7dyquvvpqQImgJgBIkFNAJ+WU0mBBi8CgoKOD111/n448/Zvr06fzkJz/hoosu4le/+lVsn3vuuYe5c+eycOFCTjzxRI499lgOO+ywuPM88cQTnH/++fz85z9n4sSJnHbaaXzyySedpkC8Xi9btmw56LWf2rrkkkuYOHEihx9+ONnZ2axevRqI9Mjs2bOnw2MmTpzI//73P/7617/y85//PPb8cccdh67rsQBIVVW+8Y1voChKXP3Pj3/8Y8444wx+8IMfMGfOHGpra+N6gzqTkpLCP//5T9auXcuMGTP45S9/yc033wwQqwuy2WzccMMNTJs2jW984xtomsZzzz0XO0d3XpfL5eLdd99l1KhRnHHGGUyePJmLLroIv99/0D1C06ZN45133uGrr75i7ty5zJw5k5tvvpn8/PyDOm9PKKZpmv1+1QHO4/GQmppKQ0NDr3f/NTcEqCptACBrZDIpWc5ePb8QQkT5/X5KS0spKiqKK6AVg98zzzzDj370IxoaGmIrpA8X+/u97s79W2qAEkSzqHgbgxIACSGEOKCnnnqKsWPHUlBQwLp167juuus466yzhl3w05skAEoQi00j4A0TDupYbNqBDxBCCDFsVVZWcvPNN1NZWUleXh5nnnkmd955Z6KbNahJAJQgFptKwBsm6JcASAghxP794he/4Be/+EWimzGkSBF0gkQr9wPe3ivqE0IIIUTXSACUQBabitcTxDSkDl0IIYToTxIAJZDVrkWGw8viqEIIIUS/kgAogTSLih42CPrDiW6KEEIIMaxIAJRgqqbg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pRu0oaGBu+66i9dff71XGznUWBwWnPkufDu9lK7bw8yTOl/Woy9Fl8UI+nUcSRIACSG6zmK3c+WTLybs2t0xc+ZMPvvsMx5//HEOP/xwFEWhqamJww47LC5IiWpbM5qUlNThOa3W1qWEor0jhhGZW62pqYkf//jHXHnlle2O298yTvvT9nrRa0av99xzz3HNNddw7733ctRRR5GcnMyvf/1rPv7oY0KBSFGzaUbO0fbDrqIo+z1vU1Mzs2bN4snlf2nXnuysgVFXezB6FADdcccdPPzww5x//vlxNTfHHHMMd9xxR681bihzj0vBt9PL9i9qmXb8SDRr/wcgrctihHEkybpgQoiuUxSly2moRBs3bhz33nsv8+bNQ9M0HnzwQWbNmsXzzz/PiBEjer3UYdasWWzatInx48f36nk7s3r1ao4++mguu+wyDCPS27NtWwmmacaWqlAUpdvT98ycMZO/vfgCI7J7/3s0EPTorrtlyxa+8Y1vtHs+NTWV+vr6g23TsJBakIQlyULIr7Prq7qEtUO1qPiahubQTiGEiJowYQJvv/02L730EkuXLuXcc88lKyuLU089lVWrVlFaWsrKlSu58sor2blz50Fd67rrruP9999nyZIlrF27lq1bt/Lqq6+yZMmSXno18YqLi1mzZg2v/+t1Nm3czE033cSnn64BhYNaqmLRonPIzMzie98/nffei3yP3nlnJT+7eulBf48Ggh4FQLm5uR3OrPzee+8xduzYg27UcOC0WXAXRXLPX6/bc4C9+050WYxwSIbDCyGGtokTJ/K///2Pv/71r9x00028++67jBo1ijPOOIPJkydz0UUX4ff7D7q3Y9q0abzzzjt89dVXzJ07Nza9S35+fi+9kojoUhUX/uhiTv3uaZzzw3OYe9wx1NXt5ceX/oSDnbHZ5XLxv7feprBwFGedfSbTZhzKj39yaa98jwaCHo0Cu/vuu3n66ad5/PHH+da3vsXrr7/O9u3b+dnPfsZNN93EFVdc0Rdt7Td9PQpszWeV5OW5qahspvK1yLpjC358KO6M/u9ONk2T5voguWNTcaUM7iGNQoh4fTkKTCRO28JmQ4/cwqOFzYPFoB0Fdv3112MYBieccAJer5dvfOMb2O12rrnmmkEf/PQnR7KVlJFJeHY2U7p+D1Pnjez3NiiKAiYEfSEJgIQQYgCLBj562MA0BmfgM5D0KAWmKAq//OUv2bt3Lxs3buTDDz+kpqYmNkeB6BqHRSNpbCQNVra+FsNIzJRMFpuKtzEky2IIIUQ/e+aZZ3C73R1+TZkyBYgsVREO6a1LVZjDY6mKvnZQUwDbbDYOOSRxE/kNdnarhjXHic1pwd8corKkgfzitH5vh8WuEmpZFkNmhRZCiP7z3e9+lzlz5nS4TdMshEM6RtjEMKILkw6d1dgTrUd3O7/fz+9//3vefvttqqurY3MGRH322We90rihTlXBUExGTExj59o9fL22JjEBkFXD1xgi6JMASAgh+lNycnLcZIymaWIaLakuPbJIqaIoaBYJfHpbj+52F110Ef/973/5/ve/z+zZs6UL7iBYNQ372GRYu4eKkgZ8jUGcyf1fi6OqCgFvEHd69yYYE0IIcfAiM0Wbkd4ePdKpoKgKiiqT1PaVHgVA//rXv3j99dc55phjers9w47dohLWFDJHuqnd2UTZhlomH53X7+2w2DRZFkMIIfqZFDYnTo/udAUFBe3WTxE947BqBEI6eYekA1C6riYhxchWu0oooBP0y3xAQgjR10wjEvSEAjqhYGS5Cils7l89CoDuvfderrvuOrZv397b7Rl2IqPQTZJHubHYNZrrg1Rvb+z3dqiaimFA0Bfu92sLIcRwYbQZ0RUK6pgmaC2Bj9T49K8eBUCHH344fr+fsWPHkpycTEZGRtyX6B67ZqExrDPqkMj3rnRtYmaG1iwKvkZZFkMIIXpTdMbmcLBlKHsoUuOjaQqqKsXNidKjGqBFixaxa9cu7rrrLnJycqS77iDZLSq+oE7BoRl8/XkNu76qI+ANY3f174gsq10j4IvMM2HpweycQggx0MybN4933nkHgM8//5wZM2bEbV++fDlLly7tk3UsoyO69LCJYRiYZmTAidrDwuaLLr6Q+oZ6Xvrby/u95mWX/5SX//4SdXV1fPzRGmZMnxG3z4nf+ibvrnoXoMPtw0WP7rDvv/8+H3zwAdOnT+/t9gxLNouKxx/Enp1EWo6L+iov5V/UUnxETr+2w2JTCTQHCfolABJCDB2XXHIJt912G1lZWZSVlVFUVNSntZb7LlUxYXIxVyy5gquuXNpn14z6z3/f4Km/PMlb/11BUdFYsrKyuOjiCxk9ejQ333QLAC88/yJff13C0cce1eftGch6FIZOmjQJn8/X220ZthQlMrt2c0CnaHoWEFkgtb+LoRVFAQUC3lC/XlcIIfqSy+UiNzcXi6Vve9XbFjaHgzqGHpm8UIGDypTout5uvr3OfP311+Tl5nHUUUd3+pozMjLIysrucXuGih4FQP/3f//Hz3/+c1auXEltbS0ejyfuS3Sf3aLR4AtSeEgGqkXBU+Nj7+7mfm+HxabiawzFhmMKIcRw8Morr1BcXIzD4WD+/Pns2LEjbvurr77KrFmzcDgcjB07lmXLlhEORwaN6LrBzTfdzOjRo3ElORlTNIqfX/szVE3lWyedwPby7Vxz7c+xOSxdmmz2qaeeJDsnk3/+659MmzEVd4qL8vLy2Pbb77iN/JG5ZGanc/mSywgGI7WbF118IUt/dhXlO8qxOSwUTxjXi9+hoadH4fDJJ58MwAknnBD3vGmaKIqCrstQ6u5yWFWaA2EMi0LhpAy2b6yldN0eMgvc/doOq00j6A9HlsVwyqzQQoiOmaaJGepar0RvU6y9O1Tc6/Vy55138tRTT2Gz2bjssss4++yzWb16NQCrVq3i/PPP54EHHmDu3LmUlJRw6aWXYpomv7rxJv724ov87oHf8Zcnn2HKlEOoqqpi/fr1QCTddPgRs7jooou56MKLu9Wm3/zm1zzy0CNkZGYyYsQIAN5++384HA7e/O8Ktm8v45JLLyYjI4Pbb7uD3957H2PHjuXPf36M91d/iKZJKcP+9OgO9/bbb/d2O4Y9q6YSMgy8LWmw7RtrKd+0l+knFGK1998vsWZVCTeaBP1hCYCEEJ0yQwa7b34/IdfOv+1olB7WKY4ZM6ZdeUEoFOLBBx+Mrcn15JNPMnnyZD7++GNmz57NsmXLuP7667ngggswTZMxo8dwyy3LuPGG67n+F79kx45ycnJyOfHEE7FarYwaNZojjpgNRNJNmqaRnJxMbm5ul9sZCoV44IEHmT4tvtbWZrPx6COP4XK5mHLIFG65+Vauv+E6lt16G6mpqSQnJ6NpWty1/vzY4z36Xg11PbrDHXfccb3dDgGoikpTIMSoQjfudDtNdQF2frmXoun9m6tVVfA2BrHYNOxOC4oqo/yEEEOXxWLhiCOOiD2eNGkSaWlpbN68mdmzZ7Nu3TpWr17NnXfeGdtH13X8fj+BgJ/vf+9MHnzw90ycVMxJJ83n5JMXcMp3TjmomiObzca0qdPaPT9t6jRcLlfs8Zw5R9LU1MSOHTsYPXp0j683HHX5p7N+/XoOPfRQVFWNde11Ztq09j80cWB2i4rHG8bMUCiakcWGt3fx9do9/R4AOdxWGvf6aa4PYHdZcafZcSRZsTo0mfJACAFE0lD5tx2dsGv3F9M0aWpq4qZf3cJp3z018mSbpSocDgeFhYVs3LCJFf97ixUrVnDlVUv47X2/YcWbb2O1Wnt0XafTKe+3fazLAdCMGTOorKxkxIgRzJgxA0VROhylJDVAPeewaDQGQniDYcYcmsXGd3azd3czDTU+UrOd/dYOzaKSnO5ADxsE/WFqdgSxWDUcbgtJqZFgSIbJCzG8KYrS4zTUQBMOh1mzZg2zZ0fSVlu2bKG+vp4JxRMJBXRmzJjJV19toXhCMZ1NWuh0OjnlOws55TsL+clPfsrUaVPYuHEDM2fOwmqz9dp9cf2G9fh8PpzOyD3h448+wu12U1hY2CvnH066HACVlpaSnZ0d+3/R+yyaQlg38QV1spPt5I9PZddX9ZSuq2HGiaP6vT2aRcXpjqxMHw7q+DxBmuoCWO0WklKtOJPt2JMsaLJ4qhBiELNarVxxxRU88MADqKrGFVcsYc7sOcycfhimCb/65a847fRTGTVqFGec8b1YJuSLLzZy27LbeeqpJ9F1nSNmz8bldPHss8/gdDoZNSqSkhozejSr3lvFWWf+ALvdTlZWVo/bGgwGufTHl3DDDTeyfXsZt92xjJ/+5LIeT644nHX5OzZ69OhYd9z27dspKChg9OjRcV8FBQWyPthBsqgKjf7IPDzROYG2b6hFDydmtEWUxabhSrXjTrejauDZ46fy6wYqttZTV9mMv1mGzgshBieXy8W1117LOYvOYe7cY0lyuXn6L8+iWSJLVZz0rfm88vdXeeutNzn6mCOZ+41jeOD39zO6JcBJTUvjz088xrzjv8FhR8zkf2+v4O8vvUJmZiYAt9x8K9u3b2fSIRPIH9n1QuiOHH/8Nxk/fjwnnHg85/7wHE75zsLYBIeiexSzB7PtaZpGRUVFbFheVG1tLSNGjBj0KTCPx0NqaioNDQ2kpKT06rm37/Sw5rNK8vI6Ht7uC+jomBxakIoGvPbH9fgaQxx56lgKDxlY66yZRmS0WDCgo6pKa72Q24rVLvVCQiSa3++ntLSUoqIiHA5HopuTEPPmzWPGjBncf//97baZpolhmBjhyKzNQGTiwmHw3lVWVsaESeMTthSGoRuoFhVrD9Ko+/u97s79u0d9ZtH5fvZVW1tLUlJST04pWtitGsGwgS+go6gKY6ZFZ4auSXDL2lNagp7kdAeOJCuhQJiaHY1UbGugeruHproA4eDgDoaFEIPfH//4R9xuNxs2bAAi9zA9HFmcNBzQMXQDRY2syD4cgp+F3/0OM2bJYKVujdE744wzgEjx2+LFi7Hb7bFtuq6zfv16jj46MaMChgpVBd008YbCJDstFE3LYvPqCqrLGmmuD5CUZj/wSRKgo3qh5voAFpvUCwkhEueZZ56JLd1UOLIQPWygh41Yyl7V+n819oXf/Q7vrX6vw23X/eJ6rr/uhj69/sMP/QmfP/I9GVXY//WlA0W3AqDU1FQgEj0nJyfHqtAhMmfBkUceySWXXNK7LRyGrKqKxxcmJwWS0uzkjEmhqsxD6bo9HHpcQaKbd0AWm4bFpmGaJqGAjmePn4YaPzanBXeqDUeyTeYXEkL0i4KCgkiaSzcwwiahoI6iJCbwiWobgOwrI73vSx0KCgb+faQ/dCsAeuKJJ4DITJrXXHPNAdNdq1ev5vDDD4/rKRIHZreoNAXDBMMGNotK0Ywsqso8lG3YwyFz81EHSeCgKEps7RvDMAn5w9RWNqNWe3G4rCS11At1ZW0cIYToruhq7LpuQkvphpbAwCdKApCBoUf5iFtuuaVLtT4LFixg165dPbnEsOawagRCOr5QpH4mvzgNm9OCrzFEZUlDglvXM+o+9UKR+YUi9UJV2xsi9UIhqRcSoi/0YKzLoGWakd6eUFAnFNQJh42WHh+1pdd5cHyAFJ3rrd/nPi3IGE5/dL1JUcDExBuIrDSsWVTGTI0MpyxdtyeRTesVmkXFmWwjOcOB1a7iawhSXdbA7q0N1O5qxOsJxkZkCCF6LjoLsdfrTXBL+l7bwuZQQMcIGy09PsOjsHk4if4+93SW7SjJPQxQds1CvS9EbqoTRYnMCfTVx1VUbKvH1xSMFRwPdh3WC+3xY3NYcKfZcLilXkiIntI0jbS0NKqrq4HIfDdDLRiI9PiY6LoB0bnIhslQ9sHM1A2UsIpudH0YvGmaeL1eqqurSUtLO+jV7hMaAL377rvcc889fPrpp1RUVPD3v/+d0047LbbdNE1uueUWHn30Uerr6znmmGN46KGHKC4u3u95//CHP3DPPfdQWVnJ9OnT+f3vfx+b4nywsFtUfEGdQFjHYdVIyXKSWZBE7a5mtm+oZdJReYluYq/qsF5odzOq1lIvlB5ZgkPqhYTonuiq4NEgaKgwTRPTMDGMlqlZQD4oDSKmYaKoCpql+4motLS0uNXueyqhd5Pm5mamT5/OhRdeGBti39avf/1rHnjgAZ588kmKioq46aabmD9/Pps2bep0Uq/nn3+eq6++mocffpg5c+Zw//33M3/+fLZs2dJu4saBzGZR8fiD+EKRAAigaEY2tbua+XrtHiYemTtkP+FE64XsLmtkPTJfGG95ZD0yZ7IVV4odh9uCxTo01iESoi8pikJeXh4jRowgFAolujkHLegP42sM0twQJBzQsdhVbE4LitT2DCr+5hBOt42MvO7NHWi1Wg+65yeqTwOgA92gFyxYwIIFCzrcZpom999/P7/61a849dTICrxPPfUUOTk5vPLKK5x99tkdHvfb3/6WSy65hB/96EcAPPzww7z22ms8/vjjXH/99QfxavqXokS+f02BMOmuSLqrcFI6a98sp7k+QE15IyNG9+4s1QNRtF4IIvMLeRsCNO31Y3VYcKVE5hdyJFlQZX4hIfZL07Reu3H0N9M0CXjDNNX5aa4Pood1bA4bSW6ZcX6wCilgtdgSOkP5gC2CLi0tpbKykhNPPDH2XGpqKnPmzOGDDz7o8JhgMMinn34ad4yqqpx44omdHjOQ2S0aHl+I6LfRYtMY1bIcxlAohu6u6HpkSel2FKVlPbLSBnZva6C+StYjE2KoMQwTrydITXkjlV834Nnjx2JTcac7Ir0+EvyIg9CjAOib3/wm9fX17Z73eDx885vfjD1ubGxk7NixPWpYZWUlADk5OXHP5+TkxLbta8+ePei63q1jAAKBAB6PJ+5rIHBYI3VA/nDr8PCi6dkA7PyyjqAvnKimJZSiKNicFpLS7LhSbJiGQe3uZiq/boi8Sdb6CPqH5/dGiKFA1w2a6gJUlXqoLG2guT6A3WnBnW7Hah+cvVhi4OlRALRy5UqCwWC75/1+P6tWrTroRvW3u+++m9TU1NhXYWFhopsEgFVTCRkG3kBrAJSe5yJ1hBNDNyn/Ym8CWzcwxOYXynBgd1ki8wttb12PrLle5hcSYrAIh3Q8tT4qSxqoLmsg4A3hSo5MmqpZJc0tele3aoDWr18f+/9NmzbF9arous4bb7zRazNcRiu8q6qqyMtrHfFUVVXFjBkzOjwmKysLTdOoqqqKe76qqmq/FeM33HADV199deyxx+MZMEGQqqg0BUJktgx7VxSFoulZrH1zB1+vq2HcYdnSDdxi33qhZqkXEmJQCPrDeBsCNNYFCPrCWG0aSWl2GdUl+lS3AqAZM2agKJH5FdqmuqKcTie///3ve6VhRUVF5ObmsmLFiljA4/F4+Oijj/jpT3/a4TE2m43DDjuMFStWxIbTG4bBihUrWLJkSafXstvtA3a5DrtFxeMNY2RA9L1g9JRM1v9vJw3VPuoqvd2uoh8O4uYX8rfOL2R3WkhKlfmFhEi0aGFzc0MgMhN80MDm0HCn2+VDnegX3QqASktLMU2TsWPH8vHHH5OdnR3bZrPZGDFiRLdGGTQ1NbFt27a4869du5aMjAxGjRrF0qVLueOOOyguLo4Ng8/Pz4+bK+iEE07g9NNPjwU4V199NRdccAGHH344s2fP5v7776e5uTk2KmywcVg0GgMhvMEwbnvkx2VzWhg5MZ3yTXspXbdHAqD9iNYL2ZyR+YWCvjB7K5pRNV8kGJL5hYToV6Zh4m8ORUZ0NQQxwiZ2l4bTPTA/hIqhq1vv+qNHjwYivSq9Yc2aNRx//PGxx9E01AUXXMDy5cv5xS9+QXNzM5deein19fUce+yxvPHGG3HD5kpKStizp3VE1A9+8ANqamq4+eabqaysZMaMGbzxxhvtCqMHC4umENZNfEE9FgABFM3IonzTXsq/qGX6N0disUlh4IGoqoIjyQpJbeYX2h7EYtdwuq0kpdqxJ8n8QkL0BUM38DWFaNzrx+eJ1JDK35tIJMXs4lj1f/zjHyxYsACr1co//vGP/e773e9+t1calygej4fU1FQaGhpISenduXa27/Sw5rNK8vLcXT6mrjlIptvG2OzWY0zT5N8Pb6S5PsAR3xnDmGlZvdrO4SQc1An4wpi6GakXSrXhdNukXkiIXqCHDLyNQRpr/fibQ6gq2JOsPZoBWAwdXk+QpDQ72YXJvXre7ty/u9wDdNppp1FZWcmIESPiUlD7UhQFXZdRN73JYdHw+MOEDRNLS81KtBh64zu7+HrdHgmADsK+9UIN1T4aalpSZGmRFJnUCwnRPaFA60CEgC+MxabiSrWhyt+RGCC6HAC1TXv1VgpMdI3dqlHvC+IL6CQ7W39kY6Zm8sW7u6jd2YRnj4+ULGcCWzn4dVgvtLsJVVOxu6wkpdmkXkiIAwj4wnjrIyO6QoGwFDaLAavLfZAZGRmxWpsLL7yQxsbGPmuUiKeqoJsm3lD85H7OZBt549OA4TkzdF+K1gu501vmF/KFIvMLlTRQ0zK/kB6SDwJCQCQl728KUbOjkcqSBvZWNqNq4E63Y3dZJfgRA1KXA6BgMBibIfnJJ5/E7/f3WaNEe1ZVxdPBzM9F0yOpr7INtRi63JD7QnR+oeRMBxarSlNDgKrSBnaX1FO7uwlfY1C+92JYMgyT5oYA1ds9VHxdT2OtH6tdJTnDgc0hS1WIga3LfflHHXUUp512GocddhimaXLllVfidHaccnn88cd7rYEiwmFVaQqGCYYNbG2KB3PHpeJwW/E3hdj1VT2FkzMS2Mqhz2rXsNo7rxdyuq2yRpEY8vSwga+lsNnXFEJRwSGFzWKQ6XIA9PTTT3PfffdRUlKCoig0NDRIL1A/sls0mpoD+EJ6XACkqgpF07LY/H4Fpev2SADUTw5ULxTp+rdIvZAYUsJBHa8niKfWT9AbQrOquFKsMlpSDEpdfnfOycnh//7v/4DILM1/+ctfyMzM7LOGiXiKAiYm3kCYVKc1btuYlgCoqjRSm5KUJhOK9af28wuFqPYEIqvXJ1txpURGkslaRmKwCvrDNNdHZmwO+sJYHbJUhRj8evSOXFpa2qXgZ+rUqezYsaMnlxAdsGsW6n0h9p25yZ1uZ8SYyFwKZeulGDqRYvVCGS31QnVSLyQGJ9OMzNhcuytS/L+3ohlFAXdGJKCX4EcMdn3aP19WVkYoFOrLSwwrdouKL6gTCOs49pk9tWh6NtVljZSu38Mhx+bLm9MAIPVCYjAyDRNfU2SpCq8niKGb2F0WnG7rgQ8WYhCRAoVBxGZR8fiD+ELtA6CCCWnYHBq+xhCVpR7yxqUmqJViX3H1QrpB0K9LvZAYcHTdwN8YwlPrx9cURFEU7C5NlqoQQ5a84w4iihK5mTYFwqS7bHHbNIvK6EMz2bqmmtJ1NRIADVCqpuJIUjuvF0q143BJvZDoP+FQpLC5sdZPwBtG1RRcyVLYLIY+CYAGGbtFo8EbYmRaJCBqq2h6FlvXVLN7awP+5lCkMFcMWNF6IYgsG9BUF8BT68fmtOBKteNyW7G7ZD0y0TeC/jBeT7BlqQodq00lKdUm6XMxbEgANMg4rCrNgTD+sI5zn67p1BEuMvKT2Lu7me0bapl4ZG6CWim6q129UJWXhiqwu6ReSPSugDdEU0Mk8AkH9ZalKmzyuyWGHQmABhmrphIyDLyB9gEQRHqB9u5u5ut1NUyYkyNvaoPM/uqFHEnW2OKsVrvUZYiuMw0TvzdEU10Ab0OAcNjA4bTgdDsS3TQhEqZHfetdHdr+yCOPkJOT05NLiP1QFZWmQMej6wonZ6BZVZr2Btizs6mfWyZ6UzTocac7sDstBLwhqrd72L2tnppyD80Nsh6Z2D9DN2JLVVSWNNC014/VrpGc7sAqRfdimOtRADRmzBiOO+44Hn30Uerq6jrd75xzziEpKanHjRMds1tUPN4whtl+m9WuMeqQyGzQpWtlTqChQrNG6oXc6fY28wt5IvMLVTTjawpidPQLIYYlPWzQuNdPZamHqlIPvsYgDnekB9Fik95DIaCHAdCaNWuYPXs2t912G3l5eZx22mm8+OKLBAKB3m6f6IDDouHXdbzB9oujQusCqTu/rCPo73gfMTgpioLVHpmFNynNhgI0VHmp2NZAxbZ66qu9BLwhzH1nyxTDQiio01DjpaKkgertHkL+MK5UG65Uu6zTJcQ+evQXMXPmTO655x7Ky8v597//TXZ2Npdeeik5OTlceOGFvd1GsQ+LphDWTXxBvcPtGflJpGQ50MMGOzbt7efWif4SrRdyp9txpUSG1e/d3URFSQNVZR4a9/oJBTr+HRFDS9AXpq6imYptDezZ2YShG7jT7TiTbagyqkuIDh3URwJFUTj++ON59NFHeeuttygqKuLJJ5/srbYNOSU1TTz8fikfVjUc9LksqkKjv+M6IEVRKJqeDcDX6yQNNhzsWy/kb2pTL7SjMVIvFJZ6oaHENE38TSH27IwsVVFX1YyqRpbGcSRZZQCEEAdwUAHQzp07+fWvf82MGTOYPXs2brebP/zhD73VtiHnk9K9/PWznbxXUX/Q53JYNDz+MOFO6j5GH5qBqinUV3qpq2w+6OuJwSOyQnebeqG9fqpKPVRsk3qhocAwTLyeINXlHiq+rsezx4/FpuJOd8hUCUJ0Q4+GATzyyCM8++yzrF69mkmTJnHuuefy6quvMnr06N5u35Cy4NA8fvXKRiq8QXY0+ChMdfb4XHarRr0viC+gk+xs/2O0u6wUTEhjx+Y6StftIT1XitGHm2i90L7zC3mqwRZdjyzZhs2hyU1zENB1A58nROPelqUqAEeSzBouRE/16C/njjvuYM6cOXz66ads3LiRG264QYKfLkh1WTlydGSE1vs7Oh891xWqCrpp4g11XuQcTYOVf7GXcEhqQYaztvVCzuRIvVDtrmYqttVLvdAAFw7pePb4qCxpoLqsgYA3hCs5MqJLgh8heq5HPUDl5eXyibGHTpiQzXultby/o46zpuQd1PfRqqp4fGFyUjrePmJMMq5UG96GILu+rGf01MweX0sMHdH1yBxJoIcM/E0hmutb1iNLseFKsUV6FmTUUEIF/WG8DQEa6wIEfeHY6D9ZqkKI3tHlAGj9+vVdPum0adN61Jjh4OgxGdhVhRpvkK17vUzI7HlqymFVaQqGCYYNbB3crCLF0Fl88e5uvl5XIwGQaEezqrisNkzTJBw0aNrrp7HWj82h4Uy140q2YndZZSRRPzFNk4A3THNDgKa6AOGg0bJUhV0+dArRy7ocAM2YMQNFUWLzi+zvj1HXpSu9Mw6rxqGZbj6taeT9HXsPKgCyWzSamgP4QnqHARBA0bQsvli1mz07mmis9ZOcKVPfi/b2rRcK+lrrhewuK65Um9QL9SHTMPE3h2iq89PcEMQIm9iTLDjdsqCxEH2ly33cpaWlfP3115SWlvLyyy9TVFTEH//4Rz7//HM+//xz/vjHPzJu3DheeumlvmzvkDArKxmAD3fWox/EaBxFARMTb6DzOiBnso28cakAlK6r6fG1xPChKAp2V2u9UDikU7urmcqSNvVCncxBJbrH0A2a6wNUbfdQ+XUDTXUBbE4Nd4Zd1nsToo91uQeobZHzmWeeyQMPPMC3v/3t2HPTpk2jsLCQm266idNOO61XGznUFKe6SLFb8ATCbKxuZHpuJ0U8XWDXLNT7QuSmOunsg3nR9CwqtjVQtqGWQ48rQNWktkN0Tcf1QkEsNlXqhQ6CHjLwNgZprPXjbw6hagoOt3wfhehPPfpr27BhA0VFRe2eLyoqYtOmTQfdqKFOUxXmFKQBBz8azG5R8QV1AuHOP5HnjUvFkWQl4A2ze9vBT8IohqfW+YVs7eYXqpP5hbokFNCpr/ZSUVJPdZmHULBlqYoUmwQ/QvSzHv3FTZ48mbvvvptgMBh7LhgMcvfddzN58uRea9xQdsyodAA+2V1PUO/5DL02i0ogrOPbzzB3VVMZMy1SAF26VtJg4uDErUeWasM0oa7SS2VJA5UlDZH1yHxhWY+sjYAvTG1FMxUlDdTuasI0TdwZdpxuWapCiETp0TD4hx9+mIULFzJy5MjYiK/oKLF//etfvde6Iaw4I4lsl40ab5DPKho4cmR6j86jKJEbUlMgTLrL1ul+Y6Zl8eUHlVR+7cHrCeJK6XxfIbpKUSP1QnaXBUM3CPoi9UIWqxdHkhVXqh2H24p1GK5AbprRwuYA3oYg4ZAeq62SQnIhEq9HAdDs2bP5+uuveeaZZ/jyyy8B+MEPfsA555xDUpLMONwViqJwVGE6/9hSxfs76nocAEFkNFiDN8TINDqtA0rOcJA9Kpma8kbK1u/hkGPze3w9ITqiaioOt4qDyOR9vqYQTfVBrHYNZ7J12NQLGYaJrzFIU50fb0Okl9zusuBMlhFdQgwkPQqAAJKSkjj22GMZNWpULBW2YsUKAL773e/2TuuGuGNaAqC1lR6agmHctp79OBxWleZAGH9Yx2nt/JN20fQsasobKV23h8lH58mEaqLPWKwaFqvW4fxCSaktS3C4LEMq/aOHDXyNQTy1fvxNIRQVKWwWYgDr0R3366+/5vTTT2fDhg2xuYHadunKPEBdU5jqpDDFwQ6Pn092NXB8Uc8mKrRqKiHDwBvYfwA0cmI6n79ZjtcTpKrMQ+7Y1J42XYguiZtfyDAJ+nXqKr3UV3uxu6y40+3Yk6yDen6hcFDH64kEPkFvqKVY3CqjLYUY4Hr0F3rVVVdRVFREdXU1LpeLjRs38s4773D44YezcuXKXm7i0BYthn5/x96DOo+qqDQFQvvdR7OqjJ7SUgy9bs9BXU+I7orWC7kzWuYXCurU7GiksmVE1GCbXyjoC1NXGSlsrilvxNANktIjvVsS/Agx8PXor/SDDz7gtttuIysrC1VV0TSNY489lrvvvpsrr7yyt9s4pB3VUvuzqaaJOt/+A5j9sVtUPN4wBxqFXDQ9C4BdX9UT8Pb8ekIcjEi9kJXkDAdWh4avKUR1mYeKbQ3U7GykuSGAHu756Mi+Ei1srt3VSEVJA3WVzSgKuDPsOJKsg7YXS4jhqEcBkK7rJCdHZjPOyspi9+7dQGSyxC1btvRe64aB7CQ7EzKTMIEPdvZ8TiCHRcOv63iDnc8KDZCW4yI914VpmGzfWNvj6wnRWyzWyCKs7gw7mgZNewNx8wv5m0IJn1/INEy8niA15Y1Uft1AQ40fi03Fne7A5rRI4CPEINSjAOjQQw9l3bp1AMyZM4df//rXrF69mttuu42xY8f2agPHjBmDoijtvi6//PIO91++fHm7fR2Ogb3+1TGF0TRYzwMgi6YQ1k18XUghFM3IBuDrtXtkrhYxYCiKgtVhISnVFje/UEVJPZUlDXj2+Aj28/xCum7QVBegstRDZWkDzfUB7M7IUHZZqkKIwa1HRdC/+tWvaG5uBuC2227jlFNOYe7cuWRmZvL888/3agM/+eSTuKLqjRs38q1vfYszzzyz02NSUlLieqIG+qezOSPTeHLdTr6u81LR6CcvuWcBm0VVaPSHyE6273e/UYdksG7FDhpr/dTuaiZrpLtH1xOir3Q0v1DNjkYsVhVHkpWktEjxdF/NLxQORQqbo0tVaBYVV7IUNgsxlPQoAJo/f37s/8ePH8+XX37J3r17SU9P7/VgIzs7O+7x//3f/zFu3DiOO+64To9RFIXc3NxebUdfSrFbmToimXVVjby/o47vHZLXo/M4LBoef5iwYWLZz/Biq12jcFI6ZRtqKV1XIwGQGNBa5xeyts4vVBfA6rDgTLHiSrZFhpv3QnAS9IfxeoI07fUT8IWx2jTcaXaZMkKIIajXPs5kZGT0eU9LMBjk6aef5sILL9zvtZqamhg9ejSFhYWceuqpfPHFF/s9byAQwOPxxH31t6MLM4BIGqynXfx2q0YwbOALdCUNFimG3rG5jlAX9hdiIGhXL1Tbsh7Z1nrqKiP1QmY364VM0yTgDVG7u6nNUhXgTo/MYi3BjxC9yzBM9u5upr7am9B29HgixER45ZVXqK+vZ/HixZ3uM3HiRB5//HGmTZtGQ0MDv/nNbzj66KP54osvGDlyZIfH3H333SxbtqyPWt01h+enYlUVKpoClNb7GJvu6vY5VBV008QbCpPs3P+PNrPATXKmg8ZaPzs27WXszOz97i/EQBKtF7I6LC3zC4Wpq/BSr3qxJ1lxp0VGZVn3M7+QaUSXqvDj9QQJhw0cTgtO98CuGRRiMAr5w1R+7WH3tkhNX9CvUzQ9i+LDchLWJsUcRFWw8+fPx2az8c9//rPLx4RCISZPnsyiRYu4/fbbO9wnEAgQCARijz0eD4WFhTQ0NJCSknLQ7W5r+04Paz6rJC+vfdrpgY9K+XBnPd8uzuaH0zoO1g6k3hsi1WmlOOfAaa0tH1Wy/n87Sc91ceKPDunR9YQYSKL1QuGgjmbVcCRZSGoJhiwt9UKGbkTSaHsjgQ9ElqqwDMP1yoToS017/ezeVh+Z3mJHU1zvrNWuMWZ6FiddOKVXr+nxeEhNTe3S/XvQ9ABt376dt956i5dffrlbx1mtVmbOnMm2bds63cdut2O3779wuLf4w36aww2Yprvdul1HF6bz4c56PthRzzlTC1B7kFJ0WFWagmGCYQPbAabgHzM1kw0rd0Vm5q3ykpbT/V4nIQaSaL0QbeuF6gNY7ZF6IbvDQlN9AH9TCFWWqhCiVxmGSe3OpkjQs7WBxr3+uO3JmQ7yx6eSV5yGM9lGckZie1sHTQD0xBNPMGLECL7zne906zhd19mwYQPf/va3+6hl3ePTvdQH99AQdJBmj1/6YnpOCi6rRp0/xJd7mjgkO7nb57dbNJqaA3hD+gEDILvLSsGENHZ+WUfpuj3MPGlUt68nxEAVtx5ZQKep1o/HMLFYVVyptiG1DpkQiRJsSW1VbK2n4usGQv7WmlJFVcgudJM3Po388am42wQ80d7XRBoUAZBhGDzxxBNccMEFWCzxTT7//PMpKCjg7rvvBiLD8o888kjGjx9PfX0999xzD9u3b+fiiy9ORNM7FDICVPl2oykWkm2t63FZNZU5BWm8XVbL6vK6HgVAigImJr5AmDTngVefLpqexc4v69j+RS3Tjh+JZpVPw2JoaVsvJIQ4eI17/VRsq2f31gb27GikbSGNzaGROy6V/OI0cotSBvTf3cBtWRtvvfUW5eXlXHjhhe22lZeXo6qtN+26ujouueQSKisrSU9P57DDDuP999/nkEMGTo2LioICVPl2YVEtOC1JsW1HF6bzdlktH++qZ/GMkVh7MLTXrlmo94XITXW2S7PtK6coBVeqDW9DkJ1b6hh9aM8WZBVCCDE0xVJbWyP1PB2mtoojvTyZBe5BM3JyUARAJ510UqdDw/ddfPW+++7jvvvu64dWHZwkazKNwQYqvTspSBqNTYt0DU7OdpPusFLnD7G+qpHD8ru/YrvdouIL6gTCOo79rA4PkU/HRdOy+GLVbkrX7ZEASAghBEFfmMqvG9i9rYHKjlJbo9zkj08jb3wq7vTBOXJyUARAQ5XbmkpjsI4q325ynYVYNSuqonBUYRqvb61h9Y69PQqAbBYVjz+IL3TgAAhgTEsAVFPeSONef8IL04QQQvS/xtroqK169uxoik9tOS3kjUslb3zqgE9tddXgfwWDmKKA25ZGY6AOi2Ihx1mAqmocXZjB61tr+KyiAV9Ix9mFIGbf8yqKQlMgTLrLdsD9XSk2csemUPm1h7L1e5g6r2dD8IUQQgwehm6wZ2cTFdsa2L2tnqa9gbjtKVmOSAFzcSqZ+YMntdVVEgAlmKoouG2p1AX2oCka2c58itKc5LntVDQF+LSigWNHZXT7vHaLRoM3xMg0DlgHBJEFUiMBUC1T5ubLmkdCCDEExVJbWxuoLN1faisNd3r/TA+TKBIADQCaquGyJLMnUI2mWMlwjODownRe2lzJ6vK6HgVADqtKcyCMP9y1HqT88anYXRb8zSEqShoomJDek5cihBBigOlKaiu/OJWcolSs9uEzIagEQAOEVbPiNJ3U+HdjUS2xAGhDtQdPIESK/cBD2uPPpxIyDLyBrgVAqqYyZmomWz6qonTdHgmAhBBikIqmtnZvbaBiWz1Nde1TW/nFkV6ezPykIZfa6ioJgAYQm8WBHjao9u8izzWGsekuvq7z8tHOer41rvtrdamKSlMgRKb7wHVAAEXTs9nyURUVJQ34GoM4k7t2nBBCiMQK+sJUlEQCnsqvPXGLXCuqwohRyeQVp5I/Po2ktKGd2uoqCYAGGKfFRVPIQ5V3J0cUJPN1nZfVO+p6FADZLSoebxgjA7oS4CdnOsgqdLNnRxPr/7eTSUflkpLt7HQxSSGEEIlhmmZkQsKtkQLmPTubYN/U1vhIwJNTlDKsUltdJQHQAOS2puAJ1FOUrqEAX9U2U9McIDupe1G7w6Lh8YfwBsO47V37UY+bmc2eHU2Ub9pL+aa9uFJtLfnhNLJHJcu6SUIIkSCGbrBnR1NsgdF2qa1sJ/ktQU/GME5tdZUEQAOU25aKh3rGZlgo2Rvmg511fHdibrfOYdEUdMPEF9S7HACNmhKZCLF8016qyjx4G4KUfFZDyWc1WGwqOUUp5I9PI3dcKo6k7tUlCSGE6J6ANzJqq6PUlqopZI9Kjk1IKKmt7pEAaIBSFYUUWyqTsusp2auwurz7ARCARVVo9IfITu76H8aoKZmMmpJJOKRTXdYY+7Thbwqxa0s9u7bUA5CRnxSb/lxSZUIIcfBM02wdtbW1gT274lNbdlfLhITFaeSMkdTWwZAAaABTFZXD8pN546tGdnj8bK/3MTrN2a1zRNJgYcKGiaWb3aEWqxYJcIrTME2T+kovu7fVs3tbA/WVXvbubmbv7mY2vrMLV6ot9ilEUmVCCNF1hm5Qs6OJiq2R99fm+vjUVmq2M1bAnJGfJB82e4kEQANcst3KhCwLm2t03i7bxeIZ47t1vN2qUe8L4gvoJDt7/uNWFIX0vCTS85KYMrcAX2OQ3dsi3bLRVNm2T6vZ9mm1pMqEEOIAAt4wlSWRAubKUg/hjlJbxS2prVRJbfUFCYAGgcMKHGyuaeajXY2cPqmOVEfX5+hRVdANE28ofFAB0L6cyTbGzcxm3MzsA6bKMguSItOpS6pMCDFMxVJbLSuqd5jaailgHiGprX4hAdAgcEi2FbsGDX5YU7WDI/OtJFndXT7eqql4fGFyUvqmffumyuoqvVS0SZXV7mqmdpekyoQQw4uhG9SUt47aapfaGuGMvR9Kaqv/SQA0CFg1hUNzbHy6O8j6Cp2itJ3ku8fg0Lq2arvDqtIUCBMMG9j6OOBQFIWMvCQy9k2Vba2nanvnqbK88anYXZIqE0IMbgFvqGVCwgYqv24gHDRi21RNYcTo5FiPuEtSWwklAdAgMTMvEgBtqlH41ngfVc07yU8ajVU7cNBgt2g0BQJ4Q3qfB0D76lGqrDiNlCyHfBoSQgx4pmni2eOP9XrX7pvaSrKQNy6yonrOmBQsNkltDRQSAA0S4zMtJNkUmoMmlY1JqKkeqnw7yXMVoqn7/zEqCpiY+AJh0pyJ62XpMFW2tZ7dJZIqE0IMHpHUVmNkra2Seprrg3Hbo6mt/OJU0vMktTVQSQA0SGiqwvRcG++XB1hbGWJiVioNwTosipUcVz6Ksv8Awa5ZqPeFyE11MhD+FuNSZd+QVJkQYmALeENUbGugoqTz1FZ+cRp54yS1NVhIADSIzMyLBEBfVAUJT3HhtqZQG6hGUy1kOXL3G9jYLSq+oE4grOPowurw/U1SZUKIgSSa2oqM2qqndldz3HZ7kiX2oUxSW4OTBECDyOg0jXSnSp3PYHN1iOl5NlwWN3t8FVhUK+n2zE6PtVlUPP4gvtDADIDa6jRVtq2B+ipJlQkh+oYejqS2KrZF5ufxNsSnttJynC0FzGmk57nkw9cgJwHQIKIoCjPzbPzvaz+fVwSZnmfDptkwTJ1q3y4sikayLa2TYyPHNwXCpLts/dvwg7BvqszrCUZGWHSaKkslf3yqpMqEEF3ibw61TEjYQFVpB6mtMSkt7ylpuFIGz3unODAJgAaZaAD0ZU0Ib8jAZVVxWJx4Q2EqfbuxqFaclqQOj7VbNBq8IUamMSDqgHrCldImVRbUqd7eGJtYzN8cYteWOnZtqQMkVSaEaM80TTw1vthM9vumthxJ1siEhMVpjBidLKmtIUwCoEEmN1kj161R2aSzoTLEnMJIsZ3LmownWE9l807y3aOxdzBHkMOq0hwI4w/rOAd4GqwrLDZJlQkhDiya2tq9tZ6KkoYOUluuSC9PcRrpuZLaGi4kABqEZubb+PdXPj6vCMYCIIBkaxqNwTqqvDvJc7WfI8iqqYQNA29gaARAbXWYKmuZl6O6w7XKJFUmxFDmbw7F0uWVpR70UJvUlkUhZ3QKedFRW5LaGpYkAOpnigIoYOomitazTxkzcq38+ysfX+8N0+A3SHWosXO7bWl4gnvR/LvIdRaiqfGBjqKoNAVCZLqH9h+8K8XGuFkjGDdrhKTKhBgGTNOkocYX6wXeu3uf1Jbb2matrWQsQ+xDoOg+CYD6mcWpYboMdC9oSSaK2v2bbYZLY0yaRlm9zrrKIN8Y05ruUhWFZGsaDYFaLIqFEc6CuBu63aLi8YYxMqAHlx6U2qXKKryxIfadpcryi1PJKpRUmRADmR42qNneOmWG17NPais3ktrKH59GmqS2xD4kAOpnqqZgphloYQW92UBz06M/ypn5NsrqfXy+Oz4AAtBUDZclhVp/DZpiJdOREyt6dlg0PP4Q3mAYt334/fgVRSEjP4mM/CQOlVSZEIOOv7llQsJtnaS2xrROmupMHto93eLgDL874ECggTVVxdTB8JpoHQ/a2q9puTZe3exjp0enplknOym+O9eqWXGaTmr8FVhVK6n2DAAsmoJumPiC+rAMgPa1b6qsqszT8ubacaosvziNvPGSKhOiv5imSUO1L9bL01FqKzpMXVJbojvkDpggqk3BmqkSqjEw/Caqo3s3U7dNZUKmhS/3hPm8IshJ453t9rFZHOhhgyrfLjTFgtuWAoBFVWj0h8hOluna27LYNAompFMwIX2fVFk99VW+WKpsw8pdJKXZYgscZo9KRtUkVSZEb9HDBtXbG2NrBfr2SW2l57piK6pLakv0lARACaQ5FchQCFabGEET1da9P+IZ+Ta+3BNm7e4g3xrXcY+E0+KiOdRIpW8XBaqG05LUkgYLEzZMLMOlEKibDpQqa66PT5Xljk0lb5ykyoToKX9TiIqS+pYJCeNTW5pFZcSY1rW2JLUleoMEQAmmuVUsYZNQrYmimiiWrgckU0bYsKpearwGuzw6I1M7/nEmtcwRVOXdTX7SKOxWO/W+IL6ATrJTfgW6orNU2e5t9QSaw+z8so6dX0qqTIiuiqW2WkZn7q2IT205k62xXp4Ro1PQrNLLKnqX3P0GAEuqiqkbhOvMyMiwLg6Pd1gUDhlhZV1liM8rgp0GQABuayqNwXqqfLvJcxWiGybeUFgCoB6QVJkQPaOHDarLPLFZmH2Nobjt6bmulg8PqaTlSGpL9C25+w0AiqJgTVdBNwh7TDR314fHz8y3sa4yxNqKIN+Z6ETt5A1DVRSSbak0BuqwKBp2dQQeX5iclN58JcNPj1Jl4yPpMkmVieHA1xSMDSyoKmuf2sopSon9TUhqS/QnCYAGCEVVsGZEeoL0JgMtuWvD4ydmWXFaFTwBk6/3hhmf2flNVVVU3LYU9vprSLGqaP4RBMMGNpnrptdIqkwMd6ZpUl/la/kgUE9dhTduu6S2xEAhAdAAolgiI8O6MzzeoipMy7Hy0c4gn1cE9xsAAWiqhSRrCo3hGgIh8IaSJQDqI+1TZc2xrv8OU2Xj08gfn0b2KLekysSgoocMqrfvJ7WV52qZmyeNtBynBPtiQBjwAdCtt97KsmXL4p6bOHEiX375ZafH/O1vf+Omm26irKyM4uJi/t//+398+9vf7uumdok/7N/v9rbD43WfGRkpdgAz82x8tDPIhsoQpx9y4JFdVs2Kw3RS01xJhSeZNGdBt16D6L5IqsxNRr47PlW2tZ7q7Y2RVNmaaratkVSZGBziUlulHvRwm9SWVY1MSFicSu64VJxDfOkdMTgN+AAIYMqUKbz11luxxxZL581+//33WbRoEXfffTennHIKzz77LKeddhqfffYZhx56aH80t1OVzZX8bNUljEs6nHHp3+v0U1BseHxN14bHF2VYSLUrNARMvqwJcWjOgd9s7BYHDkuQbXvLyU9zk2pP7dFrEj0jqTIx2ERSW152b4308tRVtk9t5Y9PI684jRGjkiW1JQa8QREAWSwWcnNzu7Tv7373O04++WSuvfZaAG6//XbefPNNHnzwQR5++OG+bOYB/bPkn9T691DrfwND9XLKqHOwqB3/CLozPF5VFKbn2Xi3LMDaimCXAiCAFHsy9f46Suq2MylzPC6rq0evSxycDlNlWyPBUEO1pMpE4ughoyU4jxT2+5viU1sZeUnkFUfW2kodIaktMbgMigBo69at5Ofn43A4OOqoo7j77rsZNWpUh/t+8MEHXH311XHPzZ8/n1deeaUfWrp/F0+9mDqfl798+Rhrat5lj7+Sc8Zfhsvi7nD/7gyPn9kSAH1RHcIfNnF0YT4hm6ZgVdw0BJopbyynKLUIuyazQydSXKrsOEmVif7nawzGeiOryxrbp7aKWtbaGpeKwy2/c2LwGvAB0Jw5c1i+fDkTJ06koqKCZcuWMXfuXDZu3EhycnK7/SsrK8nJyYl7Licnh8rKyk6vEQgECAQCsccej6f3XkAbiqKwsOh7VNR7WVX9MmWNX/HQpjs5r/gKRjjzO9y/q8PjC1I0spNUapoNvqgKclhBFwIZJXINu5JMY6CRnY07GZ0yutNeKdH/OkqV7d7aQEXJPqkyBTIL3LE1kSRVJrrKNE3qK72xtbbapbZSbLEV1bNHJ6PJoAkxRAz4O92CBQti/z9t2jTmzJnD6NGjeeGFF7jooot65Rp33313u0LrvjQyaQKXHnIDT2/9PXWBGh7ZfDc/GHspE9Kmttu3q8PjFUVhZp6N/27z83lFFwMgwKapNAcMRrvTqPXVoqkao5JHoSryJjfQHDBVtrOJ2p1NkioTBxQO6VSXNXae2spPigXTktoSQ9WAD4D2lZaWxoQJE9i2bVuH23Nzc6mqqop7rqqqar81RDfccENc2szj8VBYWNg7De5EjrOAn0z+JX8teYiyxq/4y9YHOLnwTI7O+Va7N5uuDo+f0RIAba0N0xQwcNsPfNOzWVR8IZ2wDqmOVKqbq7GqVvKTCpD3vIGrXaqsIRAbgtwuVWbXyG0z2ZykyoYnX2Mw9jtSVebBCJuxbZpVjfyOtKy15UiS3xEx9A26AKipqYmSkhLOO++8DrcfddRRrFixgqVLl8aee/PNNznqqKM6Pafdbsdu7//alyRrMosnXM0/tz/Np3ve4987XqDat5uFo3/YLg3VleHx2UkahakaOxp01lUGOWa044BtsGgKesAgEDZItVlJtidT0VSBgoJNs6FE/1OUWGCmKmrsOQCV+MeKorT0ICkoCigoqLQ+Fr3PlWpn/GEjGH9Y11Nl+cVpJGdKqmyoMk2TukpvbEX1+n1SW64UG3mS2hL7MFviYpPI71DsX7N1u4m5z/bIAZFtbbdHzmSabY5rOY+3MYBuV8nu11cXb8AHQNdccw0LFy5k9OjR7N69m1tuuQVN01i0aBEA559/PgUFBdx9990AXHXVVRx33HHce++9fOc73+G5555jzZo1/OlPf0rky+iURbVw2pgLyHEW8O8dL/DpnveoDVSzaNxPSbLG1zh1ZXj8zDwbOxp8fF7RtQAIQFFUvMEwqS4rds2OYTXY1bQr8pvcuhcoLb/dCmAqoERGoO0b/Ci0/H+b/6L1RipqLEBqeYSqai3/RgIpTdFiAVfk3CpK2/MpaiywUva5/r7BmKqorW1S2m8fivZNle3d3Rwram2fKrO33gQlVTboRVNb0XqeDlNbLWttpWZLaqu/7BtUGG0Cg+j2bgUVbfaJBhVmu/OBaZjoRB4YpolhRPbT25xbNyNF7roROWfLxTBarhd9KrJ/6z7xQU7866DldUQ/8Sptz9NyEwk2hjAcKuN64fvbUwM+ANq5cyeLFi2itraW7Oxsjj32WD788EOysyNxY3l5Oara+qZ99NFH8+yzz/KrX/2KG2+8keLiYl555ZWEzwEUFQ0ODBOi9cyKonB07rfIcuTy/Nd/oqzxKx7efCc/LL6CnH0mKYwOjw/XmpgdDI+fnmvjn1/62F6vs9erk+HSDtgmq6bQHNAxDFBVcFqcOC3OAx5ntPzhmC1/AQZGy/PRPwAjbj/DNDHMcMsfjtnmDzb6//HPxQdb0cdKm+fN2GNFoV0w1D4YiwRSrcGYhqIQC8Y0tSUoawnQVNTIv4raEuypsZ9g58FYm8dtg7d9grn+CsYURSGzwE1mQWepskC7VFn++DRyx6VIqmyQiI4UrNjWQNX2+NSWxdY6ait3iKW2uhJUGG1uxrGAIXrzp2dBhWGYkfOaoJsmZheDilgbou1vaVe0LQcKKszoAyX6rtb2M2rkTTHu+bj3xdYgBJS4e0/re2J0a+RLjX1wjT7f2oOvtGlD7P0ttq3DH1c7NV7jwDv1McU0236rBURqgFJTU2loaCAlpXdXC93dWMW/tnyInUzSOrjBVPt285eW4mi76uCscZcyMW1a3D6maRLaGx0eT7vh8Y983Mi2vWEWFDv45rgDBzK6Ac3BMEVZSbhsBw6YBpp9Ayez9e2i02DMjH4qigZtRN+I9tkv9s4UDcI6+Deuq0zpIBhrTQUC7dKB0WBMVaNhmoqqRgIwRVVaAzHaB2Nq9Jz7phz3edxRMKaHTGrKGqks8VC5zUPAG277MiRVNkBFCuBbR23VV+2T2kq1tSw7kUr2qO6lttoGFYbZ5m+q5Xkj2gNAV4KK1pt7V4MK04j8BZpG5G/SiPZGmGbs2kY0qDDaXIu25+taUGGYZtwHqY6CiuizZuxDV6TXuyU26HZQ0dobHn2+d4OKwaSm2kdunpM5s9qPgD4Y3bl/SwDUgb4MgGq8Nby34zPqPS6SHRasHaQcvOEmnt32R8oav0JBYX7h9zkm56S4G5BpmIT2RIfHEzc8/uOdAf620UuuW+Xnx6Z2qV31zSFGZjpJd8mU9Qejs2As7rnYPrHO4i4GYy3vwrE3buL/jW1T4t7UoyP69heMgYm/xqSp3KCp3MBfG//pzJ6iklZkJ2OMg9QCO1aLpbXXS4mFWB0GfR3Wg0U/lQ6DerF9g4cuBRVG2xs4hEJh9mxvYk9pA3tKGwm2DVaBlFwnGWNSyByTjDPdDiiRoCEuqIj822lQEQtiDhxUtPastLYhFjC1BBVx71dt/k9BaTmfst+gIi4g6EFQoSjRR232H+JBxWAyEAKgAZ8CG4pSHBaspo0qj58sd/s6HZfFzeIJV/Ov8mdZU/Mub+z4G9W+3Xx39A+xqJFeo/0Njz80x8rLX0Blk0FFo05e8oF7dVRNwesPSwB0kNrWGyVa94IxcIxQcIxQyDxMJdgUCYSay028u00CHoOqdT6q1vlQrOAsMHEVKjgLWgry9wm8YnfLWIDWcTCmxmoE2teLRYOnaNF9pz1jbYry2wZjBrT0EigYJpix3rqWDx0mtP6gWtObZkt7o9sV1NYbfy8EFW17Jlp7SNoGQZF/w81hvLub8e324q/yt1wkQrEoOHKdOPJdOPNdqDaNsGJSZeiw1xsfGLR5lV0NKmI/l9jzqgQVYsiRACgRFMhJcVDvDeMNhnHZ2v8YLKqFU0efR44zn9fLn+ezPaup9VdzzvjLYsXRccPjmw00d+Tdx2VVmZRt5YvqEJ/vDpI38cBpMLum0hTS0XUTbT8zTovB46CCsQzIyABmgB4y8ewI0VAWpGF7iLDPxFum4C0DFAV3roXU0VZSx9hwpKsdpsq62zNmGCa6qWMYBroJuqlHaisME8M0IrUXphGpsTAhbOjoBhgGbbZHUiitaZpIRBYNQIirEYvc5M1YrxVgttzYTbUlkFDQsERSkNHC/ba1ZGgoqoIWDdhagj1Vaa0VU2M1YpEKMNRIUKi1tCNQG8K7y0/TTh+BvcG476HNbSFllJuUwmSS85xSsC7EQZIAKEFcdgt5qQ5K9zThsFroaIJnRVE4KufESHF0ySNsb9oamzk6xxUpjlZtCrYslWA1ccPjZ+bb+KI6xNqKICdPcMQ+0XXGalEJ+MP4wwZJ2uCrAxJ9R7MqpI+1kT7WhmmaeKt16suCNJSF8NXqNFWEaaoIs+tDH7YUldTRVlJGW3HmaqAqrb0lZkutR0ugoxuACWHTIKxHntcNsyXIaQleWr4MtEgPi2GCEv39jOX+WoKMyBuaqkaCPk1pm4ZrTYuY0RRiS7BFrEaktXasdVt8uAZhIsWykdFVhhkZZRPt34lkKyPpn7aZyrZaYqtICVkYjBoNo0JFr9Qg0Pbv1ETNBEueiSUPtJQQIaWevdSztzkSjqkKLbVdakvPjQa0BGFtA7FY2jO6Z9vet/iUZKzMP9abFtlLoTWgaz2+Nd0pxGAjAVACZbnt1DYH8PhDpDk7H51RnHooP558I3/Z+gB7AzU8svkuzhp3KZPSpgOgOhSsmQrBahMjYKLaFQ7JtmLXoM5vsL1epyh9/z9qVYl8uvaHdJLsEgANWybxvSexx22Cl2QTxxQLjkMs+BvDeHfq+HfpBKsMgh6Dmg0BajYEwALaCAU1V0HNUTAttOmNilbBKiiq0tI7QpteEbCoCqC23ORb9umFG21rD1ViUpV6s0lgt05wt0GwyoA25VaKBSy5CrZ8BUsuKNHpyUwjGmK1BGsGZkswFhu9RGuRcTTZFov12mibmWy9cOSJSIZLafNvtK4rumM0VRgLk9rsGw3ItNagk9YgTNknXUmbM0VTbJHn1NZrtwnc2gZkSqxOrDVAiwZkUqwvukoCoASyWBTyU518Vd1EWDex7Cf1lO3M4yeH/JK/bnuY0sYveWbrg5w08nscmzsfRVHQklQsGSbhPSaGamK1KhyaY+PT3UE+rwgeMACCyKSIzYEwmW6pAxqU9he8mNG6lZZtRmRb2DBaelwgrBuRYyJVrnFFu0a0KyZaNNJyF1VQUApAG6mSFFbRa0z0SoNwpYkZAH23ib47cpw1U8FWoGHPV9FShs+NyjRNwntNArsiQU+4Pr5PSE1SsBeo2PNVrNnqfhc97mtxAZTZ2u8V2Wbusy2yb2vRfkcBWdtC/9ZzxUrD2l5ciS+qhrY1R0rr71ssIGsbgu0bkLVMaaFGq8eiwZIWCZ2iwVjbecLizqHGXbv9AAKFfecnaxuQtR6jSu/YACYBUIKluWxkuW3UNAbIcu9/NupIcfRSXiv/Kx/XvMN/dr5ItW83p445D4tqxZLSunq8oprMzIsEQOsrg5w6yYl2gI/PdouKL6gT0o0OR6eJvmUYkZuMgdlSy9JaTBsdYWNgYuiR4EVvCV70WG1M636xtBPE5imJaRu8tKSF1Db/r6kKikbrDaSld6ZLvSVuoKjjm35oj0loT5jmdQPrpt8XjJBJqMogsMsgWKFj+NtsHMDBYNsbfCJ6x/bVNiDbN10J+25rG5AZmBigx+/bGpAZrYXoLa84Vvu+b+oyrncs/vsTSyjGArLoxBStU1REgydNifZstQ/IVNVCLIXZNsiKnak16IvNJUabNGZsWoyWfTrqNVOG1ujK3iABUIIpKuSmOmjwhvAFdZwHmIdHUy0sHP1DRjgLeK38r3xe+z61gUhxtNuagjVNhXBkePy4dI0km0Jz0GRrbZhJ2fufBM2qqXiDIfwhCYC6q3XekgMEL0ZLz4xhtPS+tAYveleCF4gFMLG6FlqHEWuKgqKCovYgeOlFihJJy1ozVZjWJu2zyyBYbWA0m/i+0vF9paNYwZarYi/QsOWpqPbB+Q59oNSWLU/Flh8Jegbra+xvAy0gM2JdVPupHzMN2uyFYUbmVA636R1rPVeb+rGW6vyu1o9Fn2gb7ESCorZ77zOLPrQGYdHi/Hb1Y0qbNOb+68fiesL2qR+LD8ji68ciry3xEyFKADQAJNkt5KY62F7rxWHVDhihK4rCkTnfJNORw/MlD1PetI2HN93JD4uXkOsqbB0e32wyPdfK++WRNNiBAqDo6OVASCfZMXx+NeKCl7YBSBeKdqP/thbtRoMd2hTtxq5E9MEBg5c2RbtD4ROblqTgKrbgKo7vHQns1jEDENhhENhhDOjekX2ZZmRG9mjQM5BTW6J3tL3xJzoga+0dI65GLLKtfUB2MPVjbevG2gVmcT1k8fVj8QFZfP1Yoy+M1TcC6N15gLpj+NzlBrjsZDt7m4N4/CFS91MQ3VZx6hR+PPmXPL3199QGqvjT5v/jzLGXMDl9Rmx4/PS0SAD0RVWQoO7CdoA3Yaum0ugPR9Jxg+H9uitFu/sEL9GRRrppoutmu7qXzoMXElK0O9SoVgX7SA37SA3TtLQLIgZyqswImQQrDYK7W4O3mEEUvInBr7V3DFpHRiZOd+vHgnqAoBHo/IT9QAKgAcJqUclPc/JVVSNhw2y5mR5YtjOXHx9yA8+VPMLXns08u+0PfGvkGczNPRlblspo3Uq6Q6XOb7C5OsT0vP0XONssKoGQTkA3sPf16tCJKtqN1rq0DV4UBTQlPnhpOVT0HUVRsGYpWLMGbqpMb26tZQpW75PaGiLpOyEOVnfTlZrq6/M2HYgEQANIustGltvOnqYDF0S35bK4uaD4Kl4rf46Pa1by350vtRRHn48tS2NGtpW3dwT4vCJ4wADIqkVqhgIh/YABUFeKdqOLBQ7Yol0xoOybKtu3t6U/UmWm0VLAvVsnsMtAb4hPbWluBVv+wOmVEkL0jARAA0isINoXwh/ScVi73q2pqRa+O+aH5LgKeG37X1lb+wG1/mrOLb6Mw4udvL0jwJc1IbwhA5d1P4FNy3t5kz+Mbg6fol0x8KhWBUehhqMwPlUWDUrapsrigpIRatzaeF1xwNRWlhIrYJbUlhBDgwRAA4zbYSEnxcGOvc3YLQcuiN7XnBHHk2nP4bmSh9nRXMJDm+7k3PFLyEtOpqJRZ/3uIEeObr/+WFtOq0ZtUxCaW4caDLeiXTGwtE2VuTtIlelN3U+V6U0Ggd1G56mtPBV7vqS2hBiqJAAagEak2Kn3Bmn0h0lxdv9HND71EH5yyI08vfX37PFX8diX/4/iovOoWD+ez3eFmFNo3+8nZLtVxb6/XiIhEqxbqbI2vTdmCAK7dAK7O0lttS24lgp2IYY0CYAGIJtFJTfNwbaqJsKG1uWC6LayHLn8ePKNPFfyMCWezXxhPIYtcz6ltfPYW6uTkaVJN74YEg6YKqsxCdVEUmVxWoIje4GGLV9FS5bUlhDDiQRAA1SGy05mUog6b5CMpJ4tTeG0JHH+hKX8u/x5Pqz+H/YR/0G1V7Ou4VyOcybFVo8XYqg4UKpM0SS1JYSIkABogFJVyEtz0OAPdrsgui1N0Thl9DlkO/P41/a/Yk39nA+CtRyuLCHJlxJbPV6IoahtqszUI9MiSGpLCAEtA27EwOR2WMhNdtDoD7WfE72b5ow4nh8ULcXUnei2ch6ru5vKYDlG4CBPLMQgoWiKBD9CiBgJgAa4EakO3A4LjYHwQZ/r0KxDyPNdhR7Ipkmv46mG37C56XOMkARBQgghhhcJgAY4m0UlL9WJPxRGNw4+UDly9Ei8ZZeh+icQMoO81PQIq+pexwgnfmE6IYQQor9IADQIZCTZyXTbafCFDvpcUwvtWBUnDaUXcGjK8QC84/sHf69+nGA4seuyCCGEEP1FAqBBQFUhL9WJqkIgdHA9NXarwtRCG6Bh95zKd0efh4rGF6FPeKryt3jC9b3SZiGEEGIgkwBokEh2WhjhduDxBw+6IPqwosg6Y5+VBTk86xssnvgznJqL3XoZf674PyoC5b3QYiGEEGLgkmHwg0hOqoO9viBNgTBuR89/dJPybbhsCh6fwbaqEBPyJvGTQ37JX776PXsClTxR+WsmuKahKRoqGqqioaKiKuo+jyP/avs8VmPHqbHHWstjpeVfLbZdiz9v9Bi0yHnj9mk9d2RhVBnRI4QQomckABpE7FaVgjQn26qacNkt9HREr0VTmDHazvtb/XxaGmBCno1MRw4/OeRGnvvqEbY1f8Em76e92/g+0D7Y2l9w1UGw1Saoax/Edbxfh8FfdFv0+V4MGNs+ryjSYSuEEL1FAqB+pigKKiqegIdkW3K3ezEyXDYy3DYavEHSezhDNETSYO9v9bNue5Az55hYNAWHxcV5k69k4+5PaWhswNB1dFPHUHRM1cBQDEzFQEfHNHUMDAzTiOyDjmEakX8xMMw2j83IMYapY7YcY9By7jaPDbPNsbSetzPRY+Hg50kaDBSUDnvD2gdxbQKn6HNxjw/U09Z5z9t+r9VbvYUt2xRU6eUTQvQZCYD6Wbo9nQkZEyj3lFPZXEmaIw2nxdnl4zVNITfFQYMvRDBsYLP0rFdgbI6FVJdKg9dg064g00ZF6oI0RWN6wWzMsIkRAjNkYvhNjACYYRPTADBRLAqKhchXH9+kTNNoDbbaBUrRQKt94BT/vB4faHX7mPb/6h0+Hx/U6Z0GffsP/jr8PmCiE0Y3Y08MeUqnQVP8v60p1n170Pbdz4JFsWBRrGgt/1oUC1rLv5Y2/0a3R46xdrgt+pyKrK0nxGAjAVA/01SNAncB6fZ0djftZnfzbhoDjWQ4M7CoXftxpDqtjEi2U1HvJ9tthx6876qKwqwxdt7e5OPT0kAsAIpSLAqaBXAqkAKmYWJGA6KQieEDMwyG38TERFFpDYi03r0RKEokwaQpYO3VMw9MpmlGgqZ9A7T9BFvtA8PO/o0P8joO4vb/b4c9d3G9f+2v1a6XcJ9zmJ1EcyYGYdOIPhjAlLgASqOjYKmzx1YsdLxt3+Astr1NUNb2GFXp2ZI5QgxHEgAliMvqYnz6eLKcWexs2km1txqrZiXNnoZ6oFoPBXJTHNR7QzQFw7jtPfsxHlYUCYC+2BnEHzRw2Dq/rqIqKHbArqABpNNhL5HhNzENk/7uJRpKFEWJFIujgTIcQr74Xr5906YHTpPuP8hru2+kBy1M2AwRNsPoLf+2e0z77a3HRZ6LT8+asW2JpKB2HGxh2U8g1lEvWNuery72mLXZX+rVxP6YhkknHd39SgKgBEtzpJFsSybbmU15YzlVzVUk25Jx29z7Pc5h08hLdVC6pwmXrWcF0SMzNEakaFR7dNbvCDJ7nKNbx3eplyhkYvjp814iMbi17eUbLEzTaA2OaA2iOgqu2gZd0UCp7TH6vtv22V83w4TpKBALxfWemRiEzAD/v70zj4+izPP/p6r6SHc6N5JwBAIKgtxyGZgRXEFUlpXoT4HJjsiO4zoDLMcyM3ggOqyCijKjsB7sa2BWh4FhB3DNCopAgmDkkoDIzSAgQwiHISFXd1d9f39UV3VVH0kHknSS/r55hXQ9V33rqU7Xp7/P93keD0V3UVMRUt3iKYyXTKptuBFhPGIh2pdg4S9eUYRIFTkkQ/3tJRABgABBACCpz5BowgKoGSCJEtLj05ESl4LiimKcKz+H4uvFSHGkwC7Zw9ZLc9lxtcKNa1VupDjrHxAtCAIGdrFj44FK7DtdU28BFNRegJeIkgmQwV4iplUiCCKsgg1W3PhkhIZAITm0lypIMAV7vEz5iFCIaW3B3JZxjFKBDDfJcEd52DLQi2WK7QolniIaujQIrTBDkcYyYisP5idSP+dJEzsygUi9XkH0bUJsAUSnANEmQNCET4UMa3J0PYUsgJoRNsmGTomdkBqXiu+vf4/iimIAQGpcKiQxeGzfIglol+zA8eLyGw6IvtMngI5f8KC8SkGCo+HekIIgABaE9RLJbgJVG7xEpOh/LOwlYpjIEAUJNkGCDeG/LDU2RAQFYYSYyYsVWliF9phpwiyUiAsnysybRmtDnjVRFGIChCAvVqCgCi22gocWQ5UP6TFDcFqdoRV1oAsd/Ycg+AJQBQmAKEC0AYJNgGgV1C+3Ui2f5dXR/9LLAqgZ4rK5cHvK7bjFcQvOlZ9DSWUJnFYnEm2JQW+YZIcVtyTaUFxajVsS6u/BaZsooVOaBWeveFF0pgY/7hH5jLQbIchL5PujUty+mKIqguI2e4lEq+Bzl0b/D4ZhmGAEQYDkizOy4+Y8yTcD+WLHIvNimb1fgWkmERbWWxa6XeNMTmom8WHqMhThZzta4BdeEvmGG2GFRD5BJfrKSVZYLRZYrL7Xkg1WqwUWixVWydeuqAX3W2FVfO2JWnxY8/kMZwHUTBEEAWmONCTZk3Cp8pI+bT7JngSn1WkoCGQkOnCt0ouKGi/ibyAgemAXO85e8WLf6cYXQIGYvESIwEsERRVR7CViGCYAQRBh8QWCA037WWZEXR8tQDwhAiEWIkYsMm9ZqCFPc3yYOikg+vFhkk8gCRDRJ3UgHuwxKGq2NHsBtHDhQqxbtw5Hjx6Fw+HAsGHD8Oqrr+L2228PW2flypWYMmWKKc1ut6O6urqxzW1wLKIF7VztkByXjL+X+6bNu8uRGpcKq6TOEHLYJGQkxuG7y9fhuIGA6AFZdmzYW4HTl7y4Ui4jLSG6U2lDeYnIC3+AtTGWSCZAYC9RrKIQwSMDHsX3Wyb/a4V8x750GYYHgmD434/21hFCpOnHYeqY8gLaEQy1wrYX6ty15GltBaUFFK5ve/WvIwSXra29m+rP2u9b/durrU7AucJdf9j21G9pAmCKEhMEX4Gg9oSw9kZ63wLzZMULWfHAI3vh9Xrhld2QyQsZMmTBC1lUY7lkixey5IEiqsH2shAwE1LxCS4l4LXvt6wfe+BVvAFlzJ4vmbyQZXWo0q1EV4w1ewFUUFCAqVOnYvDgwfB6vXj22Wdx33334fDhw4iPjw9bLzExEceOHdOPW/pD0WFx4NaUW9HG2Qbfl6vT5i2iBclx6rT5Ni47rla6UVbtQbKjflOnk5wiumVYcbzYg6+/q8HoPs66KzUhgiCos8GtACAASRF6iazq2DR7iZqO+gqSoDQF8MpqmtuX5lXCtCPDvygkwzB1IACw+36Cc4wvIhGsQekmEWZsiCBABgQvBMELiOoPwY1KT+INXEfD0ewF0KZNm0zHK1euRNu2bbFv3z7cfffdYesJgoCMjIzGNq/JSbInqdPmnbfgXNk5XLx+ES67Cwm2BLRLisPxi9fhkRVYpfoFvA3sYsfxYg/2nW5+AigUEXuJ3GoskSD6Z5xBavmCOFLqK0i8ill8GAWJRwHcYQWJmhZNQSIJgFUSYJUAq2j8LcAqqnmiELyeIgUkkP5fiLIBGRRRHfMLY37Ic5vy6Qbq1J0XOj34XGHPV8e1hrQhqA7VkR+6vcA6kfc3hbXt5u5R7fktgdqu/8YuKLCS5PsJEF/e6AXuAy1AAAVy7do1AEBqamqt5a5fv47OnTtDURTceeedeOWVV9CrV6+mMLHREQURbZ1tkWI3T5tPtiejbYINF6/VoE1C/d5YfTvb8JddwIVSGX//wYv2KS3rrRHSSyRroogg1/i9RFTl8xIZZ5zd6M6y9aQ2QeJVCO4wgkQTH4GCxPy75QkS/XeINIsowCZpaWp9i6Edm6Fti6Subs4wzYlQAlZNN7wOkUcK+aaUA4rsWziQBAgiVB0hCBBsUL3cFjWOUhDh+y2YhUytojec2KtdnEYmcGs7D+FC+RV0S0tANGlRTzlFUTBz5kwMHz4cvXv3Dlvu9ttvxx/+8Af07dsX165dw+LFizFs2DB8++236NixY1D5mpoa1NT4xyLLysoaxf6GxipZkZmYiVRHKr4vV6fNS1YPJIsVVW4ZDlvksTxOm4heHW04eNaNfadrWpwACoUgqdMwYRcguUJ7ibzVBE8Vwe1V4CWCVwS8AsED+DwdgNsw5OIN8Jq4WZCwIGGYMGie5qC/BF8Cyb79FbWp5Yo6tVwU1GnksAJiPNT1cyw+sdNKYh1rACTHRzfetEU95aZOnYpDhw5hx44dtZbLzs5Gdna2fjxs2DD07NkT7733HhYsWBBUfuHChXjppZca3N6mIt4aj+4p3dVhsfJzKK08h4tlhE6WWyDWw7MxsIsdB8+68fXpGowd4IzKA0whgsereUAIbq/BU2J4raaby2qv9TwZvjoEt6kNtaxbJshRXI69IQSJVYIqPEIIEqvkEywsSBgmahhXRK51oUAHINpEfXZrrA3XR4MWI4CmTZuGvLw8bN++PaQXpzasVisGDBiAkydPhsx/5plnMHv2bP24rKwMmZmZN2VvUyMIAlLjUpFkS0KK7RbknzqMs2XnkeFKRZwlspieOzrYYLcKuFqh4LtLXnRtaw0SJB4ZBvERLE784sMgSIxlm7MgEQ2CRBMVAmAVBFgEqMJDFGC1CLBaAKvF5/VgQcIwMY9poUAFaoS+T+jAJ3REKyC4AhYK9IXHsNBpepq9ACIiTJ8+HevXr0d+fj66dOlS7zZkWcY333yDBx98MGS+3W6H3R7dYKyGQhIldEpqj3u6OFHwtxOo9FxBpVyBBGsyrGLts8NsFgH9Otmw+1QNln12DQREXZDYJJ/Y0LwgFsMwjMUgVjQxYirrf23TyloEk8ixGY7DectIVmecKR6C4lb3OIOXoMgAQFGJJWIYJjpoG3mGXRFZEiDa4V8RWft84BmpzY5mL4CmTp2KVatW4aOPPkJCQgKKi9XtIZKSkuBwqAtdPf744+jQoQMWLlwIAPjtb3+Lu+66C7fddhtKS0vx+uuv48yZM3jyySejdh1NTYekJPTP6I6Tly9Bsv6AyzUXIUJCoq323eaHdYvDnlM18IYQPvUVJKrAaHhB0tRosURinGpP2BlnlaRG/AmxOeOMYVoTxkBkTehAUDfy1LZ+kByq0FH/3g1bPzSTzy6mdpq9AHrnnXcAACNHjjSlr1ixAk888QQA4OzZsxBF/0P9hx9+wM9//nMUFxcjJSUFAwcOxJdffok77rijqcyOOqIoIDPViSvXE2GRkpBsT0Nx5XlcrS6BwxIPp8UV8sHcpa0VL/2/FFR7qNkKkmgTdsZZgJeI3JqXKDozzhiGqRuSyb9jecCMK8EiACIgxQGiXfRv5NlKApFjHYEocBUDpqysDElJSbh27RoSE6O7UNPN8rdL13H84nW0S4qDQjKuVpfgYtV5VMuVcFmTYJeit29Pa4bIt1Cjbxq+tscZeX0Ll7CXiGGajEgDkQWrecYVx+c0HmevXcStKe0bfCuM+jy/m70HiLk5OqQ4UFJegx8q3Ehz2dHW2R6J9hRcrrqAS9XFqPReR4I1GRaR3woNieBbp0NdAz8CLxEpuiBiLxHD3BiBgcjk9cfn6IHI9dmxnGnV8FOvlWO3SMhKi8fB70v1FaLjJAc6uroiyZ6GksrzuOq+DJtgQ7w1sdb4IObmCBlL5PMSKW5F3cbDzbFEDFMXenyOYojP0YatRPgDkRM4EJkJDwugGKBtgh0ZSXG4WFaNjET/DskJ1iTEJ7qQUnMLiiu/x9WaS4i3uOCwhN9jjWk4jF4iyakuCGbyEtX49jYzeomsHGjJxA51BiJLIQKRNaHDfx9MHbAAigFEUUDn1Hhcve5GRY0X8Xb/bRcFCalxtyDBloTLVRdxqfrvuFpdAqc1ASLM3iC/ByJwddPAXZO1Y/MHkD5VlD0ZYTF5iRIMXiIPqaKoSp19xl4ipjVhCkT2km/7BJ/Q0QKRtYUCfYHI/J5nbhYWQDFCktOKjqkOnCy5DqdNCvrQsIo2tIvPRJI9FSVVf0eZ+wcA5N/80Yd/XxfzNoKBm0QG7iUTvImkOjZPINMOxETwp6spEAQBRGSSU0arhBBpodPJlGPesdgo2MIIvLrKBS17H0YICqGEYS0iUttHME516UMmwOObhu8G5BoA1QJIBgSB9G/GgsUwcy9AvJrPbchmmEZCj89R6lgR2Smogcia0OFAZKaRYAEUQ3RMceJyuRullR6kxNtClnFa4tHZdRs8iltPoyCRE0bc6LstB5QPbIcCxZN2aK4XLL6M6QFlg4RXaGHmL68udKQEHPvTNbRjX74Sun0tXzNEIYJfQPpK1dovZL4G0y7XAf0lkBpcbQMQDygKAA+geAnkhrrpqxdAtW9FWoHUb8sWVRwFtRtmE8OwyjJEEa2YoP3WXgSmGyoSaen+HGO++UWkojSweuBDU9D/+Y+0cr4coba8MB3B6JgCkUMtFChyIDLTPGABFEPEWSV0buPEwXOlcMkWWKXQAc+CIMAmtY6VsZsbweIwUDTCnB4kGmFODyNKZa8MxUOQ3TK8NTK8lTLIq0CRfcNmkghRi5cQhVp2gQ5tb0B2WI9gsIgLKG+oT7poNJTS0sgoe7WKFNQ/5hZ8+boo1dIUgPzSVNHFJ0EdgzGUNdqkncMg7gCzuPP/Vl+pgkmTUr4hnVDCKkiQif5jwZjrz4v2ViqmQGQvzOvn+AKRTfE5vBYW08xgARRjtE2IQ0aSA5fKa5CeyGsANTVCmPio4O2ibxILAMPtJSLIbgWKR4G3xgtvlQyvW4ZSrQoEQVS/jYsWEaKl9c8EJF3gKH4ppYsoRf9fKwNDGYLmKVSFkyalDC35RJSsSirF6/cjkqIKLp8Ik/V2NE8iGc7py1OgnwG6iDN4CQ2CzOiBM2tmnxdGAABRF1SaiPK/Lw3CS3tTEgBZUH8UqCLH15YgCRAlQR22squiGsYZVyx0mGYMC6AYQxIFdEp14mpFDSrdXjht/BaIBQRBgMUuAXYJNpe6J5ziVSC7FcgeBd5qLzxVXsg1CjyVXhAJkKwCRIsqilrbg0z3zAhStE0BoIkVxSewNJHlF1T+NFUUAYZhVjIMtZJWQx/c9Qs38kkvRfZJKxlEakmFZChegiIramyODMhqYxBEAkkEQSJQHEGwAiQpgIUAESBJ9SqavJQyICiaCjMPdGql/MONPv+YYPCGCQGesTB5pvoh8xgmPPz0i0FS4m3omOLEqUvX4bAGB0QzsYHm7bECQJINpBBkj08Uuf1eIm+1F4AqGkSrqIsipuEQNM9MI/8pEhFIJiiy9luBPtnAKkJ0+ESvXYSkr5/jm3Elwhe7pfmpjILNIMSI/DFzpA8y+sv6fiskqx4xUqDWUKAoiiGPdJGm/VPIOCzp86sZ4+10D53vWFdcvmtEbcOVhqFKfbhS1MVZcIyYlmcerjT6zwR9uJL/XpojLIBilI4pTpSU16C0yoMUZ+iAaCa2EETVS2SxS/BtdOb3ErlleGu88FTJqpeowgsImoeodXqJWjKkmEUOyYA6ZqbeL0FS77WUZINklfR7KFpEiM0sENno4dLEjkKGyQl6PFegIFN0r5k+WcHnQdPb0WO+VAFGJKueLyiQFdknsxQQKYYy2pCo4hNkaiAUBQyJkn4ObbhSFWQCqbNcA0LJjFesDkUKJinlG64MjAkLEG5hPGeBefylV4UFUIzisEnIahOPQ+evIUFWYAkTEM3ENrqXyGkBYA/yEnkqvZDd6hAaEUEUBfYSNSGa0FG8irqWjgJ12ElQY3MEiwCr0wqLXfQJHbHFCVb/QxxoDib7PVmhPWEgfzyYLtS0WC/4BZm/juITTooe26WQ7POIqcOVCrzqvYYmwlQvWZC4Mw6HBgyJQn/tH67UYsUE34tg75iKHvNl8IiZhyQN8WO1DmWKuo+tOWxDygIohklPsKMkwY6rFW60TeCAaKZugrxEaaG9RN5qBSTLgAC/l8gq8jfPG0T15qiz+MhLvuUYBH39HNEiQnKIsNgtel9rYof7vGHRBVkzGdbShxlDDEeahx6VAAEUqpzRk+UXatpwJZHiF2GaIKvHcKWpXUR/aJAFUAxjkUR0TovH1Uo3qtwyHLbmERDKtCzCe4lkyG7Z7yWq8oJA6qwhi6jOOmPPo06o+BxS1G/igqSugCxaRFjiJUg2vzdHsopqrA4LnZhEFWRSw88kvUGChhlNsyj9XrNLUg0ynK5omsoCKNZJjbchM9mJv12uQHtrHH+IMjeN2UsEIA2QPeoUfNktw1PthbdahrdKAckBsUQx4CUyCR1tbSbfgIMoqWJGsomw222QbKI/NkdbS6eV9w/TshH1wO/ayzkt1qivN8cCiEHHVAdKrtegrNqLJIc12uYwrRDJKkKyql6iuNq8RFoskWSIJWqhXqI6A5EtAiwOKyQ9Pqf5BiIzTGuEBRADp82CrDQnDp0vg8tugdQcIg2ZVk2gl4hSSV2HRvMSVXnVFaxbgJeIFDUIWRM72nYpgD8Q2RZvhWRruYHIDNMaYQHEAAAyEuNwsawaV67XoC2vEM00MYKgLryoe4mSfV4itwLZo27n4an0qitZR8lLFDoQWRVzpkDkOIvZm8OByAzTLGEBxABQA6Kz0uKxv7IU1R4ZcVYOiGaiiyAKsMRJsMRJsCeosTOKV93fTPEoZi+R4gUgGGZA3ZjoqG8gsmSY8s/xOQzTsmABxOikxtvQITkOZ65UokOyM9rmMFHGuE4HmdLrV95cxvDaUCpUm+HKwioAVgmSU4Iga8NmCrxuGTVVXlClB7JHLS+KgGAQKFq4MQi+zTzJ91tR97gSoA5bSepKyBanDRa7BMEiQJJENShZ0tY7gWGVYIZhWhosgBgdQRDQKTUel6+7UVrpNu0TVtfDKjCdQjwCzfkIeRDuPOEfqGEeuhScFm7hrXAPd0JoA0zlwzSk1TWdUghdFoKxorZgmGERMsFvuwDBsDgZTK9DNU7h5sYaDdOX9vcnG5/pxo1bwz7rjeWFkMkBr4XgeuHaC3N+/aVVgGizwAYLrGQDvH5RJFd7odTI8FbLIJkg+PbzhG8jT0EARJsEyW6BoHlxfAJIEAV4QfBCm8Irg6pl/3tLW1iO/HaR4UCTW6Z7pG2PRVDvOwn6jdR2ijd2jVbHvzWD1g+CqU0hIE1vy5Tv70/9dag0Y1shzskwrQUWQIyJeLsaEH3qUgXKqt0AzA+gG31gmcsa8kM3YfpAru3h6v+gFsz1hYAPdwjB9YPa0tL9S80Ht2V+IAQKhXAPEWOZUOc3YrTDaF9ou+sQBwEHkZQPdd5w54xI+NzEddSnbLhzkqzAUyPD41ageBWIkuCfdeULqNaEjF7HIG78e0sZxAvC52ur+QIwpZnKhjmXQtoCctprY77hmOBbKdjfphZ7rdmorwns+09/Db+NhICyhjKhhJ6ukk1/b2ahp68jbBKGWl2z0DOKPO3eBoouo8gz3luT0AsQeca2YCgX/vPDfMzEBiyAmCA6pjiRGm9en6GpHlZhH5D8wcTcKKIEi1WCI9p2NBGawNKEERAsxBDqWKuLABHl13MhhV6gsAol9Px7ZAGK4hNyCBR6fvGnnyNA6ClKCPuMNiqh7dMuMEjoGUWjwX6j0AM0eWeWfEahZ/TmGauGEnqBX5SAYKEX+JkYTugFfrELFHpBbbHQM8ECiAlCEATE2/mtwTAtEbNnsvU+6AKFXighBoT2wKllQgs9rS1jXaPQCykKQ5xL8+YBPtGn5fvSjd48/9YR4YWeol1TCFEbypsXeI2B9kV72LbGK0d2oxsRfsoxDMMwLY5YEHq6WAsh9Fr6sG2cVTTFmUYDFkAMwzAM0wwJjiNsnUIvWrTMNeYZhmEYhmFuAhZADMMwDMPEHCyAGIZhGIaJOVgAMQzDMAwTc7AAYhiGYRgm5mABxDAMwzBMzMECiGEYhmGYmIMFEMMwDMMwMQcLIIZhGIZhYg4WQAzDMAzDxBwtQgAtW7YMWVlZiIuLw9ChQ7F79+5ay69duxY9evRAXFwc+vTpg08++aSJLGUYhmEYpiXQ7AXQmjVrMHv2bMyfPx9ff/01+vXrhzFjxqCkpCRk+S+//BKTJk3Cz372M+zfvx/jx4/H+PHjcejQoSa2nGEYhmGY5opAZNzjtfkxdOhQDB48GEuXLgUAKIqCzMxMTJ8+HXPnzg0qP2HCBFRUVCAvL09Pu+uuu9C/f3+8++67EZ2zrKwMSUlJuHbtGhITExvmQhiGYRiGaVTq8/xu1h4gt9uNffv2YdSoUXqaKIoYNWoUCgsLQ9YpLCw0lQeAMWPGhC0PADU1NSgrKzP9MAzDMAzTerFE24DauHz5MmRZRnp6uik9PT0dR48eDVmnuLg4ZPni4uKw51m4cCFeeumloHQWQgzDMAzTctCe25EMbjVrAdRUPPPMM5g9e7Z+fP78edxxxx3IzMyMolUMwzAMw9wI5eXlSEpKqrVMsxZAbdq0gSRJuHjxoin94sWLyMjICFknIyOjXuUBwG63w26368culwvnzp1DQkICBEG4YfvLysqQmZmJc+fOcSxRI8N93XRwXzcd3NdNC/d309FYfU1EKC8vR/v27ess26wFkM1mw8CBA7FlyxaMHz8egBoEvWXLFkybNi1knezsbGzZsgUzZ87U0zZv3ozs7OyIzyuKIjp27HgzpptITEzkP6Ymgvu66eC+bjq4r5sW7u+mozH6ui7Pj0azFkAAMHv2bEyePBmDBg3CkCFD8Lvf/Q4VFRWYMmUKAODxxx9Hhw4dsHDhQgDAjBkzMGLECLzxxhsYO3YsVq9ejb179+L999+P5mUwDMMwDNOMaPYCaMKECbh06RJeeOEFFBcXo3///ti0aZMe6Hz27FmIon8y27Bhw7Bq1So8//zzePbZZ9GtWzds2LABvXv3jtYlMAzDMAzTzGj2AggApk2bFnbIKz8/Pyjt0UcfxaOPPtrIVtWN3W7H/PnzTfFFTOPAfd10cF83HdzXTQv3d9PRHPq62S+EyDAMwzAM09A064UQGYZhGIZhGgMWQAzDMAzDxBwsgBiGYRiGiTlYADUiy5YtQ1ZWFuLi4jB06FDs3r072ia1eBYuXIjBgwcjISEBbdu2xfjx43Hs2DFTmerqakydOhVpaWlwuVx45JFHghbHZOrHokWLIAiCaX0t7ueG5fz58/jnf/5npKWlweFwoE+fPti7d6+eT0R44YUX0K5dOzgcDowaNQonTpyIosUtE1mWMW/ePHTp0gUOhwO33norFixYYNo6gfv6xti+fTvGjRuH9u3bQxAEbNiwwZQfSb9evXoVubm5SExMRHJyMn72s5/h+vXrjWIvC6BGYs2aNZg9ezbmz5+Pr7/+Gv369cOYMWNQUlISbdNaNAUFBZg6dSq++uorbN68GR6PB/fddx8qKir0MrNmzcLHH3+MtWvXoqCgAH//+9/x8MMPR9Hqls2ePXvw3nvvoW/fvqZ07ueG44cffsDw4cNhtVqxceNGHD58GG+88QZSUlL0Mq+99hreeustvPvuu9i1axfi4+MxZswYVFdXR9Hylserr76Kd955B0uXLsWRI0fw6quv4rXXXsPbb7+tl+G+vjEqKirQr18/LFu2LGR+JP2am5uLb7/9Fps3b0ZeXh62b9+Op556qnEMJqZRGDJkCE2dOlU/lmWZ2rdvTwsXLoyiVa2PkpISAkAFBQVERFRaWkpWq5XWrl2rlzly5AgBoMLCwmiZ2WIpLy+nbt260ebNm2nEiBE0Y8YMIuJ+bmh+85vf0I9+9KOw+YqiUEZGBr3++ut6WmlpKdntdvrzn//cFCa2GsaOHUv/8i//Ykp7+OGHKTc3l4i4rxsKALR+/Xr9OJJ+PXz4MAGgPXv26GU2btxIgiDQ+fPnG9xG9gA1Am63G/v27cOoUaP0NFEUMWrUKBQWFkbRstbHtWvXAACpqakAgH379sHj8Zj6vkePHujUqRP3/Q0wdepUjB071tSfAPdzQ/O///u/GDRoEB599FG0bdsWAwYMwPLly/X806dPo7i42NTfSUlJGDp0KPd3PRk2bBi2bNmC48ePAwAOHDiAHTt24IEHHgDAfd1YRNKvhYWFSE5OxqBBg/Qyo0aNgiiK2LVrV4Pb1CIWQmxpXL58GbIs66tVa6Snp+Po0aNRsqr1oSgKZs6cieHDh+srfRcXF8NmsyE5OdlUNj09HcXFxVGwsuWyevVqfP3119izZ09QHvdzw/K3v/0N77zzDmbPno1nn30We/bswb/927/BZrNh8uTJep+G+kzh/q4fc+fORVlZGXr06AFJkiDLMl5++WXk5uYCAPd1IxFJvxYXF6Nt27amfIvFgtTU1EbpexZATItl6tSpOHToEHbs2BFtU1od586dw4wZM7B582bExcVF25xWj6IoGDRoEF555RUAwIABA3Do0CG8++67mDx5cpSta1385S9/wZ/+9CesWrUKvXr1QlFREWbOnIn27dtzX8cYPATWCLRp0waSJAXNiLl48SIyMjKiZFXrYtq0acjLy8O2bdvQsWNHPT0jIwNutxulpaWm8tz39WPfvn0oKSnBnXfeCYvFAovFgoKCArz11luwWCxIT0/nfm5A2rVrhzvuuMOU1rNnT5w9exYA9D7lz5Sb51e/+hXmzp2LiRMnok+fPvjpT3+KWbNm6Rtqc183DpH0a0ZGRtBEIa/Xi6tXrzZK37MAagRsNhsGDhyILVu26GmKomDLli3Izs6OomUtHyLCtGnTsH79emzduhVdunQx5Q8cOBBWq9XU98eOHcPZs2e57+vBvffei2+++QZFRUX6z6BBg5Cbm6u/5n5uOIYPHx60nMPx48fRuXNnAECXLl2QkZFh6u+ysjLs2rWL+7ueVFZWmjbQBgBJkqAoCgDu68Yikn7Nzs5GaWkp9u3bp5fZunUrFEXB0KFDG96oBg+rZoiIaPXq1WS322nlypV0+PBheuqppyg5OZmKi4ujbVqL5he/+AUlJSVRfn4+XbhwQf+prKzUyzz99NPUqVMn2rp1K+3du5eys7MpOzs7ila3DoyzwIi4nxuS3bt3k8VioZdffplOnDhBf/rTn8jpdNKHH36ol1m0aBElJyfTRx99RAcPHqSHHnqIunTpQlVVVVG0vOUxefJk6tChA+Xl5dHp06dp3bp11KZNG/r1r3+tl+G+vjHKy8tp//79tH//fgJAb775Ju3fv5/OnDlDRJH16/33308DBgygXbt20Y4dO6hbt240adKkRrGXBVAj8vbbb1OnTp3IZrPRkCFD6Kuvvoq2SS0eACF/VqxYoZepqqqiX/7yl5SSkkJOp5NycnLowoUL0TO6lRAogLifG5aPP/6YevfuTXa7nXr06EHvv/++KV9RFJo3bx6lp6eT3W6ne++9l44dOxYla1suZWVlNGPGDOrUqRPFxcVR165d6bnnnqOamhq9DPf1jbFt27aQn8+TJ08mosj69cqVKzRp0iRyuVyUmJhIU6ZMofLy8kaxl3eDZxiGYRgm5uAYIIZhGIZhYg4WQAzDMAzDxBwsgBiGYRiGiTlYADEMwzAME3OwAGIYhmEYJuZgAcQwDMMwTMzBAohhGIZhmJiDBRDDMAzDMDEHCyCGiUGysrLwu9/9LuLyK1euRHJycr3OMXLkSMycObNedQBAEARs2LCh3vWaO9G6rhu5d5Hy4osvon///o3SNsM0NiyAGKYZ8N1330EQBBQVFZnSn3jiCYwfPz4qNhmZMGECjh8/Xq8669atw4IFC/Tj+oouJpjmJjjmzJlj2tySYVoSlmgbwDBM88fhcMDhcNSrTmpqaiNZ07i43W7YbLZom9EicLlccLlc0TaDYW4I9gAxTBOxadMm/OhHP0JycjLS0tLwj//4jzh16hQAoEuXLgCAAQMGQBAEjBw5Ei+++CL++Mc/4qOPPoIgCBAEAfn5+QCA3/zmN+jevTucTie6du2KefPmwePxmM738ccfY/DgwYiLi0ObNm2Qk5MT1rb/+q//QnJycthv84HDKJon4oMPPkBWVhaSkpIwceJElJeX62WMQ2AjR47EmTNnMGvWLP1aImX+/Plo164dDh48iKVLl6J379563oYNGyAIAt599109bdSoUXj++ecBAKdOncJDDz2E9PR0uFwuDB48GJ9//rmp/aysLCxYsACPP/44EhMT8dRTTwEAli9fjszMTDidTuTk5ODNN9809cGBAwdwzz33ICEhAYmJiRg4cCD27t1b67VcuHABDzzwABwOB7p27Yr/+Z//MeXXdl9XrlyJl156CQcOHND7cOXKlQCA0tJS/Ou//ivS09MRFxeH3r17Iy8vz9T2p59+ip49e8LlcuH+++/HhQsXIuh9ID8/H0OGDEF8fDySk5MxfPhwnDlzBkCwR0qzy/iTlZWl5x86dAgPPPAAXC4X0tPT8dOf/hSXL1+OyA6GaWhYADFME1FRUYHZs2dj79692LJlC0RRRE5ODhRFwe7duwEAn3/+OS5cuIB169Zhzpw5eOyxx/SH1YULFzBs2DAAQEJCAlauXInDhw/j97//PZYvX44lS5bo5/q///s/5OTk4MEHH8T+/fuxZcsWDBkyJKRdr732GubOnYvPPvsM9957b8TXc+rUKWzYsAF5eXnIy8tDQUEBFi1aFLLsunXr0LFjR/z2t7/Vr6UuiAjTp0/Hf//3f+OLL75A3759MWLECBw+fBiXLl0CABQUFKBNmza6MPR4PCgsLMTIkSMBANevX8eDDz6ILVu2YP/+/bj//vsxbtw4nD171nSuxYsXo1+/fti/fz/mzZuHnTt34umnn8aMGTNQVFSE0aNH4+WXXzbVyc3NRceOHbFnzx7s27cPc+fOhdVqrfWa5s2bh0ceeQQHDhxAbm4uJk6ciCNHjuj5td3XCRMm4N///d/Rq1cvvQ8nTJgARVHwwAMPYOfOnfjwww9x+PBhLFq0CJIk6e1WVlZi8eLF+OCDD7B9+3acPXsWc+bMqfMeeL1ejB8/HiNGjMDBgwdRWFiIp556KqyA1ey6cOECTp48idtuuw133303AFWk/cM//AMGDBiAvXv3YtOmTbh48SIee+yxOu1gmEahUfaYZximTi5dukQA6JtvvqHTp08TANq/f7+pzOTJk+mhhx6qs63XX3+dBg4cqB9nZ2dTbm5u2PKdO3emJUuW0K9//Wtq164dHTp0qNb2V6xYQUlJSfrx/Pnzyel0UllZmZ72q1/9ioYOHaofjxgxgmbMmBF0zroAQGvXrqWf/OQn1LNnT/r+++/1PEVRKC0tjdauXUtERP3796eFCxdSRkYGERHt2LGDrFYrVVRUhG2/V69e9Pbbb5vsGj9+vKnMhAkTaOzYsaa03NxcUx8kJCTQypUr67we43U9/fTTprShQ4fSL37xi7B1Au/r/PnzqV+/fqYyn376KYmiSMeOHQvZxooVKwgAnTx5Uk9btmwZpaen12nzlStXCADl5+eHzA9lD5F6n3JycmjgwIFUWVlJREQLFiyg++67z1Tu3LlzBCCs7QzTmLAHiGGaiBMnTmDSpEno2rUrEhMT9aGBQG9EJKxZswbDhw9HRkYGXC4Xnn/+eVM7RUVFdXpz3njjDSxfvhw7duxAr1696m1DVlYWEhIS9ON27dqhpKSk3u2EYtasWdi1axe2b9+ODh066OmCIODuu+9Gfn4+SktLcfjwYfzyl79ETU0Njh49ioKCAgwePBhOpxOA6gGaM2cOevbsieTkZLhcLhw5ciSozwcNGmQ6PnbsWJDHLPB49uzZePLJJzFq1CgsWrRIH86sjezs7KBjoweorvsaiqKiInTs2BHdu3cPW8bpdOLWW2/VjyO9V6mpqXjiiScwZswYjBs3Dr///e8j8t49++yzKCwsxEcffaTHjh04cADbtm3T44ZcLhd69OgBABH1HcM0NCyAGKaJGDduHK5evYrly5dj165d2LVrFwA16LY+FBYWIjc3Fw8++CDy8vKwf/9+PPfcc6Z2IglY/vGPfwxZlvGXv/ylfhfiI3C4RxAEKIpyQ20FMnr0aJw/fx6ffvppUN7IkSORn5+PL774AgMGDEBiYqIuigoKCjBixAi97Jw5c7B+/Xq88sor+OKLL1BUVIQ+ffoE9Xl8fHy9bXzxxRfx7bffYuzYsdi6dSvuuOMOrF+/vv4X6yOS+xqKSO51qHtFRBHZtWLFChQWFmLYsGFYs2YNunfvjq+++ips+Q8//BBLlizB+vXrTeL1+vXrGDduHIqKikw/J06c0IfJGKYpYQHEME3AlStXcOzYMTz//PO499570bNnT/zwww96vjbrSJZlUz2bzRaU9uWXX6Jz58547rnnMGjQIHTr1k0PStXo27dvndOThwwZgo0bN+KVV17B4sWLb+byIiLUtYTjn/7pn7Bq1So8+eSTWL16tSlPiwNau3atHuszcuRIfP7559i5c6eeBgA7d+7EE088gZycHPTp0wcZGRn47rvv6jz/7bffjj179pjSAo8BoHv37pg1axY+++wzPPzww1ixYkWt7QYKh6+++go9e/YEENl9DdWHffv2xffff1/vZQrqw4ABA/DMM8/gyy+/RO/evbFq1aqQ5QoLC/Hkk0/ivffew1133WXKu/POO/Htt98iKysLt912m+nnRgQow9wsLIAYpglISUlBWloa3n//fZw8eRJbt27F7Nmz9fy2bdvC4XDogaHXrl0DoA4zHTx4EMeOHcPly5fh8XjQrVs3nD17FqtXr8apU6fw1ltvBXke5s+fjz//+c+YP38+jhw5gm+++QavvvpqkF3Dhg3DJ598gpdeesm0Rs/SpUvrFRAdCVlZWdi+fTvOnz+vz/w5f/48evTooQeBG8nJycEHH3yAKVOmmGZL9e3bFykpKVi1apVJAG3YsAE1NTUYPny4XrZbt25Yt24dioqKcODAAfzkJz+JyEs1ffp0fPLJJ3jzzTdx4sQJvPfee9i4caMe/FtVVYVp06YhPz8fZ86cwc6dO7Fnzx5dzIS7rrVr1+IPf/gDjh8/jvnz52P37t2YNm2abmtd9zUrKwunT59GUVERLl++jJqaGowYMQJ33303HnnkEWzevBmnT5/Gxo0bsWnTpjqvsy5Onz6NZ555BoWFhThz5gw+++wznDhxQr9OI8XFxcjJycHEiRMxZswYFBcXo7i4WA9Ynzp1Kq5evYpJkyZhz549OHXqFD799FNMmTIlYmHMMA1KtIOQGCZW2Lx5M/Xs2ZPsdjv17duX8vPzCQCtX7+eiIiWL19OmZmZJIoijRgxgoiISkpKaPTo0eRyuQgAbdu2jYjUgOO0tDRyuVw0YcIEWrJkiSlAl4jor3/9K/Xv359sNhu1adOGHn74YT0vMCC5oKCA4uPj6a233iIiNbi1c+fOen6oIOjA4NclS5aY6gQGQRcWFlLfvn3JbreT9tGjBX9r10VEpj4hIlqzZg3FxcXRX//6Vz3toYceIovFQuXl5UREJMsypaSk0F133WWy6fTp03TPPfeQw+GgzMxMWrp0acTB2e+//z516NCBHA4HjR8/nv7jP/5DD7auqamhiRMnUmZmJtlsNmrfvj1NmzaNqqqqar2uZcuW0ejRo8lut1NWVhatWbPGdM667mt1dTU98sgjlJycTABoxYoVRKQGK0+ZMoXS0tIoLi6OevfuTXl5eUQUfO+IiNavX0+RfPwXFxfT+PHjqV27dmSz2ahz5870wgsvkCzLRGR+H2zbto0ABP0Y3xPHjx+nnJwcSk5OJofDQT169KCZM2eSoih12sIwDY1AFOFAMMMwTAzz85//HEePHsUXX3wRbVMYhmkAeCVohmGYECxevBijR49GfHw8Nm7ciD/+8Y/4z//8z2ibxTBMA8EeIIZhmBA89thjyM/PR3l5Obp27Yrp06fj6aefjrZZDU5tW1ls3LgRP/7xj5vQGoZpOlgAMQzDxDAnT54Mm9ehQ4d67wHHMC0FFkAMwzAMw8QcPA2eYRiGYZiYgwUQwzAMwzAxBwsghmEYhmFiDhZADMMwDMPEHCyAGIZhGIaJOVgAMQzDMAwTc7AAYhiGYRgm5mABxDAMwzBMzPH/AViYYv9aRe4iAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "sns.lineplot(\n", - " data=df,\n", - " y=\"adv_fit_time\",\n", - " x=\"attack.init.kwargs.batch_size\",\n", - " hue=\"model.init.kwargs.kernel\",\n", - ")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "env", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.2" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} From beac652275a73e0908a0ba48d843f8f3b1d88e13 Mon Sep 17 00:00:00 2001 From: Charlie Meyers Date: Sat, 13 Jul 2024 12:35:31 +0200 Subject: [PATCH 06/35] update params file for gzip --- examples/gzip/params.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/gzip/params.yaml b/examples/gzip/params.yaml index 43dbcb17..bd68520e 100644 --- a/examples/gzip/params.yaml +++ b/examples/gzip/params.yaml @@ -1,3 +1,4 @@ +device_id: cpu data: _target_: deckard.base.data.Data name: https://gist.githubusercontent.com/simplymathematics/8c6c04bd151950d5ea9e62825db97fdd/raw/d6a22cdb42a1db624c89f0298cb4f654d3812703/kdd_nsl.csv From aa9c4319b800e9fb4c8d7c7a2d645e8a36c259e5 Mon Sep 17 00:00:00 2001 From: Charlie Meyers Date: Sat, 13 Jul 2024 12:36:08 +0200 Subject: [PATCH 07/35] removed unused import --- deckard/layers/prepare_queue.py | 1 - 1 file changed, 1 deletion(-) diff --git a/deckard/layers/prepare_queue.py b/deckard/layers/prepare_queue.py index 7c3036d5..54d1cefe 100644 --- a/deckard/layers/prepare_queue.py +++ b/deckard/layers/prepare_queue.py @@ -1,5 +1,4 @@ import logging -import os from copy import deepcopy from pathlib import Path import yaml From e9b76b9aa070dcd6c5ae21febc7a70275482b5b7 Mon Sep 17 00:00:00 2001 From: Charlie Meyers Date: Sat, 13 Jul 2024 12:36:36 +0200 Subject: [PATCH 08/35] removed unused import --- deckard/layers/query_kepler.py | 1 - 1 file changed, 1 deletion(-) diff --git a/deckard/layers/query_kepler.py b/deckard/layers/query_kepler.py index f5ad8d87..a9d9a8a7 100644 --- a/deckard/layers/query_kepler.py +++ b/deckard/layers/query_kepler.py @@ -3,7 +3,6 @@ import logging import sys from dataclasses import dataclass -import yaml try: from prometheus_api_client import PrometheusConnect From d5a229f7380a0024e0471e5c99a21b2b63ca0ff2 Mon Sep 17 00:00:00 2001 From: Charlie Meyers Date: Sat, 13 Jul 2024 12:39:41 +0200 Subject: [PATCH 09/35] added missing import --- deckard/layers/query_kepler.py | 1 + 1 file changed, 1 insertion(+) diff --git a/deckard/layers/query_kepler.py b/deckard/layers/query_kepler.py index a9d9a8a7..07fdf128 100644 --- a/deckard/layers/query_kepler.py +++ b/deckard/layers/query_kepler.py @@ -3,6 +3,7 @@ import logging import sys from dataclasses import dataclass +import pandas as pd try: from prometheus_api_client import PrometheusConnect From 18194e4ece7840a23e2e5e8de8d1d243f0538ff2 Mon Sep 17 00:00:00 2001 From: Charlie Meyers Date: Sat, 13 Jul 2024 13:24:53 +0200 Subject: [PATCH 10/35] rename main function --- deckard/layers/afr.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deckard/layers/afr.py b/deckard/layers/afr.py index 41c7c4dc..52563536 100644 --- a/deckard/layers/afr.py +++ b/deckard/layers/afr.py @@ -872,7 +872,7 @@ def calculate_raw_failures(args, data, config): return data -def main(args): +def afr_main(args): target = args.target duration_col = args.duration_col dataset = args.dataset @@ -929,4 +929,4 @@ def main(args): afr_parser.add_argument("--config_file", type=str, default="afr.yaml") afr_parser.add_argument("--plots_folder", type=str, default="plots") args = afr_parser.parse_args() - main(args) + afr_main(args) From 583e0526e4f6bc57509226acfea5d630b7f66aba Mon Sep 17 00:00:00 2001 From: Charlie Meyers Date: Sat, 13 Jul 2024 13:25:10 +0200 Subject: [PATCH 11/35] rename parser, main function --- deckard/layers/clean_data.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/deckard/layers/clean_data.py b/deckard/layers/clean_data.py index 9fdd30d9..7367682c 100644 --- a/deckard/layers/clean_data.py +++ b/deckard/layers/clean_data.py @@ -610,41 +610,41 @@ def drop_values(data, drop_dict): return data -parser = argparse.ArgumentParser() -parser.add_argument( +clean_data_parser = argparse.ArgumentParser() +clean_data_parser.add_argument( "-i", "--input_file", type=str, help="Data file to read from", required=True, ) -parser.add_argument( +clean_data_parser.add_argument( "-o", "--output_file", type=str, help="Data file to read from", required=True, ) -parser.add_argument( +clean_data_parser.add_argument( "-v", "--verbosity", default="INFO", help="Increase output verbosity", ) -parser.add_argument( +clean_data_parser.add_argument( "-c", "--config", help="Path to the config file", default="clean.yaml", ) -parser.add_argument( +clean_data_parser.add_argument( "-s", "--subset", help="Subset of data you would like to plot", default=None, nargs="?", ) -parser.add_argument( +clean_data_parser.add_argument( "-d", "--drop_if_empty", help="Drop row if this columns is empty", @@ -656,14 +656,14 @@ def drop_values(data, drop_dict): "predict_time", ], ) -parser.add_argument( +clean_data_parser.add_argument( "--pareto_dict", help="Path to (optional) pareto set dictionary.", default=None, ) -def main(args): +def clean_data_main(args): logging.basicConfig(level=args.verbosity) assert Path( args.input_file, @@ -726,5 +726,5 @@ def main(args): if __name__ == "__main__": - args = parser.parse_args() - main(args) + args = clean_data_parser.parse_args() + clean_data_main(args) From ce7ecdf7f84c176eacd7286b1e1474178e901e44 Mon Sep 17 00:00:00 2001 From: Charlie Meyers Date: Sat, 13 Jul 2024 13:25:22 +0200 Subject: [PATCH 12/35] rename parser, main function --- deckard/layers/compile.py | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/deckard/layers/compile.py b/deckard/layers/compile.py index 4a33e818..d8e58f88 100644 --- a/deckard/layers/compile.py +++ b/deckard/layers/compile.py @@ -4,6 +4,7 @@ import logging from tqdm import tqdm import yaml +import argparse logger = logging.getLogger(__name__) @@ -196,16 +197,7 @@ def load_results(results_file, results_folder) -> pd.DataFrame: return results -if __name__ == "__main__": - import argparse - - parser = argparse.ArgumentParser() - parser.add_argument("--results_file", type=str, default="results.csv") - parser.add_argument("--report_folder", type=str, default="reports", required=True) - parser.add_argument("--results_folder", type=str, default=".") - parser.add_argument("--exclude", type=list, default=None, nargs="*") - parser.add_argument("--verbose", type=str, default="INFO") - args = parser.parse_args() +def compile_main(parse_results, save_results, args): logging.basicConfig(level=args.verbose) report_folder = args.report_folder results_file = args.results_file @@ -215,3 +207,14 @@ def load_results(results_file, results_folder) -> pd.DataFrame: assert Path( report_file, ).exists(), f"Results file {report_file} does not exist. Something went wrong." + +compile_parser = argparse.ArgumentParser() +compile_parser.add_argument("--results_file", type=str, default="results.csv") +compile_parser.add_argument("--report_folder", type=str, default="reports", required=True) +compile_parser.add_argument("--results_folder", type=str, default=".") +compile_parser.add_argument("--exclude", type=list, default=None, nargs="*") +compile_parser.add_argument("--verbose", type=str, default="INFO") + +if __name__ == "__main__": + args = compile_parser.parse_args() + compile_main(parse_results, save_results, args) From ce672cd00a5725de25962757609f7b1912122f03 Mon Sep 17 00:00:00 2001 From: Charlie Meyers Date: Sat, 13 Jul 2024 13:26:10 +0200 Subject: [PATCH 13/35] rename main function --- deckard/layers/hydra_test.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/deckard/layers/hydra_test.py b/deckard/layers/hydra_test.py index dd668fac..95af10dd 100644 --- a/deckard/layers/hydra_test.py +++ b/deckard/layers/hydra_test.py @@ -1,5 +1,6 @@ from omegaconf import DictConfig, OmegaConf from pathlib import Path +import sys working_dir = Path().cwd() @@ -8,7 +9,7 @@ config_file = "default" -def main(): +def hydra_test_main(): # Use sys calls to look for --working_dir, --config_dir, and --config_file args = sys.argv if "--working_dir" in args: @@ -51,4 +52,4 @@ def hydra_main(cfg: DictConfig) -> None: if __name__ == "__main__": - my_app() + hydra_test_main() From febf2051a44fb019566bd594b04cfec4f3a862e5 Mon Sep 17 00:00:00 2001 From: Charlie Meyers Date: Sat, 13 Jul 2024 13:26:21 +0200 Subject: [PATCH 14/35] remove old script --- deckard/layers/deploy.py | 23 ----------------------- 1 file changed, 23 deletions(-) delete mode 100644 deckard/layers/deploy.py diff --git a/deckard/layers/deploy.py b/deckard/layers/deploy.py deleted file mode 100644 index a1fe99ed..00000000 --- a/deckard/layers/deploy.py +++ /dev/null @@ -1,23 +0,0 @@ -import logging -import argparse -from pathlib import Path -import yaml -from ..iaac import GCP_Config - - -logger = logging.getLogger(__name__) -logging.basicConfig(level=logging.INFO) -if __name__ == "__main__": - iaac_parser = argparse.ArgumentParser() - iaac_parser.add_argument("--verbosity", type=str, default="INFO") - iaac_parser.add_argument("--config_dir", type=str, default="conf/deploy") - iaac_parser.add_argument("--config_file", type=str, default="default.yaml") - iaac_parser.add_argument("--workdir", type=str, default=".") - args = iaac_parser.parse_args() - config_dir = Path(args.workdir, args.config_dir).resolve().as_posix() - config_file = Path(config_dir, args.config_file).resolve().as_posix() - with open(config_file, "r") as f: - params = yaml.load(f, Loader=yaml.FullLoader) - gcp = GCP_Config(**params) - logging.basicConfig(level=args.verbosity) - assert gcp() is None, "Error creating cluster" From 6fba4b59a7a2dcbc1c9f1d3cf0c68e0e75578621 Mon Sep 17 00:00:00 2001 From: Charlie Meyers Date: Sat, 13 Jul 2024 13:26:32 +0200 Subject: [PATCH 15/35] rename parser, main function --- deckard/layers/query_kepler.py | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/deckard/layers/query_kepler.py b/deckard/layers/query_kepler.py index 07fdf128..be86284e 100644 --- a/deckard/layers/query_kepler.py +++ b/deckard/layers/query_kepler.py @@ -67,7 +67,15 @@ def caluculate_minutes(self): return str(int(self.total / 60)) + "m" -def run_query(input_file, output_file): +def kepler_main(args): + input_file = args.input_file + output_file = args.output_file + logging.basicConfig( + level=args.verbosity, + format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", + ) + logger = logging.getLogger(__name__) + logger.info("Quering the Prometheus for power metrics") new_columns = [ "train_power", "predict_power", @@ -115,22 +123,12 @@ def run_query(input_file, output_file): data.at[index, "peak_power"] = peak_power data.to_csv(output_file) +kepler_parser = argparse.ArgumentParser() +kepler_parser.add_argument("--input_file", type=str, default=None) +kepler_parser.add_argument("--output_file", type=str, default=None) +kepler_parser.add_argument("--verbosity", type=str, default="INFO") -if __name__ == "__main__": - logger = logging.getLogger(__name__) - dvc_parser = argparse.ArgumentParser() - dvc_parser.add_argument("--input_file", type=str, default=None) - dvc_parser.add_argument("--output_file", type=str, default=None) - dvc_parser.add_argument("--verbosity", type=str, default="INFO") - - args = dvc_parser.parse_args() - input_file = args.input_file - output_file = args.output_file - - logging.basicConfig( - level=args.verbosity, - format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", - ) - logger.info("Quering the Prometheus for power metrics") - results = run_query(input_file=input_file, output_file=output_file) +if __name__ == "__main__": + args = kepler_parser.parse_args() + results = kepler_main(args) From 9f69050e76daf8d84b00184354750f1a0624cc7b Mon Sep 17 00:00:00 2001 From: Charlie Meyers Date: Fri, 19 Jul 2024 15:25:04 +0200 Subject: [PATCH 16/35] stop tracking params.yaml --- deckard/layers/find_best.py | 140 ++++++++++++++++++-------------- deckard/layers/generate_grid.py | 66 ++++++++++++--- examples/gzip/params.yaml | 89 -------------------- 3 files changed, 133 insertions(+), 162 deletions(-) delete mode 100644 examples/gzip/params.yaml diff --git a/deckard/layers/find_best.py b/deckard/layers/find_best.py index 9cb34315..7a21818d 100644 --- a/deckard/layers/find_best.py +++ b/deckard/layers/find_best.py @@ -25,6 +25,16 @@ def find_optuna_best( ): logger.info(f"Study name: {study_name}") logger.info(f"Storage name: {storage_name}") + # Validate the directions + if isinstance(direction, str): + directions = [direction] + else: + assert isinstance(directions, list), f"Directions is not a list: {type(directions)}" + for direction in directions: + assert direction in [ + "minimize", + "maximize", + ], f"Direction {direction} not recognized." if isinstance(direction, str): study = optuna.create_study( study_name=study_name, @@ -41,9 +51,54 @@ def find_optuna_best( directions=direction, ) directions = direction - assert isinstance(directions, list), f"Directions is not a list: {type(directions)}" + # Convert directions to bools + directions = [False if x == "maximize" else True for x in directions] + # Get the trials dataframe df = study.trials_dataframe(attrs=("number", "value", "params")) # Find the average of each value over the columns in average_over + # df = group_by_params(df) + if study_csv is not None: + Path(study_csv).parent.mkdir(parents=True, exist_ok=True) + df.to_csv(study_csv) + # To dotlist + params = merge_best_with_default(config_folder, default_config, config_subdir, study) + if params_file is not None: + params_file = create_new_config_in_subdir( + params_file, + config_folder, + default_config, + config_subdir, + params, + ) + return params + +def merge_best_with_default(config_folder, default_config, config_subdir, study, use_optuna_best = True): + if use_optuna_best is True: + best_params = flatten_dict(study.best_params) + more_params = flatten_dict(study.best_trial.user_attrs) + even_more_params = flatten_dict(study.best_trial.system_attrs) + logger.debug(f"Best params: {best_params}") + logger.debug(f"Best user params: {more_params}") + logger.debug(f"Best system params: {even_more_params}") + else: + raise NotImplementedError("Not implemented yet.") + # Merge all the params + best_params = OmegaConf.to_container( + OmegaConf.merge(best_params, more_params, even_more_params), + resolve=False, + ) + # to dotlist + best_params = flatten_dict(best_params) + overrides = get_overrides(config_subdir, best_params) + params = override_default_with_best( + config_folder, + default_config, + overrides, + config_subdir=config_subdir, + ) + return params + +def group_by_params(df): not_these = ["number", "value"] val_cols = [ col @@ -51,11 +106,9 @@ def find_optuna_best( if col.startswith("values_") and col.split("values_")[-1] not in not_these ] not_these.extend(val_cols) - print(f"Not these: {not_these}") groupby_cols = [ col for col in df.columns if col.split("params_")[-1] not in not_these ] - print(f"Groupby cols: {groupby_cols}") dfs = df.groupby(groupby_cols) new_df = pd.DataFrame(columns=groupby_cols + ["mean", "std", "ntrials", "nuniques"]) means = [] @@ -82,30 +135,10 @@ def find_optuna_best( new_df["std"] = stds new_df["ntrials"] = ntrials new_df["nuniques"] = nuniques - for direction in directions: - assert direction in [ - "minimize", - "maximize", - ], f"Direction {direction} not recognized." - directions = [False if x == "maximize" else True for x in directions] - assert isinstance(new_df, pd.DataFrame), f"df is not a dataframe: {type(df)}" - if study_csv is not None: - Path(study_csv).parent.mkdir(parents=True, exist_ok=True) - df.to_csv(study_csv) - # To dotlist - best_params = flatten_dict(study.best_params) - more_params = flatten_dict(study.best_trial.user_attrs) - even_more_params = flatten_dict(study.best_trial.system_attrs) - logger.debug(f"Best params: {best_params}") - logger.debug(f"Best user params: {more_params}") - logger.debug(f"Best system params: {even_more_params}") - # Merge all the params - best_params = OmegaConf.to_container( - OmegaConf.merge(best_params, more_params, even_more_params), - resolve=False, - ) - # to dotlist - best_params = flatten_dict(best_params) + assert isinstance(new_df, pd.DataFrame), f"df is not a dataframe: {type(new_df)}" + return new_df + +def get_overrides(config_subdir, best_params): overrides = [] # Changing the keys to hydra override format for key, value in best_params.items(): @@ -130,21 +163,7 @@ def find_optuna_best( logger.info(f"Adding {key} to param list") else: logger.debug(f"Skipping {key} because it is not in {config_subdir}") - params = override_default_with_best( - config_folder, - default_config, - overrides, - config_subdir=config_subdir, - ) - if params_file is not None: - params_file = create_new_config_in_subdir( - params_file, - config_folder, - default_config, - config_subdir, - params, - ) - return params + return overrides def create_new_config_in_subdir( @@ -176,10 +195,11 @@ def create_new_config_in_subdir( with open(params_file.with_suffix(".yaml"), "w") as f: yaml.dump(params, f) assert params_file.exists(), f"{params_file.resolve().as_posix()} does not exist." - return params_file + + def override_default_with_best( config_folder, default_config, @@ -194,28 +214,24 @@ def override_default_with_best( cfg = OmegaConf.to_container(cfg, resolve=False) return cfg +find_best_parser = argparse.ArgumentParser() +find_best_parser.add_argument("--params_file", type=str, default=True) -if __name__ == "__main__": - parser = argparse.ArgumentParser() - parser.add_argument("--params_file", type=str, default=True) - - parser.add_argument("--study_csv", type=str, default=None) - parser.add_argument("--config_folder", type=str, default=Path(Path(), "conf")) - parser.add_argument("--default_config", type=str, default="default") - parser.add_argument("--config_subdir", type=str, default=None) - parser.add_argument("--study_name", type=str, required=True) - parser.add_argument("--config_name", type=str) - parser.add_argument("--verbosity", type=str, default="INFO") - parser.add_argument("--storage_name", type=str, required=True) - parser.add_argument("--direction", type=str, default="maximize") - parser.add_argument("--study_type", type=str, default="optuna") - args = parser.parse_args() +find_best_parser.add_argument("--study_csv", type=str, default=None) +find_best_parser.add_argument("--config_folder", type=str, default=Path(Path(), "conf")) +find_best_parser.add_argument("--default_config", type=str, default="default") +find_best_parser.add_argument("--config_subdir", type=str, default=None) +find_best_parser.add_argument("--study_name", type=str, required=True) +find_best_parser.add_argument("--config_name", type=str) +find_best_parser.add_argument("--verbosity", type=str, default="INFO") +find_best_parser.add_argument("--storage_name", type=str, required=True) +find_best_parser.add_argument("--direction", type=str, default="maximize") +find_best_parser.add_argument("--study_type", type=str, default="optuna") +def find_best_main(find_optuna_best, args): args.config_folder = Path(args.config_folder).resolve().as_posix() logging if args.study_type == "optuna": - study_name = args.study_name - storage_name = args.storage_name direction = args.direction if len(direction) == 1: direction = direction[0] @@ -231,3 +247,7 @@ def override_default_with_best( ) else: raise NotImplementedError(f"Study type {args.study_type} not implemented.") + +if __name__ == "__main__": + args = find_best_parser.parse_args() + find_best_main(find_optuna_best, args) diff --git a/deckard/layers/generate_grid.py b/deckard/layers/generate_grid.py index 487ce801..66c9628f 100644 --- a/deckard/layers/generate_grid.py +++ b/deckard/layers/generate_grid.py @@ -4,6 +4,7 @@ import yaml from functools import reduce from operator import mul +import argparse from ..base.utils import make_grid, my_hash logger = logging.getLogger(__name__) @@ -74,13 +75,13 @@ def generate_grid_from_folders(conf_dir, regex): return big_list -def generate_queue( - conf_root, - grid_dir, - regex, - queue_folder="queue", - default_file="default.yaml", -): +def generate_grid_main(args): + conf_root = args.conf_root + grid_dir = args.grid_folder + regex = args.regex + queue_folder = args.queue_folder + default_file = args.default_file + output_file = args.output_file this_dir = os.getcwd() conf_dir = os.path.join(this_dir, conf_root, grid_dir) logger.debug(f"Looking for configs in {conf_dir}") @@ -102,12 +103,51 @@ def generate_queue( yaml.dump(big_list[i], outfile, default_flow_style=False) assert Path(path, name + ".yaml").exists() i += 1 + if output_file is not None: + with open(output_file, "w") as outfile: + yaml.dump(big_list, outfile, default_flow_style=False) + assert Path(output_file).exists() return big_list -conf_root = "conf" -grid_folder = "grid" -regex = "*.yaml" - -big_list = generate_queue(conf_root, grid_folder, regex) -print(yaml.dump(big_list[0])) +generate_grid_parser = argparse.ArgumentParser() +generate_grid_parser.add_argument( + "--conf_root", + type=str, + default="conf", + help="Root directory for config files", +) +generate_grid_parser.add_argument( + "--grid_folder", + type=str, + default="grid", + help="Folder containing config files", +) +generate_grid_parser.add_argument( + "--regex", + type=str, + default="*.yaml", + help="Regex for finding config files", +) +generate_grid_parser.add_argument( + "--queue_folder", + type=str, + default="queue", + help="Folder for queue files", +) +generate_grid_parser.add_argument( + "--default_file", + type=str, + default="default.yaml", + help="Default config file", +) +generate_grid_parser.add_argument( + "--output_file", + type=str, + default=None, + help="Output file for grid", +) + +if __name__ == "__main__": + args = generate_grid_parser.parse_args() + generate_grid_main(args) diff --git a/examples/gzip/params.yaml b/examples/gzip/params.yaml deleted file mode 100644 index bd68520e..00000000 --- a/examples/gzip/params.yaml +++ /dev/null @@ -1,89 +0,0 @@ -device_id: cpu -data: - _target_: deckard.base.data.Data - name: https://gist.githubusercontent.com/simplymathematics/8c6c04bd151950d5ea9e62825db97fdd/raw/d6a22cdb42a1db624c89f0298cb4f654d3812703/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label -dataset: kdd_nsl -direction: -- maximize -files: - _target_: deckard.base.files.FileConfig - attack_dir: attacks - attack_file: attack - attack_type: .pkl - data_dir: data - data_file: data - data_type: .pkl - directory: output - model_dir: model - model_file: model - model_type: .pkl - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json -model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 3 - library: sklearn - data: - _target_: deckard.base.data.Data - name: https://gist.githubusercontent.com/simplymathematics/8c6c04bd151950d5ea9e62825db97fdd/raw/d6a22cdb42a1db624c89f0298cb4f654d3812703/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: output/model/kdd_nsl/gzip_classifier/gzip/0-100.npz - k: 1 - m: -1 - method: random - name: gzip_classifier.GzipClassifier - library: sklearn -model_name: gzip_classifier -optimizers: -- accuracy -scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss -stage: train From 29f10f95de4f79ba1bd18a2855d379d3fde6bab2 Mon Sep 17 00:00:00 2001 From: Charlie Meyers Date: Fri, 19 Jul 2024 15:26:51 +0200 Subject: [PATCH 17/35] update configs for final plots --- examples/security/classification/.gitignore | 1 + examples/security/classification/dvc.lock | 303 ++-- examples/security/classification/dvc.yaml | 10 +- examples/security/classification/plots.py | 82 +- .../security/classification/plots/.gitignore | 10 + examples/security/classification/retrain.py | 4 +- examples/security/kdd-nsl/.gitignore | 1 + examples/security/kdd-nsl/attacks.sh | 3 +- examples/security/kdd-nsl/dvc.lock | 341 ++-- examples/security/kdd-nsl/dvc.yaml | 29 +- examples/security/kdd-nsl/plots.py | 166 +- examples/security/kdd-nsl/plots/.gitignore | 6 - .../kdd-nsl/plots/train_time_vs_samples.eps | 1373 +++++++++++++++++ examples/security/kdd-nsl/retrain.py | 20 +- examples/security/truthseeker/.gitignore | 1 + examples/security/truthseeker/attacks.sh | 2 +- examples/security/truthseeker/dvc.lock | 329 ++-- examples/security/truthseeker/dvc.yaml | 29 +- examples/security/truthseeker/plots.py | 167 +- .../security/truthseeker/plots/.gitignore | 12 +- .../plots/train_time_vs_samples.eps | 1373 +++++++++++++++++ examples/security/truthseeker/retrain.py | 12 +- 22 files changed, 3538 insertions(+), 736 deletions(-) create mode 100644 examples/security/classification/plots/.gitignore create mode 100644 examples/security/kdd-nsl/plots/train_time_vs_samples.eps create mode 100644 examples/security/truthseeker/plots/train_time_vs_samples.eps diff --git a/examples/security/classification/.gitignore b/examples/security/classification/.gitignore index 8a746d89..273db2f4 100644 --- a/examples/security/classification/.gitignore +++ b/examples/security/classification/.gitignore @@ -1,3 +1,4 @@ logs/ multirun/ output/ +/retrain diff --git a/examples/security/classification/dvc.lock b/examples/security/classification/dvc.lock index 01a4ce87..a0fe541c 100644 --- a/examples/security/classification/dvc.lock +++ b/examples/security/classification/dvc.lock @@ -329,8 +329,8 @@ stages: size: 950 - path: models.sh hash: md5 - md5: 45472713dfccf0cd62509e7d62e223fa - size: 5807 + md5: 509157bdd5b524a21b8294dc2409a969 + size: 5887 - path: output/reports/train/default/params.yaml hash: md5 md5: d4e0a34b2b15765ca71fa5ecaf7e3826 @@ -425,75 +425,77 @@ stages: outs: - path: logs/models/ hash: md5 - md5: d9c5585db1b343a23229a2fb5e77cbef.dir - size: 4828874 - nfiles: 60 + md5: fd9e6aad79d8a1be29d42da86fd11a98.dir + size: 1366301 + nfiles: 24 - path: model.db hash: md5 - md5: de6e467e793b2519ea5db993786e263e - size: 4870144 + md5: 676963d31977a42501b4243cb25ab935 + size: 593920 compile_models: cmd: python -m deckard.layers.compile --report_folder output/reports/train/ --results_file output/train.csv deps: - path: logs/models/ hash: md5 - md5: d9c5585db1b343a23229a2fb5e77cbef.dir - size: 4828874 - nfiles: 60 + md5: fd9e6aad79d8a1be29d42da86fd11a98.dir + size: 1366301 + nfiles: 24 - path: model.db hash: md5 - md5: de6e467e793b2519ea5db993786e263e - size: 4870144 + md5: 676963d31977a42501b4243cb25ab935 + size: 593920 - path: output/reports/train/ hash: md5 - md5: fae483c6435daa9d29c947f2bce41511.dir - size: 512957700 - nfiles: 9852 + md5: 702efbf0ca05f21241fbfcbaeac9712b.dir + size: 52545076 + nfiles: 1548 outs: - path: output/train.csv hash: md5 - md5: a048280df159bb5ee1ce118d0d3cfd14 - size: 3559023 + md5: f0e4e7434085d033c5038fb1723acc25 + size: 610341 find_best_model@rbf: cmd: python -m deckard.layers.find_best --config_folder conf --config_subdir model - --params_file best_rbf --study_name=rbf_100_10000 --default_config model.yaml + --params_file best_rbf --study_name=rbf_100_10000 --default_config default.yaml + --storage_name sqlite:///model.db deps: - path: logs/models/ hash: md5 - md5: d9c5585db1b343a23229a2fb5e77cbef.dir - size: 4828874 - nfiles: 60 + md5: fd9e6aad79d8a1be29d42da86fd11a98.dir + size: 1366301 + nfiles: 24 - path: model.db hash: md5 - md5: de6e467e793b2519ea5db993786e263e - size: 4870144 + md5: 676963d31977a42501b4243cb25ab935 + size: 593920 - path: output/train.csv hash: md5 - md5: a048280df159bb5ee1ce118d0d3cfd14 - size: 3559023 + md5: f0e4e7434085d033c5038fb1723acc25 + size: 610341 outs: - path: conf/model/best_rbf.yaml hash: md5 - md5: 0a90767d020934a3cd6d0c42a6f21606 - size: 357 + md5: 4932ceac75d6256ce2a7864aa4a5ea3c + size: 359 find_best_model@linear: cmd: python -m deckard.layers.find_best --config_folder conf --config_subdir model - --params_file best_linear --study_name=linear_100_10000 --default_config model.yaml + --params_file best_linear --study_name=linear_100_10000 --default_config default.yaml + --storage_name sqlite:///model.db deps: - path: logs/models/ hash: md5 - md5: d9c5585db1b343a23229a2fb5e77cbef.dir - size: 4828874 - nfiles: 60 + md5: fd9e6aad79d8a1be29d42da86fd11a98.dir + size: 1366301 + nfiles: 24 - path: model.db hash: md5 - md5: de6e467e793b2519ea5db993786e263e - size: 4870144 + md5: 676963d31977a42501b4243cb25ab935 + size: 593920 - path: output/train.csv hash: md5 - md5: a048280df159bb5ee1ce118d0d3cfd14 - size: 3559023 + md5: f0e4e7434085d033c5038fb1723acc25 + size: 610341 outs: - path: conf/model/best_linear.yaml hash: md5 @@ -501,25 +503,26 @@ stages: size: 332 find_best_model@poly: cmd: python -m deckard.layers.find_best --config_folder conf --config_subdir model - --params_file best_poly --study_name=poly_100_10000 --default_config model.yaml + --params_file best_poly --study_name=poly_100_10000 --default_config default.yaml + --storage_name sqlite:///model.db deps: - path: logs/models/ hash: md5 - md5: d9c5585db1b343a23229a2fb5e77cbef.dir - size: 4828874 - nfiles: 60 + md5: fd9e6aad79d8a1be29d42da86fd11a98.dir + size: 1366301 + nfiles: 24 - path: model.db hash: md5 - md5: de6e467e793b2519ea5db993786e263e - size: 4870144 + md5: 676963d31977a42501b4243cb25ab935 + size: 593920 - path: output/train.csv hash: md5 - md5: a048280df159bb5ee1ce118d0d3cfd14 - size: 3559023 + md5: f0e4e7434085d033c5038fb1723acc25 + size: 610341 outs: - path: conf/model/best_poly.yaml hash: md5 - md5: a9d600cc46e9f49c3a0cca90f7c7d876 + md5: bd9e29f3e2e34263e48401a682a84a06 size: 370 attacks: cmd: bash attacks.sh ++stage=attack --config-name=attack.yaml @@ -530,34 +533,34 @@ stages: size: 332 - path: conf/model/best_poly.yaml hash: md5 - md5: a9d600cc46e9f49c3a0cca90f7c7d876 + md5: bd9e29f3e2e34263e48401a682a84a06 size: 370 - path: conf/model/best_rbf.yaml hash: md5 - md5: 0a90767d020934a3cd6d0c42a6f21606 - size: 357 + md5: 4932ceac75d6256ce2a7864aa4a5ea3c + size: 359 - path: logs/models/ hash: md5 - md5: d9c5585db1b343a23229a2fb5e77cbef.dir - size: 4828874 - nfiles: 60 + md5: fd9e6aad79d8a1be29d42da86fd11a98.dir + size: 1366301 + nfiles: 24 - path: model.db hash: md5 - md5: de6e467e793b2519ea5db993786e263e - size: 4870144 + md5: 676963d31977a42501b4243cb25ab935 + size: 593920 - path: output/train.csv hash: md5 - md5: a048280df159bb5ee1ce118d0d3cfd14 - size: 3559023 + md5: f0e4e7434085d033c5038fb1723acc25 + size: 610341 outs: - path: attack.db hash: md5 - md5: 79ab050e04b70e212f1be85f09a974ef - size: 2334720 + md5: e4f26ccdc30870d9fea230d7e2f3d517 + size: 303104 - path: logs/attacks/ hash: md5 - md5: 4eabc469a5a951cd423da83bbd47c264.dir - size: 926809 + md5: 9d63507c9eccf50f94d1e8bcca1e9b9a.dir + size: 876433 nfiles: 3 compile_attacks: cmd: python -m deckard.layers.compile --report_folder output/reports/attack/ --results_file @@ -565,89 +568,92 @@ stages: deps: - path: attack.db hash: md5 - md5: 79ab050e04b70e212f1be85f09a974ef - size: 2334720 + md5: e4f26ccdc30870d9fea230d7e2f3d517 + size: 303104 - path: logs/attacks/ hash: md5 - md5: 4eabc469a5a951cd423da83bbd47c264.dir - size: 926809 + md5: 9d63507c9eccf50f94d1e8bcca1e9b9a.dir + size: 876433 nfiles: 3 - path: output/reports/attack/ hash: md5 - md5: f610f016b9a97c37ff59de361311e5b1.dir - size: 7978562 - nfiles: 486 + md5: e8550da3b609d9d52ee496b0cbda8dcd.dir + size: 20185965 + nfiles: 1089 outs: - path: output/attack.csv hash: md5 - md5: f89e17affa7e38b4955ea3edc4661f9c - size: 188715 + md5: e83df99bc4ec73458235032d34d479a3 + size: 395210 find_best_attack@linear: cmd: python -m deckard.layers.find_best --config_folder conf --config_subdir attack - --params_file best_linear --study_name=best_linear --default_config attack.yaml + --params_file best_linear --study_name=best_linear --default_config default.yaml + --storage_name sqlite:///attack.db --direction minimize deps: - path: logs/models/ hash: md5 - md5: d9c5585db1b343a23229a2fb5e77cbef.dir - size: 4828874 - nfiles: 60 + md5: fd9e6aad79d8a1be29d42da86fd11a98.dir + size: 1366301 + nfiles: 24 - path: model.db hash: md5 - md5: de6e467e793b2519ea5db993786e263e - size: 4870144 + md5: 676963d31977a42501b4243cb25ab935 + size: 593920 - path: output/train.csv hash: md5 - md5: a048280df159bb5ee1ce118d0d3cfd14 - size: 3559023 + md5: f0e4e7434085d033c5038fb1723acc25 + size: 610341 outs: - path: conf/attack/best_linear.yaml hash: md5 - md5: 4bb6215963ae7f0025f72ec31e26f29d - size: 244 + md5: b7ef4b4d709a4511ebd4f0a5e9002cdb + size: 248 find_best_attack@rbf: cmd: python -m deckard.layers.find_best --config_folder conf --config_subdir attack - --params_file best_rbf --study_name=best_rbf --default_config attack.yaml + --params_file best_rbf --study_name=best_rbf --default_config default.yaml + --storage_name sqlite:///attack.db --direction minimize deps: - path: logs/models/ hash: md5 - md5: d9c5585db1b343a23229a2fb5e77cbef.dir - size: 4828874 - nfiles: 60 + md5: fd9e6aad79d8a1be29d42da86fd11a98.dir + size: 1366301 + nfiles: 24 - path: model.db hash: md5 - md5: de6e467e793b2519ea5db993786e263e - size: 4870144 + md5: 676963d31977a42501b4243cb25ab935 + size: 593920 - path: output/train.csv hash: md5 - md5: a048280df159bb5ee1ce118d0d3cfd14 - size: 3559023 + md5: f0e4e7434085d033c5038fb1723acc25 + size: 610341 outs: - path: conf/attack/best_rbf.yaml hash: md5 - md5: eca3091f7c0eb0b8958bc6becf43191d - size: 244 + md5: 74476a2360110c0c8c4e728857da2472 + size: 252 find_best_attack@poly: cmd: python -m deckard.layers.find_best --config_folder conf --config_subdir attack - --params_file best_poly --study_name=best_poly --default_config attack.yaml + --params_file best_poly --study_name=best_poly --default_config default.yaml + --storage_name sqlite:///attack.db --direction minimize deps: - path: logs/models/ hash: md5 - md5: d9c5585db1b343a23229a2fb5e77cbef.dir - size: 4828874 - nfiles: 60 + md5: fd9e6aad79d8a1be29d42da86fd11a98.dir + size: 1366301 + nfiles: 24 - path: model.db hash: md5 - md5: de6e467e793b2519ea5db993786e263e - size: 4870144 + md5: 676963d31977a42501b4243cb25ab935 + size: 593920 - path: output/train.csv hash: md5 - md5: a048280df159bb5ee1ce118d0d3cfd14 - size: 3559023 + md5: f0e4e7434085d033c5038fb1723acc25 + size: 610341 outs: - path: conf/attack/best_poly.yaml hash: md5 - md5: b5f8f874e44dbc8bdb0ababc67295174 - size: 246 + md5: 0e7533628e42f20dc5a34c35e2fb701a + size: 250 other_data_train@kdd_nsl: cmd: DATASET_NAME=kdd_nsl bash other_data.sh data=kdd_nsl +stage=train --config-name=model.yaml deps: @@ -683,109 +689,110 @@ stages: deps: - path: conf/attack/best_linear.yaml hash: md5 - md5: 4bb6215963ae7f0025f72ec31e26f29d - size: 244 + md5: b7ef4b4d709a4511ebd4f0a5e9002cdb + size: 248 - path: conf/attack/best_poly.yaml hash: md5 - md5: b5f8f874e44dbc8bdb0ababc67295174 - size: 246 + md5: 0e7533628e42f20dc5a34c35e2fb701a + size: 250 - path: conf/attack/best_rbf.yaml hash: md5 - md5: eca3091f7c0eb0b8958bc6becf43191d - size: 244 + md5: 74476a2360110c0c8c4e728857da2472 + size: 252 - path: conf/model/best_linear.yaml hash: md5 md5: 23a7c49f5a8ddf63a7ac89fb61c0034d size: 332 - path: conf/model/best_poly.yaml hash: md5 - md5: a9d600cc46e9f49c3a0cca90f7c7d876 + md5: bd9e29f3e2e34263e48401a682a84a06 size: 370 - path: conf/model/best_rbf.yaml hash: md5 - md5: 0a90767d020934a3cd6d0c42a6f21606 - size: 357 + md5: 4932ceac75d6256ce2a7864aa4a5ea3c + size: 359 - path: output/attacks/ hash: md5 - md5: 2706070162d082792d7b52629d691d15.dir - size: 2410072 - nfiles: 61 - - path: output/models/ - hash: md5 - md5: c7222ada919037fb45b73e4f6c1f88a2.dir - size: 70825596 - nfiles: 1244 + md5: 658e0a848877fbafbddd62ec5dd22dc3.dir + size: 4819192 + nfiles: 121 outs: - path: plots/after_retrain_confidence.csv hash: md5 - md5: 8838aabe00dcca60ae5c5681174bfc7f - size: 18011 + md5: c2273c7a9d789de1939d5006a7a087eb + size: 326367 - path: plots/before_retrain_confidence.csv hash: md5 - md5: edc0f782bfd97743823318d6b14d5d14 - size: 17994 + md5: 1a52061abda8e60e503ea271439b8f8a + size: 326350 - path: retrain/ hash: md5 - md5: 062d1374edb8e366a1c65308fa4fdfbc.dir - size: 176883 + md5: 22c8403d05f0f866398b504f6f3c4d37.dir + size: 173285 nfiles: 12 plots: cmd: python plots.py deps: - path: output/attack.csv hash: md5 - md5: f89e17affa7e38b4955ea3edc4661f9c - size: 188715 + md5: e83df99bc4ec73458235032d34d479a3 + size: 395210 - path: output/train.csv hash: md5 - md5: a048280df159bb5ee1ce118d0d3cfd14 - size: 3559023 + md5: f0e4e7434085d033c5038fb1723acc25 + size: 610341 + - path: plots.py + hash: md5 + md5: d7b45f7ef670728e8a238909265334f2 + size: 12114 - path: plots/after_retrain_confidence.csv hash: md5 - md5: 8838aabe00dcca60ae5c5681174bfc7f - size: 18011 + md5: c2273c7a9d789de1939d5006a7a087eb + size: 326367 - path: plots/before_retrain_confidence.csv hash: md5 - md5: edc0f782bfd97743823318d6b14d5d14 - size: 17994 + md5: 1a52061abda8e60e503ea271439b8f8a + size: 326350 outs: - path: plots/accuracy_vs_attack_parameters.eps hash: md5 - md5: 62ba219171d53a6d7bee9adaaa5dcae2 - size: 41249 + md5: 13be25e57708a0b2e7c6d062ad310b97 + size: 38999 - path: plots/accuracy_vs_features.eps hash: md5 - md5: 45d51ca30fc0e46849609941fc4cbb53 - size: 21450 + md5: 3cf6dc9eb9913ab3babc82002abc5ad4 + size: 21548 - path: plots/accuracy_vs_samples.eps hash: md5 - md5: c7bba36d352106cdeee655e01870bdcf - size: 23719 + md5: be2def33826b2131795cf599a87f12de + size: 25049 - path: plots/confidence_vs_attack_parameters.eps hash: md5 - md5: c2887dfae9cdfbb24d9d15d3655c3c87 - size: 40822 + md5: 24d6d00ad927000bc60ab2012f56520c + size: 41436 - path: plots/retrain_accuracy.eps hash: md5 - md5: 25d6d1ec08dc127bcd04470ca476d146 - size: 23419 + md5: 2b62b83a5b7a37c16d25319602e102f4 + size: 30833 - path: plots/retrain_confidence_vs_attack_parameters.eps hash: md5 - md5: 5a6969fefe91e5c675600e07d8bff580 - size: 40819 + md5: 860ffadab6254488091c8bc1c619f56c + size: 41628 - path: plots/retrain_time.eps hash: md5 - md5: 2d28bfca3ebb7ef3b7b4fbfb69eb045f - size: 20957 + md5: e32d6c3cc459943ea418eea1e20fdc2f + size: 28407 - path: plots/train_time_vs_attack_parameters.eps hash: md5 - md5: f56d1fc7846df9a1276749a9bd5675e9 - size: 38521 + md5: 5e88339288029b1f53f7f02d6a88bafe + size: 39252 - path: plots/train_time_vs_features.eps hash: md5 - md5: a3300cdd85533e51ce108c4f141376f6 - size: 20644 + md5: 2bf86c698e490164eb5fe4f76743f21b + size: 19529 - path: plots/train_time_vs_samples.eps hash: md5 - md5: 15f3f109c2f09c01edc6bc0e68786ce6 - size: 24036 + md5: 99b6bb26684bccd5092e92e095f2b484 + size: 24348 + move_files: + cmd: 'cp -r ./plots/* ~/KDD-Paper-EAI-AISEC/generated/ ' diff --git a/examples/security/classification/dvc.yaml b/examples/security/classification/dvc.yaml index e44f6357..0d44db32 100644 --- a/examples/security/classification/dvc.yaml +++ b/examples/security/classification/dvc.yaml @@ -74,7 +74,7 @@ stages: - rbf - poly do: - cmd: python -m deckard.layers.find_best --config_folder conf --config_subdir model --params_file best_${item} --study_name=${item}_100_10000 --default_config model.yaml + cmd: python -m deckard.layers.find_best --config_folder conf --config_subdir model --params_file best_${item} --study_name=${item}_100_10000 --default_config default.yaml --storage_name sqlite:///model.db outs: - conf/model/best_${item}.yaml deps: @@ -112,7 +112,7 @@ stages: - rbf - poly do: - cmd: python -m deckard.layers.find_best --config_folder conf --config_subdir attack --params_file best_${item} --study_name=best_${item} --default_config attack.yaml + cmd: python -m deckard.layers.find_best --config_folder conf --config_subdir attack --params_file best_${item} --study_name=best_${item} --default_config default.yaml --storage_name sqlite:///attack.db --direction minimize outs: - conf/attack/best_${item}.yaml deps: @@ -122,7 +122,6 @@ stages: retrain: cmd : python retrain.py deps: - - ${files.directory}/models/ - ${files.directory}/attacks/ - conf/attack/best_linear.yaml - conf/attack/best_rbf.yaml @@ -142,6 +141,7 @@ stages: - output/train.csv - plots/before_retrain_confidence.csv - output/attack.csv + - plots.py plots : - plots/accuracy_vs_attack_parameters.eps - plots/accuracy_vs_features.eps @@ -153,3 +153,7 @@ stages: - plots/retrain_accuracy.eps - plots/retrain_confidence_vs_attack_parameters.eps - plots/retrain_time.eps + move_files: + cmd: >- + cp -r ./plots/* ~/KDD-Paper-EAI-AISEC/generated/ + #&& rm ~/KDD-Paper-EAI-AISEC/generated/.gitignore \ No newline at end of file diff --git a/examples/security/classification/plots.py b/examples/security/classification/plots.py index 3e515da7..6b217b01 100644 --- a/examples/security/classification/plots.py +++ b/examples/security/classification/plots.py @@ -19,11 +19,11 @@ # results = parse_results("reports/model_queue/") results = pd.read_csv("output/train.csv") input_size = ( - results["data.generate.kwargs.n_samples"] - * results["data.generate.kwargs.n_features"] + results["data.generate.n_samples"] + * results["data.generate.n_features"] ) -results["Kernel"] = results["model.init.kwargs.kernel"].copy() -results["Features"] = results["data.generate.kwargs.n_features"].copy() +results["Kernel"] = results["model.init.kernel"].copy() +results["Features"] = results["data.generate.n_features"].copy() results["Samples"] = results["data.sample.train_size"].copy() results["input_size"] = input_size if "Unnamed: 0" in results.columns: @@ -31,11 +31,11 @@ for col in results.columns: if col == "data.name" and isinstance(results[col][0], list): results[col] = results[col].apply(lambda x: x[0]) -results = results[results["model.init.kwargs.kernel"] != "sigmoid"] +results = results[results["model.init.kernel"] != "sigmoid"] attack_results = pd.read_csv("output/attack.csv") -attack_results["Kernel"] = attack_results["model.init.kwargs.kernel"].copy() -attack_results["Features"] = attack_results["data.generate.kwargs.n_features"].copy() +attack_results["Kernel"] = attack_results["model.init.kernel"].copy() +attack_results["Features"] = attack_results["data.generate.n_features"].copy() attack_results["Samples"] = attack_results["data.sample.train_size"].copy() if "Unnamed: 0" in attack_results.columns: del attack_results["Unnamed: 0"] @@ -50,6 +50,8 @@ data=results, style="Kernel", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph1.legend(labels=["Linear", "RBF", "Poly"]) graph1.legend(loc="center left", bbox_to_anchor=(1, 0.5), ncol=1, title="Kernel") @@ -62,11 +64,13 @@ plt.gcf().clear() graph2 = sns.lineplot( - x="data.generate.kwargs.n_features", + x="data.generate.n_features", y="accuracy", data=results, style="Kernel", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph2.set_xlabel("Number of Features") graph2.set_ylabel("Accuracy") @@ -78,11 +82,13 @@ graph3 = sns.lineplot( - x="data.generate.kwargs.n_features", + x="data.generate.n_features", y="train_time", data=results, style="Kernel", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph3.set_xlabel("Number of Features") graph3.set_ylabel("Training Time") @@ -98,6 +104,8 @@ data=results, style="Kernel", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph4.set_xlabel("Number of Samples") graph4.set_ylabel("Training Time") @@ -109,7 +117,7 @@ fig, ax = plt.subplots(2, 2) graph5 = sns.lineplot( - x="attack.init.kwargs.eps", + x="attack.init.eps", y="accuracy", data=attack_results, style="Kernel", @@ -117,20 +125,24 @@ legend=False, color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph5.set(xscale="log", xlabel="Perturbation Distance", ylabel="Accuracy") graph6 = sns.lineplot( - x="attack.init.kwargs.eps_step", + x="attack.init.eps_step", y="accuracy", data=attack_results, style="Kernel", ax=ax[0, 1], color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph6.set(xscale="log", xlabel="Perturbation Step", ylabel="Accuracy") graph7 = sns.lineplot( - x="attack.init.kwargs.max_iter", + x="attack.init.max_iter", y="accuracy", data=attack_results, style="Kernel", @@ -138,10 +150,12 @@ legend=False, color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph7.set(xscale="log", xlabel="Maximum Iterations", ylabel="Accuracy") graph8 = sns.lineplot( - x="attack.init.kwargs.batch_size", + x="attack.init.batch_size", y="accuracy", data=attack_results, style="Kernel", @@ -149,6 +163,8 @@ legend=False, color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph8.set(xscale="log", xlabel="Batch Size", ylabel="Accuracy") graph6.legend(loc="center left", bbox_to_anchor=(1, 0.5), ncol=1, title="Kernel") @@ -158,7 +174,7 @@ fig, ax = plt.subplots(2, 2) graph9 = sns.lineplot( - x="attack.init.kwargs.eps", + x="attack.init.eps", y="adv_fit_time", data=attack_results, style="Kernel", @@ -166,20 +182,24 @@ legend=False, color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph9.set(xscale="log", xlabel="Perturbation Distance", ylabel="Attack Time") graph10 = sns.lineplot( - x="attack.init.kwargs.eps_step", + x="attack.init.eps_step", y="adv_fit_time", data=attack_results, style="Kernel", ax=ax[0, 1], color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph10.set(xscale="log", xlabel="Perturbation Step", ylabel="Attack Time") graph11 = sns.lineplot( - x="attack.init.kwargs.max_iter", + x="attack.init.max_iter", y="adv_fit_time", data=attack_results, style="Kernel", @@ -187,10 +207,12 @@ legend=False, color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph11.set(xscale="log", xlabel="Maximum Iterations", ylabel="Attack Time") graph12 = sns.lineplot( - x="attack.init.kwargs.batch_size", + x="attack.init.batch_size", y="adv_fit_time", data=attack_results, style="Kernel", @@ -198,6 +220,8 @@ legend=False, color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph12.set(xscale="log", xlabel="Batch Size", ylabel="Attack Time") graph10.legend(loc="center left", bbox_to_anchor=(1, 0.5), ncol=1, title="Kernel") @@ -225,6 +249,8 @@ data=retrain_df, style="Kernel", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) retrain = sns.lineplot( x="Epochs", @@ -234,6 +260,8 @@ color="darkred", legend=False, style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) retrain.legend(loc="center left", bbox_to_anchor=(1, 0.5), ncol=1, title="Kernel") retrain.set_xlabel("Retraining Epochs") @@ -250,6 +278,8 @@ data=retrain_df, style="Kernel", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) retrain = sns.lineplot( x="Epochs", @@ -259,6 +289,8 @@ color="darkred", legend=False, style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) retrain.legend(loc="center left", bbox_to_anchor=(1, 0.5), ncol=1, title="Kernel") retrain.set_xlabel("Retraining Epochs") @@ -279,6 +311,8 @@ legend=False, color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph9.set(xscale="log", xlabel="Perturbation Distance", ylabel="False Confidence") graph10 = sns.lineplot( @@ -289,6 +323,8 @@ ax=ax[0, 1], color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph10.set(xscale="log", xlabel="Perturbation Step", ylabel="False Confidence") graph11 = sns.lineplot( @@ -300,6 +336,8 @@ legend=False, color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph11.set(xscale="log", xlabel="Maximum Iterations", ylabel="False Confidence") graph12 = sns.lineplot( @@ -311,6 +349,8 @@ legend=False, color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph12.set(xscale="log", xlabel="Batch Size", ylabel="False Confidence") graph10.legend(loc="center left", bbox_to_anchor=(1, 0.5), ncol=1, title="Kernel") @@ -330,6 +370,8 @@ legend=False, color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph9.set(xscale="log", xlabel="Perturbation Distance", ylabel="False Confidence") graph10 = sns.lineplot( @@ -340,6 +382,8 @@ ax=ax[0, 1], color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph10.set(xscale="log", xlabel="Perturbation Step", ylabel="False Confidence") graph11 = sns.lineplot( @@ -351,6 +395,8 @@ legend=False, color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph11.set(xscale="log", xlabel="Maximum Iterations", ylabel="False Confidence") graph12 = sns.lineplot( @@ -362,6 +408,8 @@ legend=False, color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph12.set(xscale="log", xlabel="Batch Size", ylabel="False Confidence") graph10.legend(loc="center left", bbox_to_anchor=(1, 0.5), ncol=1, title="Kernel") diff --git a/examples/security/classification/plots/.gitignore b/examples/security/classification/plots/.gitignore new file mode 100644 index 00000000..4c882c2e --- /dev/null +++ b/examples/security/classification/plots/.gitignore @@ -0,0 +1,10 @@ +/accuracy_vs_attack_parameters.eps +/accuracy_vs_features.eps +/accuracy_vs_samples.eps +/confidence_vs_attack_parameters.eps +/train_time_vs_attack_parameters.eps +/train_time_vs_features.eps +/train_time_vs_samples.eps +/retrain_accuracy.eps +/retrain_confidence_vs_attack_parameters.eps +/retrain_time.eps diff --git a/examples/security/classification/retrain.py b/examples/security/classification/retrain.py index 9623e19d..8ae973e0 100644 --- a/examples/security/classification/retrain.py +++ b/examples/security/classification/retrain.py @@ -344,7 +344,7 @@ def save_results_and_outputs(results, outputs, path="retrain") -> list: params = json.load(f) else: raise ValueError(f"No params file found for {folder}") - attack_params = params["attack"]["init"]["kwargs"] + attack_params = params["attack"]["init"] attack_params.update({"name": params["attack"]["init"]["name"]}) confidence_ser["Kernel"] = name confidence_ser["Average False Confidence"] = avg_prob @@ -432,7 +432,7 @@ def save_results_and_outputs(results, outputs, path="retrain") -> list: else: logger.warning(f"No params file found for {folder}") continue - attack_params = params["attack"]["init"]["kwargs"] + attack_params = params["attack"]["init"] attack_params.update({"name": params["attack"]["init"]["name"]}) confidence_ser["Kernel"] = name confidence_ser["Average False Confidence After Retraining"] = avg_prob diff --git a/examples/security/kdd-nsl/.gitignore b/examples/security/kdd-nsl/.gitignore index 8a746d89..273db2f4 100644 --- a/examples/security/kdd-nsl/.gitignore +++ b/examples/security/kdd-nsl/.gitignore @@ -1,3 +1,4 @@ logs/ multirun/ output/ +/retrain diff --git a/examples/security/kdd-nsl/attacks.sh b/examples/security/kdd-nsl/attacks.sh index 76ed02bc..8b53b739 100644 --- a/examples/security/kdd-nsl/attacks.sh +++ b/examples/security/kdd-nsl/attacks.sh @@ -11,7 +11,7 @@ for model_config in $CONFIG_NAMES; do continue fi HYDRA_FULL_ERROR=1 python -m deckard.layers.optimise \ - ++model.init.kernel=kernel_name \ + ++model.init.kernel=${kernel_name}\ ++stage=attack \ ++attack.init.name=art.attacks.evasion.ProjectedGradientDescent \ ++attack.init.norm=1,2,inf \ @@ -21,6 +21,7 @@ for model_config in $CONFIG_NAMES; do ++attack.init.max_iter=1,10,100,1000 \ ++hydra.sweeper.study_name=$model_config \ ++attack.attack_size=100 \ + direction=minimize \ model=$model_config $@ --multirun >> logs/attacks/$model_config.log echo "Successfully completed model $model_config" >> attack_log.txt done diff --git a/examples/security/kdd-nsl/dvc.lock b/examples/security/kdd-nsl/dvc.lock index 9497e7e0..c2fecd0f 100644 --- a/examples/security/kdd-nsl/dvc.lock +++ b/examples/security/kdd-nsl/dvc.lock @@ -94,39 +94,39 @@ stages: outs: - path: output/reports/train/default/params.yaml hash: md5 - md5: 7234aab7d5edae504afa2090d96e4c3f - size: 2434 + md5: 6225c0aefe4059bfae7f5b0e04ae549a + size: 2189 - path: output/reports/train/default/predictions.json hash: md5 - md5: 7e3dec7b2d06af151bf81addc33fba5a - size: 44061 + md5: 3c5089245ae71f1b860304a02a224078 + size: 70072 - path: output/reports/train/default/probabilities.json hash: md5 - md5: 7e3dec7b2d06af151bf81addc33fba5a - size: 44061 + md5: 3c5089245ae71f1b860304a02a224078 + size: 70072 - path: output/reports/train/default/score_dict.json hash: md5 - md5: 8869350701c8b1b367cdb1a33ab572d9 - size: 360 + md5: cc368afafd0e89f04fb0ae89e64f5e0d + size: 716 attack: cmd: python -m deckard.layers.experiment attack deps: - path: output/reports/train/default/params.yaml hash: md5 - md5: 7234aab7d5edae504afa2090d96e4c3f - size: 2434 + md5: 6225c0aefe4059bfae7f5b0e04ae549a + size: 2189 - path: output/reports/train/default/predictions.json hash: md5 - md5: 7e3dec7b2d06af151bf81addc33fba5a - size: 44061 + md5: 3c5089245ae71f1b860304a02a224078 + size: 70072 - path: output/reports/train/default/probabilities.json hash: md5 - md5: 7e3dec7b2d06af151bf81addc33fba5a - size: 44061 + md5: 3c5089245ae71f1b860304a02a224078 + size: 70072 - path: output/reports/train/default/score_dict.json hash: md5 - md5: 8869350701c8b1b367cdb1a33ab572d9 - size: 360 + md5: cc368afafd0e89f04fb0ae89e64f5e0d + size: 716 params: params.yaml: attack: @@ -315,32 +315,32 @@ stages: outs: - path: output/attacks/attack.pkl hash: md5 - md5: b240c5f9c659967fe4768b5929a84905 + md5: e250ed2062f12ee9f024bf1be33abf73 size: 1832 - path: output/reports/attack/default/adv_predictions.json hash: md5 - md5: 36e7fcc5fe32df3a68a2603317e3d328 - size: 438 + md5: 8cb93c0ec6db31d94298f831ac081c64 + size: 700 - path: output/reports/attack/default/adv_probabilities.json hash: md5 - md5: 36e7fcc5fe32df3a68a2603317e3d328 - size: 438 + md5: 8cb93c0ec6db31d94298f831ac081c64 + size: 700 - path: output/reports/attack/default/params.yaml hash: md5 - md5: b300c684dc58fc23684ccefbb9f83265 - size: 5832 + md5: 3aa13a2e1e66b911f66d9bd8a8823369 + size: 5310 - path: output/reports/attack/default/predictions.json hash: md5 - md5: 7e3dec7b2d06af151bf81addc33fba5a - size: 44061 + md5: 3c5089245ae71f1b860304a02a224078 + size: 70072 - path: output/reports/attack/default/probabilities.json hash: md5 - md5: 7e3dec7b2d06af151bf81addc33fba5a - size: 44061 + md5: 3c5089245ae71f1b860304a02a224078 + size: 70072 - path: output/reports/attack/default/score_dict.json hash: md5 - md5: f8b8b80b2e8369f09e1f4730fcd9ba57 - size: 582 + md5: 595fabb17f79dca7ef3d7799e6a43388 + size: 1235 models: cmd: bash other_data.sh +stage=train --config-name=model.yaml deps: @@ -448,75 +448,77 @@ stages: outs: - path: logs/models/ hash: md5 - md5: ab01d57634e90f21b3b9a25ff62da3ca.dir - size: 359561 + md5: 3bdfd76f9298422ef6c1b55ef111802c.dir + size: 202845 nfiles: 3 - path: model.db hash: md5 - md5: 081a4f2934142058dbe5674f8d087031 - size: 733184 + md5: 155463edba880de94ed717294def04a8 + size: 208896 compile_models: cmd: python -m deckard.layers.compile --report_folder output/reports/train/ --results_file output/train.csv deps: - path: logs/models/ hash: md5 - md5: ab01d57634e90f21b3b9a25ff62da3ca.dir - size: 359561 + md5: 3bdfd76f9298422ef6c1b55ef111802c.dir + size: 202845 nfiles: 3 - path: model.db hash: md5 - md5: 081a4f2934142058dbe5674f8d087031 - size: 733184 + md5: 155463edba880de94ed717294def04a8 + size: 208896 - path: output/reports/train/ hash: md5 - md5: 4bbc6640609fdcd2e3d8595678dc22c8.dir - size: 42445285 - nfiles: 1672 + md5: df8221c356532e382e7f6909027e1648.dir + size: 11786125 + nfiles: 336 outs: - path: output/train.csv hash: md5 - md5: c740b7ccc67c3f38a04446ad0afe5ce6 - size: 611967 + md5: 4508b28e78d9b4d38dd60a10b54798dc + size: 164189 find_best_model@rbf: cmd: python -m deckard.layers.find_best --config_folder conf --config_subdir model - --params_file best_rbf --study_name=rbf --default_config model.yaml + --params_file best_rbf --study_name=rbf --default_config default.yaml --storage_name + sqlite:///model.db deps: - path: logs/models/ hash: md5 - md5: ab01d57634e90f21b3b9a25ff62da3ca.dir - size: 359561 + md5: 3bdfd76f9298422ef6c1b55ef111802c.dir + size: 202845 nfiles: 3 - path: model.db hash: md5 - md5: 081a4f2934142058dbe5674f8d087031 - size: 733184 + md5: 155463edba880de94ed717294def04a8 + size: 208896 - path: output/train.csv hash: md5 - md5: c740b7ccc67c3f38a04446ad0afe5ce6 - size: 611967 + md5: 4508b28e78d9b4d38dd60a10b54798dc + size: 164189 outs: - path: conf/model/best_rbf.yaml hash: md5 - md5: 3092c0288833989d2e77d849993a2a40 - size: 360 + md5: 7210f1655e71b637d09822e3faa1f0ff + size: 358 find_best_model@linear: cmd: python -m deckard.layers.find_best --config_folder conf --config_subdir model - --params_file best_linear --study_name=linear --default_config model.yaml + --params_file best_linear --study_name=linear --default_config default.yaml + --storage_name sqlite:///model.db deps: - path: logs/models/ hash: md5 - md5: ab01d57634e90f21b3b9a25ff62da3ca.dir - size: 359561 + md5: 3bdfd76f9298422ef6c1b55ef111802c.dir + size: 202845 nfiles: 3 - path: model.db hash: md5 - md5: 081a4f2934142058dbe5674f8d087031 - size: 733184 + md5: 155463edba880de94ed717294def04a8 + size: 208896 - path: output/train.csv hash: md5 - md5: c740b7ccc67c3f38a04446ad0afe5ce6 - size: 611967 + md5: 4508b28e78d9b4d38dd60a10b54798dc + size: 164189 outs: - path: conf/model/best_linear.yaml hash: md5 @@ -524,26 +526,27 @@ stages: size: 330 find_best_model@poly: cmd: python -m deckard.layers.find_best --config_folder conf --config_subdir model - --params_file best_poly --study_name=poly --default_config model.yaml + --params_file best_poly --study_name=poly --default_config default.yaml --storage_name + sqlite:///model.db deps: - path: logs/models/ hash: md5 - md5: ab01d57634e90f21b3b9a25ff62da3ca.dir - size: 359561 + md5: 3bdfd76f9298422ef6c1b55ef111802c.dir + size: 202845 nfiles: 3 - path: model.db hash: md5 - md5: 081a4f2934142058dbe5674f8d087031 - size: 733184 + md5: 155463edba880de94ed717294def04a8 + size: 208896 - path: output/train.csv hash: md5 - md5: c740b7ccc67c3f38a04446ad0afe5ce6 - size: 611967 + md5: 4508b28e78d9b4d38dd60a10b54798dc + size: 164189 outs: - path: conf/model/best_poly.yaml hash: md5 - md5: 12f892f3ba4ef8bab095b36bd7558d3e - size: 372 + md5: 49c26d851f36ef980b4a5bb1dabfebd8 + size: 370 attacks: cmd: bash attacks.sh ++stage=attack --config-name=attack.yaml deps: @@ -553,34 +556,34 @@ stages: size: 330 - path: conf/model/best_poly.yaml hash: md5 - md5: 12f892f3ba4ef8bab095b36bd7558d3e - size: 372 + md5: 49c26d851f36ef980b4a5bb1dabfebd8 + size: 370 - path: conf/model/best_rbf.yaml hash: md5 - md5: 3092c0288833989d2e77d849993a2a40 - size: 360 + md5: 7210f1655e71b637d09822e3faa1f0ff + size: 358 - path: logs/models/ hash: md5 - md5: ab01d57634e90f21b3b9a25ff62da3ca.dir - size: 359561 + md5: 3bdfd76f9298422ef6c1b55ef111802c.dir + size: 202845 nfiles: 3 - path: model.db hash: md5 - md5: 081a4f2934142058dbe5674f8d087031 - size: 733184 + md5: 155463edba880de94ed717294def04a8 + size: 208896 - path: output/train.csv hash: md5 - md5: c740b7ccc67c3f38a04446ad0afe5ce6 - size: 611967 + md5: 4508b28e78d9b4d38dd60a10b54798dc + size: 164189 outs: - path: attack.db hash: md5 - md5: 380effd61d22da8bc2b0f655e67f1cf0 - size: 700416 + md5: 37f5c17e7689935a334caf09c8aac40c + size: 315392 - path: logs/attacks/ hash: md5 - md5: e3d5880a8a34d62926f202472f635636.dir - size: 7098648 + md5: 18f2cba5502fa20600145eb551f2e64b.dir + size: 1695110 nfiles: 3 compile_attacks: cmd: python -m deckard.layers.compile --report_folder output/reports/attack/ --results_file @@ -588,89 +591,92 @@ stages: deps: - path: attack.db hash: md5 - md5: 380effd61d22da8bc2b0f655e67f1cf0 - size: 700416 + md5: 37f5c17e7689935a334caf09c8aac40c + size: 315392 - path: logs/attacks/ hash: md5 - md5: e3d5880a8a34d62926f202472f635636.dir - size: 7098648 + md5: 18f2cba5502fa20600145eb551f2e64b.dir + size: 1695110 nfiles: 3 - path: output/reports/attack/ hash: md5 - md5: 9a8c30a61ea2025b38ad09a7bd1a8e82.dir - size: 64940922 - nfiles: 4355 + md5: b71df3c8f2374573d6170f3223aa9b9c.dir + size: 39783146 + nfiles: 2169 outs: - path: output/attack.csv hash: md5 - md5: b0d1e2263515e400f6303c3afb0f5cfd - size: 1545938 + md5: 3ba52610fa5c0f042ceb92c3139f5596 + size: 983830 find_best_attack@linear: cmd: python -m deckard.layers.find_best --config_folder conf --config_subdir attack - --params_file best_linear --study_name=best_linear --default_config attack.yaml + --params_file best_linear --study_name=best_linear --default_config default.yaml + --storage_name sqlite:///attack.db --direction minimize deps: - path: attack.db hash: md5 - md5: 380effd61d22da8bc2b0f655e67f1cf0 - size: 700416 + md5: 37f5c17e7689935a334caf09c8aac40c + size: 315392 - path: logs/models/ hash: md5 - md5: ab01d57634e90f21b3b9a25ff62da3ca.dir - size: 359561 + md5: 3bdfd76f9298422ef6c1b55ef111802c.dir + size: 202845 nfiles: 3 - path: output/train.csv hash: md5 - md5: c740b7ccc67c3f38a04446ad0afe5ce6 - size: 611967 + md5: 4508b28e78d9b4d38dd60a10b54798dc + size: 164189 outs: - path: conf/attack/best_linear.yaml hash: md5 - md5: f048059aaa0e383f9c5ae9c085927588 - size: 231 + md5: d154a851ce6ec4fd55b11dbc50bea318 + size: 249 find_best_attack@rbf: cmd: python -m deckard.layers.find_best --config_folder conf --config_subdir attack - --params_file best_rbf --study_name=best_rbf --default_config attack.yaml + --params_file best_rbf --study_name=best_rbf --default_config default.yaml + --storage_name sqlite:///attack.db --direction minimize deps: - path: attack.db hash: md5 - md5: 380effd61d22da8bc2b0f655e67f1cf0 - size: 700416 + md5: 37f5c17e7689935a334caf09c8aac40c + size: 315392 - path: logs/models/ hash: md5 - md5: ab01d57634e90f21b3b9a25ff62da3ca.dir - size: 359561 + md5: 3bdfd76f9298422ef6c1b55ef111802c.dir + size: 202845 nfiles: 3 - path: output/train.csv hash: md5 - md5: c740b7ccc67c3f38a04446ad0afe5ce6 - size: 611967 + md5: 4508b28e78d9b4d38dd60a10b54798dc + size: 164189 outs: - path: conf/attack/best_rbf.yaml hash: md5 - md5: 936f60710cd2fba6d1b3584accc94943 - size: 246 + md5: c68a838c04899ee68e0072f640af2f21 + size: 248 find_best_attack@poly: cmd: python -m deckard.layers.find_best --config_folder conf --config_subdir attack - --params_file best_poly --study_name=best_poly --default_config attack.yaml + --params_file best_poly --study_name=best_poly --default_config default.yaml + --storage_name sqlite:///attack.db --direction minimize deps: - path: attack.db hash: md5 - md5: 380effd61d22da8bc2b0f655e67f1cf0 - size: 700416 + md5: 37f5c17e7689935a334caf09c8aac40c + size: 315392 - path: logs/models/ hash: md5 - md5: ab01d57634e90f21b3b9a25ff62da3ca.dir - size: 359561 + md5: 3bdfd76f9298422ef6c1b55ef111802c.dir + size: 202845 nfiles: 3 - path: output/train.csv hash: md5 - md5: c740b7ccc67c3f38a04446ad0afe5ce6 - size: 611967 + md5: 4508b28e78d9b4d38dd60a10b54798dc + size: 164189 outs: - path: conf/attack/best_poly.yaml hash: md5 - md5: 26b55aad33b06e46b07904b00c5cb236 - size: 228 + md5: 33974287420fdf63175bb6e0212a1e9b + size: 251 other_data_train@kdd_nsl: cmd: DATASET_NAME=kdd_nsl bash other_data.sh data=kdd_nsl +stage=train --config-name=model.yaml deps: @@ -706,93 +712,94 @@ stages: deps: - path: conf/attack/best_linear.yaml hash: md5 - md5: f048059aaa0e383f9c5ae9c085927588 - size: 231 + md5: d154a851ce6ec4fd55b11dbc50bea318 + size: 249 - path: conf/attack/best_poly.yaml hash: md5 - md5: 26b55aad33b06e46b07904b00c5cb236 - size: 228 + md5: 33974287420fdf63175bb6e0212a1e9b + size: 251 - path: conf/attack/best_rbf.yaml hash: md5 - md5: 936f60710cd2fba6d1b3584accc94943 - size: 246 + md5: c68a838c04899ee68e0072f640af2f21 + size: 248 - path: conf/model/best_linear.yaml hash: md5 md5: e4ae7059114d8724d4947e952145d4fe size: 330 - path: conf/model/best_poly.yaml hash: md5 - md5: 12f892f3ba4ef8bab095b36bd7558d3e - size: 372 + md5: 49c26d851f36ef980b4a5bb1dabfebd8 + size: 370 - path: conf/model/best_rbf.yaml hash: md5 - md5: 3092c0288833989d2e77d849993a2a40 - size: 360 + md5: 7210f1655e71b637d09822e3faa1f0ff + size: 358 - path: output/attacks/ hash: md5 - md5: 4551130dd81dfa20db94f2888d04675c.dir - size: 725472 - nfiles: 396 - - path: output/models/ - hash: md5 - md5: a738ec4b74e79472cfce860968cba882.dir - size: 2390233 - nfiles: 279 + md5: fa1bb6df926ae12f22c2651ab77c3a86.dir + size: 4070312 + nfiles: 241 outs: - path: plots/after_retrain_confidence.csv hash: md5 - md5: ce54cebd30fd5088597f7db85eab1754 - size: 114012 + md5: d06f8ccd3410c566773776bee2933753 + size: 785930 - path: plots/before_retrain_confidence.csv hash: md5 - md5: 82ff291d66e8f067a223cfcf1f117f63 - size: 113995 + md5: 7289fa5bcd5712d52801b76b36159d80 + size: 785913 - path: retrain/ hash: md5 - md5: 5f501f7245ed485c6d1d0e5ac44297a3.dir - size: 174463 + md5: 9f340584668054abbc4cda10df68f660.dir + size: 172962 nfiles: 12 plots: cmd: python plots.py deps: - path: output/attack.csv hash: md5 - md5: b0d1e2263515e400f6303c3afb0f5cfd - size: 1545938 + md5: 3ba52610fa5c0f042ceb92c3139f5596 + size: 983830 - path: output/train.csv hash: md5 - md5: c740b7ccc67c3f38a04446ad0afe5ce6 - size: 611967 + md5: 4508b28e78d9b4d38dd60a10b54798dc + size: 164189 + - path: plots.py + hash: md5 + md5: 6f0729bdca6bafc3c92faca71dc8c97e + size: 10164 - path: plots/after_retrain_confidence.csv hash: md5 - md5: ce54cebd30fd5088597f7db85eab1754 - size: 114012 + md5: d06f8ccd3410c566773776bee2933753 + size: 785930 - path: plots/before_retrain_confidence.csv hash: md5 - md5: 82ff291d66e8f067a223cfcf1f117f63 - size: 113995 + md5: 7289fa5bcd5712d52801b76b36159d80 + size: 785913 outs: - - path: plots/accuracy_vs_attack_parameters.pdf + - path: plots/accuracy_vs_attack_parameters.eps hash: md5 - md5: 8adf0a397611373445d6d4537acd494d - size: 16715 - - path: plots/confidence_vs_attack_parameters.pdf + md5: 8174380cd1e3153249aa7f4095905d82 + size: 39189 + - path: plots/confidence_vs_attack_parameters.eps hash: md5 - md5: de3ef58684597cc5e71a4f6062128fe7 - size: 18202 - - path: plots/retrain_accuracy.pdf + md5: e612551ce45bfb4fbd134c0058ae038d + size: 41785 + - path: plots/retrain_accuracy.eps hash: md5 - md5: 577e89d46eb6f2446d0a3ed83b4f9e19 - size: 13913 - - path: plots/retrain_confidence_vs_attack_parameters.pdf + md5: 5d0161b9c44e397e167e200738709fe3 + size: 30829 + - path: plots/retrain_confidence_vs_attack_parameters.eps hash: md5 - md5: 4f7b2f8e2a7a4552816389bd1dcaa074 - size: 18181 - - path: plots/retrain_time.pdf + md5: 76c457aeabd26983a5fc3a129e942c0a + size: 42149 + - path: plots/retrain_time.eps hash: md5 - md5: 7ad5725d3c3033b796ece976881d852d - size: 12896 - - path: plots/train_time_vs_attack_parameters.pdf + md5: 461075c4b7f2f693c22f96e34db026ca + size: 28368 + - path: plots/train_time_vs_attack_parameters.eps hash: md5 - md5: c2436157654bd664dc06528fcbfc834a - size: 17032 + md5: 59de7016df4a8380776a7ea0dd160359 + size: 39247 + move_files: + cmd: cp -r plots/* ~/KDD-Paper-EAI-AISEC/kdd-nsl/ diff --git a/examples/security/kdd-nsl/dvc.yaml b/examples/security/kdd-nsl/dvc.yaml index 04164939..b3ea885c 100644 --- a/examples/security/kdd-nsl/dvc.yaml +++ b/examples/security/kdd-nsl/dvc.yaml @@ -70,7 +70,7 @@ stages: - rbf - poly do: - cmd: python -m deckard.layers.find_best --config_folder conf --config_subdir model --params_file best_${item} --study_name=${item} --default_config model.yaml + cmd: python -m deckard.layers.find_best --config_folder conf --config_subdir model --params_file best_${item} --study_name=${item} --default_config default.yaml --storage_name sqlite:///model.db outs: - conf/model/best_${item}.yaml deps: @@ -108,7 +108,7 @@ stages: - rbf - poly do: - cmd: python -m deckard.layers.find_best --config_folder conf --config_subdir attack --params_file best_${item} --study_name=best_${item} --default_config attack.yaml + cmd: python -m deckard.layers.find_best --config_folder conf --config_subdir attack --params_file best_${item} --study_name=best_${item} --default_config default.yaml --storage_name sqlite:///attack.db --direction minimize outs: - conf/attack/best_${item}.yaml deps: @@ -118,7 +118,6 @@ stages: retrain: cmd : python retrain.py deps: - - ${files.directory}/models/ - ${files.directory}/attacks/ - conf/attack/best_linear.yaml - conf/attack/best_rbf.yaml @@ -134,18 +133,22 @@ stages: plots: cmd : python plots.py deps : + - plots.py - plots/after_retrain_confidence.csv - output/attack.csv - plots/before_retrain_confidence.csv - output/train.csv plots : - - plots/accuracy_vs_attack_parameters.pdf - # - plots/accuracy_vs_features.pdf - # - plots/accuracy_vs_samples.pdf - - plots/confidence_vs_attack_parameters.pdf - - plots/train_time_vs_attack_parameters.pdf - # - plots/train_time_vs_features.pdf - # - plots/train_time_vs_samples.pdf - - plots/retrain_accuracy.pdf - - plots/retrain_confidence_vs_attack_parameters.pdf - - plots/retrain_time.pdf + - plots/accuracy_vs_attack_parameters.eps + # - plots/accuracy_vs_features.eps + # - plots/accuracy_vs_samples.eps + - plots/confidence_vs_attack_parameters.eps + - plots/train_time_vs_attack_parameters.eps + # - plots/train_time_vs_features.eps + # - plots/train_time_vs_samples.eps + - plots/retrain_accuracy.eps + - plots/retrain_confidence_vs_attack_parameters.eps + - plots/retrain_time.eps + move_files: + cmd: >- + cp -r plots/* ~/KDD-Paper-EAI-AISEC/kdd-nsl/ diff --git a/examples/security/kdd-nsl/plots.py b/examples/security/kdd-nsl/plots.py index 06375d98..218e142f 100644 --- a/examples/security/kdd-nsl/plots.py +++ b/examples/security/kdd-nsl/plots.py @@ -18,28 +18,16 @@ # else: # results = parse_results("reports/model_queue/") results = pd.read_csv("output/train.csv") -# input_size = results["data.generate.kwargs.n_samples"] * results["data.generate.kwargs.n_features"] -results["Kernel"] = results["model.init.kwargs.kernel"].copy() -# results["Features"] = results["data.generate.kwargs.n_features"].copy() -results["Samples"] = results["data.sample.train_size"].copy() -# results["input_size"] = input_size -# sample_list = results["data.generate.kwargs.n_samples"].unique() -# feature_list = results["data.generate.kwargs.n_features"].unique() -kernel_list = results["model.init.kwargs.kernel"].unique() +results["Kernel"] = results["model.init.kernel"].copy() if "Unnamed: 0" in results.columns: del results["Unnamed: 0"] for col in results.columns: if col == "data.name" and isinstance(results[col][0], list): results[col] = results[col].apply(lambda x: x[0]) -results = results[results["model.init.kwargs.kernel"] != "sigmoid"] +results = results[results["model.init.kernel"] != "sigmoid"] attack_results = pd.read_csv("output/attack.csv") -attack_results["Kernel"] = attack_results["model.init.kwargs.kernel"].copy() -# attack_results["Features"] = attack_results["data.generate.kwargs.n_features"].copy() -# attack_results["Samples"] = attack_results["data.sample.train_size"].copy() -# sample_list = attack_results["data.generate.kwargs.n_samples"].unique() -# feature_list = attack_results["data.generate.kwargs.n_features"].unique() -kernel_list = attack_results["model.init.kwargs.kernel"].unique() +attack_results["Kernel"] = attack_results["model.init.kernel"].copy() if "Unnamed: 0" in attack_results.columns: del attack_results["Unnamed: 0"] for col in attack_results.columns: @@ -47,75 +35,29 @@ attack_results[col] = attack_results[col].apply(lambda x: x[0]) -# graph1 = sns.lineplot( -# x="data.sample.train_size", -# y="accuracy", -# data=results, -# style="Kernel", -# style_order=["rbf", "poly", "linear"], -# ) -# graph1.legend(labels=["Linear", "RBF", "Poly"]) -# graph1.legend(loc="center left", bbox_to_anchor=(1, 0.5), ncol=1, title="Kernel") -# graph1.set_xlabel("Number of Samples") -# graph1.set_ylabel("Accuracy") -# graph1.set_xscale("log") -# graph1.get_figure().tight_layout() -# graph1.get_figure().savefig("plots/accuracy_vs_samples.pdf") -# plt.gcf().clear() -# graph2 = sns.lineplot( -# x="data.generate.kwargs.n_features", -# y="accuracy", -# data=results, -# style="Kernel", -# style_order=["rbf", "poly", "linear"], -# ) -# graph2.set_xlabel("Number of Features") -# graph2.set_ylabel("Accuracy") -# graph2.set_xscale("log") -# graph2.legend(loc="center left", bbox_to_anchor=(1, 0.5), ncol=1, title="Kernel") -# graph2.get_figure().tight_layout() -# graph2.get_figure().savefig("plots/accuracy_vs_features.pdf") -# plt.gcf().clear() -# results["train_time"] = ( -# results["train_time"] -# * results["data.sample.train_size"] -# * results["data.generate.kwargs.n_samples"] -# ) -# graph3 = sns.lineplot( -# x="data.generate.kwargs.n_features", -# y="train_time", -# data=results, -# style="Kernel", -# style_order=["rbf", "poly", "linear"], -# ) -# graph3.set_xlabel("Number of Features") -# graph3.set_ylabel("Training Time") -# graph3.set(yscale="log", xscale="log") -# graph3.legend(title="Kernel") -# graph3.get_figure().tight_layout() -# graph3.get_figure().savefig("plots/train_time_vs_features.pdf") -# plt.gcf().clear() -# graph4 = sns.lineplot( -# x="data.sample.train_size", -# y="train_time", -# data=results, -# style="Kernel", -# style_order=["rbf", "poly", "linear"], -# ) -# graph4.set_xlabel("Number of Samples") -# graph4.set_ylabel("Training Time") -# graph4.set(yscale="log", xscale="log") -# graph4.legend(title="Kernel") -# graph4.get_figure().tight_layout() -# graph4.get_figure().savefig("plots/train_time_vs_samples.pdf") -# plt.gcf().clear() +graph4 = sns.lineplot( + x="data.sample.train_size", + y="train_time", + data=results, + style="Kernel", + style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), +) +graph4.set_xlabel("Number of Samples") +graph4.set_ylabel("Training Time") +graph4.set(yscale="log", xscale="log", xlim=(10, 1e6)) +graph4.legend(title="Kernel") +graph4.get_figure().tight_layout() +graph4.get_figure().savefig("plots/train_time_vs_samples.eps") +plt.gcf().clear() fig, ax = plt.subplots(2, 2) graph5 = sns.lineplot( - x="attack.init.kwargs.eps", + x="attack.init.eps", y="accuracy", data=attack_results, style="Kernel", @@ -123,20 +65,24 @@ legend=False, color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph5.set(xscale="log", xlabel="Perturbation Distance", ylabel="Accuracy") graph6 = sns.lineplot( - x="attack.init.kwargs.eps_step", + x="attack.init.eps_step", y="accuracy", data=attack_results, style="Kernel", ax=ax[0, 1], color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph6.set(xscale="log", xlabel="Perturbation Step", ylabel="Accuracy") graph7 = sns.lineplot( - x="attack.init.kwargs.max_iter", + x="attack.init.max_iter", y="accuracy", data=attack_results, style="Kernel", @@ -144,10 +90,12 @@ legend=False, color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph7.set(xscale="log", xlabel="Maximum Iterations", ylabel="Accuracy") graph8 = sns.lineplot( - x="attack.init.kwargs.batch_size", + x="attack.init.batch_size", y="accuracy", data=attack_results, style="Kernel", @@ -155,16 +103,18 @@ legend=False, color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph8.set(xscale="log", xlabel="Batch Size", ylabel="Accuracy") graph6.legend(loc="center left", bbox_to_anchor=(1, 0.5), ncol=1, title="Kernel") fig.tight_layout() -fig.savefig("plots/accuracy_vs_attack_parameters.pdf") +fig.savefig("plots/accuracy_vs_attack_parameters.eps") plt.gcf().clear() fig, ax = plt.subplots(2, 2) graph9 = sns.lineplot( - x="attack.init.kwargs.eps", + x="attack.init.eps", y="adv_fit_time", data=attack_results, style="Kernel", @@ -172,20 +122,24 @@ legend=False, color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph9.set(xscale="log", xlabel="Perturbation Distance", ylabel="Attack Time") graph10 = sns.lineplot( - x="attack.init.kwargs.eps_step", + x="attack.init.eps_step", y="adv_fit_time", data=attack_results, style="Kernel", ax=ax[0, 1], color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph10.set(xscale="log", xlabel="Perturbation Step", ylabel="Attack Time") graph11 = sns.lineplot( - x="attack.init.kwargs.max_iter", + x="attack.init.max_iter", y="adv_fit_time", data=attack_results, style="Kernel", @@ -193,10 +147,12 @@ legend=False, color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph11.set(xscale="log", xlabel="Maximum Iterations", ylabel="Attack Time") graph12 = sns.lineplot( - x="attack.init.kwargs.batch_size", + x="attack.init.batch_size", y="adv_fit_time", data=attack_results, style="Kernel", @@ -204,11 +160,13 @@ legend=False, color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph12.set(xscale="log", xlabel="Batch Size", ylabel="Attack Time") graph10.legend(loc="center left", bbox_to_anchor=(1, 0.5), ncol=1, title="Kernel") fig.tight_layout(h_pad=0.5) -fig.savefig("plots/train_time_vs_attack_parameters.pdf") +fig.savefig("plots/train_time_vs_attack_parameters.eps") plt.gcf().clear() retrain_df = pd.DataFrame() @@ -231,6 +189,8 @@ data=retrain_df, style="Kernel", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) retrain = sns.lineplot( x="Epochs", @@ -240,12 +200,14 @@ color="darkred", legend=False, style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) retrain.legend(loc="center left", bbox_to_anchor=(1, 0.5), ncol=1, title="Kernel") retrain.set_xlabel("Retraining Epochs") retrain.set_ylabel("Accuracy") retrain.get_figure().tight_layout() -retrain.get_figure().savefig("plots/retrain_accuracy.pdf") +retrain.get_figure().savefig("plots/retrain_accuracy.eps") plt.gcf().clear() retrain_df["ben_time"] = retrain_df["ben_time"] * retrain_df["train_size"] * 10 @@ -256,6 +218,8 @@ data=retrain_df, style="Kernel", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) retrain = sns.lineplot( x="Epochs", @@ -265,13 +229,15 @@ color="darkred", legend=False, style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) retrain.legend(loc="center left", bbox_to_anchor=(1, 0.5), ncol=1, title="Kernel") retrain.set_xlabel("Retraining Epochs") retrain.set_ylabel("Time") retrain.set_yscale("log") retrain.get_figure().tight_layout() -retrain.get_figure().savefig("plots/retrain_time.pdf") +retrain.get_figure().savefig("plots/retrain_time.eps") plt.gcf().clear() confidence_df = pd.read_csv("plots/before_retrain_confidence.csv") @@ -285,6 +251,8 @@ legend=False, color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph9.set(xscale="log", xlabel="Perturbation Distance", ylabel="False Confidence") graph10 = sns.lineplot( @@ -295,6 +263,8 @@ ax=ax[0, 1], color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph10.set(xscale="log", xlabel="Perturbation Step", ylabel="False Confidence") graph11 = sns.lineplot( @@ -306,6 +276,8 @@ legend=False, color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph11.set(xscale="log", xlabel="Maximum Iterations", ylabel="False Confidence") graph12 = sns.lineplot( @@ -317,11 +289,13 @@ legend=False, color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph12.set(xscale="log", xlabel="Batch Size", ylabel="False Confidence") graph10.legend(loc="center left", bbox_to_anchor=(1, 0.5), ncol=1, title="Kernel") fig.tight_layout(h_pad=0.5) -fig.savefig("plots/confidence_vs_attack_parameters.pdf") +fig.savefig("plots/confidence_vs_attack_parameters.eps") plt.gcf().clear() confdence_df = pd.read_csv("plots/after_retrain_confidence.csv") @@ -336,6 +310,8 @@ legend=False, color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph9.set(xscale="log", xlabel="Perturbation Distance", ylabel="False Confidence") graph10 = sns.lineplot( @@ -346,6 +322,8 @@ ax=ax[0, 1], color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph10.set(xscale="log", xlabel="Perturbation Step", ylabel="False Confidence") graph11 = sns.lineplot( @@ -357,6 +335,8 @@ legend=False, color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph11.set(xscale="log", xlabel="Maximum Iterations", ylabel="False Confidence") graph12 = sns.lineplot( @@ -368,9 +348,11 @@ legend=False, color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph12.set(xscale="log", xlabel="Batch Size", ylabel="False Confidence") graph10.legend(loc="center left", bbox_to_anchor=(1, 0.5), ncol=1, title="Kernel") fig.tight_layout(h_pad=0.5) -fig.savefig("plots/retrain_confidence_vs_attack_parameters.pdf") -plt.gcf().clear() +fig.savefig("plots/retrain_confidence_vs_attack_parameters.eps") +plt.gcf().clear() \ No newline at end of file diff --git a/examples/security/kdd-nsl/plots/.gitignore b/examples/security/kdd-nsl/plots/.gitignore index 642f14d4..f09089fa 100644 --- a/examples/security/kdd-nsl/plots/.gitignore +++ b/examples/security/kdd-nsl/plots/.gitignore @@ -4,9 +4,3 @@ /retrain_accuracy.eps /retrain_confidence_vs_attack_parameters.eps /retrain_time.eps -/accuracy_vs_attack_parameters.pdf -/confidence_vs_attack_parameters.pdf -/train_time_vs_attack_parameters.pdf -/retrain_accuracy.pdf -/retrain_confidence_vs_attack_parameters.pdf -/retrain_time.pdf diff --git a/examples/security/kdd-nsl/plots/train_time_vs_samples.eps b/examples/security/kdd-nsl/plots/train_time_vs_samples.eps new file mode 100644 index 00000000..8646b377 --- /dev/null +++ b/examples/security/kdd-nsl/plots/train_time_vs_samples.eps @@ -0,0 +1,1373 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Title: train_time_vs_samples.eps +%%Creator: Matplotlib v3.7.2, https://matplotlib.org/ +%%CreationDate: Tue Jul 16 16:20:51 2024 +%%Orientation: portrait +%%BoundingBox: 75 223 537 569 +%%HiResBoundingBox: 75.600000 223.200000 536.400000 568.800000 +%%EndComments +%%BeginProlog +/mpldict 11 dict def +mpldict begin +/_d { bind def } bind def +/m { moveto } _d +/l { lineto } _d +/r { rlineto } _d +/c { curveto } _d +/cl { closepath } _d +/ce { closepath eofill } _d +/box { + m + 1 index 0 r + 0 exch r + neg 0 r + cl + } _d +/clipbox { + box + clip + newpath + } _d +/sc { setcachedevice } _d +%!PS-Adobe-3.0 Resource-Font +%%Creator: Converted from TrueType to Type 3 by Matplotlib. +10 dict begin +/FontName /DejaVuSerif def +/PaintType 0 def +/FontMatrix [0.00048828125 0 0 0.00048828125 0 0] def +/FontBBox [-1576 -710 4312 2272] def +/FontType 3 def +/Encoding [/minus /space /period /zero /one /two /three /four /five /six /eight /K /N /S /T /multiply /a /b /e /f /g /i /l /m /n /o /p /r /s /u /y] def +/CharStrings 32 dict dup begin +/.notdef 0 def +/minus{1716 0 217 561 1499 723 sc +217 723 m +1499 723 l +1499 561 l +217 561 l +217 723 l + +ce} _d +/space{651 0 0 0 0 0 sc +ce} _d +/period{651 0 193 -29 459 238 sc +193 104 m +193 141 206 173 231 199 c +256 225 288 238 326 238 c +363 238 394 225 420 199 c +446 173 459 141 459 104 c +459 67 446 36 420 10 c +394 -16 363 -29 326 -29 c +288 -29 256 -16 231 9 c +206 35 193 67 193 104 c + +ce} _d +/zero{1303 0 135 -29 1167 1520 sc +651 70 m +753 70 829 126 880 238 c +931 350 956 519 956 745 c +956 972 931 1141 880 1253 c +829 1365 753 1421 651 1421 c +549 1421 473 1365 422 1253 c +371 1141 346 972 346 745 c +346 519 371 350 422 238 c +473 126 549 70 651 70 c + +651 -29 m +489 -29 362 39 271 175 c +180 311 135 501 135 745 c +135 990 180 1180 271 1316 c +362 1452 489 1520 651 1520 c +814 1520 940 1452 1031 1316 c +1122 1180 1167 990 1167 745 c +1167 501 1122 311 1031 175 c +940 39 814 -29 651 -29 c + +ce} _d +/one{1303 0 250 0 1012 1520 sc +291 0 m +291 106 l +551 106 l +551 1348 l +250 1153 l +250 1284 l +614 1520 l +752 1520 l +752 106 l +1012 106 l +1012 0 l +291 0 l + +ce} _d +/two{1303 0 139 0 1102 1520 sc +262 1137 m +150 1137 l +150 1403 l +221 1441 293 1470 365 1490 c +438 1510 509 1520 578 1520 c +733 1520 856 1482 946 1407 c +1036 1332 1081 1229 1081 1100 c +1081 954 979 779 775 576 c +759 561 747 549 739 541 c +362 164 l +985 164 l +985 348 l +1102 348 l +1102 0 l +139 0 l +139 109 l +592 561 l +692 661 763 753 806 836 c +849 920 870 1008 870 1100 c +870 1201 844 1279 791 1336 c +739 1393 667 1421 575 1421 c +480 1421 406 1397 354 1350 c +302 1303 271 1232 262 1137 c + +ce} _d +/three{1303 0 156 -29 1151 1520 sc +199 1430 m +277 1459 352 1482 423 1497 c +495 1512 562 1520 625 1520 c +771 1520 885 1488 967 1425 c +1049 1362 1090 1275 1090 1163 c +1090 1073 1062 998 1005 937 c +948 877 868 836 764 815 c +887 798 982 753 1049 681 c +1117 610 1151 517 1151 403 c +1151 264 1104 157 1010 82 c +917 8 782 -29 606 -29 c +528 -29 452 -21 377 -4 c +303 13 229 38 156 72 c +156 362 l +268 362 l +275 266 307 193 365 144 c +423 95 505 70 610 70 c +712 70 792 99 851 158 c +910 217 940 298 940 401 c +940 518 910 607 849 667 c +788 728 699 758 582 758 c +487 758 l +487 860 l +537 860 l +654 860 741 884 799 932 c +858 981 887 1054 887 1151 c +887 1238 863 1305 815 1351 c +767 1398 698 1421 608 1421 c +518 1421 448 1400 398 1357 c +349 1314 320 1251 311 1167 c +199 1167 l +199 1430 l + +ce} _d +/four{1303 0 63 0 1200 1520 sc +715 506 m +715 1300 l +205 506 l +715 506 l + +1155 0 m +475 0 l +475 106 l +715 106 l +715 399 l +63 399 l +63 508 l +717 1520 l +915 1520 l +915 506 l +1200 506 l +1200 399 l +915 399 l +915 106 l +1155 106 l +1155 0 l + +ce} _d +/five{1303 0 174 -29 1145 1493 sc +1030 1493 m +1030 1329 l +346 1329 l +346 901 l +381 925 421 943 467 955 c +514 967 566 973 623 973 c +784 973 912 928 1005 839 c +1098 750 1145 628 1145 473 c +1145 315 1098 192 1003 103 c +909 15 777 -29 606 -29 c +537 -29 467 -21 395 -4 c +323 13 249 38 174 72 c +174 362 l +287 362 l +293 267 323 195 377 145 c +432 95 508 70 606 70 c +711 70 792 105 849 174 c +906 243 934 343 934 473 c +934 602 906 701 849 770 c +793 839 712 874 606 874 c +546 874 493 863 447 842 c +402 821 361 788 326 743 c +240 743 l +240 1493 l +1030 1493 l + +ce} _d +/six{1303 0 137 -29 1174 1520 sc +670 70 m +764 70 836 104 887 173 c +938 242 963 342 963 471 c +963 600 938 699 887 768 c +836 837 764 872 670 872 c +575 872 502 839 452 772 c +402 705 377 609 377 483 c +377 350 402 248 453 177 c +504 106 576 70 670 70 c + +344 822 m +389 872 441 909 498 934 c +555 959 620 971 692 971 c +841 971 958 926 1044 837 c +1131 748 1174 626 1174 471 c +1174 320 1127 198 1034 107 c +941 16 817 -29 662 -29 c +493 -29 364 34 273 159 c +182 285 137 465 137 698 c +137 959 191 1162 298 1305 c +405 1448 557 1520 752 1520 c +805 1520 860 1515 918 1505 c +976 1495 1035 1480 1096 1460 c +1096 1214 l +983 1214 l +975 1281 949 1333 906 1368 c +863 1403 804 1421 731 1421 c +602 1421 505 1372 442 1274 c +379 1176 346 1025 344 822 c + +ce} _d +/eight{1303 0 137 -29 1165 1520 sc +954 408 m +954 515 927 597 874 656 c +821 715 747 745 651 745 c +555 745 480 715 427 656 c +374 597 348 515 348 408 c +348 301 374 217 427 158 c +480 99 555 70 651 70 c +747 70 821 99 874 158 c +927 217 954 301 954 408 c + +913 1133 m +913 1224 890 1294 844 1345 c +798 1396 734 1421 651 1421 c +569 1421 505 1396 458 1345 c +412 1294 389 1224 389 1133 c +389 1042 412 971 458 920 c +505 869 569 844 651 844 c +734 844 798 869 844 920 c +890 971 913 1042 913 1133 c + +805 795 m +918 780 1007 738 1070 669 c +1133 601 1165 514 1165 408 c +1165 268 1121 160 1032 84 c +943 9 816 -29 651 -29 c +486 -29 359 9 270 84 c +181 160 137 268 137 408 c +137 514 169 601 232 669 c +295 738 384 780 498 795 c +397 813 320 851 266 909 c +213 968 186 1042 186 1133 c +186 1253 227 1347 310 1416 c +393 1485 506 1520 651 1520 c +796 1520 909 1485 992 1416 c +1075 1347 1116 1253 1116 1133 c +1116 1042 1089 968 1035 909 c +982 851 905 813 805 795 c + +ce} _d +/K{1530 0 113 0 1561 1493 sc +113 0 m +113 106 l +303 106 l +303 1386 l +113 1386 l +113 1493 l +696 1493 l +696 1386 l +506 1386 l +506 821 l +1149 1386 l +987 1386 l +987 1493 l +1483 1493 l +1483 1386 l +1315 1386 l +674 823 l +1391 106 l +1561 106 l +1561 0 l +1214 0 l +506 709 l +506 106 l +696 106 l +696 0 l +113 0 l + +ce} _d +/N{1792 0 100 -29 1702 1493 sc +100 0 m +100 106 l +301 106 l +301 1386 l +100 1386 l +100 1493 l +483 1493 l +1378 315 l +1378 1386 l +1178 1386 l +1178 1493 l +1702 1493 l +1702 1386 l +1501 1386 l +1501 -29 l +1380 -29 l +424 1229 l +424 106 l +625 106 l +625 0 l +100 0 l + +ce} _d +/S{1403 0 172 -29 1253 1520 sc +190 72 m +190 412 l +305 411 l +308 298 341 214 403 159 c +466 105 561 78 688 78 c +807 78 897 101 959 148 c +1022 195 1053 264 1053 354 c +1053 426 1034 481 996 520 c +959 559 879 596 758 633 c +561 692 l +418 735 318 789 259 854 c +201 919 172 1007 172 1120 c +172 1247 217 1345 307 1415 c +397 1485 523 1520 686 1520 c +755 1520 831 1512 914 1497 c +997 1482 1085 1461 1178 1432 c +1178 1114 l +1065 1114 l +1054 1219 1018 1295 959 1342 c +900 1389 811 1413 690 1413 c +585 1413 504 1391 449 1348 c +394 1305 367 1243 367 1161 c +367 1090 388 1034 429 993 c +470 952 558 912 692 872 c +877 817 l +1012 776 1109 724 1166 661 c +1224 598 1253 514 1253 408 c +1253 263 1207 154 1114 81 c +1021 8 883 -29 700 -29 c +618 -29 534 -21 449 -4 c +364 13 278 38 190 72 c + +ce} _d +/T{1366 0 20 0 1346 1493 sc +391 0 m +391 106 l +582 106 l +582 1374 l +143 1374 l +143 1141 l +20 1141 l +20 1493 l +1346 1493 l +1346 1141 l +1223 1141 l +1223 1374 l +784 1374 l +784 106 l +975 106 l +975 0 l +391 0 l + +ce} _d +/multiply{1716 0 283 68 1434 1217 sc +1434 1104 m +971 641 l +1434 180 l +1319 68 l +858 528 l +397 68 l +283 180 l +743 641 l +283 1104 l +397 1217 l +858 756 l +1319 1217 l +1434 1104 l + +ce} _d +/a{1221 0 102 -29 1163 1092 sc +815 334 m +815 559 l +578 559 l +487 559 419 539 374 500 c +329 461 307 400 307 319 c +307 245 330 186 375 143 c +420 100 482 78 559 78 c +636 78 697 102 744 149 c +791 196 815 258 815 334 c + +999 664 m +999 106 l +1163 106 l +1163 0 l +815 0 l +815 115 l +774 66 727 29 674 6 c +621 -17 558 -29 487 -29 c +369 -29 275 2 206 65 c +137 128 102 212 102 319 c +102 429 142 514 221 575 c +300 636 412 666 557 666 c +815 666 l +815 739 l +815 820 790 882 741 926 c +692 971 624 993 535 993 c +462 993 403 976 360 943 c +317 910 290 860 279 795 c +184 795 l +184 1010 l +248 1037 310 1058 370 1071 c +431 1085 490 1092 547 1092 c +694 1092 806 1055 883 982 c +960 909 999 803 999 664 c + +ce} _d +/b{1311 0 59 -29 1208 1556 sc +236 106 m +236 1450 l +59 1450 l +59 1556 l +420 1556 l +420 897 l +456 964 502 1013 557 1044 c +613 1076 682 1092 764 1092 c +895 1092 1001 1040 1084 937 c +1167 834 1208 699 1208 532 c +1208 365 1167 230 1084 126 c +1001 23 895 -29 764 -29 c +682 -29 613 -13 557 18 c +502 50 456 99 420 166 c +420 0 l +59 0 l +59 106 l +236 106 l + +420 479 m +420 351 444 253 493 186 c +542 119 614 86 707 86 c +801 86 872 124 920 199 c +969 274 993 385 993 532 c +993 679 969 790 920 865 c +872 940 801 977 707 977 c +614 977 542 943 493 876 c +444 809 420 711 420 584 c +420 479 l + +ce} _d +/e{1212 0 102 -29 1110 1092 sc +1110 512 m +317 512 l +317 504 l +317 361 344 252 398 179 c +452 106 532 70 637 70 c +718 70 784 91 835 133 c +887 176 923 239 944 322 c +1092 322 l +1063 205 1008 118 929 59 c +850 0 747 -29 618 -29 c +463 -29 338 22 243 124 c +149 227 102 363 102 532 c +102 700 148 835 241 938 c +334 1041 455 1092 606 1092 c +767 1092 890 1042 976 943 c +1062 844 1107 701 1110 512 c + +893 618 m +889 742 863 835 814 898 c +766 961 697 993 606 993 c +521 993 455 961 406 898 c +357 835 328 741 317 618 c +893 618 l + +ce} _d +/f{758 0 74 0 881 1556 sc +881 1305 m +784 1305 l +783 1355 769 1393 741 1419 c +714 1445 674 1458 621 1458 c +552 1458 504 1439 476 1401 c +448 1364 434 1297 434 1200 c +434 1063 l +731 1063 l +731 956 l +434 956 l +434 106 l +670 106 l +670 0 l +74 0 l +74 106 l +250 106 l +250 956 l +74 956 l +74 1063 l +250 1063 l +250 1196 l +250 1315 281 1404 342 1465 c +404 1526 495 1556 614 1556 c +659 1556 703 1552 748 1544 c +793 1536 837 1524 881 1507 c +881 1305 l + +ce} _d +/g{1311 0 102 -455 1251 1092 sc +1075 956 m +1075 23 l +1075 -130 1033 -247 949 -330 c +865 -413 745 -455 590 -455 c +520 -455 453 -449 389 -436 c +325 -423 264 -404 205 -379 c +205 -156 l +301 -156 l +313 -225 341 -276 386 -308 c +431 -340 495 -356 578 -356 c +686 -356 765 -325 815 -264 c +866 -203 891 -108 891 23 c +891 166 l +855 99 809 50 753 18 c +698 -13 629 -29 547 -29 c +416 -29 309 23 226 126 c +143 230 102 365 102 532 c +102 699 143 834 226 937 c +309 1040 416 1092 547 1092 c +629 1092 698 1076 753 1044 c +809 1013 855 964 891 897 c +891 1063 l +1251 1063 l +1251 956 l +1075 956 l + +891 584 m +891 711 866 809 817 876 c +768 943 697 977 604 977 c +509 977 438 940 389 865 c +341 790 317 679 317 532 c +317 385 341 274 389 199 c +438 124 509 86 604 86 c +697 86 768 119 817 186 c +866 253 891 351 891 479 c +891 584 l + +ce} _d +/i{655 0 74 0 608 1507 sc +199 1393 m +199 1424 210 1450 232 1473 c +255 1496 282 1507 313 1507 c +344 1507 370 1496 392 1473 c +415 1450 426 1424 426 1393 c +426 1362 415 1335 393 1313 c +371 1291 344 1280 313 1280 c +282 1280 255 1291 232 1313 c +210 1335 199 1362 199 1393 c + +434 106 m +608 106 l +608 0 l +74 0 l +74 106 l +250 106 l +250 956 l +74 956 l +74 1063 l +434 1063 l +434 106 l + +ce} _d +/l{655 0 59 0 594 1556 sc +420 106 m +594 106 l +594 0 l +59 0 l +59 106 l +236 106 l +236 1450 l +59 1450 l +59 1556 l +420 1556 l +420 106 l + +ce} _d +/m{1942 0 74 0 1886 1092 sc +1061 856 m +1096 934 1141 993 1196 1032 c +1251 1072 1316 1092 1389 1092 c +1500 1092 1583 1057 1638 988 c +1693 919 1720 815 1720 676 c +1720 106 l +1886 106 l +1886 0 l +1376 0 l +1376 106 l +1536 106 l +1536 655 l +1536 764 1520 841 1488 887 c +1456 933 1403 956 1329 956 c +1247 956 1184 925 1141 863 c +1098 801 1077 711 1077 592 c +1077 106 l +1237 106 l +1237 0 l +733 0 l +733 106 l +893 106 l +893 662 l +893 768 877 843 845 888 c +813 933 760 956 686 956 c +604 956 541 925 498 863 c +455 801 434 711 434 592 c +434 106 l +594 106 l +594 0 l +84 0 l +84 106 l +250 106 l +250 958 l +74 958 l +74 1063 l +434 1063 l +434 874 l +468 945 511 999 564 1036 c +617 1073 676 1092 743 1092 c +826 1092 895 1071 950 1030 c +1005 989 1042 931 1061 856 c + +ce} _d +/n{1319 0 74 0 1262 1092 sc +84 0 m +84 106 l +250 106 l +250 956 l +74 956 l +74 1063 l +434 1063 l +434 874 l +468 946 512 1000 566 1037 c +621 1074 684 1092 756 1092 c +873 1092 960 1058 1015 991 c +1070 924 1098 819 1098 676 c +1098 106 l +1262 106 l +1262 0 l +754 0 l +754 106 l +913 106 l +913 618 l +913 748 897 837 865 885 c +833 934 777 958 696 958 c +611 958 546 927 501 864 c +456 802 434 711 434 592 c +434 106 l +594 106 l +594 0 l +84 0 l + +ce} _d +/o{1233 0 102 -29 1130 1092 sc +616 70 m +715 70 789 109 839 187 c +890 265 915 380 915 532 c +915 684 890 799 839 876 c +789 954 715 993 616 993 c +517 993 443 954 392 876 c +342 799 317 684 317 532 c +317 380 342 265 393 187 c +444 109 518 70 616 70 c + +616 -29 m +461 -29 337 22 243 124 c +149 227 102 363 102 532 c +102 701 149 837 242 939 c +336 1041 461 1092 616 1092 c +771 1092 896 1041 989 939 c +1083 837 1130 701 1130 532 c +1130 363 1083 227 989 124 c +896 22 771 -29 616 -29 c + +ce} _d +/p{1311 0 59 -426 1208 1092 sc +420 584 m +420 479 l +420 351 444 253 493 186 c +542 119 614 86 707 86 c +801 86 872 124 920 199 c +969 274 993 385 993 532 c +993 679 969 790 920 865 c +872 940 801 977 707 977 c +614 977 542 943 493 876 c +444 809 420 711 420 584 c + +236 956 m +59 956 l +59 1063 l +420 1063 l +420 897 l +456 964 502 1013 557 1044 c +613 1076 682 1092 764 1092 c +895 1092 1001 1040 1084 937 c +1167 834 1208 699 1208 532 c +1208 365 1167 230 1084 126 c +1001 23 895 -29 764 -29 c +682 -29 613 -13 557 18 c +502 50 456 99 420 166 c +420 -319 l +594 -319 l +594 -426 l +59 -426 l +59 -319 l +236 -319 l +236 956 l + +ce} _d +/r{979 0 74 0 979 1092 sc +979 1065 m +979 799 l +873 799 l +870 852 855 891 829 917 c +803 943 765 956 715 956 c +624 956 555 925 506 862 c +458 799 434 709 434 592 c +434 106 l +647 106 l +647 0 l +84 0 l +84 106 l +250 106 l +250 958 l +74 958 l +74 1063 l +434 1063 l +434 874 l +470 948 516 1003 573 1038 c +630 1074 699 1092 780 1092 c +810 1092 841 1090 874 1085 c +907 1080 942 1074 979 1065 c + +ce} _d +/s{1051 0 115 -29 946 1092 sc +115 59 m +115 307 l +221 307 l +224 228 248 168 295 129 c +342 90 412 70 504 70 c +587 70 650 85 693 116 c +736 147 758 193 758 252 c +758 299 742 336 710 365 c +679 394 612 424 510 457 c +377 502 l +286 531 219 568 178 612 c +137 656 117 712 117 780 c +117 877 153 954 224 1009 c +295 1064 394 1092 520 1092 c +576 1092 635 1085 697 1070 c +759 1055 823 1034 889 1006 c +889 774 l +783 774 l +780 843 756 896 711 935 c +666 974 604 993 526 993 c +449 993 390 979 350 952 c +311 925 291 884 291 829 c +291 784 306 748 336 721 c +366 694 426 667 516 639 c +662 594 l +763 563 835 523 879 476 c +924 429 946 369 946 295 c +946 194 907 115 830 57 c +753 -0 647 -29 512 -29 c +443 -29 376 -22 311 -7 c +246 8 180 30 115 59 c + +ce} _d +/u{1319 0 55 -29 1243 1063 sc +725 1063 m +1069 1063 l +1069 106 l +1243 106 l +1243 0 l +885 0 l +885 188 l +851 117 807 63 753 26 c +699 -11 636 -29 565 -29 c +447 -29 360 4 304 71 c +249 138 221 244 221 387 c +221 956 l +55 956 l +55 1063 l +406 1063 l +406 444 l +406 315 422 226 453 178 c +485 130 542 106 623 106 c +708 106 773 137 818 200 c +863 263 885 354 885 473 c +885 956 l +725 956 l +725 1063 l + +ce} _d +/y{1157 0 -6 -455 1151 1063 sc +442 -195 m +512 -18 l +115 956 l +-6 956 l +-6 1063 l +483 1063 l +483 956 l +313 956 l +612 225 l +911 956 l +752 956 l +752 1063 l +1151 1063 l +1151 956 l +1032 956 l +545 -240 l +512 -323 475 -379 434 -409 c +393 -440 336 -455 262 -455 c +231 -455 198 -452 165 -447 c +132 -442 99 -434 66 -424 c +66 -221 l +160 -221 l +164 -266 175 -299 194 -318 c +213 -338 243 -348 283 -348 c +320 -348 349 -338 371 -317 c +394 -297 417 -256 442 -195 c + +ce} _d +end readonly def + +/BuildGlyph { + exch begin + CharStrings exch + 2 copy known not {pop /.notdef} if + true 3 1 roll get exec + end +} _d + +/BuildChar { + 1 index /Encoding get exch get + 1 index /BuildGlyph get exec +} _d + +FontName currentdict end definefont pop +end +%%EndProlog +mpldict begin +75.6 223.2 translate +460.8 345.6 0 0 clipbox +gsave +0 0 m +460.8 0 l +460.8 345.6 l +0 345.6 l +cl +1.000 setgray +fill +grestore +gsave +108.312798 56.796 m +433.392671 56.796 l +433.392671 330.048 l +108.312798 330.048 l +cl +1.000 setgray +fill +grestore +0.800 setlinewidth +1 setlinejoin +1 setlinecap +[] 0 setdash +0.800 setgray +gsave +325.08 273.252 108.313 56.796 clipbox +108.312798 56.796 m +108.312798 330.048 l +stroke +grestore +0.150 setgray +gsave +96.3128 38.1991 translate +0 rotate +/DejaVuSerif 13.200000000000001 selectfont +0 0.515625 moveto +/one glyphshow +8.43005 0.515625 moveto +/zero glyphshow +/DejaVuSerif 9.24 selectfont +16.9782 5.24062 moveto +/one glyphshow +grestore +0.800 setgray +gsave +325.08 273.252 108.313 56.796 clipbox +173.328772 56.796 m +173.328772 330.048 l +stroke +grestore +0.150 setgray +gsave +161.329 38.1991 translate +0 rotate +/DejaVuSerif 13.200000000000001 selectfont +0 0.515625 moveto +/one glyphshow +8.43005 0.515625 moveto +/zero glyphshow +/DejaVuSerif 9.24 selectfont +16.9782 5.24062 moveto +/two glyphshow +grestore +0.800 setgray +gsave +325.08 273.252 108.313 56.796 clipbox +238.344747 56.796 m +238.344747 330.048 l +stroke +grestore +0.150 setgray +gsave +226.345 38.1991 translate +0 rotate +/DejaVuSerif 13.200000000000001 selectfont +0 0.515625 moveto +/one glyphshow +8.43005 0.515625 moveto +/zero glyphshow +/DejaVuSerif 9.24 selectfont +16.9782 5.24062 moveto +/three glyphshow +grestore +0.800 setgray +gsave +325.08 273.252 108.313 56.796 clipbox +303.360722 56.796 m +303.360722 330.048 l +stroke +grestore +0.150 setgray +gsave +291.361 38.1991 translate +0 rotate +/DejaVuSerif 13.200000000000001 selectfont +0 0.515625 moveto +/one glyphshow +8.43005 0.515625 moveto +/zero glyphshow +/DejaVuSerif 9.24 selectfont +16.9782 5.24062 moveto +/four glyphshow +grestore +0.800 setgray +gsave +325.08 273.252 108.313 56.796 clipbox +368.376696 56.796 m +368.376696 330.048 l +stroke +grestore +0.150 setgray +gsave +356.377 38.1991 translate +0 rotate +/DejaVuSerif 13.200000000000001 selectfont +0 0.635938 moveto +/one glyphshow +8.43005 0.635938 moveto +/zero glyphshow +/DejaVuSerif 9.24 selectfont +16.9782 5.36094 moveto +/five glyphshow +grestore +0.800 setgray +gsave +325.08 273.252 108.313 56.796 clipbox +433.392671 56.796 m +433.392671 330.048 l +stroke +grestore +0.150 setgray +gsave +421.393 38.1991 translate +0 rotate +/DejaVuSerif 13.200000000000001 selectfont +0 0.515625 moveto +/one glyphshow +8.43005 0.515625 moveto +/zero glyphshow +/DejaVuSerif 9.24 selectfont +16.9782 5.24062 moveto +/six glyphshow +grestore +/DejaVuSerif 14.400 selectfont +gsave + +198.384 20.8554 translate +0 rotate +0 0 m /N glyphshow +12.5781 0 m /u glyphshow +21.8362 0 m /m glyphshow +35.4672 0 m /b glyphshow +44.6692 0 m /e glyphshow +53.1763 0 m /r glyphshow +60.0479 0 m /space glyphshow +64.6173 0 m /o glyphshow +73.2718 0 m /f glyphshow +78.5922 0 m /space glyphshow +83.1616 0 m /S glyphshow +93.0093 0 m /a glyphshow +101.58 0 m /m glyphshow +115.211 0 m /p glyphshow +124.413 0 m /l glyphshow +129.01 0 m /e glyphshow +137.517 0 m /s glyphshow +grestore +gsave +33.7128 66.0988 translate +0 rotate +/DejaVuSerif 13.200000000000001 selectfont +0 0.515625 moveto +/two glyphshow +8.43005 0.515625 moveto +/period glyphshow +12.2668 0.515625 moveto +/two glyphshow +23.2783 0.515625 moveto +/multiply glyphshow +36.9618 0.515625 moveto +/one glyphshow +45.3918 0.515625 moveto +/zero glyphshow +/DejaVuSerif 9.24 selectfont +53.94 5.24062 moveto +/minus glyphshow +61.7115 5.24062 moveto +/two glyphshow +grestore +gsave +32.7128 113.977 translate +0 rotate +/DejaVuSerif 13.200000000000001 selectfont +0 0.515625 moveto +/two glyphshow +8.43005 0.515625 moveto +/period glyphshow +12.6418 0.515625 moveto +/four glyphshow +23.6533 0.515625 moveto +/multiply glyphshow +37.3368 0.515625 moveto +/one glyphshow +45.7668 0.515625 moveto +/zero glyphshow +/DejaVuSerif 9.24 selectfont +54.315 5.24062 moveto +/minus glyphshow +62.0865 5.24062 moveto +/two glyphshow +grestore +gsave +32.7128 158.021 translate +0 rotate +/DejaVuSerif 13.200000000000001 selectfont +0 0.515625 moveto +/two glyphshow +8.43005 0.515625 moveto +/period glyphshow +12.6418 0.515625 moveto +/six glyphshow +23.6533 0.515625 moveto +/multiply glyphshow +37.3368 0.515625 moveto +/one glyphshow +45.7668 0.515625 moveto +/zero glyphshow +/DejaVuSerif 9.24 selectfont +54.315 5.24062 moveto +/minus glyphshow +62.0865 5.24062 moveto +/two glyphshow +grestore +gsave +33.7128 198.799 translate +0 rotate +/DejaVuSerif 13.200000000000001 selectfont +0 0.515625 moveto +/two glyphshow +8.43005 0.515625 moveto +/period glyphshow +12.1418 0.515625 moveto +/eight glyphshow +23.1533 0.515625 moveto +/multiply glyphshow +36.8368 0.515625 moveto +/one glyphshow +45.2668 0.515625 moveto +/zero glyphshow +/DejaVuSerif 9.24 selectfont +53.815 5.24062 moveto +/minus glyphshow +61.5865 5.24062 moveto +/two glyphshow +grestore +gsave +45.7128 236.763 translate +0 rotate +/DejaVuSerif 13.200000000000001 selectfont +0 0.515625 moveto +/three glyphshow +11.0115 0.515625 moveto +/multiply glyphshow +24.6949 0.515625 moveto +/one glyphshow +33.125 0.515625 moveto +/zero glyphshow +/DejaVuSerif 9.24 selectfont +41.6732 5.24062 moveto +/minus glyphshow +49.4446 5.24062 moveto +/two glyphshow +grestore +gsave +33.7128 272.275 translate +0 rotate +/DejaVuSerif 13.200000000000001 selectfont +0 0.515625 moveto +/three glyphshow +8.43005 0.515625 moveto +/period glyphshow +12.2668 0.515625 moveto +/two glyphshow +23.2783 0.515625 moveto +/multiply glyphshow +36.9618 0.515625 moveto +/one glyphshow +45.3918 0.515625 moveto +/zero glyphshow +/DejaVuSerif 9.24 selectfont +53.94 5.24062 moveto +/minus glyphshow +61.7115 5.24062 moveto +/two glyphshow +grestore +gsave +32.7128 305.634 translate +0 rotate +/DejaVuSerif 13.200000000000001 selectfont +0 0.515625 moveto +/three glyphshow +8.43005 0.515625 moveto +/period glyphshow +12.6418 0.515625 moveto +/four glyphshow +23.6533 0.515625 moveto +/multiply glyphshow +37.3368 0.515625 moveto +/one glyphshow +45.7668 0.515625 moveto +/zero glyphshow +/DejaVuSerif 9.24 selectfont +54.315 5.24062 moveto +/minus glyphshow +62.0865 5.24062 moveto +/two glyphshow +grestore +/DejaVuSerif 14.400 selectfont +gsave + +25.6034 141.984 translate +90 rotate +0 0 m /T glyphshow +9.58801 0 m /r glyphshow +16.4597 0 m /a glyphshow +25.0299 0 m /i glyphshow +29.6274 0 m /n glyphshow +38.8855 0 m /i glyphshow +43.483 0 m /n glyphshow +52.7411 0 m /g glyphshow +61.9431 0 m /space glyphshow +66.5125 0 m /T glyphshow +76.1005 0 m /i glyphshow +80.6979 0 m /m glyphshow +94.3289 0 m /e glyphshow +grestore +1.200 setlinewidth +0.122 0.467 0.706 setrgbcolor +gsave +325.08 273.252 108.313 56.796 clipbox +283.788963 310.291969 m +stroke +grestore +gsave +325.08 273.252 108.313 56.796 clipbox +283.788963 302.547354 m +283.788963 317.627455 l +stroke +grestore +0 setlinecap +[4.8 1.8] 0 setdash +gsave +325.08 273.252 108.313 56.796 clipbox +283.788963 142.738982 m +stroke +grestore +1 setlinecap +[] 0 setdash +gsave +325.08 273.252 108.313 56.796 clipbox +283.788963 134.430515 m +283.788963 151.743921 l +stroke +grestore +0 setlinecap +[1.2 1.2] 0 setdash +gsave +325.08 273.252 108.313 56.796 clipbox +283.788963 87.537625 m +stroke +grestore +1 setlinecap +[] 0 setdash +gsave +325.08 273.252 108.313 56.796 clipbox +283.788963 69.216545 m +283.788963 114.754776 l +stroke +grestore +1.000 setlinewidth +0 setlinejoin +2 setlinecap +0.800 setgray +gsave +108.312798 56.796 m +108.312798 330.048 l +stroke +grestore +gsave +433.392671 56.796 m +433.392671 330.048 l +stroke +grestore +gsave +108.312798 56.796 m +433.392671 56.796 l +stroke +grestore +gsave +108.312798 330.048 m +433.392671 330.048 l +stroke +grestore +0.800 setlinewidth +0 setlinecap +gsave +342.834546 241.61925 m +424.152671 241.61925 l +425.912671 241.61925 426.792671 242.49925 426.792671 244.25925 c +426.792671 320.808 l +426.792671 322.568 425.912671 323.448 424.152671 323.448 c +342.834546 323.448 l +341.074546 323.448 340.194546 322.568 340.194546 320.808 c +340.194546 244.25925 l +340.194546 242.49925 341.074546 241.61925 342.834546 241.61925 c +cl +gsave +1.000 setgray +fill +grestore +stroke +grestore +0.150 setgray +/DejaVuSerif 14.400 selectfont +gsave + +359.431 307.527 translate +0 rotate +0 0 m /K glyphshow +10.3641 0 m /e glyphshow +18.8712 0 m /r glyphshow +25.7429 0 m /n glyphshow +35.001 0 m /e glyphshow +43.5081 0 m /l glyphshow +grestore +1.200 setlinewidth +1 setlinejoin +1 setlinecap +0.122 0.467 0.706 setrgbcolor +gsave +345.474546 292.766125 m +358.674546 292.766125 l +371.874546 292.766125 l +stroke +grestore +0.150 setgray +/DejaVuSerif 13.200 selectfont +gsave + +382.435 288.146 translate +0 rotate +0 0 m /r glyphshow +6.33386 0 m /b glyphshow +14.8157 0 m /f glyphshow +grestore +0 setlinecap +[4.8 1.8] 0 setdash +0.122 0.467 0.706 setrgbcolor +gsave +345.474546 273.588 m +358.674546 273.588 l +371.874546 273.588 l +stroke +grestore +0.150 setgray +/DejaVuSerif 13.200 selectfont +gsave + +382.435 268.968 translate +0 rotate +0 0 m /p glyphshow +8.48181 0 m /o glyphshow +16.459 0 m /l glyphshow +20.6967 0 m /y glyphshow +grestore +[1.2 1.2] 0 setdash +0.122 0.467 0.706 setrgbcolor +gsave +345.474546 254.222375 m +358.674546 254.222375 l +371.874546 254.222375 l +stroke +grestore +0.150 setgray +/DejaVuSerif 13.200 selectfont +gsave + +382.435 249.602 translate +0 rotate +0 0 m /l glyphshow +4.23767 0 m /i glyphshow +8.47534 0 m /n glyphshow +17.0089 0 m /e glyphshow +24.8502 0 m /a glyphshow +32.7498 0 m /r glyphshow +grestore + +end +showpage diff --git a/examples/security/kdd-nsl/retrain.py b/examples/security/kdd-nsl/retrain.py index a7dbac4f..7daf5602 100644 --- a/examples/security/kdd-nsl/retrain.py +++ b/examples/security/kdd-nsl/retrain.py @@ -237,7 +237,7 @@ def save_results_and_outputs(results, outputs, path="retrain") -> list: results = pd.read_csv("output/train.csv") # Some convenient variable names # input_size = results["data.generate.kwargs.n_samples"] * results["data.generate.kwargs.n_features"] -results["Kernel"] = results["model.init.kwargs.kernel"].copy() +results["Kernel"] = results["model.init.kernel"].copy() # results["Features"] = results["data.generate.kwargs.n_features"].copy() # results["Samples"] = results["data.sample.train_size"].copy() # results["input_size"] = input_size @@ -310,8 +310,11 @@ def save_results_and_outputs(results, outputs, path="retrain") -> list: "r", ) as f: probs = json.load(f) - probs = np.array(probs) - false_confidence = y_test[: len(probs)] - probs[:, 1] + probs = np.squeeze(np.array(probs)) + # take only the second column + if len(probs.shape) > 1: + probs = probs[:, 1] + false_confidence = y_test[: len(probs)] - probs[:] avg_prob = np.mean(false_confidence) with open( Path("output/reports/attack", folder, "score_dict.json"), @@ -341,7 +344,7 @@ def save_results_and_outputs(results, outputs, path="retrain") -> list: params = json.load(f) else: raise ValueError(f"No params file found for {folder}") - attack_params = params["attack"]["init"]["kwargs"] + attack_params = params["attack"]["init"] attack_params.update({"name": params["attack"]["init"]["name"]}) confidence_ser["Kernel"] = name confidence_ser["Average False Confidence"] = avg_prob @@ -392,7 +395,12 @@ def save_results_and_outputs(results, outputs, path="retrain") -> list: ) as f: probs = json.load(f) probs = np.array(probs) - false_confidence = y_test[: len(probs)] - probs[:, 1] + if len(probs.shape) > 1: + probs = np.squeeze(probs) + probs = probs[:, 1] + else: + probs = np.squeeze(probs) + false_confidence = y_test[: len(probs)] - probs avg_prob = np.mean(false_confidence) pd.DataFrame(probs).to_csv( Path( @@ -429,7 +437,7 @@ def save_results_and_outputs(results, outputs, path="retrain") -> list: else: logger.warning(f"No params file found for {folder}") continue - attack_params = params["attack"]["init"]["kwargs"] + attack_params = params["attack"]["init"] attack_params.update({"name": params["attack"]["init"]["name"]}) confidence_ser["Kernel"] = name confidence_ser["Average False Confidence After Retraining"] = avg_prob diff --git a/examples/security/truthseeker/.gitignore b/examples/security/truthseeker/.gitignore index b12c2563..ff637185 100644 --- a/examples/security/truthseeker/.gitignore +++ b/examples/security/truthseeker/.gitignore @@ -2,3 +2,4 @@ logs/ multirun/ output/ models/ +/retrain diff --git a/examples/security/truthseeker/attacks.sh b/examples/security/truthseeker/attacks.sh index 76ed02bc..ccbb0574 100644 --- a/examples/security/truthseeker/attacks.sh +++ b/examples/security/truthseeker/attacks.sh @@ -11,7 +11,7 @@ for model_config in $CONFIG_NAMES; do continue fi HYDRA_FULL_ERROR=1 python -m deckard.layers.optimise \ - ++model.init.kernel=kernel_name \ + ++model.init.kernel=${kernel_name} \ ++stage=attack \ ++attack.init.name=art.attacks.evasion.ProjectedGradientDescent \ ++attack.init.norm=1,2,inf \ diff --git a/examples/security/truthseeker/dvc.lock b/examples/security/truthseeker/dvc.lock index f3ba1d0a..0945b506 100644 --- a/examples/security/truthseeker/dvc.lock +++ b/examples/security/truthseeker/dvc.lock @@ -94,39 +94,39 @@ stages: outs: - path: output/reports/train/default/params.yaml hash: md5 - md5: 7234aab7d5edae504afa2090d96e4c3f - size: 2434 + md5: 6225c0aefe4059bfae7f5b0e04ae549a + size: 2189 - path: output/reports/train/default/predictions.json hash: md5 - md5: 7e3dec7b2d06af151bf81addc33fba5a - size: 44061 + md5: 3c5089245ae71f1b860304a02a224078 + size: 70072 - path: output/reports/train/default/probabilities.json hash: md5 - md5: 7e3dec7b2d06af151bf81addc33fba5a - size: 44061 + md5: 3c5089245ae71f1b860304a02a224078 + size: 70072 - path: output/reports/train/default/score_dict.json hash: md5 - md5: 1b659aed969c2f3dbd29681d381ce1d0 - size: 360 + md5: 82b8ad9524a1b60f5cbdf4937870888b + size: 717 attack: cmd: python -m deckard.layers.experiment attack deps: - path: output/reports/train/default/params.yaml hash: md5 - md5: 7234aab7d5edae504afa2090d96e4c3f - size: 2434 + md5: 6225c0aefe4059bfae7f5b0e04ae549a + size: 2189 - path: output/reports/train/default/predictions.json hash: md5 - md5: 7e3dec7b2d06af151bf81addc33fba5a - size: 44061 + md5: 3c5089245ae71f1b860304a02a224078 + size: 70072 - path: output/reports/train/default/probabilities.json hash: md5 - md5: 7e3dec7b2d06af151bf81addc33fba5a - size: 44061 + md5: 3c5089245ae71f1b860304a02a224078 + size: 70072 - path: output/reports/train/default/score_dict.json hash: md5 - md5: 1b659aed969c2f3dbd29681d381ce1d0 - size: 360 + md5: 82b8ad9524a1b60f5cbdf4937870888b + size: 717 params: params.yaml: attack: @@ -315,32 +315,32 @@ stages: outs: - path: output/attacks/attack.pkl hash: md5 - md5: 2b7587aefdfa486e84fb3c4ccb5f640c + md5: 444495650bb1e76bae90cbb99153f824 size: 1832 - path: output/reports/attack/default/adv_predictions.json hash: md5 - md5: 18482a5b7773de281dc9e127a6febf98 - size: 438 + md5: 9878cc54791c7354cb668af97e66079a + size: 700 - path: output/reports/attack/default/adv_probabilities.json hash: md5 - md5: 18482a5b7773de281dc9e127a6febf98 - size: 438 + md5: 9878cc54791c7354cb668af97e66079a + size: 700 - path: output/reports/attack/default/params.yaml hash: md5 - md5: b300c684dc58fc23684ccefbb9f83265 - size: 5832 + md5: 3aa13a2e1e66b911f66d9bd8a8823369 + size: 5310 - path: output/reports/attack/default/predictions.json hash: md5 - md5: 7e3dec7b2d06af151bf81addc33fba5a - size: 44061 + md5: 3c5089245ae71f1b860304a02a224078 + size: 70072 - path: output/reports/attack/default/probabilities.json hash: md5 - md5: 7e3dec7b2d06af151bf81addc33fba5a - size: 44061 + md5: 3c5089245ae71f1b860304a02a224078 + size: 70072 - path: output/reports/attack/default/score_dict.json hash: md5 - md5: fe6164548c98534ee88f439f91a5151a - size: 585 + md5: 04f78e33b2894f630875ad3c6412a5ff + size: 1238 models: cmd: bash other_data.sh +stage=train --config-name=model.yaml deps: @@ -448,53 +448,54 @@ stages: outs: - path: logs/models/ hash: md5 - md5: f7c1d4ea5ab2d8cc5d5214e2f7b4e149.dir - size: 357091 + md5: 8e67f43a680648ecc549525d90f55662.dir + size: 202043 nfiles: 3 - path: model.db hash: md5 - md5: 0b595e029e8e9d6e99c3da6511906eb7 - size: 778240 + md5: f283988890339a1e01b295d97ca2f929 + size: 155648 compile_models: cmd: python -m deckard.layers.compile --report_folder output/reports/train/ --results_file output/train.csv deps: - path: logs/models/ hash: md5 - md5: f7c1d4ea5ab2d8cc5d5214e2f7b4e149.dir - size: 357091 + md5: 8e67f43a680648ecc549525d90f55662.dir + size: 202043 nfiles: 3 - path: model.db hash: md5 - md5: 0b595e029e8e9d6e99c3da6511906eb7 - size: 778240 + md5: f283988890339a1e01b295d97ca2f929 + size: 155648 - path: output/reports/train/ hash: md5 - md5: 0f4c497909d988c75851e5e56a440b89.dir - size: 42005082 - nfiles: 1637 + md5: c4c5ab1d22c12d150cf53a3b630e8442.dir + size: 10780144 + nfiles: 312 outs: - path: output/train.csv hash: md5 - md5: 348d49dcbf81f9db4f7abb76fcc2f06e - size: 598748 + md5: 5290b41fa9349727642757688378dec0 + size: 152670 find_best_model@rbf: cmd: python -m deckard.layers.find_best --config_folder conf --config_subdir model - --params_file best_rbf --study_name=rbf --default_config model.yaml + --params_file best_rbf --study_name=rbf --default_config default.yaml --storage_name + sqlite:///model.db deps: - path: logs/models/ hash: md5 - md5: f7c1d4ea5ab2d8cc5d5214e2f7b4e149.dir - size: 357091 + md5: 8e67f43a680648ecc549525d90f55662.dir + size: 202043 nfiles: 3 - path: model.db hash: md5 - md5: 0b595e029e8e9d6e99c3da6511906eb7 - size: 778240 + md5: f283988890339a1e01b295d97ca2f929 + size: 155648 - path: output/train.csv hash: md5 - md5: 348d49dcbf81f9db4f7abb76fcc2f06e - size: 598748 + md5: 5290b41fa9349727642757688378dec0 + size: 152670 outs: - path: conf/model/best_rbf.yaml hash: md5 @@ -502,21 +503,22 @@ stages: size: 359 find_best_model@linear: cmd: python -m deckard.layers.find_best --config_folder conf --config_subdir model - --params_file best_linear --study_name=linear --default_config model.yaml + --params_file best_linear --study_name=linear --default_config default.yaml + --storage_name sqlite:///model.db deps: - path: logs/models/ hash: md5 - md5: f7c1d4ea5ab2d8cc5d5214e2f7b4e149.dir - size: 357091 + md5: 8e67f43a680648ecc549525d90f55662.dir + size: 202043 nfiles: 3 - path: model.db hash: md5 - md5: 0b595e029e8e9d6e99c3da6511906eb7 - size: 778240 + md5: f283988890339a1e01b295d97ca2f929 + size: 155648 - path: output/train.csv hash: md5 - md5: 348d49dcbf81f9db4f7abb76fcc2f06e - size: 598748 + md5: 5290b41fa9349727642757688378dec0 + size: 152670 outs: - path: conf/model/best_linear.yaml hash: md5 @@ -524,26 +526,27 @@ stages: size: 330 find_best_model@poly: cmd: python -m deckard.layers.find_best --config_folder conf --config_subdir model - --params_file best_poly --study_name=poly --default_config model.yaml + --params_file best_poly --study_name=poly --default_config default.yaml --storage_name + sqlite:///model.db deps: - path: logs/models/ hash: md5 - md5: f7c1d4ea5ab2d8cc5d5214e2f7b4e149.dir - size: 357091 + md5: 8e67f43a680648ecc549525d90f55662.dir + size: 202043 nfiles: 3 - path: model.db hash: md5 - md5: 0b595e029e8e9d6e99c3da6511906eb7 - size: 778240 + md5: f283988890339a1e01b295d97ca2f929 + size: 155648 - path: output/train.csv hash: md5 - md5: 348d49dcbf81f9db4f7abb76fcc2f06e - size: 598748 + md5: 5290b41fa9349727642757688378dec0 + size: 152670 outs: - path: conf/model/best_poly.yaml hash: md5 - md5: 12f892f3ba4ef8bab095b36bd7558d3e - size: 372 + md5: 307b98679bd448826190d15d2c48db7b + size: 369 attacks: cmd: bash attacks.sh ++stage=attack --config-name=attack.yaml deps: @@ -553,34 +556,34 @@ stages: size: 330 - path: conf/model/best_poly.yaml hash: md5 - md5: 12f892f3ba4ef8bab095b36bd7558d3e - size: 372 + md5: 307b98679bd448826190d15d2c48db7b + size: 369 - path: conf/model/best_rbf.yaml hash: md5 md5: 4932ceac75d6256ce2a7864aa4a5ea3c size: 359 - path: logs/models/ hash: md5 - md5: f7c1d4ea5ab2d8cc5d5214e2f7b4e149.dir - size: 357091 + md5: 8e67f43a680648ecc549525d90f55662.dir + size: 202043 nfiles: 3 - path: model.db hash: md5 - md5: 0b595e029e8e9d6e99c3da6511906eb7 - size: 778240 + md5: f283988890339a1e01b295d97ca2f929 + size: 155648 - path: output/train.csv hash: md5 - md5: 348d49dcbf81f9db4f7abb76fcc2f06e - size: 598748 + md5: 5290b41fa9349727642757688378dec0 + size: 152670 outs: - path: attack.db hash: md5 - md5: 32b63718640047c18ed7bb1aff484595 - size: 389120 + md5: 7c78ffc40aedba8c75061fdf40fdf315 + size: 208896 - path: logs/attacks/ hash: md5 - md5: 61801da5096fd94a88d69f6de5be2413.dir - size: 3180296 + md5: f9bd73b81f44394d16d6bc194c85fb14.dir + size: 420089 nfiles: 3 compile_attacks: cmd: python -m deckard.layers.compile --report_folder output/reports/attack/ --results_file @@ -588,89 +591,92 @@ stages: deps: - path: attack.db hash: md5 - md5: 32b63718640047c18ed7bb1aff484595 - size: 389120 + md5: 7c78ffc40aedba8c75061fdf40fdf315 + size: 208896 - path: logs/attacks/ hash: md5 - md5: 61801da5096fd94a88d69f6de5be2413.dir - size: 3180296 + md5: f9bd73b81f44394d16d6bc194c85fb14.dir + size: 420089 nfiles: 3 - path: output/reports/attack/ hash: md5 - md5: 84a4553074e952b76f6a4f228dddbb47.dir - size: 29299858 - nfiles: 1968 + md5: 11465f27296c17a8863dcc4bcea9eb22.dir + size: 20702813 + nfiles: 1093 outs: - path: output/attack.csv hash: md5 - md5: 188c5eda3a172c9a30808781f429aed4 - size: 703053 + md5: 490f9a3401c509d62c0b293ffa634a65 + size: 503235 find_best_attack@linear: cmd: python -m deckard.layers.find_best --config_folder conf --config_subdir attack - --params_file best_linear --study_name=best_linear --default_config attack.yaml + --params_file best_linear --study_name=best_linear --default_config default.yaml + --storage_name sqlite:///attack.db --direction minimize deps: - path: attack.db hash: md5 - md5: 32b63718640047c18ed7bb1aff484595 - size: 389120 + md5: 7c78ffc40aedba8c75061fdf40fdf315 + size: 208896 - path: logs/models/ hash: md5 - md5: f7c1d4ea5ab2d8cc5d5214e2f7b4e149.dir - size: 357091 + md5: 8e67f43a680648ecc549525d90f55662.dir + size: 202043 nfiles: 3 - path: output/train.csv hash: md5 - md5: 348d49dcbf81f9db4f7abb76fcc2f06e - size: 598748 + md5: 5290b41fa9349727642757688378dec0 + size: 152670 outs: - path: conf/attack/best_linear.yaml hash: md5 - md5: df65ae18996a57abebd38df98db37edb - size: 245 + md5: 3b770eef3005669fb6c893dc239337c1 + size: 248 find_best_attack@rbf: cmd: python -m deckard.layers.find_best --config_folder conf --config_subdir attack - --params_file best_rbf --study_name=best_rbf --default_config attack.yaml + --params_file best_rbf --study_name=best_rbf --default_config default.yaml + --storage_name sqlite:///attack.db --direction minimize deps: - path: attack.db hash: md5 - md5: 32b63718640047c18ed7bb1aff484595 - size: 389120 + md5: 7c78ffc40aedba8c75061fdf40fdf315 + size: 208896 - path: logs/models/ hash: md5 - md5: f7c1d4ea5ab2d8cc5d5214e2f7b4e149.dir - size: 357091 + md5: 8e67f43a680648ecc549525d90f55662.dir + size: 202043 nfiles: 3 - path: output/train.csv hash: md5 - md5: 348d49dcbf81f9db4f7abb76fcc2f06e - size: 598748 + md5: 5290b41fa9349727642757688378dec0 + size: 152670 outs: - path: conf/attack/best_rbf.yaml hash: md5 - md5: 9871a9d8d50ef211c7f0ae884bb39fe4 - size: 247 + md5: 78076d6ff4a3f2f5ec4e550db50b759f + size: 245 find_best_attack@poly: cmd: python -m deckard.layers.find_best --config_folder conf --config_subdir attack - --params_file best_poly --study_name=best_poly --default_config attack.yaml + --params_file best_poly --study_name=best_poly --default_config default.yaml + --storage_name sqlite:///attack.db --direction minimize deps: - path: attack.db hash: md5 - md5: 32b63718640047c18ed7bb1aff484595 - size: 389120 + md5: 7c78ffc40aedba8c75061fdf40fdf315 + size: 208896 - path: logs/models/ hash: md5 - md5: f7c1d4ea5ab2d8cc5d5214e2f7b4e149.dir - size: 357091 + md5: 8e67f43a680648ecc549525d90f55662.dir + size: 202043 nfiles: 3 - path: output/train.csv hash: md5 - md5: 348d49dcbf81f9db4f7abb76fcc2f06e - size: 598748 + md5: 5290b41fa9349727642757688378dec0 + size: 152670 outs: - path: conf/attack/best_poly.yaml hash: md5 - md5: d4c4945873617b0652018e6f27e52b89 - size: 247 + md5: 5355e960ee2cab726da8da4f761746b5 + size: 248 other_data_train@kdd_nsl: cmd: DATASET_NAME=kdd_nsl bash other_data.sh data=kdd_nsl +stage=train --config-name=model.yaml deps: @@ -706,93 +712,94 @@ stages: deps: - path: conf/attack/best_linear.yaml hash: md5 - md5: df65ae18996a57abebd38df98db37edb - size: 245 + md5: 3b770eef3005669fb6c893dc239337c1 + size: 248 - path: conf/attack/best_poly.yaml hash: md5 - md5: d4c4945873617b0652018e6f27e52b89 - size: 247 + md5: 5355e960ee2cab726da8da4f761746b5 + size: 248 - path: conf/attack/best_rbf.yaml hash: md5 - md5: 9871a9d8d50ef211c7f0ae884bb39fe4 - size: 247 + md5: 78076d6ff4a3f2f5ec4e550db50b759f + size: 245 - path: conf/model/best_linear.yaml hash: md5 md5: e4ae7059114d8724d4947e952145d4fe size: 330 - path: conf/model/best_poly.yaml hash: md5 - md5: 12f892f3ba4ef8bab095b36bd7558d3e - size: 372 + md5: 307b98679bd448826190d15d2c48db7b + size: 369 - path: conf/model/best_rbf.yaml hash: md5 md5: 4932ceac75d6256ce2a7864aa4a5ea3c size: 359 - path: output/attacks/ hash: md5 - md5: cde8aa6baa7c2646a1fc09ea3956b5e6.dir - size: 327928 - nfiles: 179 - - path: output/models/ - hash: md5 - md5: 420131f3b75400bb25e03920f359494a.dir - size: 2326552 - nfiles: 272 + md5: b66feb7848ca1405dfb53b0aa2f6ca1e.dir + size: 2036072 + nfiles: 121 outs: - path: plots/after_retrain_confidence.csv hash: md5 - md5: 6818046e86115df423cf15e24a43536f - size: 52143 + md5: 73b389e63f70f94899b8c3d6d3c97bcd + size: 394238 - path: plots/before_retrain_confidence.csv hash: md5 - md5: d479df2e41303c4466ff8f9218d0fe66 - size: 52126 + md5: 9ee0eafdd6ba1764ae7f31f5856fe164 + size: 394221 - path: retrain/ hash: md5 - md5: 2360b46dfe437da0aff771c4522c37eb.dir - size: 174505 + md5: 19310315f07f04e7842f59c9df05db78.dir + size: 176116 nfiles: 12 plots: cmd: python plots.py deps: - path: output/attack.csv hash: md5 - md5: 188c5eda3a172c9a30808781f429aed4 - size: 703053 + md5: 490f9a3401c509d62c0b293ffa634a65 + size: 503235 - path: output/train.csv hash: md5 - md5: 348d49dcbf81f9db4f7abb76fcc2f06e - size: 598748 + md5: 5290b41fa9349727642757688378dec0 + size: 152670 + - path: plots.py + hash: md5 + md5: f1f73855e466a5f38128b4123f7bd186 + size: 10155 - path: plots/after_retrain_confidence.csv hash: md5 - md5: 6818046e86115df423cf15e24a43536f - size: 52143 + md5: 73b389e63f70f94899b8c3d6d3c97bcd + size: 394238 - path: plots/before_retrain_confidence.csv hash: md5 - md5: d479df2e41303c4466ff8f9218d0fe66 - size: 52126 + md5: 9ee0eafdd6ba1764ae7f31f5856fe164 + size: 394221 outs: - - path: plots/accuracy_vs_attack_parameters.pdf + - path: plots/accuracy_vs_attack_parameters.eps hash: md5 - md5: 9a97f9f585f99c7794818b8fa38ac311 - size: 15792 - - path: plots/confidence_vs_attack_parameters.pdf + md5: aa706c0ecf286ccbebf168f078a29d75 + size: 39185 + - path: plots/confidence_vs_attack_parameters.eps hash: md5 - md5: 65d58bfd40e40bea5e9114c84e353ea2 - size: 17506 - - path: plots/retrain_accuracy.pdf + md5: a77acb08b4c7bfa4ad937b6a085b9eed + size: 41336 + - path: plots/retrain_accuracy.eps hash: md5 - md5: 577e89d46eb6f2446d0a3ed83b4f9e19 - size: 13913 - - path: plots/retrain_confidence_vs_attack_parameters.pdf + md5: 106ffdb6d70899f23fc71927e5029133 + size: 30830 + - path: plots/retrain_confidence_vs_attack_parameters.eps hash: md5 - md5: e1fa2d6ebd91b406426215c07d9df11a - size: 18683 - - path: plots/retrain_time.pdf + md5: 002bd002f2e020dadcc8cc18bacbe13f + size: 41837 + - path: plots/retrain_time.eps hash: md5 - md5: d48a53f11dd9db3b30b9382e3404963d - size: 12916 - - path: plots/train_time_vs_attack_parameters.pdf + md5: 9fcacfebf8617111de7d546b788ba83f + size: 28365 + - path: plots/train_time_vs_attack_parameters.eps hash: md5 - md5: f0a52d3088d3b90f7d6e157b87e6fc5a - size: 17167 + md5: 22fa5b3a2e2b5d8b532a59415484223b + size: 39894 + move_files: + cmd: cp -r ./plots/* ~/KDD-Paper-EAI-AISEC/truthseeker/ && rm ~/KDD-Paper-EAI-AISEC/truthseeker/.gitignore diff --git a/examples/security/truthseeker/dvc.yaml b/examples/security/truthseeker/dvc.yaml index 6b6c8962..12dde685 100644 --- a/examples/security/truthseeker/dvc.yaml +++ b/examples/security/truthseeker/dvc.yaml @@ -73,7 +73,7 @@ stages: - rbf - poly do: - cmd: python -m deckard.layers.find_best --config_folder conf --config_subdir model --params_file best_${item} --study_name=${item} --default_config model.yaml + cmd: python -m deckard.layers.find_best --config_folder conf --config_subdir model --params_file best_${item} --study_name=${item} --default_config default.yaml --storage_name sqlite:///model.db outs: - conf/model/best_${item}.yaml deps: @@ -111,7 +111,7 @@ stages: - rbf - poly do: - cmd: python -m deckard.layers.find_best --config_folder conf --config_subdir attack --params_file best_${item} --study_name=best_${item} --default_config attack.yaml + cmd: python -m deckard.layers.find_best --config_folder conf --config_subdir attack --params_file best_${item} --study_name=best_${item} --default_config default.yaml --storage_name sqlite:///attack.db --direction minimize outs: - conf/attack/best_${item}.yaml deps: @@ -121,7 +121,6 @@ stages: retrain: cmd : python retrain.py deps: - - ${files.directory}/models/ - ${files.directory}/attacks/ - conf/attack/best_linear.yaml - conf/attack/best_rbf.yaml @@ -141,14 +140,18 @@ stages: - output/attack.csv - plots/before_retrain_confidence.csv - output/train.csv + - plots.py plots : - - plots/accuracy_vs_attack_parameters.pdf - # - plots/accuracy_vs_features.pdf - # - plots/accuracy_vs_samples.pdf - - plots/confidence_vs_attack_parameters.pdf - - plots/train_time_vs_attack_parameters.pdf - # - plots/train_time_vs_features.pdf - # - plots/train_time_vs_samples.pdf - - plots/retrain_accuracy.pdf - - plots/retrain_confidence_vs_attack_parameters.pdf - - plots/retrain_time.pdf + - plots/accuracy_vs_attack_parameters.eps + # - plots/accuracy_vs_features.eps + # - plots/accuracy_vs_samples.eps + - plots/confidence_vs_attack_parameters.eps + - plots/train_time_vs_attack_parameters.eps + # - plots/train_time_vs_features.eps + # - plots/train_time_vs_samples.eps + - plots/retrain_accuracy.eps + - plots/retrain_confidence_vs_attack_parameters.eps + - plots/retrain_time.eps + move_files: + cmd: >- + cp -r ./plots/* ~/KDD-Paper-EAI-AISEC/truthseeker/ && rm ~/KDD-Paper-EAI-AISEC/truthseeker/.gitignore \ No newline at end of file diff --git a/examples/security/truthseeker/plots.py b/examples/security/truthseeker/plots.py index c5ae8ac3..fc336edd 100644 --- a/examples/security/truthseeker/plots.py +++ b/examples/security/truthseeker/plots.py @@ -2,7 +2,6 @@ import seaborn as sns from pathlib import Path import matplotlib.pyplot as plt - import logging sns.set_style("whitegrid") @@ -19,28 +18,16 @@ # else: # results = parse_results("reports/model_queue/") results = pd.read_csv("output/train.csv") -# input_size = results["data.generate.kwargs.n_samples"] * results["data.generate.kwargs.n_features"] -results["Kernel"] = results["model.init.kwargs.kernel"].copy() -# results["Features"] = results["data.generate.kwargs.n_features"].copy() -results["Samples"] = results["data.sample.train_size"].copy() -# results["input_size"] = input_size -# sample_list = results["data.generate.kwargs.n_samples"].unique() -# feature_list = results["data.generate.kwargs.n_features"].unique() -kernel_list = results["model.init.kwargs.kernel"].unique() +results["Kernel"] = results["model.init.kernel"].copy() if "Unnamed: 0" in results.columns: del results["Unnamed: 0"] for col in results.columns: if col == "data.name" and isinstance(results[col][0], list): results[col] = results[col].apply(lambda x: x[0]) -results = results[results["model.init.kwargs.kernel"] != "sigmoid"] +results = results[results["model.init.kernel"] != "sigmoid"] attack_results = pd.read_csv("output/attack.csv") -attack_results["Kernel"] = attack_results["model.init.kwargs.kernel"].copy() -# attack_results["Features"] = attack_results["data.generate.kwargs.n_features"].copy() -# attack_results["Samples"] = attack_results["data.sample.train_size"].copy() -# sample_list = attack_results["data.generate.kwargs.n_samples"].unique() -# feature_list = attack_results["data.generate.kwargs.n_features"].unique() -kernel_list = attack_results["model.init.kwargs.kernel"].unique() +attack_results["Kernel"] = attack_results["model.init.kernel"].copy() if "Unnamed: 0" in attack_results.columns: del attack_results["Unnamed: 0"] for col in attack_results.columns: @@ -48,75 +35,29 @@ attack_results[col] = attack_results[col].apply(lambda x: x[0]) -# graph1 = sns.lineplot( -# x="data.sample.train_size", -# y="accuracy", -# data=results, -# style="Kernel", -# style_order=["rbf", "poly", "linear"], -# ) -# graph1.legend(labels=["Linear", "RBF", "Poly"]) -# graph1.legend(loc="center left", bbox_to_anchor=(1, 0.5), ncol=1, title="Kernel") -# graph1.set_xlabel("Number of Samples") -# graph1.set_ylabel("Accuracy") -# graph1.set_xscale("log") -# graph1.get_figure().tight_layout() -# graph1.get_figure().savefig("plots/accuracy_vs_samples.pdf") -# plt.gcf().clear() -# graph2 = sns.lineplot( -# x="data.generate.kwargs.n_features", -# y="accuracy", -# data=results, -# style="Kernel", -# style_order=["rbf", "poly", "linear"], -# ) -# graph2.set_xlabel("Number of Features") -# graph2.set_ylabel("Accuracy") -# graph2.set_xscale("log") -# graph2.legend(loc="center left", bbox_to_anchor=(1, 0.5), ncol=1, title="Kernel") -# graph2.get_figure().tight_layout() -# graph2.get_figure().savefig("plots/accuracy_vs_features.pdf") -# plt.gcf().clear() -# results["train_time"] = ( -# results["train_time"] -# * results["data.sample.train_size"] -# * results["data.generate.kwargs.n_samples"] -# ) -# graph3 = sns.lineplot( -# x="data.generate.kwargs.n_features", -# y="train_time", -# data=results, -# style="Kernel", -# style_order=["rbf", "poly", "linear"], -# ) -# graph3.set_xlabel("Number of Features") -# graph3.set_ylabel("Training Time") -# graph3.set(yscale="log", xscale="log") -# graph3.legend(title="Kernel") -# graph3.get_figure().tight_layout() -# graph3.get_figure().savefig("plots/train_time_vs_features.pdf") -# plt.gcf().clear() -# graph4 = sns.lineplot( -# x="data.sample.train_size", -# y="train_time", -# data=results, -# style="Kernel", -# style_order=["rbf", "poly", "linear"], -# ) -# graph4.set_xlabel("Number of Samples") -# graph4.set_ylabel("Training Time") -# graph4.set(yscale="log", xscale="log") -# graph4.legend(title="Kernel") -# graph4.get_figure().tight_layout() -# graph4.get_figure().savefig("plots/train_time_vs_samples.eps") -# plt.gcf().clear() +graph4 = sns.lineplot( + x="data.sample.train_size", + y="train_time", + data=results, + style="Kernel", + style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), +) +graph4.set_xlabel("Number of Samples") +graph4.set_ylabel("Training Time") +graph4.set(yscale="log", xscale="log", xlim=(10, 1e6)) +graph4.legend(title="Kernel") +graph4.get_figure().tight_layout() +graph4.get_figure().savefig("plots/train_time_vs_samples.eps") +plt.gcf().clear() fig, ax = plt.subplots(2, 2) graph5 = sns.lineplot( - x="attack.init.kwargs.eps", + x="attack.init.eps", y="accuracy", data=attack_results, style="Kernel", @@ -124,20 +65,24 @@ legend=False, color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph5.set(xscale="log", xlabel="Perturbation Distance", ylabel="Accuracy") graph6 = sns.lineplot( - x="attack.init.kwargs.eps_step", + x="attack.init.eps_step", y="accuracy", data=attack_results, style="Kernel", ax=ax[0, 1], color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph6.set(xscale="log", xlabel="Perturbation Step", ylabel="Accuracy") graph7 = sns.lineplot( - x="attack.init.kwargs.max_iter", + x="attack.init.max_iter", y="accuracy", data=attack_results, style="Kernel", @@ -145,10 +90,12 @@ legend=False, color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph7.set(xscale="log", xlabel="Maximum Iterations", ylabel="Accuracy") graph8 = sns.lineplot( - x="attack.init.kwargs.batch_size", + x="attack.init.batch_size", y="accuracy", data=attack_results, style="Kernel", @@ -156,16 +103,18 @@ legend=False, color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph8.set(xscale="log", xlabel="Batch Size", ylabel="Accuracy") graph6.legend(loc="center left", bbox_to_anchor=(1, 0.5), ncol=1, title="Kernel") fig.tight_layout() -fig.savefig("plots/accuracy_vs_attack_parameters.pdf") +fig.savefig("plots/accuracy_vs_attack_parameters.eps") plt.gcf().clear() fig, ax = plt.subplots(2, 2) graph9 = sns.lineplot( - x="attack.init.kwargs.eps", + x="attack.init.eps", y="adv_fit_time", data=attack_results, style="Kernel", @@ -173,20 +122,24 @@ legend=False, color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph9.set(xscale="log", xlabel="Perturbation Distance", ylabel="Attack Time") graph10 = sns.lineplot( - x="attack.init.kwargs.eps_step", + x="attack.init.eps_step", y="adv_fit_time", data=attack_results, style="Kernel", ax=ax[0, 1], color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph10.set(xscale="log", xlabel="Perturbation Step", ylabel="Attack Time") graph11 = sns.lineplot( - x="attack.init.kwargs.max_iter", + x="attack.init.max_iter", y="adv_fit_time", data=attack_results, style="Kernel", @@ -194,10 +147,12 @@ legend=False, color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph11.set(xscale="log", xlabel="Maximum Iterations", ylabel="Attack Time") graph12 = sns.lineplot( - x="attack.init.kwargs.batch_size", + x="attack.init.batch_size", y="adv_fit_time", data=attack_results, style="Kernel", @@ -205,11 +160,13 @@ legend=False, color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph12.set(xscale="log", xlabel="Batch Size", ylabel="Attack Time") graph10.legend(loc="center left", bbox_to_anchor=(1, 0.5), ncol=1, title="Kernel") fig.tight_layout(h_pad=0.5) -fig.savefig("plots/train_time_vs_attack_parameters.pdf") +fig.savefig("plots/train_time_vs_attack_parameters.eps") plt.gcf().clear() retrain_df = pd.DataFrame() @@ -232,6 +189,8 @@ data=retrain_df, style="Kernel", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) retrain = sns.lineplot( x="Epochs", @@ -241,12 +200,14 @@ color="darkred", legend=False, style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) retrain.legend(loc="center left", bbox_to_anchor=(1, 0.5), ncol=1, title="Kernel") retrain.set_xlabel("Retraining Epochs") retrain.set_ylabel("Accuracy") retrain.get_figure().tight_layout() -retrain.get_figure().savefig("plots/retrain_accuracy.pdf") +retrain.get_figure().savefig("plots/retrain_accuracy.eps") plt.gcf().clear() retrain_df["ben_time"] = retrain_df["ben_time"] * retrain_df["train_size"] * 10 @@ -257,6 +218,8 @@ data=retrain_df, style="Kernel", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) retrain = sns.lineplot( x="Epochs", @@ -266,13 +229,15 @@ color="darkred", legend=False, style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) retrain.legend(loc="center left", bbox_to_anchor=(1, 0.5), ncol=1, title="Kernel") retrain.set_xlabel("Retraining Epochs") retrain.set_ylabel("Time") retrain.set_yscale("log") retrain.get_figure().tight_layout() -retrain.get_figure().savefig("plots/retrain_time.pdf") +retrain.get_figure().savefig("plots/retrain_time.eps") plt.gcf().clear() confidence_df = pd.read_csv("plots/before_retrain_confidence.csv") @@ -286,6 +251,8 @@ legend=False, color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph9.set(xscale="log", xlabel="Perturbation Distance", ylabel="False Confidence") graph10 = sns.lineplot( @@ -296,6 +263,8 @@ ax=ax[0, 1], color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph10.set(xscale="log", xlabel="Perturbation Step", ylabel="False Confidence") graph11 = sns.lineplot( @@ -307,6 +276,8 @@ legend=False, color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph11.set(xscale="log", xlabel="Maximum Iterations", ylabel="False Confidence") graph12 = sns.lineplot( @@ -318,11 +289,13 @@ legend=False, color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph12.set(xscale="log", xlabel="Batch Size", ylabel="False Confidence") graph10.legend(loc="center left", bbox_to_anchor=(1, 0.5), ncol=1, title="Kernel") fig.tight_layout(h_pad=0.5) -fig.savefig("plots/confidence_vs_attack_parameters.pdf") +fig.savefig("plots/confidence_vs_attack_parameters.eps") plt.gcf().clear() confdence_df = pd.read_csv("plots/after_retrain_confidence.csv") @@ -337,6 +310,8 @@ legend=False, color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph9.set(xscale="log", xlabel="Perturbation Distance", ylabel="False Confidence") graph10 = sns.lineplot( @@ -347,6 +322,8 @@ ax=ax[0, 1], color="darkred", style_order=["rbf", "poly", "linear"], + err_style="bars", + errorbar=("ci", 99), ) graph10.set(xscale="log", xlabel="Perturbation Step", ylabel="False Confidence") graph11 = sns.lineplot( @@ -357,7 +334,8 @@ ax=ax[1, 0], legend=False, color="darkred", - style_order=["rbf", "poly", "linear"], + style_order=["rbf", "poly", "linear"],err_style="bars", + errorbar=("ci", 99), ) graph11.set(xscale="log", xlabel="Maximum Iterations", ylabel="False Confidence") graph12 = sns.lineplot( @@ -368,10 +346,11 @@ ax=ax[1, 1], legend=False, color="darkred", - style_order=["rbf", "poly", "linear"], + style_order=["rbf", "poly", "linear"],err_style="bars", + errorbar=("ci", 99), ) graph12.set(xscale="log", xlabel="Batch Size", ylabel="False Confidence") graph10.legend(loc="center left", bbox_to_anchor=(1, 0.5), ncol=1, title="Kernel") fig.tight_layout(h_pad=0.5) -fig.savefig("plots/retrain_confidence_vs_attack_parameters.pdf") +fig.savefig("plots/retrain_confidence_vs_attack_parameters.eps") plt.gcf().clear() diff --git a/examples/security/truthseeker/plots/.gitignore b/examples/security/truthseeker/plots/.gitignore index dd345776..f09089fa 100644 --- a/examples/security/truthseeker/plots/.gitignore +++ b/examples/security/truthseeker/plots/.gitignore @@ -1,6 +1,6 @@ -/accuracy_vs_attack_parameters.pdf -/confidence_vs_attack_parameters.pdf -/train_time_vs_attack_parameters.pdf -/retrain_accuracy.pdf -/retrain_confidence_vs_attack_parameters.pdf -/retrain_time.pdf +/accuracy_vs_attack_parameters.eps +/confidence_vs_attack_parameters.eps +/train_time_vs_attack_parameters.eps +/retrain_accuracy.eps +/retrain_confidence_vs_attack_parameters.eps +/retrain_time.eps diff --git a/examples/security/truthseeker/plots/train_time_vs_samples.eps b/examples/security/truthseeker/plots/train_time_vs_samples.eps new file mode 100644 index 00000000..0d282c40 --- /dev/null +++ b/examples/security/truthseeker/plots/train_time_vs_samples.eps @@ -0,0 +1,1373 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Title: train_time_vs_samples.eps +%%Creator: Matplotlib v3.7.2, https://matplotlib.org/ +%%CreationDate: Tue Jul 16 15:31:57 2024 +%%Orientation: portrait +%%BoundingBox: 75 223 537 569 +%%HiResBoundingBox: 75.600000 223.200000 536.400000 568.800000 +%%EndComments +%%BeginProlog +/mpldict 11 dict def +mpldict begin +/_d { bind def } bind def +/m { moveto } _d +/l { lineto } _d +/r { rlineto } _d +/c { curveto } _d +/cl { closepath } _d +/ce { closepath eofill } _d +/box { + m + 1 index 0 r + 0 exch r + neg 0 r + cl + } _d +/clipbox { + box + clip + newpath + } _d +/sc { setcachedevice } _d +%!PS-Adobe-3.0 Resource-Font +%%Creator: Converted from TrueType to Type 3 by Matplotlib. +10 dict begin +/FontName /DejaVuSerif def +/PaintType 0 def +/FontMatrix [0.00048828125 0 0 0.00048828125 0 0] def +/FontBBox [-1576 -710 4312 2272] def +/FontType 3 def +/Encoding [/minus /space /period /zero /one /two /three /four /five /six /eight /K /N /S /T /multiply /a /b /e /f /g /i /l /m /n /o /p /r /s /u /y] def +/CharStrings 32 dict dup begin +/.notdef 0 def +/minus{1716 0 217 561 1499 723 sc +217 723 m +1499 723 l +1499 561 l +217 561 l +217 723 l + +ce} _d +/space{651 0 0 0 0 0 sc +ce} _d +/period{651 0 193 -29 459 238 sc +193 104 m +193 141 206 173 231 199 c +256 225 288 238 326 238 c +363 238 394 225 420 199 c +446 173 459 141 459 104 c +459 67 446 36 420 10 c +394 -16 363 -29 326 -29 c +288 -29 256 -16 231 9 c +206 35 193 67 193 104 c + +ce} _d +/zero{1303 0 135 -29 1167 1520 sc +651 70 m +753 70 829 126 880 238 c +931 350 956 519 956 745 c +956 972 931 1141 880 1253 c +829 1365 753 1421 651 1421 c +549 1421 473 1365 422 1253 c +371 1141 346 972 346 745 c +346 519 371 350 422 238 c +473 126 549 70 651 70 c + +651 -29 m +489 -29 362 39 271 175 c +180 311 135 501 135 745 c +135 990 180 1180 271 1316 c +362 1452 489 1520 651 1520 c +814 1520 940 1452 1031 1316 c +1122 1180 1167 990 1167 745 c +1167 501 1122 311 1031 175 c +940 39 814 -29 651 -29 c + +ce} _d +/one{1303 0 250 0 1012 1520 sc +291 0 m +291 106 l +551 106 l +551 1348 l +250 1153 l +250 1284 l +614 1520 l +752 1520 l +752 106 l +1012 106 l +1012 0 l +291 0 l + +ce} _d +/two{1303 0 139 0 1102 1520 sc +262 1137 m +150 1137 l +150 1403 l +221 1441 293 1470 365 1490 c +438 1510 509 1520 578 1520 c +733 1520 856 1482 946 1407 c +1036 1332 1081 1229 1081 1100 c +1081 954 979 779 775 576 c +759 561 747 549 739 541 c +362 164 l +985 164 l +985 348 l +1102 348 l +1102 0 l +139 0 l +139 109 l +592 561 l +692 661 763 753 806 836 c +849 920 870 1008 870 1100 c +870 1201 844 1279 791 1336 c +739 1393 667 1421 575 1421 c +480 1421 406 1397 354 1350 c +302 1303 271 1232 262 1137 c + +ce} _d +/three{1303 0 156 -29 1151 1520 sc +199 1430 m +277 1459 352 1482 423 1497 c +495 1512 562 1520 625 1520 c +771 1520 885 1488 967 1425 c +1049 1362 1090 1275 1090 1163 c +1090 1073 1062 998 1005 937 c +948 877 868 836 764 815 c +887 798 982 753 1049 681 c +1117 610 1151 517 1151 403 c +1151 264 1104 157 1010 82 c +917 8 782 -29 606 -29 c +528 -29 452 -21 377 -4 c +303 13 229 38 156 72 c +156 362 l +268 362 l +275 266 307 193 365 144 c +423 95 505 70 610 70 c +712 70 792 99 851 158 c +910 217 940 298 940 401 c +940 518 910 607 849 667 c +788 728 699 758 582 758 c +487 758 l +487 860 l +537 860 l +654 860 741 884 799 932 c +858 981 887 1054 887 1151 c +887 1238 863 1305 815 1351 c +767 1398 698 1421 608 1421 c +518 1421 448 1400 398 1357 c +349 1314 320 1251 311 1167 c +199 1167 l +199 1430 l + +ce} _d +/four{1303 0 63 0 1200 1520 sc +715 506 m +715 1300 l +205 506 l +715 506 l + +1155 0 m +475 0 l +475 106 l +715 106 l +715 399 l +63 399 l +63 508 l +717 1520 l +915 1520 l +915 506 l +1200 506 l +1200 399 l +915 399 l +915 106 l +1155 106 l +1155 0 l + +ce} _d +/five{1303 0 174 -29 1145 1493 sc +1030 1493 m +1030 1329 l +346 1329 l +346 901 l +381 925 421 943 467 955 c +514 967 566 973 623 973 c +784 973 912 928 1005 839 c +1098 750 1145 628 1145 473 c +1145 315 1098 192 1003 103 c +909 15 777 -29 606 -29 c +537 -29 467 -21 395 -4 c +323 13 249 38 174 72 c +174 362 l +287 362 l +293 267 323 195 377 145 c +432 95 508 70 606 70 c +711 70 792 105 849 174 c +906 243 934 343 934 473 c +934 602 906 701 849 770 c +793 839 712 874 606 874 c +546 874 493 863 447 842 c +402 821 361 788 326 743 c +240 743 l +240 1493 l +1030 1493 l + +ce} _d +/six{1303 0 137 -29 1174 1520 sc +670 70 m +764 70 836 104 887 173 c +938 242 963 342 963 471 c +963 600 938 699 887 768 c +836 837 764 872 670 872 c +575 872 502 839 452 772 c +402 705 377 609 377 483 c +377 350 402 248 453 177 c +504 106 576 70 670 70 c + +344 822 m +389 872 441 909 498 934 c +555 959 620 971 692 971 c +841 971 958 926 1044 837 c +1131 748 1174 626 1174 471 c +1174 320 1127 198 1034 107 c +941 16 817 -29 662 -29 c +493 -29 364 34 273 159 c +182 285 137 465 137 698 c +137 959 191 1162 298 1305 c +405 1448 557 1520 752 1520 c +805 1520 860 1515 918 1505 c +976 1495 1035 1480 1096 1460 c +1096 1214 l +983 1214 l +975 1281 949 1333 906 1368 c +863 1403 804 1421 731 1421 c +602 1421 505 1372 442 1274 c +379 1176 346 1025 344 822 c + +ce} _d +/eight{1303 0 137 -29 1165 1520 sc +954 408 m +954 515 927 597 874 656 c +821 715 747 745 651 745 c +555 745 480 715 427 656 c +374 597 348 515 348 408 c +348 301 374 217 427 158 c +480 99 555 70 651 70 c +747 70 821 99 874 158 c +927 217 954 301 954 408 c + +913 1133 m +913 1224 890 1294 844 1345 c +798 1396 734 1421 651 1421 c +569 1421 505 1396 458 1345 c +412 1294 389 1224 389 1133 c +389 1042 412 971 458 920 c +505 869 569 844 651 844 c +734 844 798 869 844 920 c +890 971 913 1042 913 1133 c + +805 795 m +918 780 1007 738 1070 669 c +1133 601 1165 514 1165 408 c +1165 268 1121 160 1032 84 c +943 9 816 -29 651 -29 c +486 -29 359 9 270 84 c +181 160 137 268 137 408 c +137 514 169 601 232 669 c +295 738 384 780 498 795 c +397 813 320 851 266 909 c +213 968 186 1042 186 1133 c +186 1253 227 1347 310 1416 c +393 1485 506 1520 651 1520 c +796 1520 909 1485 992 1416 c +1075 1347 1116 1253 1116 1133 c +1116 1042 1089 968 1035 909 c +982 851 905 813 805 795 c + +ce} _d +/K{1530 0 113 0 1561 1493 sc +113 0 m +113 106 l +303 106 l +303 1386 l +113 1386 l +113 1493 l +696 1493 l +696 1386 l +506 1386 l +506 821 l +1149 1386 l +987 1386 l +987 1493 l +1483 1493 l +1483 1386 l +1315 1386 l +674 823 l +1391 106 l +1561 106 l +1561 0 l +1214 0 l +506 709 l +506 106 l +696 106 l +696 0 l +113 0 l + +ce} _d +/N{1792 0 100 -29 1702 1493 sc +100 0 m +100 106 l +301 106 l +301 1386 l +100 1386 l +100 1493 l +483 1493 l +1378 315 l +1378 1386 l +1178 1386 l +1178 1493 l +1702 1493 l +1702 1386 l +1501 1386 l +1501 -29 l +1380 -29 l +424 1229 l +424 106 l +625 106 l +625 0 l +100 0 l + +ce} _d +/S{1403 0 172 -29 1253 1520 sc +190 72 m +190 412 l +305 411 l +308 298 341 214 403 159 c +466 105 561 78 688 78 c +807 78 897 101 959 148 c +1022 195 1053 264 1053 354 c +1053 426 1034 481 996 520 c +959 559 879 596 758 633 c +561 692 l +418 735 318 789 259 854 c +201 919 172 1007 172 1120 c +172 1247 217 1345 307 1415 c +397 1485 523 1520 686 1520 c +755 1520 831 1512 914 1497 c +997 1482 1085 1461 1178 1432 c +1178 1114 l +1065 1114 l +1054 1219 1018 1295 959 1342 c +900 1389 811 1413 690 1413 c +585 1413 504 1391 449 1348 c +394 1305 367 1243 367 1161 c +367 1090 388 1034 429 993 c +470 952 558 912 692 872 c +877 817 l +1012 776 1109 724 1166 661 c +1224 598 1253 514 1253 408 c +1253 263 1207 154 1114 81 c +1021 8 883 -29 700 -29 c +618 -29 534 -21 449 -4 c +364 13 278 38 190 72 c + +ce} _d +/T{1366 0 20 0 1346 1493 sc +391 0 m +391 106 l +582 106 l +582 1374 l +143 1374 l +143 1141 l +20 1141 l +20 1493 l +1346 1493 l +1346 1141 l +1223 1141 l +1223 1374 l +784 1374 l +784 106 l +975 106 l +975 0 l +391 0 l + +ce} _d +/multiply{1716 0 283 68 1434 1217 sc +1434 1104 m +971 641 l +1434 180 l +1319 68 l +858 528 l +397 68 l +283 180 l +743 641 l +283 1104 l +397 1217 l +858 756 l +1319 1217 l +1434 1104 l + +ce} _d +/a{1221 0 102 -29 1163 1092 sc +815 334 m +815 559 l +578 559 l +487 559 419 539 374 500 c +329 461 307 400 307 319 c +307 245 330 186 375 143 c +420 100 482 78 559 78 c +636 78 697 102 744 149 c +791 196 815 258 815 334 c + +999 664 m +999 106 l +1163 106 l +1163 0 l +815 0 l +815 115 l +774 66 727 29 674 6 c +621 -17 558 -29 487 -29 c +369 -29 275 2 206 65 c +137 128 102 212 102 319 c +102 429 142 514 221 575 c +300 636 412 666 557 666 c +815 666 l +815 739 l +815 820 790 882 741 926 c +692 971 624 993 535 993 c +462 993 403 976 360 943 c +317 910 290 860 279 795 c +184 795 l +184 1010 l +248 1037 310 1058 370 1071 c +431 1085 490 1092 547 1092 c +694 1092 806 1055 883 982 c +960 909 999 803 999 664 c + +ce} _d +/b{1311 0 59 -29 1208 1556 sc +236 106 m +236 1450 l +59 1450 l +59 1556 l +420 1556 l +420 897 l +456 964 502 1013 557 1044 c +613 1076 682 1092 764 1092 c +895 1092 1001 1040 1084 937 c +1167 834 1208 699 1208 532 c +1208 365 1167 230 1084 126 c +1001 23 895 -29 764 -29 c +682 -29 613 -13 557 18 c +502 50 456 99 420 166 c +420 0 l +59 0 l +59 106 l +236 106 l + +420 479 m +420 351 444 253 493 186 c +542 119 614 86 707 86 c +801 86 872 124 920 199 c +969 274 993 385 993 532 c +993 679 969 790 920 865 c +872 940 801 977 707 977 c +614 977 542 943 493 876 c +444 809 420 711 420 584 c +420 479 l + +ce} _d +/e{1212 0 102 -29 1110 1092 sc +1110 512 m +317 512 l +317 504 l +317 361 344 252 398 179 c +452 106 532 70 637 70 c +718 70 784 91 835 133 c +887 176 923 239 944 322 c +1092 322 l +1063 205 1008 118 929 59 c +850 0 747 -29 618 -29 c +463 -29 338 22 243 124 c +149 227 102 363 102 532 c +102 700 148 835 241 938 c +334 1041 455 1092 606 1092 c +767 1092 890 1042 976 943 c +1062 844 1107 701 1110 512 c + +893 618 m +889 742 863 835 814 898 c +766 961 697 993 606 993 c +521 993 455 961 406 898 c +357 835 328 741 317 618 c +893 618 l + +ce} _d +/f{758 0 74 0 881 1556 sc +881 1305 m +784 1305 l +783 1355 769 1393 741 1419 c +714 1445 674 1458 621 1458 c +552 1458 504 1439 476 1401 c +448 1364 434 1297 434 1200 c +434 1063 l +731 1063 l +731 956 l +434 956 l +434 106 l +670 106 l +670 0 l +74 0 l +74 106 l +250 106 l +250 956 l +74 956 l +74 1063 l +250 1063 l +250 1196 l +250 1315 281 1404 342 1465 c +404 1526 495 1556 614 1556 c +659 1556 703 1552 748 1544 c +793 1536 837 1524 881 1507 c +881 1305 l + +ce} _d +/g{1311 0 102 -455 1251 1092 sc +1075 956 m +1075 23 l +1075 -130 1033 -247 949 -330 c +865 -413 745 -455 590 -455 c +520 -455 453 -449 389 -436 c +325 -423 264 -404 205 -379 c +205 -156 l +301 -156 l +313 -225 341 -276 386 -308 c +431 -340 495 -356 578 -356 c +686 -356 765 -325 815 -264 c +866 -203 891 -108 891 23 c +891 166 l +855 99 809 50 753 18 c +698 -13 629 -29 547 -29 c +416 -29 309 23 226 126 c +143 230 102 365 102 532 c +102 699 143 834 226 937 c +309 1040 416 1092 547 1092 c +629 1092 698 1076 753 1044 c +809 1013 855 964 891 897 c +891 1063 l +1251 1063 l +1251 956 l +1075 956 l + +891 584 m +891 711 866 809 817 876 c +768 943 697 977 604 977 c +509 977 438 940 389 865 c +341 790 317 679 317 532 c +317 385 341 274 389 199 c +438 124 509 86 604 86 c +697 86 768 119 817 186 c +866 253 891 351 891 479 c +891 584 l + +ce} _d +/i{655 0 74 0 608 1507 sc +199 1393 m +199 1424 210 1450 232 1473 c +255 1496 282 1507 313 1507 c +344 1507 370 1496 392 1473 c +415 1450 426 1424 426 1393 c +426 1362 415 1335 393 1313 c +371 1291 344 1280 313 1280 c +282 1280 255 1291 232 1313 c +210 1335 199 1362 199 1393 c + +434 106 m +608 106 l +608 0 l +74 0 l +74 106 l +250 106 l +250 956 l +74 956 l +74 1063 l +434 1063 l +434 106 l + +ce} _d +/l{655 0 59 0 594 1556 sc +420 106 m +594 106 l +594 0 l +59 0 l +59 106 l +236 106 l +236 1450 l +59 1450 l +59 1556 l +420 1556 l +420 106 l + +ce} _d +/m{1942 0 74 0 1886 1092 sc +1061 856 m +1096 934 1141 993 1196 1032 c +1251 1072 1316 1092 1389 1092 c +1500 1092 1583 1057 1638 988 c +1693 919 1720 815 1720 676 c +1720 106 l +1886 106 l +1886 0 l +1376 0 l +1376 106 l +1536 106 l +1536 655 l +1536 764 1520 841 1488 887 c +1456 933 1403 956 1329 956 c +1247 956 1184 925 1141 863 c +1098 801 1077 711 1077 592 c +1077 106 l +1237 106 l +1237 0 l +733 0 l +733 106 l +893 106 l +893 662 l +893 768 877 843 845 888 c +813 933 760 956 686 956 c +604 956 541 925 498 863 c +455 801 434 711 434 592 c +434 106 l +594 106 l +594 0 l +84 0 l +84 106 l +250 106 l +250 958 l +74 958 l +74 1063 l +434 1063 l +434 874 l +468 945 511 999 564 1036 c +617 1073 676 1092 743 1092 c +826 1092 895 1071 950 1030 c +1005 989 1042 931 1061 856 c + +ce} _d +/n{1319 0 74 0 1262 1092 sc +84 0 m +84 106 l +250 106 l +250 956 l +74 956 l +74 1063 l +434 1063 l +434 874 l +468 946 512 1000 566 1037 c +621 1074 684 1092 756 1092 c +873 1092 960 1058 1015 991 c +1070 924 1098 819 1098 676 c +1098 106 l +1262 106 l +1262 0 l +754 0 l +754 106 l +913 106 l +913 618 l +913 748 897 837 865 885 c +833 934 777 958 696 958 c +611 958 546 927 501 864 c +456 802 434 711 434 592 c +434 106 l +594 106 l +594 0 l +84 0 l + +ce} _d +/o{1233 0 102 -29 1130 1092 sc +616 70 m +715 70 789 109 839 187 c +890 265 915 380 915 532 c +915 684 890 799 839 876 c +789 954 715 993 616 993 c +517 993 443 954 392 876 c +342 799 317 684 317 532 c +317 380 342 265 393 187 c +444 109 518 70 616 70 c + +616 -29 m +461 -29 337 22 243 124 c +149 227 102 363 102 532 c +102 701 149 837 242 939 c +336 1041 461 1092 616 1092 c +771 1092 896 1041 989 939 c +1083 837 1130 701 1130 532 c +1130 363 1083 227 989 124 c +896 22 771 -29 616 -29 c + +ce} _d +/p{1311 0 59 -426 1208 1092 sc +420 584 m +420 479 l +420 351 444 253 493 186 c +542 119 614 86 707 86 c +801 86 872 124 920 199 c +969 274 993 385 993 532 c +993 679 969 790 920 865 c +872 940 801 977 707 977 c +614 977 542 943 493 876 c +444 809 420 711 420 584 c + +236 956 m +59 956 l +59 1063 l +420 1063 l +420 897 l +456 964 502 1013 557 1044 c +613 1076 682 1092 764 1092 c +895 1092 1001 1040 1084 937 c +1167 834 1208 699 1208 532 c +1208 365 1167 230 1084 126 c +1001 23 895 -29 764 -29 c +682 -29 613 -13 557 18 c +502 50 456 99 420 166 c +420 -319 l +594 -319 l +594 -426 l +59 -426 l +59 -319 l +236 -319 l +236 956 l + +ce} _d +/r{979 0 74 0 979 1092 sc +979 1065 m +979 799 l +873 799 l +870 852 855 891 829 917 c +803 943 765 956 715 956 c +624 956 555 925 506 862 c +458 799 434 709 434 592 c +434 106 l +647 106 l +647 0 l +84 0 l +84 106 l +250 106 l +250 958 l +74 958 l +74 1063 l +434 1063 l +434 874 l +470 948 516 1003 573 1038 c +630 1074 699 1092 780 1092 c +810 1092 841 1090 874 1085 c +907 1080 942 1074 979 1065 c + +ce} _d +/s{1051 0 115 -29 946 1092 sc +115 59 m +115 307 l +221 307 l +224 228 248 168 295 129 c +342 90 412 70 504 70 c +587 70 650 85 693 116 c +736 147 758 193 758 252 c +758 299 742 336 710 365 c +679 394 612 424 510 457 c +377 502 l +286 531 219 568 178 612 c +137 656 117 712 117 780 c +117 877 153 954 224 1009 c +295 1064 394 1092 520 1092 c +576 1092 635 1085 697 1070 c +759 1055 823 1034 889 1006 c +889 774 l +783 774 l +780 843 756 896 711 935 c +666 974 604 993 526 993 c +449 993 390 979 350 952 c +311 925 291 884 291 829 c +291 784 306 748 336 721 c +366 694 426 667 516 639 c +662 594 l +763 563 835 523 879 476 c +924 429 946 369 946 295 c +946 194 907 115 830 57 c +753 -0 647 -29 512 -29 c +443 -29 376 -22 311 -7 c +246 8 180 30 115 59 c + +ce} _d +/u{1319 0 55 -29 1243 1063 sc +725 1063 m +1069 1063 l +1069 106 l +1243 106 l +1243 0 l +885 0 l +885 188 l +851 117 807 63 753 26 c +699 -11 636 -29 565 -29 c +447 -29 360 4 304 71 c +249 138 221 244 221 387 c +221 956 l +55 956 l +55 1063 l +406 1063 l +406 444 l +406 315 422 226 453 178 c +485 130 542 106 623 106 c +708 106 773 137 818 200 c +863 263 885 354 885 473 c +885 956 l +725 956 l +725 1063 l + +ce} _d +/y{1157 0 -6 -455 1151 1063 sc +442 -195 m +512 -18 l +115 956 l +-6 956 l +-6 1063 l +483 1063 l +483 956 l +313 956 l +612 225 l +911 956 l +752 956 l +752 1063 l +1151 1063 l +1151 956 l +1032 956 l +545 -240 l +512 -323 475 -379 434 -409 c +393 -440 336 -455 262 -455 c +231 -455 198 -452 165 -447 c +132 -442 99 -434 66 -424 c +66 -221 l +160 -221 l +164 -266 175 -299 194 -318 c +213 -338 243 -348 283 -348 c +320 -348 349 -338 371 -317 c +394 -297 417 -256 442 -195 c + +ce} _d +end readonly def + +/BuildGlyph { + exch begin + CharStrings exch + 2 copy known not {pop /.notdef} if + true 3 1 roll get exec + end +} _d + +/BuildChar { + 1 index /Encoding get exch get + 1 index /BuildGlyph get exec +} _d + +FontName currentdict end definefont pop +end +%%EndProlog +mpldict begin +75.6 223.2 translate +460.8 345.6 0 0 clipbox +gsave +0 0 m +460.8 0 l +460.8 345.6 l +0 345.6 l +cl +1.000 setgray +fill +grestore +gsave +108.312798 56.796 m +433.392671 56.796 l +433.392671 330.048 l +108.312798 330.048 l +cl +1.000 setgray +fill +grestore +0.800 setlinewidth +1 setlinejoin +1 setlinecap +[] 0 setdash +0.800 setgray +gsave +325.08 273.252 108.313 56.796 clipbox +108.312798 56.796 m +108.312798 330.048 l +stroke +grestore +0.150 setgray +gsave +96.3128 38.1991 translate +0 rotate +/DejaVuSerif 13.200000000000001 selectfont +0 0.515625 moveto +/one glyphshow +8.43005 0.515625 moveto +/zero glyphshow +/DejaVuSerif 9.24 selectfont +16.9782 5.24062 moveto +/one glyphshow +grestore +0.800 setgray +gsave +325.08 273.252 108.313 56.796 clipbox +173.328772 56.796 m +173.328772 330.048 l +stroke +grestore +0.150 setgray +gsave +161.329 38.1991 translate +0 rotate +/DejaVuSerif 13.200000000000001 selectfont +0 0.515625 moveto +/one glyphshow +8.43005 0.515625 moveto +/zero glyphshow +/DejaVuSerif 9.24 selectfont +16.9782 5.24062 moveto +/two glyphshow +grestore +0.800 setgray +gsave +325.08 273.252 108.313 56.796 clipbox +238.344747 56.796 m +238.344747 330.048 l +stroke +grestore +0.150 setgray +gsave +226.345 38.1991 translate +0 rotate +/DejaVuSerif 13.200000000000001 selectfont +0 0.515625 moveto +/one glyphshow +8.43005 0.515625 moveto +/zero glyphshow +/DejaVuSerif 9.24 selectfont +16.9782 5.24062 moveto +/three glyphshow +grestore +0.800 setgray +gsave +325.08 273.252 108.313 56.796 clipbox +303.360722 56.796 m +303.360722 330.048 l +stroke +grestore +0.150 setgray +gsave +291.361 38.1991 translate +0 rotate +/DejaVuSerif 13.200000000000001 selectfont +0 0.515625 moveto +/one glyphshow +8.43005 0.515625 moveto +/zero glyphshow +/DejaVuSerif 9.24 selectfont +16.9782 5.24062 moveto +/four glyphshow +grestore +0.800 setgray +gsave +325.08 273.252 108.313 56.796 clipbox +368.376696 56.796 m +368.376696 330.048 l +stroke +grestore +0.150 setgray +gsave +356.377 38.1991 translate +0 rotate +/DejaVuSerif 13.200000000000001 selectfont +0 0.635938 moveto +/one glyphshow +8.43005 0.635938 moveto +/zero glyphshow +/DejaVuSerif 9.24 selectfont +16.9782 5.36094 moveto +/five glyphshow +grestore +0.800 setgray +gsave +325.08 273.252 108.313 56.796 clipbox +433.392671 56.796 m +433.392671 330.048 l +stroke +grestore +0.150 setgray +gsave +421.393 38.1991 translate +0 rotate +/DejaVuSerif 13.200000000000001 selectfont +0 0.515625 moveto +/one glyphshow +8.43005 0.515625 moveto +/zero glyphshow +/DejaVuSerif 9.24 selectfont +16.9782 5.24062 moveto +/six glyphshow +grestore +/DejaVuSerif 14.400 selectfont +gsave + +198.384 20.8554 translate +0 rotate +0 0 m /N glyphshow +12.5781 0 m /u glyphshow +21.8362 0 m /m glyphshow +35.4672 0 m /b glyphshow +44.6692 0 m /e glyphshow +53.1763 0 m /r glyphshow +60.0479 0 m /space glyphshow +64.6173 0 m /o glyphshow +73.2718 0 m /f glyphshow +78.5922 0 m /space glyphshow +83.1616 0 m /S glyphshow +93.0093 0 m /a glyphshow +101.58 0 m /m glyphshow +115.211 0 m /p glyphshow +124.413 0 m /l glyphshow +129.01 0 m /e glyphshow +137.517 0 m /s glyphshow +grestore +gsave +33.7128 61.3028 translate +0 rotate +/DejaVuSerif 13.200000000000001 selectfont +0 0.515625 moveto +/two glyphshow +8.43005 0.515625 moveto +/period glyphshow +12.2668 0.515625 moveto +/two glyphshow +23.2783 0.515625 moveto +/multiply glyphshow +36.9618 0.515625 moveto +/one glyphshow +45.3918 0.515625 moveto +/zero glyphshow +/DejaVuSerif 9.24 selectfont +53.94 5.24062 moveto +/minus glyphshow +61.7115 5.24062 moveto +/two glyphshow +grestore +gsave +32.7128 111.767 translate +0 rotate +/DejaVuSerif 13.200000000000001 selectfont +0 0.515625 moveto +/two glyphshow +8.43005 0.515625 moveto +/period glyphshow +12.6418 0.515625 moveto +/four glyphshow +23.6533 0.515625 moveto +/multiply glyphshow +37.3368 0.515625 moveto +/one glyphshow +45.7668 0.515625 moveto +/zero glyphshow +/DejaVuSerif 9.24 selectfont +54.315 5.24062 moveto +/minus glyphshow +62.0865 5.24062 moveto +/two glyphshow +grestore +gsave +32.7128 158.19 translate +0 rotate +/DejaVuSerif 13.200000000000001 selectfont +0 0.515625 moveto +/two glyphshow +8.43005 0.515625 moveto +/period glyphshow +12.6418 0.515625 moveto +/six glyphshow +23.6533 0.515625 moveto +/multiply glyphshow +37.3368 0.515625 moveto +/one glyphshow +45.7668 0.515625 moveto +/zero glyphshow +/DejaVuSerif 9.24 selectfont +54.315 5.24062 moveto +/minus glyphshow +62.0865 5.24062 moveto +/two glyphshow +grestore +gsave +33.7128 201.171 translate +0 rotate +/DejaVuSerif 13.200000000000001 selectfont +0 0.515625 moveto +/two glyphshow +8.43005 0.515625 moveto +/period glyphshow +12.1418 0.515625 moveto +/eight glyphshow +23.1533 0.515625 moveto +/multiply glyphshow +36.8368 0.515625 moveto +/one glyphshow +45.2668 0.515625 moveto +/zero glyphshow +/DejaVuSerif 9.24 selectfont +53.815 5.24062 moveto +/minus glyphshow +61.5865 5.24062 moveto +/two glyphshow +grestore +gsave +45.7128 241.186 translate +0 rotate +/DejaVuSerif 13.200000000000001 selectfont +0 0.515625 moveto +/three glyphshow +11.0115 0.515625 moveto +/multiply glyphshow +24.6949 0.515625 moveto +/one glyphshow +33.125 0.515625 moveto +/zero glyphshow +/DejaVuSerif 9.24 selectfont +41.6732 5.24062 moveto +/minus glyphshow +49.4446 5.24062 moveto +/two glyphshow +grestore +gsave +33.7128 278.616 translate +0 rotate +/DejaVuSerif 13.200000000000001 selectfont +0 0.515625 moveto +/three glyphshow +8.43005 0.515625 moveto +/period glyphshow +12.2668 0.515625 moveto +/two glyphshow +23.2783 0.515625 moveto +/multiply glyphshow +36.9618 0.515625 moveto +/one glyphshow +45.3918 0.515625 moveto +/zero glyphshow +/DejaVuSerif 9.24 selectfont +53.94 5.24062 moveto +/minus glyphshow +61.7115 5.24062 moveto +/two glyphshow +grestore +gsave +32.7128 313.777 translate +0 rotate +/DejaVuSerif 13.200000000000001 selectfont +0 0.515625 moveto +/three glyphshow +8.43005 0.515625 moveto +/period glyphshow +12.6418 0.515625 moveto +/four glyphshow +23.6533 0.515625 moveto +/multiply glyphshow +37.3368 0.515625 moveto +/one glyphshow +45.7668 0.515625 moveto +/zero glyphshow +/DejaVuSerif 9.24 selectfont +54.315 5.24062 moveto +/minus glyphshow +62.0865 5.24062 moveto +/two glyphshow +grestore +/DejaVuSerif 14.400 selectfont +gsave + +25.6034 141.984 translate +90 rotate +0 0 m /T glyphshow +9.58801 0 m /r glyphshow +16.4597 0 m /a glyphshow +25.0299 0 m /i glyphshow +29.6274 0 m /n glyphshow +38.8855 0 m /i glyphshow +43.483 0 m /n glyphshow +52.7411 0 m /g glyphshow +61.9431 0 m /space glyphshow +66.5125 0 m /T glyphshow +76.1005 0 m /i glyphshow +80.6979 0 m /m glyphshow +94.3289 0 m /e glyphshow +grestore +1.200 setlinewidth +0.122 0.467 0.706 setrgbcolor +gsave +325.08 273.252 108.313 56.796 clipbox +283.788963 308.124776 m +stroke +grestore +gsave +325.08 273.252 108.313 56.796 clipbox +283.788963 299.902455 m +283.788963 317.627455 l +stroke +grestore +0 setlinecap +[4.8 1.8] 0 setdash +gsave +325.08 273.252 108.313 56.796 clipbox +283.788963 141.977109 m +stroke +grestore +1 setlinecap +[] 0 setdash +gsave +325.08 273.252 108.313 56.796 clipbox +283.788963 134.698126 m +283.788963 149.137791 l +stroke +grestore +0 setlinecap +[1.2 1.2] 0 setdash +gsave +325.08 273.252 108.313 56.796 clipbox +283.788963 81.229542 m +stroke +grestore +1 setlinecap +[] 0 setdash +gsave +325.08 273.252 108.313 56.796 clipbox +283.788963 69.216545 m +283.788963 92.851816 l +stroke +grestore +1.000 setlinewidth +0 setlinejoin +2 setlinecap +0.800 setgray +gsave +108.312798 56.796 m +108.312798 330.048 l +stroke +grestore +gsave +433.392671 56.796 m +433.392671 330.048 l +stroke +grestore +gsave +108.312798 56.796 m +433.392671 56.796 l +stroke +grestore +gsave +108.312798 330.048 m +433.392671 330.048 l +stroke +grestore +0.800 setlinewidth +0 setlinecap +gsave +342.834546 241.61925 m +424.152671 241.61925 l +425.912671 241.61925 426.792671 242.49925 426.792671 244.25925 c +426.792671 320.808 l +426.792671 322.568 425.912671 323.448 424.152671 323.448 c +342.834546 323.448 l +341.074546 323.448 340.194546 322.568 340.194546 320.808 c +340.194546 244.25925 l +340.194546 242.49925 341.074546 241.61925 342.834546 241.61925 c +cl +gsave +1.000 setgray +fill +grestore +stroke +grestore +0.150 setgray +/DejaVuSerif 14.400 selectfont +gsave + +359.431 307.527 translate +0 rotate +0 0 m /K glyphshow +10.3641 0 m /e glyphshow +18.8712 0 m /r glyphshow +25.7429 0 m /n glyphshow +35.001 0 m /e glyphshow +43.5081 0 m /l glyphshow +grestore +1.200 setlinewidth +1 setlinejoin +1 setlinecap +0.122 0.467 0.706 setrgbcolor +gsave +345.474546 292.766125 m +358.674546 292.766125 l +371.874546 292.766125 l +stroke +grestore +0.150 setgray +/DejaVuSerif 13.200 selectfont +gsave + +382.435 288.146 translate +0 rotate +0 0 m /r glyphshow +6.33386 0 m /b glyphshow +14.8157 0 m /f glyphshow +grestore +0 setlinecap +[4.8 1.8] 0 setdash +0.122 0.467 0.706 setrgbcolor +gsave +345.474546 273.588 m +358.674546 273.588 l +371.874546 273.588 l +stroke +grestore +0.150 setgray +/DejaVuSerif 13.200 selectfont +gsave + +382.435 268.968 translate +0 rotate +0 0 m /p glyphshow +8.48181 0 m /o glyphshow +16.459 0 m /l glyphshow +20.6967 0 m /y glyphshow +grestore +[1.2 1.2] 0 setdash +0.122 0.467 0.706 setrgbcolor +gsave +345.474546 254.222375 m +358.674546 254.222375 l +371.874546 254.222375 l +stroke +grestore +0.150 setgray +/DejaVuSerif 13.200 selectfont +gsave + +382.435 249.602 translate +0 rotate +0 0 m /l glyphshow +4.23767 0 m /i glyphshow +8.47534 0 m /n glyphshow +17.0089 0 m /e glyphshow +24.8502 0 m /a glyphshow +32.7498 0 m /r glyphshow +grestore + +end +showpage diff --git a/examples/security/truthseeker/retrain.py b/examples/security/truthseeker/retrain.py index 6b91b13c..4a0928a4 100644 --- a/examples/security/truthseeker/retrain.py +++ b/examples/security/truthseeker/retrain.py @@ -236,9 +236,9 @@ def save_results_and_outputs(results, outputs, path="retrain") -> list: # Parse Model Results results = pd.read_csv("output/train.csv") # Some convenient variable names -# input_size = results["data.generate.kwargs.n_samples"] * results["data.generate.kwargs.n_features"] -results["Kernel"] = results["model.init.kwargs.kernel"].copy() -# results["Features"] = results["data.generate.kwargs.n_features"].copy() +# input_size = results["data.generate.n_samples"] * results["data.generate.n_features"] +results["Kernel"] = results["model.init.kernel"].copy() +# results["Features"] = results["data.generate.n_features"].copy() # results["Samples"] = results["data.sample.train_size"].copy() # results["input_size"] = input_size # Clean up results @@ -249,7 +249,7 @@ def save_results_and_outputs(results, outputs, path="retrain") -> list: results[col] = results[col].apply(lambda x: x[0]) # Subset results # subset = results[results["data.sample.train_size"] == 10000] -# subset = subset[subset["data.generate.kwargs.n_features"] == 100] +# subset = subset[subset["data.generate.n_features"] == 100] with open("conf/model/best_rbf.yaml", "r") as f: best_rbf = yaml.safe_load(f) best_rbf["init"].pop("_target_", None) @@ -341,7 +341,7 @@ def save_results_and_outputs(results, outputs, path="retrain") -> list: params = json.load(f) else: raise ValueError(f"No params file found for {folder}") - attack_params = params["attack"]["init"]["kwargs"] + attack_params = params["attack"]["init"] attack_params.update({"name": params["attack"]["init"]["name"]}) confidence_ser["Kernel"] = name confidence_ser["Average False Confidence"] = avg_prob @@ -429,7 +429,7 @@ def save_results_and_outputs(results, outputs, path="retrain") -> list: else: logger.warning(f"No params file found for {folder}") continue - attack_params = params["attack"]["init"]["kwargs"] + attack_params = params["attack"]["init"] attack_params.update({"name": params["attack"]["init"]["name"]}) confidence_ser["Kernel"] = name confidence_ser["Average False Confidence After Retraining"] = avg_prob From 8332c261736d6bceb85796c9872e5352c2225c55 Mon Sep 17 00:00:00 2001 From: Charlie Meyers Date: Mon, 22 Jul 2024 14:08:08 +0200 Subject: [PATCH 18/35] removed fixed random number seed --- examples/gzip/conf/gzip_knn.yaml | 1 - examples/gzip/conf/gzip_logistic.yaml | 1 - examples/gzip/conf/gzip_svc.yaml | 1 - 3 files changed, 3 deletions(-) diff --git a/examples/gzip/conf/gzip_knn.yaml b/examples/gzip/conf/gzip_knn.yaml index da8b7ca5..10e85862 100644 --- a/examples/gzip/conf/gzip_knn.yaml +++ b/examples/gzip/conf/gzip_knn.yaml @@ -33,7 +33,6 @@ hydra: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true diff --git a/examples/gzip/conf/gzip_logistic.yaml b/examples/gzip/conf/gzip_logistic.yaml index 3636c201..7451f213 100644 --- a/examples/gzip/conf/gzip_logistic.yaml +++ b/examples/gzip/conf/gzip_logistic.yaml @@ -33,7 +33,6 @@ hydra: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true diff --git a/examples/gzip/conf/gzip_svc.yaml b/examples/gzip/conf/gzip_svc.yaml index 42212998..62b6744d 100644 --- a/examples/gzip/conf/gzip_svc.yaml +++ b/examples/gzip/conf/gzip_svc.yaml @@ -35,7 +35,6 @@ hydra: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true From eaf4c5be1476babcdc82776536d0d7dea20401ff Mon Sep 17 00:00:00 2001 From: Charlie Meyers Date: Mon, 22 Jul 2024 14:09:06 +0200 Subject: [PATCH 19/35] renamed functions for clarity --- examples/gzip/gzip_classifier.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/examples/gzip/gzip_classifier.py b/examples/gzip/gzip_classifier.py index 49d4e159..01f8813f 100644 --- a/examples/gzip/gzip_classifier.py +++ b/examples/gzip/gzip_classifier.py @@ -49,40 +49,40 @@ logger = logging.getLogger(__name__) -def _gzip_compressor(x): +def _gzip_len(x): return len(gzip.compress(str(x).encode())) -def _lzma_compressor(x): +def _lzma_len(x): import lzma return len(lzma.compress(str(x).encode())) -def _bz2_compressor(x): +def _bz2_len(x): import bz2 return len(bz2.compress(str(x).encode())) -def _zstd_compressor(x): +def _zstd_len(x): import zstd return len(zstd.compress(str(x).encode())) -def _pickle_compressor(x): +def _pickle_len(x): import pickle return len(pickle.dumps(x)) compressors = { - "gzip": _gzip_compressor, - "lzma": _lzma_compressor, - "bz2": _bz2_compressor, - "zstd": _zstd_compressor, - "pkl": _pickle_compressor, + "gzip": _gzip_len, + "lzma": _lzma_len, + "bz2": _bz2_len, + "zstd": _zstd_len, + "pkl": _pickle_len, } @@ -102,15 +102,15 @@ def ncd( float: The normalized compression distance between x1 and x2 """ - compressor = ( + compressor_len = ( compressors[method] if method in compressors.keys() else compressors["gzip"] ) x1 = str(x1) x2 = str(x2) - Cx1 = compressor(x1) if cx1 is None else cx1 - Cx2 = compressor(x2) if cx2 is None else cx2 + Cx1 = compressor_len(x1) if cx1 is None else cx1 + Cx2 = compressor_len(x2) if cx2 is None else cx2 x1x2 = " ".join([x1, x2]) - Cx1x2 = compressor(x1x2) + Cx1x2 = compressor_len(x1x2) min_ = min(Cx1, Cx2) max_ = max(Cx1, Cx2) ncd = (Cx1x2 - min_) / max_ From b7121424b2f06de7af8a8e14bb3863ba0549b2a6 Mon Sep 17 00:00:00 2001 From: Charlie Meyers Date: Mon, 22 Jul 2024 14:09:25 +0200 Subject: [PATCH 20/35] gzip conf changes --- examples/gzip/.gitignore | 1 + examples/gzip/dvc.lock | 2019 ++++++++++++++++++++------------------ examples/gzip/dvc.yaml | 258 ++--- 3 files changed, 1195 insertions(+), 1083 deletions(-) diff --git a/examples/gzip/.gitignore b/examples/gzip/.gitignore index 67e77e0e..62dda338 100644 --- a/examples/gzip/.gitignore +++ b/examples/gzip/.gitignore @@ -13,3 +13,4 @@ kdd_nsl/* sms_spam/* truthseeker/* conf/*/best_*.yaml +/params.yaml diff --git a/examples/gzip/dvc.lock b/examples/gzip/dvc.lock index a02a4b1d..7f6e8257 100644 --- a/examples/gzip/dvc.lock +++ b/examples/gzip/dvc.lock @@ -5,8 +5,8 @@ stages: deps: - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 - path: raw_data/ hash: md5 md5: 33d46673e0631bef98be9e8991ed1ed1.dir @@ -16,6 +16,8 @@ stages: params.yaml: data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -41,6 +43,8 @@ stages: _target_: deckard.base.model.Model data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -76,8 +80,8 @@ stages: size: 702 - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 81a03f1290fe4d5eaa739ba9807b5b20 - size: 488 + md5: 28a66df15b858d73e5c93b40d316ce35 + size: 485 test_each_method@knn-kdd_nsl: cmd: 'python -m deckard.layers.optimise stage=train +model.init.sampling_method=knn model.init.m=10 files.name=knn files.directory=kdd_nsl data=kdd_nsl dataset=kdd_nsl model_name=gzip_knn hydra.run.dir=kdd_nsl/logs/method/knn @@ -6676,16 +6680,18 @@ stages: deps: - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 81a03f1290fe4d5eaa739ba9807b5b20 - size: 488 + md5: 973ed0af499fa6561450dcb64d7984e3 + size: 485 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: params.yaml: data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -6711,6 +6717,8 @@ stages: _target_: deckard.base.model.Model data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -6742,13 +6750,13 @@ stages: outs: - path: ddos/logs/method/random hash: md5 - md5: 3bfcc27fd44bf9333be7081f3fceb94c.dir - size: 8340 + md5: 29a986df4db8948c2ea6811b04bbdebb.dir + size: 8943 nfiles: 4 - path: ddos/reports/train/random/score_dict.json hash: md5 - md5: 218449c8e2b7425707008d01e751eee4 - size: 281 + md5: b872883c62c790b4f95cb465b6764e46 + size: 485 test_each_method@ddos-medoid: cmd: 'python -m deckard.layers.optimise stage=train +model.init.sampling_method=medoid model.init.m=3 data.sample.train_size=100 files.name=medoid files.directory=ddos data=ddos @@ -6756,16 +6764,18 @@ stages: deps: - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 81a03f1290fe4d5eaa739ba9807b5b20 - size: 488 + md5: 973ed0af499fa6561450dcb64d7984e3 + size: 485 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: params.yaml: data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -6791,6 +6801,8 @@ stages: _target_: deckard.base.model.Model data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -6822,13 +6834,13 @@ stages: outs: - path: ddos/logs/method/medoid hash: md5 - md5: cab03f71d3883157c103a207662f0f01.dir - size: 8377 + md5: 133714b5aace8be0844f1ae067b8fc88.dir + size: 8974 nfiles: 4 - path: ddos/reports/train/medoid/score_dict.json hash: md5 - md5: eb281dc186936044bcf39edf3b5c2a97 - size: 283 + md5: 9fa569b8ca4d0ace8b86481327414340 + size: 482 test_each_method@ddos-sum: cmd: 'python -m deckard.layers.optimise stage=train +model.init.sampling_method=sum model.init.m=3 data.sample.train_size=100 files.name=sum files.directory=ddos data=ddos dataset=ddos @@ -6836,16 +6848,18 @@ stages: deps: - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 81a03f1290fe4d5eaa739ba9807b5b20 - size: 488 + md5: 973ed0af499fa6561450dcb64d7984e3 + size: 485 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: params.yaml: data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -6871,6 +6885,8 @@ stages: _target_: deckard.base.model.Model data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -6902,13 +6918,13 @@ stages: outs: - path: ddos/logs/method/sum hash: md5 - md5: 1acd35c26f1f01c1d97695be4df4be9f.dir - size: 8320 + md5: 9ad704553613244def3c71d19475de52.dir + size: 8917 nfiles: 4 - path: ddos/reports/train/sum/score_dict.json hash: md5 - md5: d8ee90602dcf3e5e3d1541fd051d8c25 - size: 283 + md5: 32e8e92591cdbdd9f01b7011fc8f6956 + size: 485 test_each_method@ddos-svc: cmd: 'python -m deckard.layers.optimise stage=train +model.init.sampling_method=svc model.init.m=3 data.sample.train_size=100 files.name=svc files.directory=ddos data=ddos dataset=ddos @@ -6916,16 +6932,18 @@ stages: deps: - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 81a03f1290fe4d5eaa739ba9807b5b20 - size: 488 + md5: 973ed0af499fa6561450dcb64d7984e3 + size: 485 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: params.yaml: data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -6951,6 +6969,8 @@ stages: _target_: deckard.base.model.Model data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -6982,13 +7002,13 @@ stages: outs: - path: ddos/logs/method/svc hash: md5 - md5: ff1e2d4db8fbd074fae27c28e6d7efab.dir - size: 8317 + md5: 7c6f3e4cfed1d02a4868eb559c2f98e2.dir + size: 8917 nfiles: 4 - path: ddos/reports/train/svc/score_dict.json hash: md5 - md5: 02086eaaafb2de9549a587e0cac8d44f - size: 280 + md5: 5f41c1a6d48486c25f5b8cbcdf9c60a1 + size: 485 test_each_method@ddos-condensed: cmd: 'python -m deckard.layers.optimise stage=train +model.init.sampling_method=condensed model.init.m=1 files.name=condensed files.directory=ddos data=ddos dataset=ddos model_name=condensed @@ -7075,16 +7095,18 @@ stages: deps: - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 81a03f1290fe4d5eaa739ba9807b5b20 - size: 488 + md5: 973ed0af499fa6561450dcb64d7984e3 + size: 485 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: params.yaml: data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -7110,6 +7132,8 @@ stages: _target_: deckard.base.model.Model data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -7141,13 +7165,13 @@ stages: outs: - path: ddos/logs/method/hardness hash: md5 - md5: 92679e897538c5e98e89f11ca456f483.dir - size: 8413 + md5: 2009d992e93043783624a9b8c06c8224.dir + size: 9017 nfiles: 4 - path: ddos/reports/train/hardness/score_dict.json hash: md5 - md5: 24a77200255cec8b4ec9f1877188fdda - size: 281 + md5: 7384df7fafdf729b83b81f6e8cf2dcc1 + size: 485 test_each_method@ddos-nearmiss: cmd: 'python -m deckard.layers.optimise stage=train +model.init.sampling_method=nearmiss model.init.m=3 data.sample.train_size=100 files.name=nearmiss files.directory=ddos data=ddos @@ -7155,16 +7179,18 @@ stages: deps: - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 81a03f1290fe4d5eaa739ba9807b5b20 - size: 488 + md5: 973ed0af499fa6561450dcb64d7984e3 + size: 485 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: params.yaml: data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -7190,6 +7216,8 @@ stages: _target_: deckard.base.model.Model data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -7221,13 +7249,13 @@ stages: outs: - path: ddos/logs/method/nearmiss hash: md5 - md5: 84fc6455a5c576fa04c36919c33ae8fd.dir - size: 8416 + md5: 607b7a4c87f67644af483f6b8cd8bf73.dir + size: 9017 nfiles: 4 - path: ddos/reports/train/nearmiss/score_dict.json hash: md5 - md5: b4602181657a738a97631883018e221a - size: 284 + md5: eac48d691d334069383832fb917363f6 + size: 485 test_each_method@truthseeker-svc: cmd: 'python -m deckard.layers.optimise stage=train +model.init.sampling_method=svc model.init.m=3 data.sample.train_size=100 files.name=svc files.directory=truthseeker data=truthseeker @@ -7795,16 +7823,18 @@ stages: deps: - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 81a03f1290fe4d5eaa739ba9807b5b20 - size: 488 + md5: 973ed0af499fa6561450dcb64d7984e3 + size: 485 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: params.yaml: data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -7830,6 +7860,8 @@ stages: _target_: deckard.base.model.Model data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -7861,13 +7893,13 @@ stages: outs: - path: ddos/logs/method/knn hash: md5 - md5: 8d73125fea91a47efc49ba2b4a68e1fe.dir - size: 8319 + md5: 21f2fbc9dd76645ccdfee5605c66d339.dir + size: 8916 nfiles: 4 - path: ddos/reports/train/knn/score_dict.json hash: md5 - md5: fb77e1c8e53bac0e077d2140f1abc6d6 - size: 282 + md5: a1d6839e09a63dfdab8ea61ccc0d485b + size: 484 condense@sms_spam-gzip_logistic: cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam data.sample.test_size=100 model_name=gzip_logistic model=gzip_logistic hydra.sweeper.study_name=condense_gzip_logistic_sms_spam @@ -8232,14 +8264,14 @@ stages: deps: - path: sms_spam/reports/gzip_knn/ hash: md5 - md5: 89e3b68400367dee648064784adb9796.dir - size: 1499301 - nfiles: 1337 + md5: 1e4bd6f4f64ae27f0563c9f749af5844.dir + size: 1428322 + nfiles: 1419 outs: - path: sms_spam/reports/gzip_knn.csv hash: md5 - md5: ee7ee47f5ee27acca9e58b9249ecb954 - size: 695526 + md5: f4e3e2a76c7a2faca4862de57bef75fd + size: 627317 compile@truthseeker-gzip_knn: cmd: python -m deckard.layers.compile --report_folder truthseeker/reports/gzip_knn --results_file truthseeker/reports/gzip_knn.csv @@ -8260,14 +8292,14 @@ stages: deps: - path: kdd_nsl/reports/gzip_knn/ hash: md5 - md5: 4dfe630ff7f6f036220f2b9aa5b3c6b1.dir - size: 4225577 - nfiles: 3608 + md5: 5ae8335951f3ab0ba19d97e7fca7300e.dir + size: 1493484 + nfiles: 1411 outs: - path: kdd_nsl/reports/gzip_knn.csv hash: md5 - md5: 17f27e4404093a5b50a74ca0af24e4db - size: 1964725 + md5: ccc8afe2274d4133de9777ef19db82b0 + size: 663510 compile@truthseeker-gzip_svc: cmd: python -m deckard.layers.compile --report_folder truthseeker/reports/gzip_svc --results_file truthseeker/reports/gzip_svc.csv @@ -8302,98 +8334,98 @@ stages: deps: - path: ddos/reports/gzip_logistic/ hash: md5 - md5: 6ce8a2aa8cc08ccde4467403dec1a124.dir - size: 6278656 - nfiles: 4845 + md5: 6349daea939a27d36ded546b54d7f930.dir + size: 2370952 + nfiles: 1527 outs: - path: ddos/reports/gzip_logistic.csv hash: md5 - md5: 7ff452295887d9c84250c7375b7ea58a - size: 2606734 + md5: 923840c89f3b2ffa5a6b206a283d11ca + size: 722803 compile@ddos-gzip_knn: cmd: python -m deckard.layers.compile --report_folder ddos/reports/gzip_knn --results_file ddos/reports/gzip_knn.csv deps: - path: ddos/reports/gzip_knn/ hash: md5 - md5: ce89d46c7a34959f9d39a3d1e6ad8911.dir - size: 5724814 - nfiles: 5690 + md5: 2803b737e4d632f8e6b3c51b20122d9e.dir + size: 2110621 + nfiles: 2298 outs: - path: ddos/reports/gzip_knn.csv hash: md5 - md5: fe28ae14c5cc37ee8eb5e705c3610da8 - size: 2899113 + md5: 020ec9b121d87045903d2a06c407d879 + size: 1025696 compile@kdd_nsl-gzip_logistic: cmd: python -m deckard.layers.compile --report_folder kdd_nsl/reports/gzip_logistic --results_file kdd_nsl/reports/gzip_logistic.csv deps: - path: kdd_nsl/reports/gzip_logistic/ hash: md5 - md5: bca1b51ebae4e3ef166f9424a0f8c1ff.dir - size: 4923952 - nfiles: 3945 + md5: 69899acdacb66fea2b065186b94c823f.dir + size: 2252531 + nfiles: 1450 outs: - path: kdd_nsl/reports/gzip_logistic.csv hash: md5 - md5: 07859f070e6b9246456e860d63ab4438 - size: 2149350 + md5: 717dc514ddfc831b201602c4b79b6481 + size: 697000 compile@kdd_nsl-gzip_svc: cmd: python -m deckard.layers.compile --report_folder kdd_nsl/reports/gzip_svc --results_file kdd_nsl/reports/gzip_svc.csv deps: - path: kdd_nsl/reports/gzip_svc/ hash: md5 - md5: 907ec439b02a0d2b3ba36d54e250ff89.dir - size: 4798455 - nfiles: 4393 + md5: 5a17f3a37936bce8f3c48742b2b8bcad.dir + size: 2217855 + nfiles: 1533 outs: - path: kdd_nsl/reports/gzip_svc.csv hash: md5 - md5: b25b5925936e935b62cdc6bd5b96d8d3 - size: 2257942 + md5: 49ac432e2fe12371b79c7d1f13814bb1 + size: 703910 compile@sms_spam-gzip_logistic: cmd: python -m deckard.layers.compile --report_folder sms_spam/reports/gzip_logistic --results_file sms_spam/reports/gzip_logistic.csv deps: - path: sms_spam/reports/gzip_logistic/ hash: md5 - md5: c70a60ca7e7e433d1cbd21bfddd26320.dir - size: 2212768 - nfiles: 1438 + md5: 9f7db05e10754c5ecc4da28cafb2465a.dir + size: 2207285 + nfiles: 1469 outs: - path: sms_spam/reports/gzip_logistic.csv hash: md5 - md5: 34643e6fbb37caef6b6f9054cb1b5203 - size: 754980 + md5: 03af493e4f340bc94e6669749f1b93fe + size: 666006 compile@ddos-gzip_svc: cmd: python -m deckard.layers.compile --report_folder ddos/reports/gzip_svc --results_file ddos/reports/gzip_svc.csv deps: - path: ddos/reports/gzip_svc/ hash: md5 - md5: 3b3fdb3e3d2321e8ee5dc36311626231.dir - size: 6101649 - nfiles: 5283 + md5: bedf50f5955fcf2a231efde77931b3e8.dir + size: 2208783 + nfiles: 1536 outs: - path: ddos/reports/gzip_svc.csv hash: md5 - md5: 7bd491b47bf7d5f373cb825e9e3d0c4c - size: 2689051 + md5: e6a761ee6e103e7b57a7251cc2b7042e + size: 689158 compile@sms_spam-gzip_svc: cmd: python -m deckard.layers.compile --report_folder sms_spam/reports/gzip_svc --results_file sms_spam/reports/gzip_svc.csv deps: - path: sms_spam/reports/gzip_svc/ hash: md5 - md5: 52af2b025a2aafa3e4a78db0bf221f59.dir - size: 2173475 + md5: 659b5b78a0134f1ad10d5fa867067b74.dir + size: 2170821 nfiles: 1536 outs: - path: sms_spam/reports/gzip_svc.csv hash: md5 - md5: 12c2eec80495a5fb326dbed7c4cfe382 - size: 758618 + md5: 2e5f3b40875a790db808872c65fc73ef + size: 664866 clean@truthseeker-gzip_svc: cmd: python -m deckard.layers.clean_data -i truthseeker/reports/gzip_svc.csv -o truthseeker/plots/clean/gzip_svc.csv -c conf/clean.yaml @@ -8436,8 +8468,8 @@ stages: deps: - path: kdd_nsl/reports/gzip_svc.csv hash: md5 - md5: b25b5925936e935b62cdc6bd5b96d8d3 - size: 2257942 + md5: 49ac432e2fe12371b79c7d1f13814bb1 + size: 703910 params: conf/clean.yaml: replace: @@ -8464,16 +8496,16 @@ stages: outs: - path: kdd_nsl/plots/clean/gzip_svc.csv hash: md5 - md5: a359fb46b83265dec352e0af17f19cb2 - size: 1771361 + md5: e0b8b895887d4d243b43274f722773f3 + size: 581625 clean@kdd_nsl-gzip_knn: cmd: python -m deckard.layers.clean_data -i kdd_nsl/reports/gzip_knn.csv -o kdd_nsl/plots/clean/gzip_knn.csv -c conf/clean.yaml deps: - path: kdd_nsl/reports/gzip_knn.csv hash: md5 - md5: 17f27e4404093a5b50a74ca0af24e4db - size: 1964725 + md5: ccc8afe2274d4133de9777ef19db82b0 + size: 663510 params: conf/clean.yaml: replace: @@ -8500,16 +8532,16 @@ stages: outs: - path: kdd_nsl/plots/clean/gzip_knn.csv hash: md5 - md5: 686b0f04494630491244a6ead99949b7 - size: 996268 + md5: 4d844c3227459afa876952f176216c33 + size: 436451 clean@ddos-gzip_knn: cmd: python -m deckard.layers.clean_data -i ddos/reports/gzip_knn.csv -o ddos/plots/clean/gzip_knn.csv -c conf/clean.yaml deps: - path: ddos/reports/gzip_knn.csv hash: md5 - md5: fe28ae14c5cc37ee8eb5e705c3610da8 - size: 2899113 + md5: 020ec9b121d87045903d2a06c407d879 + size: 1025696 params: conf/clean.yaml: replace: @@ -8536,16 +8568,16 @@ stages: outs: - path: ddos/plots/clean/gzip_knn.csv hash: md5 - md5: ad6773d0af82535d3c525f8bf405bbfe - size: 1919757 + md5: b0b99d435ad867232db8a243ef62c051 + size: 822043 clean@ddos-gzip_svc: cmd: python -m deckard.layers.clean_data -i ddos/reports/gzip_svc.csv -o ddos/plots/clean/gzip_svc.csv -c conf/clean.yaml deps: - path: ddos/reports/gzip_svc.csv hash: md5 - md5: 7bd491b47bf7d5f373cb825e9e3d0c4c - size: 2689051 + md5: e6a761ee6e103e7b57a7251cc2b7042e + size: 689158 params: conf/clean.yaml: replace: @@ -8572,16 +8604,16 @@ stages: outs: - path: ddos/plots/clean/gzip_svc.csv hash: md5 - md5: 45515bad8f1a4167a7a64d0a3d62464e - size: 1842449 + md5: 226094721223ed497570e1addadd5efd + size: 559957 clean@kdd_nsl-gzip_logistic: cmd: python -m deckard.layers.clean_data -i kdd_nsl/reports/gzip_logistic.csv -o kdd_nsl/plots/clean/gzip_logistic.csv -c conf/clean.yaml deps: - path: kdd_nsl/reports/gzip_logistic.csv hash: md5 - md5: 07859f070e6b9246456e860d63ab4438 - size: 2149350 + md5: 717dc514ddfc831b201602c4b79b6481 + size: 697000 params: conf/clean.yaml: replace: @@ -8608,8 +8640,8 @@ stages: outs: - path: kdd_nsl/plots/clean/gzip_logistic.csv hash: md5 - md5: 82d8bddbe4db8eb6835d00931af7fc12 - size: 1456814 + md5: cbc25910d449719a898903a86f443f35 + size: 504190 clean@truthseeker-gzip_knn: cmd: python -m deckard.layers.clean_data -i truthseeker/reports/gzip_knn.csv -o truthseeker/plots/clean/gzip_knn.csv -c conf/clean.yaml @@ -8652,8 +8684,8 @@ stages: deps: - path: ddos/reports/gzip_logistic.csv hash: md5 - md5: 7ff452295887d9c84250c7375b7ea58a - size: 2606734 + md5: 923840c89f3b2ffa5a6b206a283d11ca + size: 722803 params: conf/clean.yaml: replace: @@ -8680,16 +8712,16 @@ stages: outs: - path: ddos/plots/clean/gzip_logistic.csv hash: md5 - md5: a7d5cf7362711724ae19bba3becf66d2 - size: 1523208 + md5: ea6974bfb86de59d5cc77b5082edcff3 + size: 511437 clean@sms_spam-gzip_knn: cmd: python -m deckard.layers.clean_data -i sms_spam/reports/gzip_knn.csv -o sms_spam/plots/clean/gzip_knn.csv -c conf/clean.yaml deps: - path: sms_spam/reports/gzip_knn.csv hash: md5 - md5: ee7ee47f5ee27acca9e58b9249ecb954 - size: 695526 + md5: f4e3e2a76c7a2faca4862de57bef75fd + size: 627317 params: conf/clean.yaml: replace: @@ -8716,16 +8748,16 @@ stages: outs: - path: sms_spam/plots/clean/gzip_knn.csv hash: md5 - md5: 020bbec4f2594935bd33efdcdf90eba7 - size: 358497 + md5: eeaaa80725256e5beba9c95958533e9c + size: 417929 clean@sms_spam-gzip_logistic: cmd: python -m deckard.layers.clean_data -i sms_spam/reports/gzip_logistic.csv -o sms_spam/plots/clean/gzip_logistic.csv -c conf/clean.yaml deps: - path: sms_spam/reports/gzip_logistic.csv hash: md5 - md5: 34643e6fbb37caef6b6f9054cb1b5203 - size: 754980 + md5: 03af493e4f340bc94e6669749f1b93fe + size: 666006 params: conf/clean.yaml: replace: @@ -8752,16 +8784,16 @@ stages: outs: - path: sms_spam/plots/clean/gzip_logistic.csv hash: md5 - md5: d9a1be37cfb498a7d87c116db6f553e2 - size: 497702 + md5: 280c2094c04ea09f1559217cbc3ec47f + size: 492146 clean@sms_spam-gzip_svc: cmd: python -m deckard.layers.clean_data -i sms_spam/reports/gzip_svc.csv -o sms_spam/plots/clean/gzip_svc.csv -c conf/clean.yaml deps: - path: sms_spam/reports/gzip_svc.csv hash: md5 - md5: 12c2eec80495a5fb326dbed7c4cfe382 - size: 758618 + md5: 2e5f3b40875a790db808872c65fc73ef + size: 664866 params: conf/clean.yaml: replace: @@ -8788,8 +8820,8 @@ stages: outs: - path: sms_spam/plots/clean/gzip_svc.csv hash: md5 - md5: 4455964d2014f4705b4ea3191cef40b2 - size: 588874 + md5: d7cf076fa27322a406727c66c38d0f12 + size: 542023 clean@truthseeker-gzip_logistic: cmd: python -m deckard.layers.clean_data -i truthseeker/reports/gzip_logistic.csv -o truthseeker/plots/clean/gzip_logistic.csv -c conf/clean.yaml @@ -9982,21 +10014,21 @@ stages: deps: - path: sms_spam/plots/clean/gzip_knn.csv hash: md5 - md5: 020bbec4f2594935bd33efdcdf90eba7 - size: 358497 + md5: eeaaa80725256e5beba9c95958533e9c + size: 417929 - path: sms_spam/plots/clean/gzip_logistic.csv hash: md5 - md5: d9a1be37cfb498a7d87c116db6f553e2 - size: 497702 + md5: 280c2094c04ea09f1559217cbc3ec47f + size: 492146 - path: sms_spam/plots/clean/gzip_svc.csv hash: md5 - md5: 4455964d2014f4705b4ea3191cef40b2 - size: 588874 + md5: d7cf076fa27322a406727c66c38d0f12 + size: 542023 outs: - path: sms_spam/plots/merged.csv hash: md5 - md5: 3e3e63943b3d62dddc79e554cb691405 - size: 1492939 + md5: 534291e353ef58c5ce65ac66c3381654 + size: 1504936 merge@ddos: cmd: python merge.py --big_dir ddos/plots/ --data_file clean/gzip_knn.csv --little_dir_data_file clean/gzip_logistic.csv clean/gzip_svc.csv --output_folder ddos/plots --output_file @@ -10004,21 +10036,21 @@ stages: deps: - path: ddos/plots/clean/gzip_knn.csv hash: md5 - md5: ad6773d0af82535d3c525f8bf405bbfe - size: 1919757 + md5: b0b99d435ad867232db8a243ef62c051 + size: 822043 - path: ddos/plots/clean/gzip_logistic.csv hash: md5 - md5: a7d5cf7362711724ae19bba3becf66d2 - size: 1523208 + md5: ea6974bfb86de59d5cc77b5082edcff3 + size: 511437 - path: ddos/plots/clean/gzip_svc.csv hash: md5 - md5: 45515bad8f1a4167a7a64d0a3d62464e - size: 1842449 + md5: 226094721223ed497570e1addadd5efd + size: 559957 outs: - path: ddos/plots/merged.csv hash: md5 - md5: 2fd123789b3c749a653aa9c142d23858 - size: 5465498 + md5: 4d967dc422fd9f25b15fc4181e92778f + size: 1961397 merge@kdd_nsl: cmd: python merge.py --big_dir kdd_nsl/plots/ --data_file clean/gzip_knn.csv --little_dir_data_file clean/gzip_logistic.csv clean/gzip_svc.csv --output_folder kdd_nsl/plots --output_file @@ -10026,29 +10058,29 @@ stages: deps: - path: kdd_nsl/plots/clean/gzip_knn.csv hash: md5 - md5: 686b0f04494630491244a6ead99949b7 - size: 996268 + md5: 4d844c3227459afa876952f176216c33 + size: 436451 - path: kdd_nsl/plots/clean/gzip_logistic.csv hash: md5 - md5: 82d8bddbe4db8eb6835d00931af7fc12 - size: 1456814 + md5: cbc25910d449719a898903a86f443f35 + size: 504190 - path: kdd_nsl/plots/clean/gzip_svc.csv hash: md5 - md5: a359fb46b83265dec352e0af17f19cb2 - size: 1771361 + md5: e0b8b895887d4d243b43274f722773f3 + size: 581625 outs: - path: kdd_nsl/plots/merged.csv hash: md5 - md5: 7817c0dd6f149eb072f4a5c787fa9655 - size: 4361588 + md5: 888018922b696e148cd9d36b32075af9 + size: 1573889 plot@kdd_nsl: cmd: python -m deckard.layers.plots --path kdd_nsl/plots/ --file kdd_nsl/plots/merged.csv -c conf/plots.yaml deps: - path: kdd_nsl/plots/merged.csv hash: md5 - md5: 7817c0dd6f149eb072f4a5c787fa9655 - size: 4361588 + md5: 888018922b696e148cd9d36b32075af9 + size: 1573889 params: conf/plots.yaml: cat_plot: @@ -10282,36 +10314,36 @@ stages: outs: - path: kdd_nsl/plots/metric_vs_accuracy.pdf hash: md5 - md5: 2abfc1441c3515f07d2e28459e730a4f - size: 24689 + md5: e9d548a5e926f285654804b2f484c054 + size: 24697 - path: kdd_nsl/plots/metric_vs_predict_time.pdf hash: md5 - md5: d91c94bf17617b79b2a417710efb9dfc - size: 23239 + md5: 14c6752580fb9f764dffd6e00dbb7d8b + size: 24260 - path: kdd_nsl/plots/metric_vs_train_time.pdf hash: md5 - md5: d2c40b3e36886868c650917d02015be4 - size: 24227 + md5: aee452c8d796ee31e04ed2309335140c + size: 23263 - path: kdd_nsl/plots/models_vs_accuracy.pdf hash: md5 - md5: c6807ba0356e42159d683a2b3ab610a9 - size: 23546 + md5: 3c4f26f1d95b12df8b1f4d776c1eb450 + size: 22926 - path: kdd_nsl/plots/models_vs_predict_time.pdf hash: md5 - md5: 2f6d79e1a5164884b87ef3f40bdafeeb - size: 19370 + md5: 31f939c60279bef48afcd11ad37ded6a + size: 19840 - path: kdd_nsl/plots/models_vs_train_time.pdf hash: md5 - md5: 30ed28915c3ff6de16fffbf8c6bdda45 - size: 18949 + md5: 56411639dc8ad805a8f75e0b75bbaa21 + size: 19419 - path: kdd_nsl/plots/symmetric_vs_metric.pdf hash: md5 - md5: 1d0bb7d03823bb54b5b12b50dbc6615c - size: 22232 + md5: 959d2acbe4a5d87921fa1ccf66b21e9f + size: 22222 - path: kdd_nsl/plots/symmetric_vs_metric_train_time.pdf hash: md5 - md5: 802d5119895198601ba2ee24b3cc9528 - size: 21618 + md5: d1e9df1cf1a8290451cac1e04b7b1593 + size: 21620 plot@truthseeker: cmd: python -m deckard.layers.plots --path truthseeker/plots/ --file truthseeker/plots/merged.csv -c conf/plots.yaml @@ -10860,8 +10892,8 @@ stages: deps: - path: ddos/plots/merged.csv hash: md5 - md5: 2fd123789b3c749a653aa9c142d23858 - size: 5465498 + md5: 4d967dc422fd9f25b15fc4181e92778f + size: 1961397 params: conf/plots.yaml: cat_plot: @@ -11095,36 +11127,36 @@ stages: outs: - path: ddos/plots/metric_vs_accuracy.pdf hash: md5 - md5: 3b2f9c2885d331a0cadd339177318f3f - size: 24827 + md5: bca86297bef41787bb36fd06cfb8bf2f + size: 24684 - path: ddos/plots/metric_vs_predict_time.pdf hash: md5 - md5: 56c78e45d5932c61b339753810a6fed1 - size: 24347 + md5: 92e1f01777252a1e818620ca418d951f + size: 23249 - path: ddos/plots/metric_vs_train_time.pdf hash: md5 - md5: 7ba195f1f39c450c7ebd9165eee97f32 - size: 22962 + md5: 4195de5934e58cbab9afedccd721c4af + size: 23136 - path: ddos/plots/models_vs_accuracy.pdf hash: md5 - md5: 4e5e04199aa08c3098632cf8fad2c744 - size: 23780 + md5: dabac7041fa81f072f70a2b317915777 + size: 22241 - path: ddos/plots/models_vs_predict_time.pdf hash: md5 - md5: 41c0c84e0b3b737273692f10c366b275 - size: 19529 + md5: 34e6604bea2a20e85c9464a722c12fd7 + size: 19837 - path: ddos/plots/models_vs_train_time.pdf hash: md5 - md5: 38dd71a6ac8cd50294d5b81bffd8425b - size: 19106 + md5: 1ca29825abe607fd9b7c16ccde130580 + size: 19411 - path: ddos/plots/symmetric_vs_metric.pdf hash: md5 - md5: 72331f97089e5465a2df8a071f6dcf10 - size: 22223 + md5: efcb40057243e307c1302cad19a711ef + size: 22228 - path: ddos/plots/symmetric_vs_metric_train_time.pdf hash: md5 - md5: 3014b61ef7c5fe2e5276149ecd20625b - size: 22143 + md5: 14bc1aa22843b3899c8653b943ef45bd + size: 22116 condense@truthseeker-gzip_logistic: cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker data.sample.test_size=100 model_name=gzip_logistic model=best_gzip_logistic_truthseeker @@ -11436,8 +11468,8 @@ stages: outs: - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 test_each_metric@gzip-gzip_knn-kdd_nsl-20: cmd: 'python -m deckard.layers.optimise stage=test_each_metric files.name=gzip_knn/gzip/20 files.directory=kdd_nsl data=kdd_nsl data.sample.train_size=20 dataset=kdd_nsl @@ -11446,16 +11478,18 @@ stages: deps: - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 81a03f1290fe4d5eaa739ba9807b5b20 - size: 488 + md5: 973ed0af499fa6561450dcb64d7984e3 + size: 485 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: params.yaml: data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -11481,6 +11515,8 @@ stages: _target_: deckard.base.model.Model data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -11512,8 +11548,8 @@ stages: outs: - path: kdd_nsl/logs/test_each_metric/gzip_knn/gzip/20 hash: md5 - md5: 6091388fcd68296e6ccd16f0955cba96.dir - size: 7683 + md5: 13a41c1dee24226c155c7cd919d7be72.dir + size: 7896 nfiles: 4 - path: kdd_nsl/reports/test_each_metric/gzip_knn/gzip/20/score_dict.json hash: md5 @@ -11527,16 +11563,18 @@ stages: deps: - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 81a03f1290fe4d5eaa739ba9807b5b20 - size: 488 + md5: 973ed0af499fa6561450dcb64d7984e3 + size: 485 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: params.yaml: data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -11562,6 +11600,8 @@ stages: _target_: deckard.base.model.Model data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -11593,8 +11633,8 @@ stages: outs: - path: kdd_nsl/logs/test_each_metric/gzip_knn/zstd/20 hash: md5 - md5: 704acd4e060b20b19dd8c6528ee42b02.dir - size: 7683 + md5: 2a9de1bf8f13a51810454b0f8e542813.dir + size: 7896 nfiles: 4 - path: kdd_nsl/reports/test_each_metric/gzip_knn/zstd/20/score_dict.json hash: md5 @@ -11608,16 +11648,18 @@ stages: deps: - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 81a03f1290fe4d5eaa739ba9807b5b20 - size: 488 + md5: 973ed0af499fa6561450dcb64d7984e3 + size: 485 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: params.yaml: data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -11643,6 +11685,8 @@ stages: _target_: deckard.base.model.Model data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -11674,8 +11718,8 @@ stages: outs: - path: kdd_nsl/logs/test_each_metric/gzip_knn/pkl/20 hash: md5 - md5: 539ec713f43133226c23d088f60a66bf.dir - size: 7668 + md5: 547875056b9e7537bb6b547f9a12d663.dir + size: 7881 nfiles: 4 - path: kdd_nsl/reports/test_each_metric/gzip_knn/pkl/20/score_dict.json hash: md5 @@ -11689,16 +11733,18 @@ stages: deps: - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 81a03f1290fe4d5eaa739ba9807b5b20 - size: 488 + md5: 973ed0af499fa6561450dcb64d7984e3 + size: 485 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: params.yaml: data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -11724,6 +11770,8 @@ stages: _target_: deckard.base.model.Model data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -11755,8 +11803,8 @@ stages: outs: - path: kdd_nsl/logs/test_each_metric/gzip_knn/bz2/20 hash: md5 - md5: dc85f72896e274b978488f36ec121474.dir - size: 7668 + md5: 78e71b1316246e3eb1d2204f065fe315.dir + size: 7881 nfiles: 4 - path: kdd_nsl/reports/test_each_metric/gzip_knn/bz2/20/score_dict.json hash: md5 @@ -11770,16 +11818,18 @@ stages: deps: - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 81a03f1290fe4d5eaa739ba9807b5b20 - size: 488 + md5: 973ed0af499fa6561450dcb64d7984e3 + size: 485 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: params.yaml: data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -11805,6 +11855,8 @@ stages: _target_: deckard.base.model.Model data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -11836,8 +11888,8 @@ stages: outs: - path: kdd_nsl/logs/test_each_metric/gzip_knn/lzma/20 hash: md5 - md5: 3e929ed47c2f62267a513fcc9ac7faec.dir - size: 7683 + md5: 181e750b0b50a3ee26430453289ebff3.dir + size: 7896 nfiles: 4 - path: kdd_nsl/reports/test_each_metric/gzip_knn/lzma/20/score_dict.json hash: md5 @@ -11851,16 +11903,18 @@ stages: deps: - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 81a03f1290fe4d5eaa739ba9807b5b20 - size: 488 + md5: 973ed0af499fa6561450dcb64d7984e3 + size: 485 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: params.yaml: data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -11886,6 +11940,8 @@ stages: _target_: deckard.base.model.Model data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -11917,8 +11973,8 @@ stages: outs: - path: kdd_nsl/logs/test_each_metric/gzip_knn/levenshtein/20 hash: md5 - md5: 6e719f5801c71fe88793e4a42fe47b68.dir - size: 7767 + md5: 7f5aa2c40f749f116843ad495f377c69.dir + size: 7980 nfiles: 4 - path: kdd_nsl/reports/test_each_metric/gzip_knn/levenshtein/20/score_dict.json hash: md5 @@ -11932,16 +11988,18 @@ stages: deps: - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 81a03f1290fe4d5eaa739ba9807b5b20 - size: 488 + md5: 973ed0af499fa6561450dcb64d7984e3 + size: 485 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: params.yaml: data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -11967,6 +12025,8 @@ stages: _target_: deckard.base.model.Model data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -11998,8 +12058,8 @@ stages: outs: - path: kdd_nsl/logs/test_each_metric/gzip_knn/ratio/20 hash: md5 - md5: c7917445640a277d2a898413a74442e3.dir - size: 7677 + md5: 4a94942040f87457812b1bf29e530c34.dir + size: 7890 nfiles: 4 - path: kdd_nsl/reports/test_each_metric/gzip_knn/ratio/20/score_dict.json hash: md5 @@ -12013,16 +12073,18 @@ stages: deps: - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 81a03f1290fe4d5eaa739ba9807b5b20 - size: 488 + md5: 973ed0af499fa6561450dcb64d7984e3 + size: 485 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: params.yaml: data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -12048,6 +12110,8 @@ stages: _target_: deckard.base.model.Model data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -12079,8 +12143,8 @@ stages: outs: - path: kdd_nsl/logs/test_each_metric/gzip_knn/hamming/20 hash: md5 - md5: 384b5ae13749ca9006486a64dd50faf0.dir - size: 7707 + md5: 0f632830e12eebb966911772f2835aa9.dir + size: 7920 nfiles: 4 - path: kdd_nsl/reports/test_each_metric/gzip_knn/hamming/20/score_dict.json hash: md5 @@ -12253,16 +12317,18 @@ stages: deps: - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 81a03f1290fe4d5eaa739ba9807b5b20 - size: 488 + md5: 973ed0af499fa6561450dcb64d7984e3 + size: 485 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: params.yaml: data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -12288,6 +12354,8 @@ stages: _target_: deckard.base.model.Model data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -12319,13 +12387,13 @@ stages: outs: - path: ddos/logs/train/gzip_knn hash: md5 - md5: 86973d6369f6a61b442f6387478ccde6.dir - size: 8041 + md5: 3138594b2987a54b6196684bdd2fd2dc.dir + size: 8270 nfiles: 4 - path: ddos/reports/train/gzip_knn/score_dict.json hash: md5 - md5: 1269132e68fc8dff521df51cb2fe321c - size: 284 + md5: 50948425401e9655694b7bae24a4b24a + size: 282 test_each_dataset@ddos-gzip_svc: cmd: 'python -m deckard.layers.optimise stage=train files.name=gzip_svc data.sample.train_size=100 files.directory=ddos data=ddos dataset=ddos model_name=gzip_svc model=gzip_svc @@ -12333,16 +12401,18 @@ stages: deps: - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 81a03f1290fe4d5eaa739ba9807b5b20 - size: 488 + md5: 973ed0af499fa6561450dcb64d7984e3 + size: 485 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: params.yaml: data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -12368,6 +12438,8 @@ stages: _target_: deckard.base.model.Model data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -12399,13 +12471,13 @@ stages: outs: - path: ddos/logs/train/gzip_svc hash: md5 - md5: 67d472318cba51a8f9e7989991cbf09e.dir - size: 8038 + md5: 35f0d02aabaf1976bb3cedb8d0e37f95.dir + size: 8267 nfiles: 4 - path: ddos/reports/train/gzip_svc/score_dict.json hash: md5 - md5: 5728b15f67d338a4bf8160b60715dce8 - size: 283 + md5: bc8aa822c76d4b1d76800780f3ea72e8 + size: 281 test_each_dataset@ddos-gzip_logistic: cmd: 'python -m deckard.layers.optimise stage=train files.name=gzip_logistic data.sample.train_size=100 files.directory=ddos data=ddos dataset=ddos model_name=gzip_logistic @@ -12413,16 +12485,18 @@ stages: deps: - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 81a03f1290fe4d5eaa739ba9807b5b20 - size: 488 + md5: 973ed0af499fa6561450dcb64d7984e3 + size: 485 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: params.yaml: data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -12448,6 +12522,8 @@ stages: _target_: deckard.base.model.Model data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -12479,13 +12555,13 @@ stages: outs: - path: ddos/logs/train/gzip_logistic hash: md5 - md5: 24fe0f4f52e6989c5a1c65795ea0d936.dir - size: 8173 + md5: 059857ff224bd0df8bbb6aa1052565fb.dir + size: 8405 nfiles: 4 - path: ddos/reports/train/gzip_logistic/score_dict.json hash: md5 - md5: 259b4ae57c0c1e8d08b72f7f888fbe45 - size: 281 + md5: f5d793be8917596666827272421f0b32 + size: 282 test_each_dataset@truthseeker-gzip_knn: cmd: 'python -m deckard.layers.optimise stage=train files.name=gzip_knn data.sample.train_size=100 files.directory=truthseeker data=truthseeker dataset=truthseeker model_name=gzip_knn @@ -12493,16 +12569,18 @@ stages: deps: - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 81a03f1290fe4d5eaa739ba9807b5b20 - size: 488 + md5: 973ed0af499fa6561450dcb64d7984e3 + size: 485 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: params.yaml: data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -12528,6 +12606,8 @@ stages: _target_: deckard.base.model.Model data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -12559,13 +12639,13 @@ stages: outs: - path: truthseeker/logs/train/gzip_knn hash: md5 - md5: ba3eb31317c073b3b07a9c9d1948e656.dir - size: 8158 + md5: b2c2b8a6bf5e3de7e2b9fcb27ebc9b0e.dir + size: 8766 nfiles: 4 - path: truthseeker/reports/train/gzip_knn/score_dict.json hash: md5 - md5: 2088612d107192d0497e9fd2c569818f - size: 283 + md5: dddc45ec409b3bd343d743789a2735fb + size: 485 test_each_dataset@truthseeker-gzip_svc: cmd: 'python -m deckard.layers.optimise stage=train files.name=gzip_svc data.sample.train_size=100 files.directory=truthseeker data=truthseeker dataset=truthseeker model_name=gzip_svc @@ -12573,16 +12653,18 @@ stages: deps: - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 81a03f1290fe4d5eaa739ba9807b5b20 - size: 488 + md5: 973ed0af499fa6561450dcb64d7984e3 + size: 485 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: params.yaml: data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -12608,6 +12690,8 @@ stages: _target_: deckard.base.model.Model data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -12639,13 +12723,13 @@ stages: outs: - path: truthseeker/logs/train/gzip_svc hash: md5 - md5: 4512bda479ab6cd5ae74e7f575928b9d.dir - size: 8154 + md5: a92b8a9af468c50e22a1b70393f80383.dir + size: 8764 nfiles: 4 - path: truthseeker/reports/train/gzip_svc/score_dict.json hash: md5 - md5: 25d8ec2a07497188e4311c5d62f9ddb6 - size: 281 + md5: ef9a491e592eb39757863246ef9ea9ee + size: 485 test_each_dataset@truthseeker-gzip_logistic: cmd: 'python -m deckard.layers.optimise stage=train files.name=gzip_logistic data.sample.train_size=100 files.directory=truthseeker data=truthseeker dataset=truthseeker @@ -12654,16 +12738,18 @@ stages: deps: - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 81a03f1290fe4d5eaa739ba9807b5b20 - size: 488 + md5: 973ed0af499fa6561450dcb64d7984e3 + size: 485 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: params.yaml: data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -12689,6 +12775,8 @@ stages: _target_: deckard.base.model.Model data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -12720,13 +12808,13 @@ stages: outs: - path: truthseeker/logs/train/gzip_logistic hash: md5 - md5: e1da0260d3c55bfbf4a44bb1b96206ba.dir - size: 8315 + md5: 4307ed8d2c6c1842abf7c919effa5585.dir + size: 8927 nfiles: 4 - path: truthseeker/reports/train/gzip_logistic/score_dict.json hash: md5 - md5: 9ba0565e8f7dcb14a1e45b8e585d9ccb - size: 283 + md5: c924984f0bc0a668bd204cd1368cca29 + size: 484 test_each_dataset@sms_spam-gzip_knn: cmd: 'python -m deckard.layers.optimise stage=train files.name=gzip_knn data.sample.train_size=100 files.directory=sms_spam data=sms_spam dataset=sms_spam model_name=gzip_knn @@ -12734,16 +12822,18 @@ stages: deps: - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 81a03f1290fe4d5eaa739ba9807b5b20 - size: 488 + md5: 973ed0af499fa6561450dcb64d7984e3 + size: 485 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: params.yaml: data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -12769,6 +12859,8 @@ stages: _target_: deckard.base.model.Model data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -12800,13 +12892,13 @@ stages: outs: - path: sms_spam/logs/train/gzip_knn hash: md5 - md5: 2066e09b41a2f6ce0c835018278b0dc6.dir - size: 8093 + md5: 288289a63ad41945ee6f553954e63fb6.dir + size: 8696 nfiles: 4 - path: sms_spam/reports/train/gzip_knn/score_dict.json hash: md5 - md5: 45ab656d14366622402a687082c5feeb - size: 284 + md5: cbf84c1419d004160232153789ef857e + size: 484 test_each_dataset@sms_spam-gzip_svc: cmd: 'python -m deckard.layers.optimise stage=train files.name=gzip_svc data.sample.train_size=100 files.directory=sms_spam data=sms_spam dataset=sms_spam model_name=gzip_svc @@ -12814,16 +12906,18 @@ stages: deps: - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 81a03f1290fe4d5eaa739ba9807b5b20 - size: 488 + md5: 973ed0af499fa6561450dcb64d7984e3 + size: 485 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: params.yaml: data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -12849,6 +12943,8 @@ stages: _target_: deckard.base.model.Model data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -12880,13 +12976,13 @@ stages: outs: - path: sms_spam/logs/train/gzip_svc hash: md5 - md5: 4f8d2f14bf8ed23f7443b91640fbb2c0.dir - size: 8090 + md5: 2092d70cd452792ca000dc00fa339c98.dir + size: 8693 nfiles: 4 - path: sms_spam/reports/train/gzip_svc/score_dict.json hash: md5 - md5: 6cf7317e720631b93bcd699b22a9c4ec - size: 283 + md5: 570fd51555af3014e9cc9d7ede806f99 + size: 483 test_each_dataset@sms_spam-gzip_logistic: cmd: 'python -m deckard.layers.optimise stage=train files.name=gzip_logistic data.sample.train_size=100 files.directory=sms_spam data=sms_spam dataset=sms_spam @@ -12895,16 +12991,18 @@ stages: deps: - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 81a03f1290fe4d5eaa739ba9807b5b20 - size: 488 + md5: 973ed0af499fa6561450dcb64d7984e3 + size: 485 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: params.yaml: data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -12930,6 +13028,8 @@ stages: _target_: deckard.base.model.Model data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -12961,13 +13061,13 @@ stages: outs: - path: sms_spam/logs/train/gzip_logistic hash: md5 - md5: e9577cb3ce87a9e0a55da46017111e2a.dir - size: 8225 + md5: 529420680b63e63951e2ea7fee603c6e.dir + size: 8839 nfiles: 4 - path: sms_spam/reports/train/gzip_logistic/score_dict.json hash: md5 - md5: 8c39b120c89ed2d1c51c88d99f202ab1 - size: 281 + md5: 609514cfb9a8a234c82823b402deebd5 + size: 487 test_each_dataset@kdd_nsl-gzip_knn: cmd: 'python -m deckard.layers.optimise stage=train files.name=gzip_knn data.sample.train_size=100 files.directory=kdd_nsl data=kdd_nsl dataset=kdd_nsl model_name=gzip_knn model=gzip_knn @@ -12975,16 +13075,18 @@ stages: deps: - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 81a03f1290fe4d5eaa739ba9807b5b20 - size: 488 + md5: 973ed0af499fa6561450dcb64d7984e3 + size: 485 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: params.yaml: data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -13010,6 +13112,8 @@ stages: _target_: deckard.base.model.Model data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -13041,13 +13145,13 @@ stages: outs: - path: kdd_nsl/logs/train/gzip_knn hash: md5 - md5: d9f95ac89efb51e0b9474a50ed1ee34d.dir - size: 8108 + md5: b4064f5ba018d961ca5d94272f10cc98.dir + size: 8332 nfiles: 4 - path: kdd_nsl/reports/train/gzip_knn/score_dict.json hash: md5 - md5: 1bb23417615a5663b20ae3c9bb05ab41 - size: 284 + md5: 15433bc09490e34086340cdc126809af + size: 279 test_each_dataset@kdd_nsl-gzip_svc: cmd: 'python -m deckard.layers.optimise stage=train files.name=gzip_svc data.sample.train_size=100 files.directory=kdd_nsl data=kdd_nsl dataset=kdd_nsl model_name=gzip_svc model=gzip_svc @@ -13055,16 +13159,18 @@ stages: deps: - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 81a03f1290fe4d5eaa739ba9807b5b20 - size: 488 + md5: 973ed0af499fa6561450dcb64d7984e3 + size: 485 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: params.yaml: data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -13090,6 +13196,8 @@ stages: _target_: deckard.base.model.Model data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -13121,13 +13229,13 @@ stages: outs: - path: kdd_nsl/logs/train/gzip_svc hash: md5 - md5: 8efe1af9a07fe35bf35a620aecc9984e.dir - size: 8105 + md5: 82aa62187135fa6761797bffad730bf5.dir + size: 8333 nfiles: 4 - path: kdd_nsl/reports/train/gzip_svc/score_dict.json hash: md5 - md5: 6e851ecef3c53745a566ce54bc9b64e3 - size: 283 + md5: 8d6cc7f69c732f2bf2618889dbc4d27f + size: 282 test_each_dataset@kdd_nsl-gzip_logistic: cmd: 'python -m deckard.layers.optimise stage=train files.name=gzip_logistic data.sample.train_size=100 files.directory=kdd_nsl data=kdd_nsl dataset=kdd_nsl @@ -13136,16 +13244,18 @@ stages: deps: - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 81a03f1290fe4d5eaa739ba9807b5b20 - size: 488 + md5: 973ed0af499fa6561450dcb64d7984e3 + size: 485 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: params.yaml: data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -13171,6 +13281,8 @@ stages: _target_: deckard.base.model.Model data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -13202,12 +13314,12 @@ stages: outs: - path: kdd_nsl/logs/train/gzip_logistic hash: md5 - md5: b3b1f1813a6bc3b51b1aca53b3730892.dir - size: 8240 + md5: 9c885fb9fc086d581e13a69b83e3168f.dir + size: 8469 nfiles: 4 - path: kdd_nsl/reports/train/gzip_logistic/score_dict.json hash: md5 - md5: ce2f45436d570475e2cd62b1d5417305 + md5: 8d9b7d68ae18c0b4d887522cdfb620f8 size: 281 test_each_metric@jaro-gzip_knn-kdd_nsl-20: cmd: 'python -m deckard.layers.optimise stage=test_each_metric files.name=gzip_knn/jaro/20 @@ -13217,16 +13329,18 @@ stages: deps: - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 81a03f1290fe4d5eaa739ba9807b5b20 - size: 488 + md5: 973ed0af499fa6561450dcb64d7984e3 + size: 485 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: params.yaml: data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -13252,6 +13366,8 @@ stages: _target_: deckard.base.model.Model data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -13283,8 +13399,8 @@ stages: outs: - path: kdd_nsl/logs/test_each_metric/gzip_knn/jaro/20 hash: md5 - md5: 8b71ff09c44e615322095f861b3f1dca.dir - size: 7662 + md5: 52a4717452195943e7f45e9cece5b870.dir + size: 7875 nfiles: 4 - path: kdd_nsl/reports/test_each_metric/gzip_knn/jaro/20/score_dict.json hash: md5 @@ -13298,16 +13414,18 @@ stages: deps: - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 81a03f1290fe4d5eaa739ba9807b5b20 - size: 488 + md5: 973ed0af499fa6561450dcb64d7984e3 + size: 485 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: params.yaml: data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -13333,6 +13451,8 @@ stages: _target_: deckard.base.model.Model data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -13364,8 +13484,8 @@ stages: outs: - path: kdd_nsl/logs/test_each_metric/gzip_knn/jaro_winkler/20 hash: md5 - md5: 2b831c44b315a8b61c3f762b365c8e5f.dir - size: 7782 + md5: 389e1b4dbd6f40645320412591511d48.dir + size: 7995 nfiles: 4 - path: kdd_nsl/reports/test_each_metric/gzip_knn/jaro_winkler/20/score_dict.json hash: md5 @@ -13379,16 +13499,18 @@ stages: deps: - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 81a03f1290fe4d5eaa739ba9807b5b20 - size: 488 + md5: 973ed0af499fa6561450dcb64d7984e3 + size: 485 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: params.yaml: data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -13414,6 +13536,8 @@ stages: _target_: deckard.base.model.Model data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -13445,8 +13569,8 @@ stages: outs: - path: kdd_nsl/logs/test_each_metric/gzip_knn/seqratio/20 hash: md5 - md5: ed632f40ed8ff016cb649ab00c408114.dir - size: 7722 + md5: aa1bc45346aa8fa60bf6e8b91df7559a.dir + size: 7935 nfiles: 4 - path: kdd_nsl/reports/test_each_metric/gzip_knn/seqratio/20/score_dict.json hash: md5 @@ -13460,16 +13584,18 @@ stages: deps: - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 81a03f1290fe4d5eaa739ba9807b5b20 - size: 488 + md5: 973ed0af499fa6561450dcb64d7984e3 + size: 485 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: params.yaml: data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -13495,6 +13621,8 @@ stages: _target_: deckard.base.model.Model data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -13526,8 +13654,8 @@ stages: outs: - path: kdd_nsl/logs/test_each_model/gzip_knn/gzip/20 hash: md5 - md5: c8075fa1867cb00a11f6df654086bd97.dir - size: 7675 + md5: 3f15457aa4eb5b13f14c84d6299d6033.dir + size: 7888 nfiles: 4 - path: kdd_nsl/reports/test_each_model/gzip_knn/gzip/20/score_dict.json hash: md5 @@ -13541,16 +13669,18 @@ stages: deps: - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 81a03f1290fe4d5eaa739ba9807b5b20 - size: 488 + md5: 973ed0af499fa6561450dcb64d7984e3 + size: 485 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: params.yaml: data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -13576,6 +13706,8 @@ stages: _target_: deckard.base.model.Model data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -13607,8 +13739,8 @@ stages: outs: - path: kdd_nsl/logs/test_each_model/gzip_svc/gzip/20 hash: md5 - md5: 6ec9663f42d781dc482f1da6df886312.dir - size: 7678 + md5: 7ab534004d714b2a74f8c5fdb5d75b61.dir + size: 7891 nfiles: 4 - path: kdd_nsl/reports/test_each_model/gzip_svc/gzip/20/score_dict.json hash: md5 @@ -13622,16 +13754,18 @@ stages: deps: - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 81a03f1290fe4d5eaa739ba9807b5b20 - size: 488 + md5: 973ed0af499fa6561450dcb64d7984e3 + size: 485 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: params.yaml: data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -13657,6 +13791,8 @@ stages: _target_: deckard.base.model.Model data: _target_: deckard.base.data.Data + drop: + - id name: raw_data/kdd_nsl_undersampled_5000.csv sample: _target_: deckard.base.data.SklearnDataSampler @@ -13688,8 +13824,8 @@ stages: outs: - path: kdd_nsl/logs/test_each_model/gzip_logistic/gzip/20 hash: md5 - md5: 8ba9f7659cef2c4d610fece176de1548.dir - size: 7767 + md5: 5f861380183240881b3d9a73a67b18e4.dir + size: 7980 nfiles: 4 - path: kdd_nsl/reports/test_each_model/gzip_logistic/gzip/20/score_dict.json hash: md5 @@ -13709,8 +13845,8 @@ stages: size: 2062 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_knn.yaml: hydra: @@ -13769,14 +13905,14 @@ stages: outs: - path: kdd_nsl/logs/gzip_knn/20 hash: md5 - md5: 5c03e3e52e7a24e15acbd0b2aadfee35.dir - size: 1389089 - nfiles: 514 + md5: 115a41970ebe91128cffd1e8c3b61498.dir + size: 1296774 + nfiles: 513 - path: kdd_nsl/reports/gzip_knn/20/train/ hash: md5 - md5: a7e0e97547bfac97d8518259bffdd4c1.dir - size: 1847622 - nfiles: 1661 + md5: 4d755edd5b38adc5b7f526e3d15ebac2.dir + size: 359689 + nfiles: 368 grid_search@20-kdd_nsl-gzip_logistic: cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_logistic @@ -13792,8 +13928,8 @@ stages: size: 2205 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_logistic.yaml: hydra: @@ -13855,14 +13991,14 @@ stages: outs: - path: kdd_nsl/logs/gzip_logistic/20 hash: md5 - md5: e7528ce71bad9f745a9f5e4fcf3a2df1.dir - size: 1571121 - nfiles: 514 + md5: a8595a459255817fd6640cc39046e4a1.dir + size: 1388361 + nfiles: 513 - path: kdd_nsl/reports/gzip_logistic/20/train/ hash: md5 - md5: 127796b95b1817c4b0d9f1846537b0a6.dir - size: 2083086 - nfiles: 1772 + md5: 3873a418a31a09159aa0613c29f84612.dir + size: 559098 + nfiles: 362 grid_search@20-kdd_nsl-gzip_svc: cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null @@ -13877,8 +14013,8 @@ stages: size: 2131 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_svc.yaml: hydra: @@ -13940,14 +14076,14 @@ stages: outs: - path: kdd_nsl/logs/gzip_svc/20 hash: md5 - md5: a1cb35a26808d09dac04aef8fc7106cb.dir - size: 1524012 - nfiles: 514 + md5: 1e27f2d1dbecceabc4ae0cd019e492f6.dir + size: 1348650 + nfiles: 513 - path: kdd_nsl/reports/gzip_svc/20/train/ hash: md5 - md5: f475c4428240afaaf863bb021eb82890.dir - size: 2095726 - nfiles: 2092 + md5: 0fd2193b53abea1c13ef342dfa19f2ee.dir + size: 554769 + nfiles: 384 grid_search@20-truthseeker-gzip_knn: cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null @@ -13962,8 +14098,8 @@ stages: size: 2062 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_knn.yaml: hydra: @@ -14022,14 +14158,14 @@ stages: outs: - path: truthseeker/logs/gzip_knn/20 hash: md5 - md5: 21da241789a9856418302895c146cd4d.dir - size: 1370161 - nfiles: 514 + md5: 4282261388bfb47a0ecc305c43c0774e.dir + size: 1308247 + nfiles: 513 - path: truthseeker/reports/gzip_knn/20/train/ hash: md5 - md5: 394a7d8c033166c958996d646f822460.dir - size: 376291 - nfiles: 340 + md5: b10cdd98077d4675ca84697074387129.dir + size: 347576 + nfiles: 372 grid_search@20-truthseeker-gzip_logistic: cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_logistic @@ -14041,12 +14177,12 @@ stages: deps: - path: conf/gzip_logistic.yaml hash: md5 - md5: 847d4d804fff0b6f2533f90820eebd04 - size: 2205 + md5: a051c1bd6690aa80000909c49eb45023 + size: 2189 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_logistic.yaml: hydra: @@ -14066,7 +14202,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -14108,14 +14243,14 @@ stages: outs: - path: truthseeker/logs/gzip_logistic/20 hash: md5 - md5: 4eceda9fdfa787e48b4a2d397ad89332.dir - size: 1497002 - nfiles: 514 + md5: 03df4633c0f5202339af4e4ce28986a7.dir + size: 1385960 + nfiles: 513 - path: truthseeker/reports/gzip_logistic/20/train/ hash: md5 - md5: 9b32f4ef152eda3a3f2e68d424d163d2.dir - size: 555897 - nfiles: 366 + md5: b8710b865151f76a1dba111e029ba3e0.dir + size: 555685 + nfiles: 357 grid_search@20-truthseeker-gzip_svc: cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null @@ -14126,12 +14261,12 @@ stages: deps: - path: conf/gzip_svc.yaml hash: md5 - md5: 957922cb6993eb99866232d944a4a106 - size: 2131 + md5: 71702231d42f4d68a2237772b3475697 + size: 2115 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_svc.yaml: hydra: @@ -14153,7 +14288,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -14193,13 +14327,13 @@ stages: outs: - path: truthseeker/logs/gzip_svc/20 hash: md5 - md5: 20a01b45b6f1901a8e929bf1cbccd349.dir - size: 1473672 - nfiles: 514 + md5: ff0d33bc9c6ce8637eedd463d73c22a3.dir + size: 1352377 + nfiles: 513 - path: truthseeker/reports/gzip_svc/20/train/ hash: md5 - md5: a2b059debfa307134c83ec03713e8a50.dir - size: 546743 + md5: 7d179884b582e5b8ef27863c6b6f1445.dir + size: 545932 nfiles: 384 grid_search@20-sms_spam-gzip_knn: cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam @@ -14215,8 +14349,8 @@ stages: size: 2062 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_knn.yaml: hydra: @@ -14275,14 +14409,14 @@ stages: outs: - path: sms_spam/logs/gzip_knn/20 hash: md5 - md5: bcee56ea959096e8255fb482a8854457.dir - size: 1381168 - nfiles: 514 + md5: e9e56d342ed2c474422627ff4d66a2bf.dir + size: 1299391 + nfiles: 513 - path: sms_spam/reports/gzip_knn/20/train/ hash: md5 - md5: 12133daeda911e75210cff4d8a3fa5a7.dir - size: 379524 - nfiles: 326 + md5: 125eb4c7a912bd644ad2d883b63756e2.dir + size: 342531 + nfiles: 374 grid_search@20-sms_spam-gzip_logistic: cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_logistic @@ -14298,8 +14432,8 @@ stages: size: 2205 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_logistic.yaml: hydra: @@ -14361,14 +14495,14 @@ stages: outs: - path: sms_spam/logs/gzip_logistic/20 hash: md5 - md5: 5c7265a3ac4bf4774fbb1c440b9910c4.dir - size: 1520121 - nfiles: 514 + md5: cbf374500fd5125d98f2f65d4a5b2fa2.dir + size: 1374488 + nfiles: 513 - path: sms_spam/reports/gzip_logistic/20/train/ hash: md5 - md5: 9ae8109f623b19dcbabe51e4401a1f8c.dir - size: 552539 - nfiles: 357 + md5: 5a05a497802592f4fc283e42d47d3c3b.dir + size: 551814 + nfiles: 356 grid_search@20-sms_spam-gzip_svc: cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null @@ -14383,8 +14517,8 @@ stages: size: 2131 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_svc.yaml: hydra: @@ -14446,13 +14580,13 @@ stages: outs: - path: sms_spam/logs/gzip_svc/20 hash: md5 - md5: fe6324545be6dc97b88326e10a65e815.dir - size: 1451676 - nfiles: 514 + md5: 79953e6df3b0bc872d6e777c46915b12.dir + size: 1340891 + nfiles: 513 - path: sms_spam/reports/gzip_svc/20/train/ hash: md5 - md5: 814632194dc03d626a24f0418fd703e1.dir - size: 542357 + md5: 61a986d1b7c3deaa918526f61eb9897b.dir + size: 542016 nfiles: 384 grid_search@20-ddos-gzip_knn: cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=20 @@ -14464,12 +14598,12 @@ stages: deps: - path: conf/gzip_knn.yaml hash: md5 - md5: a58015cd6f327e171842b045a2524bfd - size: 2062 + md5: ceff1a602afc3323e49200a1da539310 + size: 2046 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_knn.yaml: hydra: @@ -14489,7 +14623,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -14528,14 +14661,14 @@ stages: outs: - path: ddos/logs/gzip_knn/20 hash: md5 - md5: 057fc9613b2210a0dd1e03ef46f3d6bc.dir - size: 1616211 + md5: 1c588820bb8cc7ed0622a2dd2a1cc08b.dir + size: 1452384 nfiles: 514 - path: ddos/reports/gzip_knn/20/train/ hash: md5 - md5: b0ae22713c6a319a24acb69525a9f01a.dir - size: 1375974 - nfiles: 1536 + md5: 69518d6bf12dde705dd3b50cd987f1af.dir + size: 1062291 + nfiles: 1163 grid_search@20-ddos-gzip_logistic: cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_logistic model.init.distance_matrix=null @@ -14550,8 +14683,8 @@ stages: size: 2205 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_logistic.yaml: hydra: @@ -14613,14 +14746,14 @@ stages: outs: - path: ddos/logs/gzip_logistic/20 hash: md5 - md5: f2c036dc149976bc0de5187f8661669d.dir - size: 1705246 - nfiles: 514 + md5: 862388e015eae9fb28dd1de9e79f12ce.dir + size: 1384742 + nfiles: 513 - path: ddos/reports/gzip_logistic/20/train/ hash: md5 - md5: 36eee9b3fb432eafed577ca45b477dab.dir - size: 1608552 - nfiles: 1349 + md5: f7b00527e60c1f473954a36991327b51.dir + size: 560045 + nfiles: 369 grid_search@20-ddos-gzip_svc: cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null @@ -14635,8 +14768,8 @@ stages: size: 2131 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_svc.yaml: hydra: @@ -14698,14 +14831,14 @@ stages: outs: - path: ddos/logs/gzip_svc/20 hash: md5 - md5: 5934a7b63c96844a0eaa9ecea06a79c2.dir - size: 1639820 - nfiles: 514 + md5: dc81f350e6d3bf8d34c4a550d3e3c9bd.dir + size: 1337099 + nfiles: 513 - path: ddos/reports/gzip_svc/20/train/ hash: md5 - md5: 0e902831c38cc7b2f2b03d7bb7f4f5cf.dir - size: 1580188 - nfiles: 1536 + md5: b86c76493d70bb1732050043f72b63a5.dir + size: 551373 + nfiles: 384 grid_search@100-kdd_nsl-gzip_knn: cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null @@ -14716,12 +14849,12 @@ stages: deps: - path: conf/gzip_knn.yaml hash: md5 - md5: a58015cd6f327e171842b045a2524bfd - size: 2062 + md5: ceff1a602afc3323e49200a1da539310 + size: 2046 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_knn.yaml: hydra: @@ -14741,7 +14874,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -14780,14 +14912,14 @@ stages: outs: - path: kdd_nsl/logs/gzip_knn/100 hash: md5 - md5: aa2209bce9b2f829ca22f244b53ed58f.dir - size: 1416182 + md5: 627b7ee87613bc63fbee1347dff2a211.dir + size: 1331375 nfiles: 514 - path: kdd_nsl/reports/gzip_knn/100/train/ hash: md5 - md5: 1547fa66fbaac37a7badef9b300577a7.dir - size: 1163933 - nfiles: 1000 + md5: e2ce656f9f6ac2cf23f557a32dac018c.dir + size: 374498 + nfiles: 352 grid_search@100-kdd_nsl-gzip_logistic: cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_logistic @@ -14799,12 +14931,12 @@ stages: deps: - path: conf/gzip_logistic.yaml hash: md5 - md5: 847d4d804fff0b6f2533f90820eebd04 - size: 2205 + md5: a051c1bd6690aa80000909c49eb45023 + size: 2189 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_logistic.yaml: hydra: @@ -14824,7 +14956,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -14866,14 +14997,14 @@ stages: outs: - path: kdd_nsl/logs/gzip_logistic/100 hash: md5 - md5: b6e7cf1d3984f8029177576f9668944b.dir - size: 1609157 + md5: d10fc206ea64ee1d63eaed14f5b60879.dir + size: 1443430 nfiles: 514 - path: kdd_nsl/reports/gzip_logistic/100/train/ hash: md5 - md5: d40db4814c403a903c7d0cd2a8a5bb7b.dir - size: 1329546 - nfiles: 1093 + md5: b343d0870fadbfbdecb47d5538943279.dir + size: 564631 + nfiles: 357 grid_search@100-kdd_nsl-gzip_svc: cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null @@ -14884,12 +15015,12 @@ stages: deps: - path: conf/gzip_svc.yaml hash: md5 - md5: 957922cb6993eb99866232d944a4a106 - size: 2131 + md5: 71702231d42f4d68a2237772b3475697 + size: 2115 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_svc.yaml: hydra: @@ -14911,7 +15042,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -14951,14 +15081,14 @@ stages: outs: - path: kdd_nsl/logs/gzip_svc/100 hash: md5 - md5: 4b96e2a3bb0e0d230ebd96591a16e441.dir - size: 1553624 + md5: 1cbd3a1e7a5989ec7e6bcd4c71feb722.dir + size: 1409321 nfiles: 514 - path: kdd_nsl/reports/gzip_svc/100/train/ hash: md5 - md5: 3cf8a86de1026ead8fcd1b6cda47e910.dir - size: 1247698 - nfiles: 1152 + md5: a3702590a0e52e5bc7cf0e6cc6a551da.dir + size: 551152 + nfiles: 381 grid_search@100-truthseeker-gzip_knn: cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null @@ -14969,12 +15099,12 @@ stages: deps: - path: conf/gzip_knn.yaml hash: md5 - md5: a58015cd6f327e171842b045a2524bfd - size: 2062 + md5: ceff1a602afc3323e49200a1da539310 + size: 2046 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_knn.yaml: hydra: @@ -14994,7 +15124,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -15033,14 +15162,14 @@ stages: outs: - path: truthseeker/logs/gzip_knn/100 hash: md5 - md5: 818cba0a8349442987e5d6be1f0672d4.dir - size: 1374869 + md5: 04a5bc31a55d435d8e6932285fc3de4a.dir + size: 1346194 nfiles: 514 - path: truthseeker/reports/gzip_knn/100/train/ hash: md5 - md5: 261a37d5d497bd477d872aa72a94a13f.dir - size: 394446 - nfiles: 320 + md5: 54df7266d8f6c76d39c28839b372482a.dir + size: 363058 + nfiles: 352 grid_search@100-truthseeker-gzip_logistic: cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_logistic @@ -15052,12 +15181,12 @@ stages: deps: - path: conf/gzip_logistic.yaml hash: md5 - md5: 847d4d804fff0b6f2533f90820eebd04 - size: 2205 + md5: a051c1bd6690aa80000909c49eb45023 + size: 2189 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_logistic.yaml: hydra: @@ -15077,7 +15206,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -15119,13 +15247,13 @@ stages: outs: - path: truthseeker/logs/gzip_logistic/100 hash: md5 - md5: dd822b92438871be421644a82afa8e2f.dir - size: 1528739 + md5: 8851ae1ca8a7c9fd94a42d7253eb0f14.dir + size: 1461033 nfiles: 514 - path: truthseeker/reports/gzip_logistic/100/train/ hash: md5 - md5: d1b22149466a949b86aba9390d7cf992.dir - size: 556386 + md5: aaf46ef58b9daf76df06fbb7c877eddc.dir + size: 555616 nfiles: 365 grid_search@100-truthseeker-gzip_svc: cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker @@ -15137,12 +15265,12 @@ stages: deps: - path: conf/gzip_svc.yaml hash: md5 - md5: 957922cb6993eb99866232d944a4a106 - size: 2131 + md5: 71702231d42f4d68a2237772b3475697 + size: 2115 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_svc.yaml: hydra: @@ -15164,7 +15292,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -15204,13 +15331,13 @@ stages: outs: - path: truthseeker/logs/gzip_svc/100 hash: md5 - md5: c9493ae71545ccec0ea01adc6d664bce.dir - size: 1505603 + md5: 626f846dddb8ec2a392050e2a193195d.dir + size: 1415375 nfiles: 514 - path: truthseeker/reports/gzip_svc/100/train/ hash: md5 - md5: c9a4bae4aed04fcdb578f44fba94af87.dir - size: 547282 + md5: 4026ab65c9681a20924d9f39bbce753d.dir + size: 546562 nfiles: 384 grid_search@100-sms_spam-gzip_knn: cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam @@ -15222,12 +15349,12 @@ stages: deps: - path: conf/gzip_knn.yaml hash: md5 - md5: a58015cd6f327e171842b045a2524bfd - size: 2062 + md5: ceff1a602afc3323e49200a1da539310 + size: 2046 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_knn.yaml: hydra: @@ -15247,7 +15374,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -15286,14 +15412,14 @@ stages: outs: - path: sms_spam/logs/gzip_knn/100 hash: md5 - md5: ad8714bbbce96d2c1ff75deda0add5ec.dir - size: 1415136 + md5: e6b50d168b377158bf22fb8598508874.dir + size: 1342714 nfiles: 514 - path: sms_spam/reports/gzip_knn/100/train/ hash: md5 - md5: 6bcf048da228e84a757916c797891044.dir - size: 376546 - nfiles: 331 + md5: e53ac2a974976f6f97794b1705182563.dir + size: 352911 + nfiles: 360 find_best_model@ddos-gzip_knn: cmd: python -m deckard.layers.find_best --storage sqlite:///optuna.db --study_name gzip_knn_ddos --config_subdir model --params_file best_gzip_knn_ddos --default_config @@ -15353,8 +15479,8 @@ stages: size: 2181 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/condense.yaml: hydra: @@ -15408,14 +15534,14 @@ stages: outs: - path: ddos/logs/condense/knn/ hash: md5 - md5: 34f8b7196af71d106965513050a254fb.dir - size: 10910937 + md5: d83b6c64d5535fba4d371a6244c71140.dir + size: 11142600 nfiles: 4097 - path: ddos/reports/condense/knn/ hash: md5 - md5: 9b6918814be3bea732abc71b8684fd8d.dir - size: 8458502 - nfiles: 9157 + md5: 31d7e7a0e89685ab46147b3bc1e9a57b.dir + size: 2849297 + nfiles: 3044 condense@ddos-svc: cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=100 data.sample.test_size=100 model_name=condensed_svc model=gzip_svc files.directory=ddos @@ -15424,15 +15550,14 @@ stages: hydra.callbacks.study_dump.output_file=ddos/logs/svc/study.csv hydra.launcher.n_jobs=-1 --config-name condense_svc --multirun deps: - - path: conf/model/best_gzip_svc_ddos.yaml + - path: conf/condense_svc.yaml hash: md5 - md5: 3a7f27dd470ec9e55c10403814f550f2 - size: 442 - - path: ddos/logs/method/ + md5: 7a311db45e697a23a2bed8180fd45e64 + size: 2182 + - path: params.yaml hash: md5 - md5: a09dd0467b0e8a142d6f32a38f205159.dir - size: 59399 - nfiles: 28 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/condense.yaml: hydra: @@ -15486,13 +15611,13 @@ stages: outs: - path: ddos/logs/condense/svc/ hash: md5 - md5: 6a15cfc205c7382b8d7d6d67d35ddfb0.dir - size: 11072739 + md5: 959fc2f99c93ccc2d0e8fc00ade34ed9.dir + size: 11235717 nfiles: 4097 - path: ddos/reports/condense/svc/ hash: md5 - md5: daaf428c939e9bfcc233bf88ee39f9fb.dir - size: 2819182 + md5: 4cd4cd510b2d1729094f4b704d22d2f7.dir + size: 4482040 nfiles: 3072 condense@ddos-logistic: cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=100 @@ -15502,15 +15627,14 @@ stages: hydra.callbacks.study_dump.output_file=ddos/logs/logistic/study.csv hydra.launcher.n_jobs=-1 --config-name condense_logistic --multirun deps: - - path: conf/model/best_gzip_logistic_ddos.yaml + - path: conf/condense_logistic.yaml hash: md5 - md5: d5e603d6386dd6cf1167088eaecbdde5 - size: 498 - - path: ddos/logs/method/ + md5: 85b6d1d835afd7e95b5b9f804fbd7119 + size: 2326 + - path: params.yaml hash: md5 - md5: a09dd0467b0e8a142d6f32a38f205159.dir - size: 59399 - nfiles: 28 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/condense.yaml: hydra: @@ -15564,14 +15688,14 @@ stages: outs: - path: ddos/logs/condense/logistic/ hash: md5 - md5: 064e5768d0155635c9bc6287914ac9f7.dir - size: 11690343 + md5: c355ecaa55c8b6015007c7b3912b9b02.dir + size: 11953607 nfiles: 4097 - path: ddos/reports/condense/logistic/ hash: md5 - md5: 7ce841278929a90690417685b7c7f143.dir - size: 5929815 - nfiles: 5888 + md5: 5ae0bcd484eb00652d8db28c795b72ac.dir + size: 4549745 + nfiles: 3040 grid_search@100-ddos-gzip_knn: cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null @@ -15582,12 +15706,12 @@ stages: deps: - path: conf/gzip_knn.yaml hash: md5 - md5: a58015cd6f327e171842b045a2524bfd - size: 2062 + md5: ceff1a602afc3323e49200a1da539310 + size: 2046 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_knn.yaml: hydra: @@ -15607,7 +15731,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -15646,14 +15769,14 @@ stages: outs: - path: ddos/logs/gzip_knn/100 hash: md5 - md5: 41af522bae6f35684d51a90652c37082.dir - size: 1645388 + md5: 5118d2a533a4710bee7c9447a31878fc.dir + size: 1356595 nfiles: 514 - path: ddos/reports/gzip_knn/100/train/ hash: md5 - md5: b9374a5acb2480c2ed6a35803a344f69.dir - size: 1341749 - nfiles: 1499 + md5: 2033427b1f841dcb0076888e16e5baae.dir + size: 345741 + nfiles: 382 grid_search@100-ddos-gzip_logistic: cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_logistic model.init.distance_matrix=null @@ -15664,12 +15787,12 @@ stages: deps: - path: conf/gzip_logistic.yaml hash: md5 - md5: 847d4d804fff0b6f2533f90820eebd04 - size: 2205 + md5: a051c1bd6690aa80000909c49eb45023 + size: 2189 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_logistic.yaml: hydra: @@ -15689,7 +15812,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -15731,14 +15853,14 @@ stages: outs: - path: ddos/logs/gzip_logistic/100 hash: md5 - md5: 3f1d14c70e73f668316f86a8d7d0e22b.dir - size: 1733688 + md5: 4c1c97038945eb418ac31d94a00760aa.dir + size: 1450826 nfiles: 514 - path: ddos/reports/gzip_logistic/100/train/ hash: md5 - md5: c839c1faf70de47c057714c3a8bdc52d.dir - size: 1562420 - nfiles: 1315 + md5: 85a4ef22f2dcc23827d34ccf182bcd70.dir + size: 560355 + nfiles: 373 grid_search@100-ddos-gzip_svc: cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null @@ -15749,12 +15871,12 @@ stages: deps: - path: conf/gzip_svc.yaml hash: md5 - md5: 957922cb6993eb99866232d944a4a106 - size: 2131 + md5: 71702231d42f4d68a2237772b3475697 + size: 2115 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_svc.yaml: hydra: @@ -15776,7 +15898,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -15816,14 +15937,14 @@ stages: outs: - path: ddos/logs/gzip_svc/100 hash: md5 - md5: 4adc8c896e06e2d7e8450f2b863b95bf.dir - size: 1681042 + md5: 7ad3d8a6e94e26be1554eb05596f7135.dir + size: 1396897 nfiles: 514 - path: ddos/reports/gzip_svc/100/train/ hash: md5 - md5: 8ad9bbb8a118699458753528a263f5ba.dir - size: 1790102 - nfiles: 1678 + md5: d2f54e80307679736c4af3be015a967e.dir + size: 552243 + nfiles: 384 find_best_model@kdd_nsl-gzip_knn: cmd: python -m deckard.layers.find_best --storage sqlite:///optuna.db --study_name gzip_knn_kdd_nsl --config_subdir model --params_file best_gzip_knn_kdd_nsl --default_config @@ -15922,10 +16043,14 @@ stages: hydra.callbacks.study_dump.output_file=kdd_nsl/logs/knn/study.csv hydra.launcher.n_jobs=-1 --config-name condense_knn --multirun deps: - - path: conf/model/best_gzip_knn_kdd_nsl.yaml + - path: conf/condense_knn.yaml hash: md5 - md5: f9ad25a19931041146b4b1eab45fda68 - size: 420 + md5: abd25d17a742e467d39dda34b448ba88 + size: 2181 + - path: params.yaml + hash: md5 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/condense.yaml: hydra: @@ -15979,14 +16104,14 @@ stages: outs: - path: kdd_nsl/logs/condense/knn/ hash: md5 - md5: 81f50250e51650881283dcf68d43234c.dir - size: 10952920 + md5: 378298d488efbdb9adf7ecdb9f82124c.dir + size: 10970993 nfiles: 4097 - path: kdd_nsl/reports/condense/knn/ hash: md5 - md5: 3f8eb680f1f8960490e4581bfa16cfd2.dir - size: 2869636 - nfiles: 3011 + md5: 93ada0fdd4ee34c1a90811b419492a55.dir + size: 3050193 + nfiles: 2814 condense@kdd_nsl-svc: cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl data.sample.train_size=100 data.sample.test_size=100 model_name=condensed_svc @@ -15995,10 +16120,14 @@ stages: hydra.callbacks.study_dump.output_file=kdd_nsl/logs/svc/study.csv hydra.launcher.n_jobs=-1 --config-name condense_svc --multirun deps: - - path: conf/model/best_gzip_svc_kdd_nsl.yaml + - path: conf/condense_svc.yaml hash: md5 - md5: 0542c20ce7b5a74a20d4ab1c38fdf213 - size: 434 + md5: 7a311db45e697a23a2bed8180fd45e64 + size: 2182 + - path: params.yaml + hash: md5 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/condense.yaml: hydra: @@ -16052,14 +16181,14 @@ stages: outs: - path: kdd_nsl/logs/condense/svc/ hash: md5 - md5: cdf319e0c94e4c6eda84ec9b2e9ea1a9.dir - size: 10708020 + md5: 776eda5429781a85addde97d20c7b265.dir + size: 11185990 nfiles: 4097 - path: kdd_nsl/reports/condense/svc/ hash: md5 - md5: ad27897c6454024915fdcef827219bd3.dir - size: 8340639 - nfiles: 5462 + md5: 203675ff458bef2b81282c5bdfc2a784.dir + size: 4456054 + nfiles: 2974 condense@kdd_nsl-logistic: cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl data.sample.train_size=100 data.sample.test_size=100 model_name=condensed_logistic @@ -16068,10 +16197,14 @@ stages: hydra.sweeper.n_jobs=8 hydra.sweep.dir=kdd_nsl/logs/condense/logistic/ hydra.callbacks.study_dump.output_file=kdd_nsl/logs/logistic/study.csv hydra.launcher.n_jobs=-1 --config-name condense_logistic --multirun deps: - - path: conf/model/best_gzip_logistic_kdd_nsl.yaml + - path: conf/condense_logistic.yaml hash: md5 - md5: e21d828b4b1ad122d7755e986de5b93d - size: 353 + md5: 85b6d1d835afd7e95b5b9f804fbd7119 + size: 2326 + - path: params.yaml + hash: md5 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/condense.yaml: hydra: @@ -16125,14 +16258,14 @@ stages: outs: - path: kdd_nsl/logs/condense/logistic/ hash: md5 - md5: 0ce56c12dc58fe66c1fa6fec867b2cf5.dir - size: 11710344 + md5: 1dc74c36e9ba875544f225b89a6da453.dir + size: 11922297 nfiles: 4097 - path: kdd_nsl/reports/condense/logistic/ hash: md5 - md5: ae358823518ca6759ddfa8d1c738e367.dir - size: 3101125 - nfiles: 2948 + md5: ea7bb298a46f2f3f6cbbd56cae254637.dir + size: 4572006 + nfiles: 2967 condense@truthseeker-knn: cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker data.sample.train_size=100 data.sample.test_size=100 model_name=condensed_knn @@ -16141,10 +16274,14 @@ stages: hydra.sweeper.n_jobs=8 hydra.sweep.dir=truthseeker/logs/condense/knn/ hydra.callbacks.study_dump.output_file=truthseeker/logs/knn/study.csv hydra.launcher.n_jobs=-1 --config-name condense_knn --multirun deps: - - path: conf/model/best_gzip_knn_truthseeker.yaml + - path: conf/condense_knn.yaml hash: md5 - md5: 79baf4709c4a5f2535059ef8d1b6a082 - size: 258 + md5: abd25d17a742e467d39dda34b448ba88 + size: 2181 + - path: params.yaml + hash: md5 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/condense.yaml: hydra: @@ -16198,14 +16335,14 @@ stages: outs: - path: truthseeker/logs/condense/knn/ hash: md5 - md5: 3e8b9011ee1c591904115e67db9a1a50.dir - size: 11038890 + md5: e3674e8225bdf6253493734e4aaeae1b.dir + size: 10942128 nfiles: 4097 - path: truthseeker/reports/condense/knn/ hash: md5 - md5: 1565eb2348976cc6ac9108396141080b.dir - size: 2831604 - nfiles: 3016 + md5: 1324be810ca9c33934d2d66d4dee0f24.dir + size: 3043315 + nfiles: 2762 condense@truthseeker-svc: cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker data.sample.train_size=100 data.sample.test_size=100 model_name=condensed_svc @@ -16603,42 +16740,42 @@ stages: deps: - path: kdd_nsl/reports/condense/svc/ hash: md5 - md5: ad27897c6454024915fdcef827219bd3.dir - size: 8340639 - nfiles: 5462 + md5: 203675ff458bef2b81282c5bdfc2a784.dir + size: 4456054 + nfiles: 2974 outs: - path: kdd_nsl/reports/condense/svc.csv hash: md5 - md5: 643a67cb6d5974a787efa6339e3af058 - size: 3003804 + md5: ab6577b1dc3e0043e39abbe6d3e08572 + size: 1430670 compile@kdd_nsl-condense/logistic: cmd: python -m deckard.layers.compile --report_folder kdd_nsl/reports/condense/logistic --results_file kdd_nsl/reports/condense/logistic.csv deps: - path: kdd_nsl/reports/condense/logistic/ hash: md5 - md5: df73404e3f7d00371dd55b40e76fa9e0.dir - size: 3112185 - nfiles: 2954 + md5: ea7bb298a46f2f3f6cbbd56cae254637.dir + size: 4572006 + nfiles: 2967 outs: - path: kdd_nsl/reports/condense/logistic.csv hash: md5 - md5: 4193461c63aca8b61956fc443f5bcd3d - size: 1649004 + md5: ca33966ea5c59774aada0a45e7989bf4 + size: 1469929 compile@ddos-condense/svc: cmd: python -m deckard.layers.compile --report_folder ddos/reports/condense/svc --results_file ddos/reports/condense/svc.csv deps: - path: ddos/reports/condense/svc/ hash: md5 - md5: b40b878f7eca11a9eae0c19e054bee47.dir - size: 8854939 - nfiles: 7199 + md5: 4cd4cd510b2d1729094f4b704d22d2f7.dir + size: 4482040 + nfiles: 3072 outs: - path: ddos/reports/condense/svc.csv hash: md5 - md5: 76b35c3e1dfa2d0476a737f9a41c25c4 - size: 3771755 + md5: aa784bb40bb07d842dc0a91a4db363de + size: 1427146 compile@truthseeker-condense/knn: cmd: python -m deckard.layers.compile --report_folder truthseeker/reports/condense/knn --results_file truthseeker/reports/condense/knn.csv @@ -16673,14 +16810,14 @@ stages: deps: - path: ddos/reports/condense/knn/ hash: md5 - md5: 9b6918814be3bea732abc71b8684fd8d.dir - size: 8458502 - nfiles: 9157 + md5: 31d7e7a0e89685ab46147b3bc1e9a57b.dir + size: 2849297 + nfiles: 3044 outs: - path: ddos/reports/condense/knn.csv hash: md5 - md5: 0cd0ff58f94fb06093779ff81d37d2bf - size: 4723182 + md5: 755a891a9010614c0320ba6957a08de7 + size: 1418049 compile@sms_spam-condense/svc: cmd: python -m deckard.layers.compile --report_folder sms_spam/reports/condense/svc --results_file sms_spam/reports/condense/svc.csv @@ -16701,14 +16838,14 @@ stages: deps: - path: kdd_nsl/reports/condense/knn/ hash: md5 - md5: 3f8eb680f1f8960490e4581bfa16cfd2.dir - size: 2869636 - nfiles: 3011 + md5: 93ada0fdd4ee34c1a90811b419492a55.dir + size: 3050193 + nfiles: 2814 outs: - path: kdd_nsl/reports/condense/knn.csv hash: md5 - md5: 29211ec6d9b2b1a5e9193eaabfff3488 - size: 1608857 + md5: 5718185a5ba5dfa47d3a807a7860c79d + size: 1383948 compile@truthseeker-condense/logistic: cmd: python -m deckard.layers.compile --report_folder truthseeker/reports/condense/logistic --results_file truthseeker/reports/condense/logistic.csv @@ -16743,14 +16880,14 @@ stages: deps: - path: ddos/reports/condense/logistic/ hash: md5 - md5: 7ce841278929a90690417685b7c7f143.dir - size: 5929815 - nfiles: 5888 + md5: 5ae0bcd484eb00652d8db28c795b72ac.dir + size: 4549745 + nfiles: 3040 outs: - path: ddos/reports/condense/logistic.csv hash: md5 - md5: b24764aed957fdf6d2ccb541ef490d37 - size: 3150984 + md5: 43603ccd44d31553618819d6d8a21b26 + size: 1459732 clean@sms_spam-condense/svc: cmd: python -m deckard.layers.clean_data -i sms_spam/reports/condense/svc.csv -o sms_spam/plots/clean/condense/svc.csv -c conf/clean.yaml @@ -16793,8 +16930,8 @@ stages: deps: - path: ddos/reports/condense/knn.csv hash: md5 - md5: 0cd0ff58f94fb06093779ff81d37d2bf - size: 4723182 + md5: 755a891a9010614c0320ba6957a08de7 + size: 1418049 params: conf/clean.yaml: replace: @@ -16821,8 +16958,8 @@ stages: outs: - path: ddos/plots/clean/condense/knn.csv hash: md5 - md5: d214914ecfbba6afbd4ff9a61cb96bb1 - size: 3652514 + md5: be16b853ccb87973e0e61b37b3d79cc9 + size: 1144970 clean@truthseeker-condense/svc: cmd: python -m deckard.layers.clean_data -i truthseeker/reports/condense/svc.csv -o truthseeker/plots/clean/condense/svc.csv -c conf/clean.yaml @@ -16865,8 +17002,8 @@ stages: deps: - path: kdd_nsl/reports/condense/knn.csv hash: md5 - md5: 29211ec6d9b2b1a5e9193eaabfff3488 - size: 1608857 + md5: 5718185a5ba5dfa47d3a807a7860c79d + size: 1383948 params: conf/clean.yaml: replace: @@ -16893,8 +17030,8 @@ stages: outs: - path: kdd_nsl/plots/clean/condense/knn.csv hash: md5 - md5: 23789b08b0fd1616555611d0e7971db9 - size: 1204868 + md5: d8857cdd7c5cddaeb94e66c665635e99 + size: 902457 clean@kdd_nsl-condense/svc: cmd: python -m deckard.layers.clean_data -i kdd_nsl/reports/condense/svc.csv -o kdd_nsl/plots/clean/condense/svc.csv -c conf/clean.yaml @@ -16937,8 +17074,8 @@ stages: deps: - path: kdd_nsl/reports/condense/logistic.csv hash: md5 - md5: 4193461c63aca8b61956fc443f5bcd3d - size: 1649004 + md5: ca33966ea5c59774aada0a45e7989bf4 + size: 1469929 params: conf/clean.yaml: replace: @@ -16965,8 +17102,8 @@ stages: outs: - path: kdd_nsl/plots/clean/condense/logistic.csv hash: md5 - md5: 55a0ac50149a3e3d93b69c63ccd0d7a3 - size: 1174964 + md5: 13df9ba9765236429909d36811493425 + size: 1127465 clean@sms_spam-condense/knn: cmd: python -m deckard.layers.clean_data -i sms_spam/reports/condense/knn.csv -o sms_spam/plots/clean/condense/knn.csv -c conf/clean.yaml @@ -17117,8 +17254,8 @@ stages: deps: - path: ddos/reports/condense/svc.csv hash: md5 - md5: 76b35c3e1dfa2d0476a737f9a41c25c4 - size: 3771755 + md5: aa784bb40bb07d842dc0a91a4db363de + size: 1427146 params: conf/clean.yaml: replace: @@ -17145,16 +17282,16 @@ stages: outs: - path: ddos/plots/clean/condense/svc.csv hash: md5 - md5: 102b712883464d547a4d2119f6c5df60 - size: 2968961 + md5: e8672b519a9feabd7a83f366684ae65f + size: 1172482 clean@ddos-condense/logistic: cmd: python -m deckard.layers.clean_data -i ddos/reports/condense/logistic.csv -o ddos/plots/clean/condense/logistic.csv -c conf/clean.yaml deps: - path: ddos/reports/condense/logistic.csv hash: md5 - md5: b24764aed957fdf6d2ccb541ef490d37 - size: 3150984 + md5: 43603ccd44d31553618819d6d8a21b26 + size: 1459732 params: conf/clean.yaml: replace: @@ -17181,8 +17318,8 @@ stages: outs: - path: ddos/plots/clean/condense/logistic.csv hash: md5 - md5: bfca6e865bca11a25fa1e42dfbdea0ad - size: 2331762 + md5: d4141b866045a61b758909b680459363 + size: 1190145 merge_condense@ddos: cmd: python merge.py --big_dir ddos/plots/ --data_file clean/condense/knn.csv --little_dir_data_file clean/condense/logistic.csv clean/condense/svc.csv --output_folder @@ -17190,21 +17327,21 @@ stages: deps: - path: ddos/plots/clean/condense/knn.csv hash: md5 - md5: d214914ecfbba6afbd4ff9a61cb96bb1 - size: 3652514 + md5: be16b853ccb87973e0e61b37b3d79cc9 + size: 1144970 - path: ddos/plots/clean/condense/logistic.csv hash: md5 - md5: bfca6e865bca11a25fa1e42dfbdea0ad - size: 2331762 + md5: d4141b866045a61b758909b680459363 + size: 1190145 - path: ddos/plots/clean/condense/svc.csv hash: md5 - md5: 102b712883464d547a4d2119f6c5df60 - size: 2968961 + md5: e8672b519a9feabd7a83f366684ae65f + size: 1172482 outs: - path: ddos/plots/condensed_merged.csv hash: md5 - md5: dc147a2e9c585b39c5e212a46ade70ac - size: 9306964 + md5: bf84ec4bd2b08cc23e35154584619a51 + size: 3628680 merge_condense@kdd_nsl: cmd: python merge.py --big_dir kdd_nsl/plots/ --data_file clean/condense/knn.csv --little_dir_data_file clean/condense/logistic.csv clean/condense/svc.csv --output_folder @@ -17281,12 +17418,12 @@ stages: deps: - path: conf/gzip_knn.yaml hash: md5 - md5: a58015cd6f327e171842b045a2524bfd - size: 2062 + md5: ceff1a602afc3323e49200a1da539310 + size: 2046 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_knn.yaml: hydra: @@ -17306,7 +17443,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -17345,14 +17481,14 @@ stages: outs: - path: ddos/logs/gzip_knn/300 hash: md5 - md5: 1e533c118406ca2ffae2b0a3e11a5035.dir - size: 1671182 + md5: c47afee2ee6085e856fe4e32b58b3f6b.dir + size: 1379773 nfiles: 514 - path: ddos/reports/gzip_knn/300/train/ hash: md5 - md5: 000376454dd461f25065cdb093e78e7c.dir - size: 1461265 - nfiles: 1403 + md5: 25965cb19ec15de45784c43768bd2bdd.dir + size: 350250 + nfiles: 378 plot_condense@sms_spam: cmd: python -m deckard.layers.plots --path sms_spam/plots/ --file sms_spam/plots/condensed_merged.csv -c conf/condensed_plots.yaml @@ -17696,12 +17832,12 @@ stages: deps: - path: conf/gzip_logistic.yaml hash: md5 - md5: 847d4d804fff0b6f2533f90820eebd04 - size: 2205 + md5: a051c1bd6690aa80000909c49eb45023 + size: 2189 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_logistic.yaml: hydra: @@ -17721,7 +17857,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -17763,14 +17898,14 @@ stages: outs: - path: ddos/logs/gzip_logistic/300 hash: md5 - md5: ace39d7825de3ce5c0d678839c812ab6.dir - size: 1765030 + md5: 6bc5b9e70b4f6cc47a8837d6d25690ac.dir + size: 1466899 nfiles: 514 - path: ddos/reports/gzip_logistic/300/train/ hash: md5 - md5: 9f23532033970310bd5915d4018de935.dir - size: 1436932 - nfiles: 963 + md5: df4930132e36fd4e726c5e00751d721b.dir + size: 561713 + nfiles: 362 grid_search@300-ddos-gzip_svc: cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=300 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null @@ -17781,12 +17916,12 @@ stages: deps: - path: conf/gzip_svc.yaml hash: md5 - md5: 957922cb6993eb99866232d944a4a106 - size: 2131 + md5: 71702231d42f4d68a2237772b3475697 + size: 2115 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_svc.yaml: hydra: @@ -17808,7 +17943,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -17848,14 +17982,14 @@ stages: outs: - path: ddos/logs/gzip_svc/300 hash: md5 - md5: 7681421b662e0a0690e9a1a6a4cf4b79.dir - size: 1710386 + md5: 13800a1369da0609d0ec9837b11356a1.dir + size: 1424704 nfiles: 514 - path: ddos/reports/gzip_svc/300/train/ hash: md5 - md5: c872a806e708289c65e6856bc2a057bf.dir - size: 1393355 - nfiles: 1045 + md5: c101119b56b4799eb8f9ba8557c12c12.dir + size: 552863 + nfiles: 384 plot_condense@truthseeker: cmd: python -m deckard.layers.plots --path truthseeker/plots/ --file truthseeker/plots/condensed_merged.csv -c conf/condensed_plots.yaml @@ -17977,12 +18111,12 @@ stages: deps: - path: conf/gzip_logistic.yaml hash: md5 - md5: 847d4d804fff0b6f2533f90820eebd04 - size: 2205 + md5: a051c1bd6690aa80000909c49eb45023 + size: 2189 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_logistic.yaml: hydra: @@ -18002,7 +18136,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -18044,14 +18177,14 @@ stages: outs: - path: ddos/logs/gzip_logistic/500 hash: md5 - md5: afb6463625f139e82a88976c24b93f16.dir - size: 1791134 + md5: 42d78356c1051b3e6e5abdc29213c86d.dir + size: 1478191 nfiles: 514 - path: ddos/reports/gzip_logistic/500/train/ hash: md5 - md5: dbed10dfbc2747c79e14dcedcbce0661.dir - size: 968208 - nfiles: 702 + md5: ffef0f292ad2278bc05a9c793d5e3a2b.dir + size: 562303 + nfiles: 348 grid_search@500-ddos-gzip_svc: cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=500 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null @@ -18062,12 +18195,12 @@ stages: deps: - path: conf/gzip_svc.yaml hash: md5 - md5: 957922cb6993eb99866232d944a4a106 - size: 2131 + md5: 71702231d42f4d68a2237772b3475697 + size: 2115 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_svc.yaml: hydra: @@ -18089,7 +18222,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -18129,14 +18261,14 @@ stages: outs: - path: ddos/logs/gzip_svc/500 hash: md5 - md5: 319357234ff9123f09bb6603fe74866f.dir - size: 1737584 + md5: 1cc5d8464699536811534a66f6b03832.dir + size: 1450430 nfiles: 514 - path: ddos/reports/gzip_svc/500/train/ hash: md5 - md5: 63ecb36bf4e16027b60bcd2892330829.dir - size: 897567 - nfiles: 768 + md5: 071cf73270503508839388cff5402e51.dir + size: 552304 + nfiles: 384 grid_search@100-sms_spam-gzip_logistic: cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_logistic @@ -18148,12 +18280,12 @@ stages: deps: - path: conf/gzip_logistic.yaml hash: md5 - md5: 847d4d804fff0b6f2533f90820eebd04 - size: 2205 + md5: a051c1bd6690aa80000909c49eb45023 + size: 2189 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_logistic.yaml: hydra: @@ -18173,7 +18305,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -18215,14 +18346,14 @@ stages: outs: - path: sms_spam/logs/gzip_logistic/100 hash: md5 - md5: d1120618c5a674fe50c5717e2d71d640.dir - size: 1554813 + md5: d1fc93e695de0fb34abc1f3e4db475b6.dir + size: 1457735 nfiles: 514 - path: sms_spam/reports/gzip_logistic/100/train/ hash: md5 - md5: 89f61791ac36513c4957057485a2e8e3.dir - size: 553318 - nfiles: 357 + md5: 0e43a98c22a07ff0db5a21c8a1b29f02.dir + size: 551398 + nfiles: 371 grid_search@100-sms_spam-gzip_svc: cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null @@ -18233,12 +18364,12 @@ stages: deps: - path: conf/gzip_svc.yaml hash: md5 - md5: 957922cb6993eb99866232d944a4a106 - size: 2131 + md5: 71702231d42f4d68a2237772b3475697 + size: 2115 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_svc.yaml: hydra: @@ -18260,7 +18391,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -18300,13 +18430,13 @@ stages: outs: - path: sms_spam/logs/gzip_svc/100 hash: md5 - md5: cb8e4936d6ee03af99fa775d8b4b956b.dir - size: 1483653 + md5: 70b8aaf7b9f4131c24a190371f3bb84d.dir + size: 1396460 nfiles: 514 - path: sms_spam/reports/gzip_svc/100/train/ hash: md5 - md5: ae31535b48c489e3040a2836c43215a5.dir - size: 543085 + md5: b42fb7cda94841da420570f78c0360ab.dir + size: 542097 nfiles: 384 grid_search@300-kdd_nsl-gzip_knn: cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl @@ -18318,12 +18448,12 @@ stages: deps: - path: conf/gzip_knn.yaml hash: md5 - md5: a58015cd6f327e171842b045a2524bfd - size: 2062 + md5: ceff1a602afc3323e49200a1da539310 + size: 2046 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_knn.yaml: hydra: @@ -18343,7 +18473,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -18382,14 +18511,14 @@ stages: outs: - path: kdd_nsl/logs/gzip_knn/300 hash: md5 - md5: d3f58cbd5181a4f86ac660aba7173dfb.dir - size: 1437824 + md5: ba73756b84e38a9124b6404330eeb6f6.dir + size: 1356596 nfiles: 514 - path: kdd_nsl/reports/gzip_knn/300/train/ hash: md5 - md5: d5317915e16e54a5fb4c82963cc0b058.dir - size: 825336 - nfiles: 612 + md5: ab75c77771b3c94585d64d8e5e446390.dir + size: 377430 + nfiles: 349 grid_search@300-kdd_nsl-gzip_logistic: cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl data.sample.train_size=300 data.sample.test_size=100 model_name=gzip_logistic @@ -18401,12 +18530,12 @@ stages: deps: - path: conf/gzip_logistic.yaml hash: md5 - md5: 847d4d804fff0b6f2533f90820eebd04 - size: 2205 + md5: a051c1bd6690aa80000909c49eb45023 + size: 2189 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_logistic.yaml: hydra: @@ -18426,7 +18555,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -18468,14 +18596,14 @@ stages: outs: - path: kdd_nsl/logs/gzip_logistic/300 hash: md5 - md5: 6793362a9053b6f28647bb49875ebcf3.dir - size: 1634660 + md5: a82fb69301d5b4c25a98b08e9c51a03d.dir + size: 1473960 nfiles: 514 - path: kdd_nsl/reports/gzip_logistic/300/train/ hash: md5 - md5: f2a46e55c8597a4d4082202f69186083.dir - size: 945424 - nfiles: 723 + md5: f8ead22c1c2154ea1b5fc4271e76a807.dir + size: 565055 + nfiles: 358 grid_search@300-kdd_nsl-gzip_svc: cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl data.sample.train_size=300 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null @@ -18486,12 +18614,12 @@ stages: deps: - path: conf/gzip_svc.yaml hash: md5 - md5: 957922cb6993eb99866232d944a4a106 - size: 2131 + md5: 71702231d42f4d68a2237772b3475697 + size: 2115 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_svc.yaml: hydra: @@ -18513,7 +18641,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -18553,14 +18680,14 @@ stages: outs: - path: kdd_nsl/logs/gzip_svc/300 hash: md5 - md5: 1bd3b191acf0f78e361e1bc3cb6df928.dir - size: 1584389 + md5: b9967495b4a69d493478d118c005bcb0.dir + size: 1439921 nfiles: 514 - path: kdd_nsl/reports/gzip_svc/300/train/ hash: md5 - md5: b6e64c8b751bf3a140aa9871f341a173.dir - size: 899234 - nfiles: 765 + md5: 483c44c484684bfa4be6afbe8785d19e.dir + size: 556311 + nfiles: 384 grid_search@300-sms_spam-gzip_knn: cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam data.sample.train_size=300 data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null @@ -18571,12 +18698,12 @@ stages: deps: - path: conf/gzip_knn.yaml hash: md5 - md5: a58015cd6f327e171842b045a2524bfd - size: 2062 + md5: ceff1a602afc3323e49200a1da539310 + size: 2046 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_knn.yaml: hydra: @@ -18596,7 +18723,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -18635,14 +18761,14 @@ stages: outs: - path: sms_spam/logs/gzip_knn/300 hash: md5 - md5: 09019492218a189aabe0601cb4c3f3a3.dir - size: 1460894 + md5: 37a32ed4e0e8746093c0cc9773c20428.dir + size: 1360206 nfiles: 514 - path: sms_spam/reports/gzip_knn/300/train/ hash: md5 - md5: 3aa09498a167a50051ee2fdf3e46d62d.dir - size: 364240 - nfiles: 349 + md5: b562ce528647cbc5691881eca20d14c3.dir + size: 360305 + nfiles: 354 grid_search@300-sms_spam-gzip_logistic: cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam data.sample.train_size=300 data.sample.test_size=100 model_name=gzip_logistic @@ -18654,12 +18780,12 @@ stages: deps: - path: conf/gzip_logistic.yaml hash: md5 - md5: 847d4d804fff0b6f2533f90820eebd04 - size: 2205 + md5: a051c1bd6690aa80000909c49eb45023 + size: 2189 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_logistic.yaml: hydra: @@ -18679,7 +18805,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -18721,14 +18846,14 @@ stages: outs: - path: sms_spam/logs/gzip_logistic/300 hash: md5 - md5: 627574a996abf0037be2b9d798c0a1f6.dir - size: 1593011 + md5: c4a6659a9a42438e4cda46204110f152.dir + size: 1492305 nfiles: 514 - path: sms_spam/reports/gzip_logistic/300/train/ hash: md5 - md5: 886edc50f38dc580603074bf8dc46835.dir - size: 553839 - nfiles: 363 + md5: c390bf9ff240c2b33fb66a43bc5e49b5.dir + size: 552096 + nfiles: 373 grid_search@300-sms_spam-gzip_svc: cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam data.sample.train_size=300 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null @@ -18739,12 +18864,12 @@ stages: deps: - path: conf/gzip_svc.yaml hash: md5 - md5: 957922cb6993eb99866232d944a4a106 - size: 2131 + md5: 71702231d42f4d68a2237772b3475697 + size: 2115 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_svc.yaml: hydra: @@ -18766,7 +18891,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -18806,13 +18930,13 @@ stages: outs: - path: sms_spam/logs/gzip_svc/300 hash: md5 - md5: 7d9d939af4228ad75b78ee5c347a984a.dir - size: 1513139 + md5: faef37bd655980292a1cba1eb6019e02.dir + size: 1432029 nfiles: 514 - path: sms_spam/reports/gzip_svc/300/train/ hash: md5 - md5: cb8713e4f13494c3c1ab3c93c238d2d7.dir - size: 544369 + md5: 6e8a5812a59700fdfac04e31e4f91c15.dir + size: 543601 nfiles: 384 grid_search@300-truthseeker-gzip_knn: cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker @@ -18824,12 +18948,12 @@ stages: deps: - path: conf/gzip_knn.yaml hash: md5 - md5: a58015cd6f327e171842b045a2524bfd - size: 2062 + md5: ceff1a602afc3323e49200a1da539310 + size: 2046 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_knn.yaml: hydra: @@ -18849,7 +18973,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -18888,14 +19011,14 @@ stages: outs: - path: truthseeker/logs/gzip_knn/300 hash: md5 - md5: 7fc2fb64903d90052db980e395a73a1b.dir - size: 1418937 + md5: fe0d8d1efc5205e73c00a325158a32d0.dir + size: 1379955 nfiles: 514 - path: truthseeker/reports/gzip_knn/300/train/ hash: md5 - md5: 1b7d0b73ddb24fa30f48675625cad64c.dir - size: 384561 - nfiles: 332 + md5: 6cf4811545ac6bbcb931dec166f94146.dir + size: 361320 + nfiles: 356 grid_search@300-truthseeker-gzip_logistic: cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker data.sample.train_size=300 data.sample.test_size=100 model_name=gzip_logistic @@ -18907,12 +19030,12 @@ stages: deps: - path: conf/gzip_logistic.yaml hash: md5 - md5: 847d4d804fff0b6f2533f90820eebd04 - size: 2205 + md5: a051c1bd6690aa80000909c49eb45023 + size: 2189 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_logistic.yaml: hydra: @@ -18932,7 +19055,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -18974,14 +19096,14 @@ stages: outs: - path: truthseeker/logs/gzip_logistic/300 hash: md5 - md5: 121b624ea70d27aba89bd5448c35580f.dir - size: 1564349 + md5: 3646366e6e334601019e84ac4afaba0a.dir + size: 1505405 nfiles: 514 - path: truthseeker/reports/gzip_logistic/300/train/ hash: md5 - md5: 7dfeff37b85b221b60c7bad442f21658.dir - size: 557318 - nfiles: 367 + md5: 08a33f0c2516868b6f96d07144938775.dir + size: 555605 + nfiles: 375 grid_search@300-truthseeker-gzip_svc: cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker data.sample.train_size=300 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null @@ -18992,12 +19114,12 @@ stages: deps: - path: conf/gzip_svc.yaml hash: md5 - md5: 957922cb6993eb99866232d944a4a106 - size: 2131 + md5: 71702231d42f4d68a2237772b3475697 + size: 2115 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_svc.yaml: hydra: @@ -19019,7 +19141,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -19059,13 +19180,13 @@ stages: outs: - path: truthseeker/logs/gzip_svc/300 hash: md5 - md5: c1b03e3fa37ca812864d04d3a38216db.dir - size: 1536045 + md5: 03113827d2b60e43967131d724c3d9b3.dir + size: 1447847 nfiles: 514 - path: truthseeker/reports/gzip_svc/300/train/ hash: md5 - md5: 2cf3648372291b72f9b16020c5c3ad4e.dir - size: 548358 + md5: 269b7351222860a080573a1460cdc1b4.dir + size: 547528 nfiles: 384 grid_search@500-ddos-gzip_knn: cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=500 @@ -19077,12 +19198,12 @@ stages: deps: - path: conf/gzip_knn.yaml hash: md5 - md5: a58015cd6f327e171842b045a2524bfd - size: 2062 + md5: ceff1a602afc3323e49200a1da539310 + size: 2046 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_knn.yaml: hydra: @@ -19102,7 +19223,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -19141,14 +19261,14 @@ stages: outs: - path: ddos/logs/gzip_knn/500 hash: md5 - md5: ebb76a3ffe046f5763072644ec826dd9.dir - size: 1693130 + md5: fe25eeb3a1a7651381057f046b09750b.dir + size: 1400909 nfiles: 514 - path: ddos/reports/gzip_knn/500/train/ hash: md5 - md5: 00682fbb7c897d179ed788f09be3b1e9.dir - size: 732559 - nfiles: 763 + md5: 04c061f1c2bf5fcebf3e65ae1df23961.dir + size: 352339 + nfiles: 375 grid_search@500-kdd_nsl-gzip_knn: cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl data.sample.train_size=500 data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null @@ -19159,12 +19279,12 @@ stages: deps: - path: conf/gzip_knn.yaml hash: md5 - md5: a58015cd6f327e171842b045a2524bfd - size: 2062 + md5: ceff1a602afc3323e49200a1da539310 + size: 2046 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_knn.yaml: hydra: @@ -19184,7 +19304,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -19223,14 +19342,14 @@ stages: outs: - path: kdd_nsl/logs/gzip_knn/500 hash: md5 - md5: f1d5a2b6b59bc61a8c8d9c52d3a2ad11.dir - size: 1496906 + md5: f549b868c9b1d774b5aa5333d8abe45e.dir + size: 1376339 nfiles: 514 - path: kdd_nsl/reports/gzip_knn/500/train/ hash: md5 - md5: bffa17c78573257f1d85dccf5d93fade.dir - size: 388686 - nfiles: 335 + md5: 094b000f73371e65f91890452d9d69f3.dir + size: 381867 + nfiles: 342 grid_search@500-kdd_nsl-gzip_logistic: cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl data.sample.train_size=500 data.sample.test_size=100 model_name=gzip_logistic @@ -19242,12 +19361,12 @@ stages: deps: - path: conf/gzip_logistic.yaml hash: md5 - md5: 847d4d804fff0b6f2533f90820eebd04 - size: 2205 + md5: a051c1bd6690aa80000909c49eb45023 + size: 2189 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_logistic.yaml: hydra: @@ -19267,7 +19386,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -19309,14 +19427,14 @@ stages: outs: - path: kdd_nsl/logs/gzip_logistic/500 hash: md5 - md5: 44795a3a64e10088623faf15b87a4548.dir - size: 1666384 + md5: 6b01fe4a99e91bc633976aa3c798ec5d.dir + size: 1521620 nfiles: 514 - path: kdd_nsl/reports/gzip_logistic/500/train/ hash: md5 - md5: 607cd0515dec2502b0bd11b6480b5d7b.dir - size: 565896 - nfiles: 357 + md5: 1730d6ac6bc42b13b1b4ef64a3812598.dir + size: 563747 + nfiles: 373 grid_search@500-kdd_nsl-gzip_svc: cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl data.sample.train_size=500 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null @@ -19327,12 +19445,12 @@ stages: deps: - path: conf/gzip_svc.yaml hash: md5 - md5: 957922cb6993eb99866232d944a4a106 - size: 2131 + md5: 71702231d42f4d68a2237772b3475697 + size: 2115 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_svc.yaml: hydra: @@ -19354,7 +19472,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -19394,13 +19511,13 @@ stages: outs: - path: kdd_nsl/logs/gzip_svc/500 hash: md5 - md5: 1ed2e3d83e888471981684eaaa3f3b8e.dir - size: 1613038 + md5: 8147396e4c263c06694eaf9acc5fda79.dir + size: 1465954 nfiles: 514 - path: kdd_nsl/reports/gzip_svc/500/train/ hash: md5 - md5: c53dae7497a8f55965cc708c28280f4e.dir - size: 555797 + md5: 452d9298ae9b99f1da7f423b7e13949d.dir + size: 555623 nfiles: 384 grid_search@500-sms_spam-gzip_knn: cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam @@ -19412,12 +19529,12 @@ stages: deps: - path: conf/gzip_knn.yaml hash: md5 - md5: a58015cd6f327e171842b045a2524bfd - size: 2062 + md5: ceff1a602afc3323e49200a1da539310 + size: 2046 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_knn.yaml: hydra: @@ -19437,7 +19554,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -19476,13 +19592,13 @@ stages: outs: - path: sms_spam/logs/gzip_knn/500 hash: md5 - md5: 0e5c9c1b5970ef63e76b3adcbb1d9bde.dir - size: 1465483 + md5: 6a032a4fa187f7444d1a6dcef094e3f1.dir + size: 1365875 nfiles: 514 - path: sms_spam/reports/gzip_knn/500/train/ hash: md5 - md5: dd14847ddf87817f4410aea70b8fdce3.dir - size: 378991 + md5: 4b62eb85519a3c3b7faf6b00b673b94d.dir + size: 372575 nfiles: 331 grid_search@500-sms_spam-gzip_logistic: cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam @@ -19495,12 +19611,12 @@ stages: deps: - path: conf/gzip_logistic.yaml hash: md5 - md5: 847d4d804fff0b6f2533f90820eebd04 - size: 2205 + md5: a051c1bd6690aa80000909c49eb45023 + size: 2189 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_logistic.yaml: hydra: @@ -19520,7 +19636,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -19562,14 +19677,14 @@ stages: outs: - path: sms_spam/logs/gzip_logistic/500 hash: md5 - md5: 6e6d0761de2d778fbdbebd1d547f04a1.dir - size: 1619183 + md5: 270344776fa2cc88fce23f89b15a0882.dir + size: 1517330 nfiles: 514 - path: sms_spam/reports/gzip_logistic/500/train/ hash: md5 - md5: fb78d7f4f526194a09b6561a121f734e.dir - size: 553072 - nfiles: 361 + md5: 72776456839e39a213bf000db2ca2c44.dir + size: 551977 + nfiles: 369 grid_search@500-sms_spam-gzip_svc: cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam data.sample.train_size=500 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null @@ -19580,12 +19695,12 @@ stages: deps: - path: conf/gzip_svc.yaml hash: md5 - md5: 957922cb6993eb99866232d944a4a106 - size: 2131 + md5: 71702231d42f4d68a2237772b3475697 + size: 2115 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_svc.yaml: hydra: @@ -19607,7 +19722,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -19647,13 +19761,13 @@ stages: outs: - path: sms_spam/logs/gzip_svc/500 hash: md5 - md5: 4b37a4947b8a27e8b050b76a2252f6d2.dir - size: 1542505 + md5: eefe1bc86da71e9b275bb91a94c7e1e5.dir + size: 1460547 nfiles: 514 - path: sms_spam/reports/gzip_svc/500/train/ hash: md5 - md5: adfaa61acf833b9b2d823fd944876030.dir - size: 543664 + md5: 71e3b0cc05eadc9ccec862d8a314ae76.dir + size: 543107 nfiles: 384 grid_search@500-truthseeker-gzip_knn: cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker @@ -19665,12 +19779,12 @@ stages: deps: - path: conf/gzip_knn.yaml hash: md5 - md5: a58015cd6f327e171842b045a2524bfd - size: 2062 + md5: ceff1a602afc3323e49200a1da539310 + size: 2046 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_knn.yaml: hydra: @@ -19690,7 +19804,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -19729,14 +19842,14 @@ stages: outs: - path: truthseeker/logs/gzip_knn/500 hash: md5 - md5: 8f89bb6eee2faa7d319f0e667a455558.dir - size: 1449788 + md5: b54fab88a876d95f9b2d92b0c287fbf4.dir + size: 1374058 nfiles: 514 - path: truthseeker/reports/gzip_knn/500/train/ hash: md5 - md5: 22ad9cc6a9f1fc454ff08e23e1194b6a.dir - size: 382020 - nfiles: 333 + md5: de58821607d6834fb53f8f0aec1e08df.dir + size: 383103 + nfiles: 329 grid_search@500-truthseeker-gzip_logistic: cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker data.sample.train_size=500 data.sample.test_size=100 model_name=gzip_logistic @@ -19748,12 +19861,12 @@ stages: deps: - path: conf/gzip_logistic.yaml hash: md5 - md5: 847d4d804fff0b6f2533f90820eebd04 - size: 2205 + md5: a051c1bd6690aa80000909c49eb45023 + size: 2189 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_logistic.yaml: hydra: @@ -19773,7 +19886,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -19815,14 +19927,14 @@ stages: outs: - path: truthseeker/logs/gzip_logistic/500 hash: md5 - md5: 536a09eb3f82d03737e3cec6aafdbac8.dir - size: 1605851 + md5: 28faffb212522c53212996b0a17adad4.dir + size: 1533992 nfiles: 514 - path: truthseeker/reports/gzip_logistic/500/train/ hash: md5 - md5: 4560cd0abd0609eebe34c6f578d77f2d.dir - size: 556183 - nfiles: 375 + md5: 3e62c32091d4e6cf11f8746d3023ea2b.dir + size: 555653 + nfiles: 371 grid_search@500-truthseeker-gzip_svc: cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker data.sample.train_size=500 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null @@ -19833,12 +19945,12 @@ stages: deps: - path: conf/gzip_svc.yaml hash: md5 - md5: 957922cb6993eb99866232d944a4a106 - size: 2131 + md5: 71702231d42f4d68a2237772b3475697 + size: 2115 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: conf/gzip_svc.yaml: hydra: @@ -19860,7 +19972,6 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true prior_weight: 1.0 consider_magic_clip: true @@ -19900,11 +20011,11 @@ stages: outs: - path: truthseeker/logs/gzip_svc/500 hash: md5 - md5: 10808502e0c1c7d780ea6178ae53c19c.dir - size: 1568093 + md5: 7aabf6a304d62119b25bf04f87fbf1e6.dir + size: 1477307 nfiles: 514 - path: truthseeker/reports/gzip_svc/500/train/ hash: md5 - md5: 1fb9105254065d6d93e9647e12d650b2.dir - size: 547905 + md5: 40fe30277b8a7d712eaee252561a010d.dir + size: 547190 nfiles: 384 diff --git a/examples/gzip/dvc.yaml b/examples/gzip/dvc.yaml index b7d4c8d6..e5f35871 100644 --- a/examples/gzip/dvc.yaml +++ b/examples/gzip/dvc.yaml @@ -71,106 +71,106 @@ stages: - params.yaml - raw_data/ # Raw data ############################################################################## - test_each_dataset: - matrix: - dataset : [ddos, truthseeker, sms_spam, kdd_nsl] - model_name : [gzip_knn, gzip_svc, gzip_logistic] - cmd : >- - python -m deckard.layers.optimise - stage=train - files.name=${item.model_name} - data.sample.train_size=100 - files.directory=${item.dataset} - data=${item.dataset} - dataset=${item.dataset} - model_name=${item.model_name} - model=${item.model_name} - hydra.run.dir=${item.dataset}/logs/train/${item.model_name} - ++raise_exception=True - deps: - - params.yaml - - ${files.directory}/${files.reports}/train/default/${files.score_dict_file} - outs: - - ${item.dataset}/${files.reports}/train/${item.model_name}/${files.score_dict_file} - - ${item.dataset}/logs/train/${item.model_name} - params: - - data - - model - - scorers - - files - - dataset - - model_name - - device_id + # test_each_dataset: + # matrix: + # dataset : [ddos, truthseeker, sms_spam, kdd_nsl] + # model_name : [gzip_knn, gzip_svc, gzip_logistic] + # cmd : >- + # python -m deckard.layers.optimise + # stage=train + # files.name=${item.model_name} + # data.sample.train_size=100 + # files.directory=${item.dataset} + # data=${item.dataset} + # dataset=${item.dataset} + # model_name=${item.model_name} + # model=${item.model_name} + # hydra.run.dir=${item.dataset}/logs/train/${item.model_name} + # ++raise_exception=True + # deps: + # - params.yaml + # - ${files.directory}/${files.reports}/train/default/${files.score_dict_file} + # outs: + # - ${item.dataset}/${files.reports}/train/${item.model_name}/${files.score_dict_file} + # - ${item.dataset}/logs/train/${item.model_name} + # params: + # - data + # - model + # - scorers + # - files + # - dataset + # - model_name + # - device_id ############################################################################## - test_each_metric: - matrix: - metric: [gzip, zstd, pkl, bz2, lzma,levenshtein, ratio, hamming, jaro, jaro_winkler, seqratio] - model : [gzip_knn,] # gzip_svc, gzip_logistic - dataset : [kdd_nsl] #truthseeker, sms_spam, ddos - train_size: [20] #100, 1000, 10000 - cmd : >- - python -m deckard.layers.optimise - stage=test_each_metric - files.name=${item.model}/${item.metric}/${item.train_size} - files.directory=${item.dataset} - data=${item.dataset} - data.sample.train_size=${item.train_size} - dataset=${item.dataset} - model=${item.model} - model_name=${model_name} - model.init.metric=${item.metric} - model.init.m=-1 - hydra.run.dir=${item.dataset}/logs/test_each_metric/${item.model}/${item.metric}/${item.train_size} - ++raise_exception=True - deps: - - params.yaml - - ${files.directory}/${files.reports}/train/default/${files.score_dict_file} - outs: - - ${item.dataset}/${files.reports}/test_each_metric/${item.model}/${item.metric}/${item.train_size}/${files.score_dict_file} - - ${item.dataset}/logs/test_each_metric/${item.model}/${item.metric}/${item.train_size} - params: - - data - - model - - scorers - - files - - dataset - - model_name - - device_id + # test_each_metric: + # matrix: + # metric: [gzip, zstd, pkl, bz2, lzma,levenshtein, ratio, hamming, jaro, jaro_winkler, seqratio] + # model : [gzip_knn,] # gzip_svc, gzip_logistic + # dataset : [kdd_nsl] #truthseeker, sms_spam, ddos + # train_size: [20] #100, 1000, 10000 + # cmd : >- + # python -m deckard.layers.optimise + # stage=test_each_metric + # files.name=${item.model}/${item.metric}/${item.train_size} + # files.directory=${item.dataset} + # data=${item.dataset} + # data.sample.train_size=${item.train_size} + # dataset=${item.dataset} + # model=${item.model} + # model_name=${model_name} + # model.init.metric=${item.metric} + # model.init.m=-1 + # hydra.run.dir=${item.dataset}/logs/test_each_metric/${item.model}/${item.metric}/${item.train_size} + # ++raise_exception=True + # deps: + # - params.yaml + # - ${files.directory}/${files.reports}/train/default/${files.score_dict_file} + # outs: + # - ${item.dataset}/${files.reports}/test_each_metric/${item.model}/${item.metric}/${item.train_size}/${files.score_dict_file} + # - ${item.dataset}/logs/test_each_metric/${item.model}/${item.metric}/${item.train_size} + # params: + # - data + # - model + # - scorers + # - files + # - dataset + # - model_name + # - device_id # ############################################################################## - test_each_model: - matrix: - metric: [gzip] #, zstd, pkl, bz2, lzma,levenshtein, ratio, hamming, jaro, jaro_winkler, seqratio - model : [gzip_knn, gzip_svc, gzip_logistic] - dataset : [kdd_nsl] #truthseeker, sms_spam, ddos - train_size: [20] #100, 1000, 10000 - cmd : >- - python -m deckard.layers.optimise - stage=test_each_model - files.name=${item.model}/${item.metric}/${item.train_size} - files.directory=${item.dataset} - data=${item.dataset} - data.sample.train_size=${item.train_size} - dataset=${item.dataset} - model=${item.model} - model_name=${model_name} - model.init.metric=${item.metric} - model.init.m=-1 - hydra.run.dir=${item.dataset}/logs/test_each_model/${item.model}/${item.metric}/${item.train_size} - ++raise_exception=True - deps: - - params.yaml - - ${files.directory}/${files.reports}/train/default/${files.score_dict_file} - outs: - - ${item.dataset}/${files.reports}/test_each_model/${item.model}/${item.metric}/${item.train_size}/${files.score_dict_file} - - ${item.dataset}/logs/test_each_model/${item.model}/${item.metric}/${item.train_size} - params: - - data - - model - - scorers - - files - - dataset - - model_name - - device_id + # test_each_model: + # matrix: + # metric: [gzip] #, zstd, pkl, bz2, lzma,levenshtein, ratio, hamming, jaro, jaro_winkler, seqratio + # model : [gzip_knn, gzip_svc, gzip_logistic] + # dataset : [kdd_nsl] #truthseeker, sms_spam, ddos + # train_size: [20] #100, 1000, 10000 + # cmd : >- + # python -m deckard.layers.optimise + # stage=test_each_model + # files.name=${item.model}/${item.metric}/${item.train_size} + # files.directory=${item.dataset} + # data=${item.dataset} + # data.sample.train_size=${item.train_size} + # dataset=${item.dataset} + # model=${item.model} + # model_name=${model_name} + # model.init.metric=${item.metric} + # model.init.m=-1 + # hydra.run.dir=${item.dataset}/logs/test_each_model/${item.model}/${item.metric}/${item.train_size} + # ++raise_exception=True + # deps: + # - params.yaml + # - ${files.directory}/${files.reports}/train/default/${files.score_dict_file} + # outs: + # - ${item.dataset}/${files.reports}/test_each_model/${item.model}/${item.metric}/${item.train_size}/${files.score_dict_file} + # - ${item.dataset}/logs/test_each_model/${item.model}/${item.metric}/${item.train_size} + # params: + # - data + # - model + # - scorers + # - files + # - dataset + # - model_name + # - device_id ############################################################################## grid_search: matrix: @@ -222,37 +222,37 @@ stages: # outs: # - conf/model/best_${item.model}_${item.dataset}.yaml ############################################################################# - test_each_method: - matrix: - dataset : [ddos] # kdd_nsl, truthseeker, sms_spam, - method: [medoid, sum, svc, hardness, nearmiss,random,knn] - cmd : >- - python -m deckard.layers.optimise - stage=train - +model.init.sampling_method=${item.method} - model.init.m=3 - data.sample.train_size=100 - files.name=${item.method} - files.directory=${item.dataset} - data=${item.dataset} - dataset=${item.dataset} - model_name=${item.method} - hydra.run.dir=${item.dataset}/logs/method/${item.method} - ++raise_exception=True - deps: - - params.yaml - - ${files.directory}/${files.reports}/train/default/${files.score_dict_file} - outs: - - ${item.dataset}/${files.reports}/train/${item.method}/${files.score_dict_file} - - ${item.dataset}/logs/method/${item.method} - params: - - data - - model - - scorers - - files - - dataset - - model_name - - device_id + # test_each_method: + # matrix: + # dataset : [ddos] # kdd_nsl, truthseeker, sms_spam, + # method: [medoid, sum, svc, hardness, nearmiss,random,knn] + # cmd : >- + # python -m deckard.layers.optimise + # stage=train + # +model.init.sampling_method=${item.method} + # model.init.m=3 + # data.sample.train_size=100 + # files.name=${item.method} + # files.directory=${item.dataset} + # data=${item.dataset} + # dataset=${item.dataset} + # model_name=${item.method} + # hydra.run.dir=${item.dataset}/logs/method/${item.method} + # ++raise_exception=True + # deps: + # - params.yaml + # - ${files.directory}/${files.reports}/train/default/${files.score_dict_file} + # outs: + # - ${item.dataset}/${files.reports}/train/${item.method}/${files.score_dict_file} + # - ${item.dataset}/logs/method/${item.method} + # params: + # - data + # - model + # - scorers + # - files + # - dataset + # - model_name + # - device_id ############################################################################## condense: matrix: From 856654056f35e74a76f5f28cacd7b105455ffb6c Mon Sep 17 00:00:00 2001 From: Charlie Meyers Date: Mon, 22 Jul 2024 14:12:27 +0200 Subject: [PATCH 21/35] rename functions for main script --- deckard/layers/merge.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/deckard/layers/merge.py b/deckard/layers/merge.py index 13d62ea1..4f5fe972 100644 --- a/deckard/layers/merge.py +++ b/deckard/layers/merge.py @@ -9,7 +9,7 @@ logger = logging.getLogger(__name__) -__all__ = ["merge_csv", "main", "parser"] +__all__ = ["merge_csv", "main", "merge_parser"] def merge_csv( @@ -129,7 +129,7 @@ def parse_cleaning_config(config_file, metadata_file=None, subset_metadata_file= return dict_ -def main(args): +def merge_main(args): config = parse_cleaning_config(args.config, args.metadata, args.subset_metadata) if args.output_folder is None: args.output_folder = Path().cwd() @@ -199,33 +199,33 @@ def add_subset_metadata(df, metadata_list=[]): return df -parser = argparse.ArgumentParser() -parser.add_argument( +merge_parser = argparse.ArgumentParser() +merge_parser.add_argument( "--output_file", type=str, help="Name of the output file", default="merged.csv", ) -parser.add_argument( +merge_parser.add_argument( "--output_folder", type=str, help="Name of the output folder", required=False, ) -parser.add_argument( +merge_parser.add_argument( "--smaller_file", type=str, help="Name(s) of the files to merge into the big file.", required=False, nargs="*", ) -parser.add_argument( +merge_parser.add_argument( "--config", type=str, help="Name of file containing a 'fillna' config dictionary.", required=False, ) -parser.add_argument( +merge_parser.add_argument( "--metadata", type=str, help="Name of file containing a 'metadata' dictionary.", @@ -233,14 +233,14 @@ def add_subset_metadata(df, metadata_list=[]): # set default to --config default=None, ) -parser.add_argument( +merge_parser.add_argument( "--subset_metadata", type=str, help="Name of file containing a 'subset_metadata' dictionary.", required=False, default=None, ) -parser.add_argument( +merge_parser.add_argument( "--how", type=str, help="Type of merge to perform. Default is 'outer'.", @@ -248,5 +248,5 @@ def add_subset_metadata(df, metadata_list=[]): ) if __name__ == "__main__": - args = parser.parse_args() - main(args) + args = merge_parser.parse_args() + merge_main(args) From edfe15f981356971fec1bcd96d43fad848539cfe Mon Sep 17 00:00:00 2001 From: Charlie Meyers Date: Mon, 22 Jul 2024 14:19:53 +0200 Subject: [PATCH 22/35] update layers for main file --- deckard/layers/generate_webpage.py | 63 ------------------------------ deckard/layers/optimise.py | 6 +-- deckard/layers/plots.py | 18 ++++----- deckard/layers/prepare_queue.py | 6 ++- 4 files changed, 17 insertions(+), 76 deletions(-) delete mode 100644 deckard/layers/generate_webpage.py diff --git a/deckard/layers/generate_webpage.py b/deckard/layers/generate_webpage.py deleted file mode 100644 index bd2699c7..00000000 --- a/deckard/layers/generate_webpage.py +++ /dev/null @@ -1,63 +0,0 @@ -import os -import csv -from bs4 import BeautifulSoup - - -def generate_html_file(csv_file_path, output_folder): - # Read the CSV file - with open(csv_file_path, "r") as file: - reader = csv.reader(file) - data = list(reader) - - # Get the title of the CSV file - file_name = os.path.basename(csv_file_path) - title = os.path.splitext(file_name)[0] - - # Create an HTML file path and open the file - html_file_path = os.path.join(output_folder, f"{title}.html") - with open(html_file_path, "w") as html_file: - # Create a BeautifulSoup object - soup = BeautifulSoup("", "html.parser") - - # Add the title to the HTML file - soup.append(BeautifulSoup(f"

{title}

", "html.parser")) - - # Create an HTML table from the CSV data - table_html = "
{cell}
" - for row in data: - table_html += "" - for cell in row: - # Check if the cell is a string representing a valid path - if isinstance(cell, str) and os.path.exists(cell): - # Create a hyperlink with the capitalized name of the file - file_name = os.path.basename(cell) - link_title = os.path.splitext(file_name)[0] - cell = f'{link_title.capitalize()}' - - table_html += f"" - table_html += "" - table_html += "
{cell}
" - - # Add the table to the HTML file - soup.append(BeautifulSoup(table_html, "html.parser")) - - # Write the HTML content to the file - html_file.write(soup.prettify()) - - -def parse_folder(folder_path): - # Create the output folder if it doesn't exist - os.makedirs(folder_path, exist_ok=True) - - # Iterate over the CSV files in the folder - for file_name in os.listdir(folder_path): - if file_name.endswith(".csv"): - csv_file_path = os.path.join(folder_path, file_name) - generate_html_file(csv_file_path, folder_path) - - -# Define the folder path containing CSV files -folder_path = "output/reports" # Update with your folder path - -# Parse the folder and generate HTML files -parse_folder(folder_path) diff --git a/deckard/layers/optimise.py b/deckard/layers/optimise.py index 9f96bd9c..d8498038 100644 --- a/deckard/layers/optimise.py +++ b/deckard/layers/optimise.py @@ -188,7 +188,7 @@ def parse_stage(stage: str = None, params: dict = None, path=None) -> dict: key_list.extend(new_keys) else: - raise TypeError(f"Expected str or dict, got {type(params)}") + raise TypeError(f"Expected dict, got {type(params)}") params = read_subset_of_params(key_list, params) # Load files from dvc with open(Path(path, "dvc.yaml"), "r") as f: @@ -324,8 +324,8 @@ def optimise(cfg: DictConfig) -> None: logger = logging.getLogger(__name__) @hydra.main(config_path=config_path, config_name=config_name, version_base="1.3") - def hydra_optimise(cfg: DictConfig) -> float: + def optimise_main(cfg: DictConfig) -> float: score = optimise(cfg) return score - hydra_optimise() + optimise_main() diff --git a/deckard/layers/plots.py b/deckard/layers/plots.py index af653714..8fbc3de6 100644 --- a/deckard/layers/plots.py +++ b/deckard/layers/plots.py @@ -323,35 +323,35 @@ def scatter_plot( return graph -parser = argparse.ArgumentParser() -parser.add_argument( +plots_parser = argparse.ArgumentParser() +plots_parser.add_argument( "-p", "--path", type=str, help="Path to the plot folder", required=True, ) -parser.add_argument( +plots_parser.add_argument( "-f", "--file", type=str, help="Data file to read from", required=True, ) -parser.add_argument( +plots_parser.add_argument( "-t", "--plotfiletype", type=str, help="Filetype of the plots", default=".eps", ) -parser.add_argument( +plots_parser.add_argument( "-v", "--verbosity", default="INFO", help="Increase output verbosity", ) -parser.add_argument( +plots_parser.add_argument( "-c", "--config", help="Path to the config file", @@ -359,7 +359,7 @@ def scatter_plot( ) -def main(args): +def plots_main(args): logging.basicConfig(level=args.verbosity) assert Path( args.file, @@ -405,5 +405,5 @@ def main(args): if __name__ == "__main__": - args = parser.parse_args() - main(args) + args = plots_parser.parse_args() + plots_main(args) diff --git a/deckard/layers/prepare_queue.py b/deckard/layers/prepare_queue.py index 54d1cefe..43fcdc8c 100644 --- a/deckard/layers/prepare_queue.py +++ b/deckard/layers/prepare_queue.py @@ -1,5 +1,6 @@ import logging from copy import deepcopy +import sys from pathlib import Path import yaml from hydra.utils import instantiate @@ -272,7 +273,7 @@ def prepare_experiment_folder(cfg: DictConfig) -> None: return exp, scorer, direction, folder, id_ -def main(): +def prepare_queue_main(): # Use sys calls to look for --working_dir, --config_dir, and --config_file args = sys.argv global working_dir @@ -326,3 +327,6 @@ def hydra_prepare(cfg: DictConfig) -> float: return 0 hydra_prepare() + +if __name__ == "__main__": + prepare_queue_main() \ No newline at end of file From e06dc96d3f3af93c004e622809f7ce334813a206 Mon Sep 17 00:00:00 2001 From: Charlie Meyers Date: Mon, 22 Jul 2024 14:23:35 +0200 Subject: [PATCH 23/35] update main script --- deckard/__main__.py | 112 ++++++++++++++++++++-------------------- deckard/layers/parse.py | 2 + 2 files changed, 58 insertions(+), 56 deletions(-) diff --git a/deckard/__main__.py b/deckard/__main__.py index 79ff3b1f..bb703677 100644 --- a/deckard/__main__.py +++ b/deckard/__main__.py @@ -1,77 +1,77 @@ #!/usr/bin/env python3 -import argparse -import subprocess +import sys import logging -from pathlib import Path from omegaconf import OmegaConf -from .layers.parse import save_params_file +from .layers.afr import afr_parser, afr_main +from .layers.attack import attack_parser, attack_main +from .layers.clean_data import clean_data_parser, clean_data_main +from .layers.compile import compile_parser, compile_main +from .layers.data import data_parser, data_main +from .layers.experiment import experiment_parser, experiment_main +from .layers.find_best import find_best_parser, find_best_main +from .layers.generate_grid import generate_grid_parser, generate_grid_main +from .layers.hydra_test import hydra_test_main +from .layers.merge import merge_parser, merge_main +from .layers.optimise import optimise_main +from .layers.parse import hydra_parser, parse_hydra_config +from .layers.plots import plots_parser, plots_main +from .layers.prepare_queue import prepare_queue_main +from .layers.query_kepler import kepler_parser, kepler_main OmegaConf.register_new_resolver("eval", eval) logger = logging.getLogger(__name__) +layer_list = [ + "afr", + "attack", + "clean_data" + "compile", + "data", + "experiment", + "find_best", + "generate_grid", + "hydra_test", + "merge", + "optimise", + "parse", + "plots", + "prepare_queue", + "query_kepler", +] -def main(args): +deckard_layer_dict = { + "afr": (afr_parser, afr_main), + "attack": (attack_parser, attack_main), + "clean_data": (clean_data_parser, clean_data_main), + "compile": (compile_parser, compile_main), + "data": (data_parser, data_main), + "experiment": (experiment_parser, experiment_main), + "find_best": (find_best_parser, find_best_main), + "generate_grid": (generate_grid_parser, generate_grid_main), + "hydra_test": (None, hydra_test_main), + "merge": (merge_parser, merge_main), + "optimise": (None, optimise_main), + "parse": (hydra_parser, parse_hydra_config), + "plots": (plots_parser, plots_main), + "prepare_queue": (None, prepare_queue_main), + "query_kepler": (kepler_parser, kepler_main), +} +assert len(deckard_layer_dict) == len(layer_list), "Some layers are missing from the deckard_layer_dict" +def main(layer, args): # Get the layer and the main function for the layer. - layer = args.layer if layer not in deckard_layer_dict: raise ValueError(f"Layer {layer} not found.") - print("Trying to run layer", layer) parser, sub_main = deckard_layer_dict[layer] # Parse the arguments. args = parser.parse_args(args.args) # Print the arguments and values - import yaml - - print(yaml.dump(OmegaConf.to_container(args))) - input("Press Enter to continue...") # Run the main function. sub_main(args) -parser = argparse.ArgumentParser() -# Choose which layers to run. -parser.add_argument("layer", help="The layers to run.") -# The rest of the arguments are passed to the layer. -parser.add_argument( - "args", - nargs=argparse.REMAINDER, - help="Arguments to pass to the layer.", -) -# parse the layer to know which subparser to use. -args = parser.parse_args() - if __name__ == "__main__": - logging.basicConfig(level=logging.INFO) - parser = argparse.ArgumentParser() - parser.add_argument( - "--submodule", - type=str, - help=f"Submodule to run. Choices: {layer_list}", - ) - parser.add_argument( - "--config_file", - type=str, - help="default hydra configuration file that you would like to reproduce with dvc repro.", - ) - parser.add_argument("--config_dir", type=str, default="conf") - parser.add_argument("other_args", type=str, nargs="*") - args = parser.parse_args() - submodule = args.submodule - if submodule is not None: - assert ( - args.config_file is None - ), "config_file and submodule cannot be specified at the same time" - if submodule not in layer_list and submodule is not None: - raise ValueError(f"Submodule {submodule} not found. Choices: {layer_list}") - if len(args.other_args) > 0: - other_args = " ".join(args.other_args) - else: - other_args = [] - if submodule is None: - assert ( - parse_and_repro(other_args, args.config_file, config_dir=args.config_dir) - == 0 - ) - else: - assert run_submodule(submodule, other_args) == 0 + # pop the first argument which is the script name + layer = sys.argv.pop(1) + # pass the rest of the arguments to the main function + main(layer, sys.argv) \ No newline at end of file diff --git a/deckard/layers/parse.py b/deckard/layers/parse.py index 44a2200b..3a4eec4e 100644 --- a/deckard/layers/parse.py +++ b/deckard/layers/parse.py @@ -5,6 +5,8 @@ from omegaconf import OmegaConf from .utils import save_params_file +__all__ = ["parse_hydra_config", "hydra_parser"] + logger = logging.getLogger(__name__) hydra_parser = argparse.ArgumentParser() hydra_parser.add_argument("overrides", type=str, nargs="*", default=None) From 97003e0081ee00066bc68ea8f9225cdfdaf8cc12 Mon Sep 17 00:00:00 2001 From: Charlie Meyers Date: Mon, 22 Jul 2024 14:24:46 +0200 Subject: [PATCH 24/35] linting --- deckard/__main__.py | 17 ++++++++++------- deckard/layers/compile.py | 7 +++++-- deckard/layers/find_best.py | 20 +++++++++++++++----- deckard/layers/prepare_queue.py | 3 ++- deckard/layers/query_kepler.py | 2 ++ examples/security/classification/dvc.yaml | 2 +- examples/security/classification/plots.py | 5 +---- examples/security/kdd-nsl/plots.py | 5 +---- examples/security/kdd-nsl/retrain.py | 2 +- examples/security/truthseeker/dvc.yaml | 2 +- examples/security/truthseeker/plots.py | 9 ++++----- 11 files changed, 43 insertions(+), 31 deletions(-) diff --git a/deckard/__main__.py b/deckard/__main__.py index bb703677..66ee87cb 100644 --- a/deckard/__main__.py +++ b/deckard/__main__.py @@ -10,9 +10,9 @@ from .layers.experiment import experiment_parser, experiment_main from .layers.find_best import find_best_parser, find_best_main from .layers.generate_grid import generate_grid_parser, generate_grid_main -from .layers.hydra_test import hydra_test_main +from .layers.hydra_test import hydra_test_main from .layers.merge import merge_parser, merge_main -from .layers.optimise import optimise_main +from .layers.optimise import optimise_main from .layers.parse import hydra_parser, parse_hydra_config from .layers.plots import plots_parser, plots_main from .layers.prepare_queue import prepare_queue_main @@ -24,8 +24,7 @@ layer_list = [ "afr", "attack", - "clean_data" - "compile", + "clean_data" "compile", "data", "experiment", "find_best", @@ -36,7 +35,7 @@ "parse", "plots", "prepare_queue", - "query_kepler", + "query_kepler", ] @@ -57,7 +56,11 @@ "prepare_queue": (None, prepare_queue_main), "query_kepler": (kepler_parser, kepler_main), } -assert len(deckard_layer_dict) == len(layer_list), "Some layers are missing from the deckard_layer_dict" +assert len(deckard_layer_dict) == len( + layer_list +), "Some layers are missing from the deckard_layer_dict" + + def main(layer, args): # Get the layer and the main function for the layer. if layer not in deckard_layer_dict: @@ -74,4 +77,4 @@ def main(layer, args): # pop the first argument which is the script name layer = sys.argv.pop(1) # pass the rest of the arguments to the main function - main(layer, sys.argv) \ No newline at end of file + main(layer, sys.argv) diff --git a/deckard/layers/compile.py b/deckard/layers/compile.py index d8e58f88..bfc76eaf 100644 --- a/deckard/layers/compile.py +++ b/deckard/layers/compile.py @@ -207,10 +207,13 @@ def compile_main(parse_results, save_results, args): assert Path( report_file, ).exists(), f"Results file {report_file} does not exist. Something went wrong." - + + compile_parser = argparse.ArgumentParser() compile_parser.add_argument("--results_file", type=str, default="results.csv") -compile_parser.add_argument("--report_folder", type=str, default="reports", required=True) +compile_parser.add_argument( + "--report_folder", type=str, default="reports", required=True +) compile_parser.add_argument("--results_folder", type=str, default=".") compile_parser.add_argument("--exclude", type=list, default=None, nargs="*") compile_parser.add_argument("--verbose", type=str, default="INFO") diff --git a/deckard/layers/find_best.py b/deckard/layers/find_best.py index 7a21818d..b7aa9d50 100644 --- a/deckard/layers/find_best.py +++ b/deckard/layers/find_best.py @@ -29,7 +29,9 @@ def find_optuna_best( if isinstance(direction, str): directions = [direction] else: - assert isinstance(directions, list), f"Directions is not a list: {type(directions)}" + assert isinstance( + directions, list + ), f"Directions is not a list: {type(directions)}" for direction in directions: assert direction in [ "minimize", @@ -61,7 +63,9 @@ def find_optuna_best( Path(study_csv).parent.mkdir(parents=True, exist_ok=True) df.to_csv(study_csv) # To dotlist - params = merge_best_with_default(config_folder, default_config, config_subdir, study) + params = merge_best_with_default( + config_folder, default_config, config_subdir, study + ) if params_file is not None: params_file = create_new_config_in_subdir( params_file, @@ -72,7 +76,10 @@ def find_optuna_best( ) return params -def merge_best_with_default(config_folder, default_config, config_subdir, study, use_optuna_best = True): + +def merge_best_with_default( + config_folder, default_config, config_subdir, study, use_optuna_best=True +): if use_optuna_best is True: best_params = flatten_dict(study.best_params) more_params = flatten_dict(study.best_trial.user_attrs) @@ -98,6 +105,7 @@ def merge_best_with_default(config_folder, default_config, config_subdir, study, ) return params + def group_by_params(df): not_these = ["number", "value"] val_cols = [ @@ -138,6 +146,7 @@ def group_by_params(df): assert isinstance(new_df, pd.DataFrame), f"df is not a dataframe: {type(new_df)}" return new_df + def get_overrides(config_subdir, best_params): overrides = [] # Changing the keys to hydra override format @@ -198,8 +207,6 @@ def create_new_config_in_subdir( return params_file - - def override_default_with_best( config_folder, default_config, @@ -214,6 +221,7 @@ def override_default_with_best( cfg = OmegaConf.to_container(cfg, resolve=False) return cfg + find_best_parser = argparse.ArgumentParser() find_best_parser.add_argument("--params_file", type=str, default=True) @@ -228,6 +236,7 @@ def override_default_with_best( find_best_parser.add_argument("--direction", type=str, default="maximize") find_best_parser.add_argument("--study_type", type=str, default="optuna") + def find_best_main(find_optuna_best, args): args.config_folder = Path(args.config_folder).resolve().as_posix() logging @@ -248,6 +257,7 @@ def find_best_main(find_optuna_best, args): else: raise NotImplementedError(f"Study type {args.study_type} not implemented.") + if __name__ == "__main__": args = find_best_parser.parse_args() find_best_main(find_optuna_best, args) diff --git a/deckard/layers/prepare_queue.py b/deckard/layers/prepare_queue.py index 43fcdc8c..ddec462d 100644 --- a/deckard/layers/prepare_queue.py +++ b/deckard/layers/prepare_queue.py @@ -328,5 +328,6 @@ def hydra_prepare(cfg: DictConfig) -> float: hydra_prepare() + if __name__ == "__main__": - prepare_queue_main() \ No newline at end of file + prepare_queue_main() diff --git a/deckard/layers/query_kepler.py b/deckard/layers/query_kepler.py index be86284e..fe67fae3 100644 --- a/deckard/layers/query_kepler.py +++ b/deckard/layers/query_kepler.py @@ -16,6 +16,7 @@ p100 = 250 / 3600 l4 = 72 / 3600 + @dataclass class PromQuery: def __init__(self): @@ -123,6 +124,7 @@ def kepler_main(args): data.at[index, "peak_power"] = peak_power data.to_csv(output_file) + kepler_parser = argparse.ArgumentParser() kepler_parser.add_argument("--input_file", type=str, default=None) kepler_parser.add_argument("--output_file", type=str, default=None) diff --git a/examples/security/classification/dvc.yaml b/examples/security/classification/dvc.yaml index 0d44db32..4ee7d639 100644 --- a/examples/security/classification/dvc.yaml +++ b/examples/security/classification/dvc.yaml @@ -156,4 +156,4 @@ stages: move_files: cmd: >- cp -r ./plots/* ~/KDD-Paper-EAI-AISEC/generated/ - #&& rm ~/KDD-Paper-EAI-AISEC/generated/.gitignore \ No newline at end of file + #&& rm ~/KDD-Paper-EAI-AISEC/generated/.gitignore diff --git a/examples/security/classification/plots.py b/examples/security/classification/plots.py index 6b217b01..b815a223 100644 --- a/examples/security/classification/plots.py +++ b/examples/security/classification/plots.py @@ -18,10 +18,7 @@ # else: # results = parse_results("reports/model_queue/") results = pd.read_csv("output/train.csv") -input_size = ( - results["data.generate.n_samples"] - * results["data.generate.n_features"] -) +input_size = results["data.generate.n_samples"] * results["data.generate.n_features"] results["Kernel"] = results["model.init.kernel"].copy() results["Features"] = results["data.generate.n_features"].copy() results["Samples"] = results["data.sample.train_size"].copy() diff --git a/examples/security/kdd-nsl/plots.py b/examples/security/kdd-nsl/plots.py index 218e142f..b5499185 100644 --- a/examples/security/kdd-nsl/plots.py +++ b/examples/security/kdd-nsl/plots.py @@ -35,9 +35,6 @@ attack_results[col] = attack_results[col].apply(lambda x: x[0]) - - - graph4 = sns.lineplot( x="data.sample.train_size", y="train_time", @@ -355,4 +352,4 @@ graph10.legend(loc="center left", bbox_to_anchor=(1, 0.5), ncol=1, title="Kernel") fig.tight_layout(h_pad=0.5) fig.savefig("plots/retrain_confidence_vs_attack_parameters.eps") -plt.gcf().clear() \ No newline at end of file +plt.gcf().clear() diff --git a/examples/security/kdd-nsl/retrain.py b/examples/security/kdd-nsl/retrain.py index 7daf5602..83b398aa 100644 --- a/examples/security/kdd-nsl/retrain.py +++ b/examples/security/kdd-nsl/retrain.py @@ -395,7 +395,7 @@ def save_results_and_outputs(results, outputs, path="retrain") -> list: ) as f: probs = json.load(f) probs = np.array(probs) - if len(probs.shape) > 1: + if len(probs.shape) > 1: probs = np.squeeze(probs) probs = probs[:, 1] else: diff --git a/examples/security/truthseeker/dvc.yaml b/examples/security/truthseeker/dvc.yaml index 12dde685..0794289c 100644 --- a/examples/security/truthseeker/dvc.yaml +++ b/examples/security/truthseeker/dvc.yaml @@ -154,4 +154,4 @@ stages: - plots/retrain_time.eps move_files: cmd: >- - cp -r ./plots/* ~/KDD-Paper-EAI-AISEC/truthseeker/ && rm ~/KDD-Paper-EAI-AISEC/truthseeker/.gitignore \ No newline at end of file + cp -r ./plots/* ~/KDD-Paper-EAI-AISEC/truthseeker/ && rm ~/KDD-Paper-EAI-AISEC/truthseeker/.gitignore diff --git a/examples/security/truthseeker/plots.py b/examples/security/truthseeker/plots.py index fc336edd..b5499185 100644 --- a/examples/security/truthseeker/plots.py +++ b/examples/security/truthseeker/plots.py @@ -35,9 +35,6 @@ attack_results[col] = attack_results[col].apply(lambda x: x[0]) - - - graph4 = sns.lineplot( x="data.sample.train_size", y="train_time", @@ -334,7 +331,8 @@ ax=ax[1, 0], legend=False, color="darkred", - style_order=["rbf", "poly", "linear"],err_style="bars", + style_order=["rbf", "poly", "linear"], + err_style="bars", errorbar=("ci", 99), ) graph11.set(xscale="log", xlabel="Maximum Iterations", ylabel="False Confidence") @@ -346,7 +344,8 @@ ax=ax[1, 1], legend=False, color="darkred", - style_order=["rbf", "poly", "linear"],err_style="bars", + style_order=["rbf", "poly", "linear"], + err_style="bars", errorbar=("ci", 99), ) graph12.set(xscale="log", xlabel="Batch Size", ylabel="False Confidence") From 6c9ca99c9237fd18cb9be21125b634233dae2032 Mon Sep 17 00:00:00 2001 From: Charlie Meyers Date: Mon, 22 Jul 2024 14:26:10 +0200 Subject: [PATCH 25/35] linting --- deckard/__main__.py | 2 +- deckard/layers/compile.py | 5 ++++- deckard/layers/find_best.py | 14 +++++++++++--- deckard/layers/hydra_test.py | 2 +- deckard/layers/merge.py | 2 +- 5 files changed, 18 insertions(+), 7 deletions(-) diff --git a/deckard/__main__.py b/deckard/__main__.py index 66ee87cb..87a38abc 100644 --- a/deckard/__main__.py +++ b/deckard/__main__.py @@ -57,7 +57,7 @@ "query_kepler": (kepler_parser, kepler_main), } assert len(deckard_layer_dict) == len( - layer_list + layer_list, ), "Some layers are missing from the deckard_layer_dict" diff --git a/deckard/layers/compile.py b/deckard/layers/compile.py index bfc76eaf..262fe2f2 100644 --- a/deckard/layers/compile.py +++ b/deckard/layers/compile.py @@ -212,7 +212,10 @@ def compile_main(parse_results, save_results, args): compile_parser = argparse.ArgumentParser() compile_parser.add_argument("--results_file", type=str, default="results.csv") compile_parser.add_argument( - "--report_folder", type=str, default="reports", required=True + "--report_folder", + type=str, + default="reports", + required=True, ) compile_parser.add_argument("--results_folder", type=str, default=".") compile_parser.add_argument("--exclude", type=list, default=None, nargs="*") diff --git a/deckard/layers/find_best.py b/deckard/layers/find_best.py index b7aa9d50..7cebd456 100644 --- a/deckard/layers/find_best.py +++ b/deckard/layers/find_best.py @@ -30,7 +30,8 @@ def find_optuna_best( directions = [direction] else: assert isinstance( - directions, list + directions, + list, ), f"Directions is not a list: {type(directions)}" for direction in directions: assert direction in [ @@ -64,7 +65,10 @@ def find_optuna_best( df.to_csv(study_csv) # To dotlist params = merge_best_with_default( - config_folder, default_config, config_subdir, study + config_folder, + default_config, + config_subdir, + study, ) if params_file is not None: params_file = create_new_config_in_subdir( @@ -78,7 +82,11 @@ def find_optuna_best( def merge_best_with_default( - config_folder, default_config, config_subdir, study, use_optuna_best=True + config_folder, + default_config, + config_subdir, + study, + use_optuna_best=True, ): if use_optuna_best is True: best_params = flatten_dict(study.best_params) diff --git a/deckard/layers/hydra_test.py b/deckard/layers/hydra_test.py index 95af10dd..21db541a 100644 --- a/deckard/layers/hydra_test.py +++ b/deckard/layers/hydra_test.py @@ -1,7 +1,7 @@ from omegaconf import DictConfig, OmegaConf from pathlib import Path import sys - +import hydra working_dir = Path().cwd() config_dir = "conf" diff --git a/deckard/layers/merge.py b/deckard/layers/merge.py index 4f5fe972..991b554d 100644 --- a/deckard/layers/merge.py +++ b/deckard/layers/merge.py @@ -9,7 +9,7 @@ logger = logging.getLogger(__name__) -__all__ = ["merge_csv", "main", "merge_parser"] +__all__ = ["merge_csv", "merge_main", "merge_parser"] def merge_csv( From 3c82c93d98533ca4a95faf87f92d449deacef182 Mon Sep 17 00:00:00 2001 From: Charlie Meyers Date: Tue, 30 Jul 2024 20:10:08 +0200 Subject: [PATCH 26/35] update __all__ --- deckard/layers/afr.py | 1 + examples/gzip/gzip_classifier.py | 102 ++++++++++++++++++++----------- 2 files changed, 67 insertions(+), 36 deletions(-) diff --git a/deckard/layers/afr.py b/deckard/layers/afr.py index 52563536..25098367 100644 --- a/deckard/layers/afr.py +++ b/deckard/layers/afr.py @@ -28,6 +28,7 @@ logger = logging.getLogger(__name__) +__all__ = ["afr_main", "survival_probability_calibration", "fit_aft", "plot_aft", "afr_parser"] # Modified from https://github.com/CamDavidsonPilon/lifelines/blob/master/lifelines/calibration.py def survival_probability_calibration( diff --git a/examples/gzip/gzip_classifier.py b/examples/gzip/gzip_classifier.py index 01f8813f..b592ec0a 100644 --- a/examples/gzip/gzip_classifier.py +++ b/examples/gzip/gzip_classifier.py @@ -16,6 +16,7 @@ # python -m pip install numpy scikit-learn tqdm scikit-learn-extra pandas imbalanced-learn import numpy as np +import warnings import gzip from tqdm import tqdm from pathlib import Path @@ -33,6 +34,7 @@ from sklearn.svm import SVC from sklearn.linear_model import LogisticRegression from sklearn_extra.cluster import KMedoids +from sklearn.exceptions import DataConversionWarning from imblearn.under_sampling import ( CondensedNearestNeighbour, NearMiss, @@ -131,6 +133,7 @@ def ncd( **string_metrics, } +all_condensers = ["sum", "mean", "medoid", "random", "knn", "svc", "hardness", "nearmiss"] def _calculate_string_distance(x1, x2, method): x1 = str(x1) @@ -420,8 +423,16 @@ def _prepare_training_matrix(self, n_jobs=-1): n_jobs=n_jobs, ) self._save_distance_matrix(self.distance_matrix, distance_matrix) - elif isinstance(self.distance_matrix, np.ndarray): + elif isinstance(self.distance_matrix, np.ndarray) and len(self.distance_matrix) == len(self.X_): distance_matrix = self.distance_matrix + elif isinstance(self.distance_matrix, np.ndarray) and len(self.distance_matrix) != len(self.X_): + distance_matrix = self._calculate_distance_matrix( + self.X_, + self.X_, + Cx1=self.Cx_, + Cx2=self.Cx_, + n_jobs=n_jobs, + ) elif isinstance(self.distance_matrix, type(None)): distance_matrix = self._calculate_distance_matrix( self.X_, @@ -434,6 +445,9 @@ def _prepare_training_matrix(self, n_jobs=-1): raise ValueError( f"distance_matrix must be a path to a numpy file or a numpy array, got {type(self.distance_matrix)}", ) + assert distance_matrix.shape[0] == distance_matrix.shape[1], f"Distance matrix must be square, got {distance_matrix.shape}" + assert len(self.X_) == distance_matrix.shape[0], f"Expected len(X) == {distance_matrix.shape[0]}" + assert len(self.y_) == distance_matrix.shape[0], f"Expected len(y) == {distance_matrix.shape[0]}" return distance_matrix def _find_best_samples(self, method="medoid", n_jobs=-1): @@ -521,12 +535,13 @@ def _find_best_samples(self, method="medoid", n_jobs=-1): distance_matrix, columns=list(range(len(distance_matrix))), ) - y = pd.DataFrame(y, columns=["y"]) - y.index = list(range(len(y))) distance_matrix, y = model.fit_resample(distance_matrix, y) indices = y.index[: m * n_classes] else: raise NotImplementedError(f"Method {method} not supported") + + if len(indices) > len(self.X_): + indices = indices[: len(self.X_)] return indices def fit(self, X: np.ndarray, y: np.ndarray, n_jobs=-1): @@ -540,7 +555,7 @@ def fit(self, X: np.ndarray, y: np.ndarray, n_jobs=-1): GzipClassifier: The fitted model """ assert len(X) == len(y), f"Expected {len(X)} == {len(y)}" - logger.info(f"Fitting with X of shape {X.shape} and y of shape {y.shape}") + logger.debug(f"Fitting with X of shape {X.shape} and y of shape {y.shape}") self.X_ = np.array(X) if not isinstance(X, np.ndarray) else X y = np.array(y) if not isinstance(y, np.ndarray) else y if len(np.squeeze(y).shape) == 1: @@ -554,7 +569,7 @@ def fit(self, X: np.ndarray, y: np.ndarray, n_jobs=-1): flat_y = np.argmax(y, axis=1) counts = np.bincount(flat_y) self.counts_ = counts - logger.info(f"Num Classes: {self.n_classes_}, counts: {counts}") + logger.debug(f"Num Classes: {self.n_classes_}, counts: {counts}") self.n_features_ = X.shape[1] if len(X.shape) > 1 else 1 self.classes_ = range(len(unique_labels(y))) @@ -579,15 +594,19 @@ def fit(self, X: np.ndarray, y: np.ndarray, n_jobs=-1): elif self.m == -1: distance_matrix = self._prepare_training_matrix(n_jobs=n_jobs) self.distance_matrix = distance_matrix - elif self.m is None or self.m == 0: - pass else: raise ValueError( f"Expected {self.m} to be -1, 0, a positive integer or a float between 0 and 1. Got type {type(self.m)}", ) if self.precompute is True: self.distance_matrix = self._prepare_training_matrix(n_jobs=n_jobs) - self.clf_ = self.clf_.fit(self.distance_matrix, self.y_) + with warnings.catch_warnings(): + warnings.filterwarnings('error') + try: + self.clf_ = self.clf_.fit(self.distance_matrix, self.y_) + except DataConversionWarning: + y = np.ravel(self.y_) + self.clf_ = self.clf_.fit(self.distance_matrix, y) else: raise NotImplementedError( f"Precompute {self.precompute} not supported for type(self.clf_) {type(self.clf_)}", @@ -607,11 +626,9 @@ def _set_best_indices(self, indices): indices ] # select the transposed columns at the indices self.distance_matrix = distance_matrix.T # transpose the matrix again - logger.info( + logger.debug( f"Selected {len(self.X_)} samples using method {self.sampling_method}.", ) - counts = np.bincount(np.argmax(self.y_, axis=1)) - logger.info(f"Num Classes: {self.n_classes_}, counts: {counts}") assert len(self.X_) == len( self.y_, ), f"Expected {len(self.X_)} == {len(self.y_)}" @@ -630,7 +647,7 @@ def predict(self, X: np.ndarray): np.ndarray: The predicted class labels """ check_is_fitted(self) - logger.info(f"Predicting with X of shape {X.shape}") + logger.debug(f"Predicting with X of shape {X.shape}") if self.metric in compressors.keys(): compressor = compressors[self.metric] Cx2 = Parallel(n_jobs=-1)( @@ -687,7 +704,7 @@ def score(self, X: np.ndarray, y: np.ndarray): return accuracy_score(y, y_pred) -class BatchedGzipClassifier(GzipClassifier, BatchedMixin): +class BatchedGzipClassifier(BatchedMixin, GzipClassifier): pass @@ -703,6 +720,7 @@ def __init__( precompute=True, **kwargs, ): + print(f"Initializing GzipKNN with k={k}") super().__init__( sampling_method=sampling_method, m=m, @@ -784,7 +802,7 @@ def predict(self, X: np.ndarray, n_jobs=-1): return y_pred -class BatchedGzipKNN(GzipKNN, BatchedMixin): +class BatchedGzipKNN(BatchedMixin, GzipKNN): pass @@ -813,7 +831,7 @@ def __init__( ) -class BatchedGzipLogisticRegressor(GzipLogisticRegressor, BatchedMixin): +class BatchedGzipLogisticRegressor(BatchedMixin, GzipLogisticRegressor): pass @@ -883,18 +901,24 @@ def test_model( ) -> dict: """ Args: - X (np.ndarray): The input data - y (np.ndarray): The target labels - train_size (int): The number of samples to use for training. Default is 100. - test_size (int): The number of samples to use for testing. Default is 100. + X_train (np.ndarray): The input data + X_test (np.ndarray): The test data + y_train (np.ndarray): The target labels + y_test (np.ndarray): The test labels + model_type (str): The type of model to use. Choices are "knn", "logistic", "svc". + optimizer (str): The metric to optimize. Choices are "accuracy", "f1", "precision", "recall". + batched (bool): If True, a batched model will be used. Default is False. **kwargs: Additional keyword arguments to pass to the GzipClassifier Returns: dict: A dictionary containing the accuracy, train_time, and pred_time """ if batched is True: + print(f"Using batched model {model_type}") + print(f"Using kwargs {kwargs}") model = batched_models[model_type](**kwargs) else: model = supported_models[model_type](**kwargs) + print(f"Type of model: {type(model)}") alias = model_scorers[model_type] scorer = scorers[alias] start = time.time() @@ -909,7 +933,7 @@ def test_model( score = round(scorer(y_test, predictions), 3) print(f"Training time: {train_time}") print(f"Prediction time: {pred_time}") - print(f"{alias} is: {score}") + print(f"{alias.capitalize()} is: {score}") score_dict = { f"{alias.lower()}": score, "train_time": train_time, @@ -1002,7 +1026,7 @@ def main(args: argparse.Namespace): Args: args (argparse.Namespace): The command line arguments Usage: - python gzip_classifier.py --compressor gzip --k 3 --m 100 --method random --distance_matrix distance_matrix --dataset kdd_nsl + python python gzip_classifier.py --metric gzip --m 10 --sampling_method svc --dataset kdd_nsl k=3 """ X, y = load_data(dataset=args.dataset, precompressed=args.precompressed) @@ -1022,28 +1046,34 @@ def main(args: argparse.Namespace): kwarg_args = params.pop("kwargs") # conver list of key-value pairs to dictionary kwarg_args = dict([arg.split("=") for arg in kwarg_args]) + for k,v in kwarg_args.items(): + # Typecast the values to the correct type + try: + kwarg_args[k] = eval(v) + except: #noqa E722 + kwarg_args[k] = v params.update(**kwarg_args) - params["precompute"] = True + params["precompute"] = args.precompute X = np.array(X) if not isinstance(X, np.ndarray) else X y = np.array(y) if not isinstance(y, np.ndarray) else y test_model(X_train, X_test, y_train, y_test, **params) parser = argparse.ArgumentParser() -parser.add_argument("--model_type", type=str, default="knn") -parser.add_argument("--precompute", action="store_true") -parser.add_argument("--symmetric", action="store_true") -parser.add_argument("--metric", type=str, default="gzip", choices=all_metrics) -parser.add_argument("--m", type=int, default=-1) -parser.add_argument("--sampling_method", type=str, default="random") -parser.add_argument("--distance_matrix", type=str, default=None) -parser.add_argument("--dataset", type=str, default="kdd_nsl") -parser.add_argument("--train_size", type=int, default=100) -parser.add_argument("--test_size", type=int, default=100) -parser.add_argument("--optimizer", type=str, default="accuracy") -parser.add_argument("--precompressed", action="store_true") -parser.add_argument("--random_state", type=int, default=42) -parser.add_argument("kwargs", nargs=argparse.REMAINDER) +parser.add_argument("--model_type", type=str, default="knn", help="The type of model to use. Choices are knn, logistic, svc") +parser.add_argument("--precompute", type=str, default=True, help="If True, the distance matrix will be precomputed and stored in self.distance_matrix during the fit method and a sklearn KNeighborsClassifier object will be created and stored in self.clf_.") +parser.add_argument("--symmetric", action="store_true", help="If True, the distance matrix will be treated as symmetric. Default is False.") +parser.add_argument("--metric", type=str, default="gzip", choices=all_metrics, help=f"The metric used to calculate the distance between samples. Choices are {list(all_metrics.keys())}") +parser.add_argument("--m", type=int, default=-1, help="The number of best samples to use. If -1, all samples will be used.") +parser.add_argument("--sampling_method", type=str, default="random", help=f"The method used to select the best training samples. Choices are {all_condensers}") +parser.add_argument("--distance_matrix", type=str, default=None, help="The path to a numpy array representing the distance matrix. If a path is provided, the file will be loaded. Default is None.") +parser.add_argument("--dataset", type=str, default="kdd_nsl", help="The dataset to use. Choices are 20newsgroups, kdd_nsl, make_classification, truthseeker, sms-spam, ddos.") +parser.add_argument("--train_size", type=int, default=100, help="The number of samples to use for training. Default is 100.") +parser.add_argument("--test_size", type=int, default=100, help="The number of samples to use for testing. Default is 100.") +parser.add_argument("--optimizer", type=str, default="accuracy", help="The metric to use for optimization. Default is accuracy.") +parser.add_argument("--precompressed", action="store_true", help="If True, the data will be precompressed using gzip.") +parser.add_argument("--random_state", type=int, default=42, help="The random state to use. Default is 42.") +parser.add_argument("kwargs", nargs=argparse.REMAINDER, help="Additional keyword arguments to pass to the GzipClassifier") if __name__ == "__main__": args = parser.parse_args() From fa66df256cd7c8e44cdcfdb220887ed4deddf881 Mon Sep 17 00:00:00 2001 From: Charlie Meyers Date: Tue, 30 Jul 2024 20:10:44 +0200 Subject: [PATCH 27/35] add support for columns missing in subsets --- deckard/layers/clean_data.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/deckard/layers/clean_data.py b/deckard/layers/clean_data.py index 7367682c..615a563b 100644 --- a/deckard/layers/clean_data.py +++ b/deckard/layers/clean_data.py @@ -478,7 +478,9 @@ def replace_strings_in_data(data, replace_dict): v, dict, ), f"Value for key {k} in replace_dict is not a dictionary." - assert k in data.columns, f"Key {k} not in data.columns." + if k not in data.columns: + logger.warning(f"Column {k} not in data. Ignoring.") + continue for k1, v1 in v.items(): logger.info(f"Replacing {k1} with {v1} in {k}...") k1 = str(k1) From fc01a49df85822699ce21cb42ab44bc5e702fa14 Mon Sep 17 00:00:00 2001 From: Charlie Meyers Date: Tue, 30 Jul 2024 20:11:17 +0200 Subject: [PATCH 28/35] remove extra column in results csv --- deckard/layers/compile.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/deckard/layers/compile.py b/deckard/layers/compile.py index 262fe2f2..28a33a56 100644 --- a/deckard/layers/compile.py +++ b/deckard/layers/compile.py @@ -173,13 +173,13 @@ def load_results(results_file, results_folder) -> pd.DataFrame: Path(results_folder).mkdir(exist_ok=True, parents=True) suffix = results_file.suffix if suffix == ".csv": - results = pd.read_csv(results_file) + results = pd.read_csv(results_file, index_col=0) elif suffix == ".xlsx": - results = pd.read_excel(results_file) + results = pd.read_excel(results_file, index_col=0) elif suffix == ".html": - results = pd.read_html(results_file) + results = pd.read_html(results_file, index_col=0) elif suffix == ".json": - results = pd.read_json(results_file) + results = pd.read_json(results_file, index_col=0) elif suffix == ".tex": pd.read_csv( results_file, @@ -188,6 +188,7 @@ def load_results(results_file, results_folder) -> pd.DataFrame: skiprows=4, skipfooter=3, engine="python", + index_col=0, ) else: raise ValueError(f"File type {suffix} not supported.") From 34cb192e90666425b6149c688c0d8c5831baac8e Mon Sep 17 00:00:00 2001 From: Charlie Meyers Date: Tue, 30 Jul 2024 20:12:22 +0200 Subject: [PATCH 29/35] remove item. from file config during matrix and foreach stages --- deckard/layers/optimise.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deckard/layers/optimise.py b/deckard/layers/optimise.py index d8498038..9c6bfdf9 100644 --- a/deckard/layers/optimise.py +++ b/deckard/layers/optimise.py @@ -215,7 +215,7 @@ def parse_stage(stage: str = None, params: dict = None, path=None) -> dict: if "metrics" in pipe: metric_list = [str(x).split(":")[0] for x in pipe["metrics"]] file_list.extend(metric_list) - file_string = str(file_list) + file_string = str(file_list).replace("item.", "") files = params["files"] file_list = list(files.keys()) for key in file_list: From 2a67131b967c6a2a0f57565e7f4e020652764933 Mon Sep 17 00:00:00 2001 From: Charlie Meyers Date: Tue, 30 Jul 2024 20:12:46 +0200 Subject: [PATCH 30/35] improved plotting --- deckard/layers/plots.py | 75 +++++++++++++++++++++++++++++++++++------ 1 file changed, 65 insertions(+), 10 deletions(-) diff --git a/deckard/layers/plots.py b/deckard/layers/plots.py index 8fbc3de6..53914e36 100644 --- a/deckard/layers/plots.py +++ b/deckard/layers/plots.py @@ -5,6 +5,7 @@ import seaborn as sns import yaml from pathlib import Path +import numpy as np logger = logging.getLogger(__name__) sns.set_theme(style="whitegrid", font_scale=1.8, font="times new roman") @@ -35,14 +36,18 @@ def cat_plot( folder, xlabels=None, ylabels=None, + xticklabels=None, + yticklabels=None, titles=None, legend_title=None, x_lim=None, y_lim=None, hue_order=None, rotation=0, - set={}, filetype=".eps", + x_scale=None, + y_scale=None, + digitize = [], **kwargs, ): """ @@ -88,12 +93,16 @@ def cat_plot( """ plt.gcf().clear() + plt.cla() + plt.clf() + # clear the Axes object suffix = Path(file).suffix if suffix is not None: file = Path(file) else: file = Path(file).with_suffix(filetype) logger.info(f"Rendering graph {file}") + data = digitize_cols(data, digitize) if hue is not None: data = data.sort_values(by=[hue, x, y]) logger.debug( @@ -112,12 +121,31 @@ def cat_plot( data = data.sort_values(by=[x, y]) logger.debug(f"Data sorted by x:{x}, y:{y}, kind:{kind}, and kwargs:{kwargs}.") graph = sns.catplot(data=data, x=x, y=y, kind=kind, **kwargs) - if xlabels is not None: - graph.set_xlabels(xlabels) - if ylabels is not None: - graph.set_ylabels(ylabels) + # graph is a FacetGrid object and we need to set the x,y scales, labels, titles on the axes + for graph_ in graph.axes.flat: + if y_scale is not None: + graph_.set_yscale(y_scale) + if x_scale is not None: + graph_.set_xscale(x_scale) + if xticklabels is not None: + graph_.set_xticklabels(xticklabels) + if yticklabels is not None: + graph_.set_yticklabels(yticklabels) if titles is not None: + if isinstance(titles, dict): + graph.set_titles(**titles) + elif isinstance(titles, str): graph.set_titles(titles) + else: + try: + graph.set_titles("{row_name} | {col_name}") + except KeyError as e: + if "row_name" in str(e): + graph.set_titles("{col_name}") + elif "col_name" in str(e): + graph.set_titles("{row_name}") + else: + raise e if legend_title is not None: graph.legend.set_title(title=legend_title) else: @@ -125,8 +153,11 @@ def cat_plot( graph.legend.remove() else: pass + if xlabels is not None: + graph.set_xlabels(xlabels) + if ylabels is not None: + graph.set_ylabels(ylabels) graph.set_xticklabels(graph.axes.flat[-1].get_xticklabels(), rotation=rotation) - graph.set(**set) if x_lim is not None: graph.set(xlim=x_lim) if y_lim is not None: @@ -134,8 +165,24 @@ def cat_plot( graph.tight_layout() graph.savefig(folder / file) plt.gcf().clear() + plt.cla() + plt.clf() logger.info(f"Saved graph to {folder / file}") +def digitize_cols(data, digitize): + if isinstance(digitize,str): + digitize = [digitize] + else: + assert isinstance(digitize, list), "digitize must be a list of columns to digitize" + if len(digitize) > 0: + for col in digitize: + min_ = data[col].min() + max_ = data[col].max() + NUMBER_OF_BINS = 10 + bins = np.linspace(min_, max_, NUMBER_OF_BINS) + data[col] = np.digitize(data[col], bins)/NUMBER_OF_BINS + return data + def line_plot( data, @@ -193,6 +240,8 @@ def line_plot( the line plot graph object. """ plt.gcf().clear() + plt.cla() + plt.clf() suffix = Path(file).suffix if suffix is not None: file = Path(file) @@ -223,6 +272,8 @@ def line_plot( graph.get_figure().savefig(folder / file) logger.info(f"Saved graph to {folder/file}") plt.gcf().clear() + plt.cla() + plt.clf() return graph @@ -285,6 +336,8 @@ def scatter_plot( """ plt.gcf().clear() + plt.cla() + plt.clf() suffix = Path(file).suffix if suffix is not None: file = Path(file) @@ -320,6 +373,8 @@ def scatter_plot( logger.info(f"Saved graph to {Path(folder) / file}") plt.gcf().clear() + plt.cla() + plt.clf() return graph @@ -390,19 +445,19 @@ def plots_main(args): logger.info(f"Creating folder {FOLDER}") FOLDER.mkdir(parents=True, exist_ok=True) - cat_plot_list = big_dict.get("cat_plot", []) - for dict_ in cat_plot_list: - cat_plot(data, **dict_, folder=FOLDER, filetype=IMAGE_FILETYPE) + line_plot_list = big_dict.get("line_plot", []) for dict_ in line_plot_list: line_plot(data, **dict_, folder=FOLDER, filetype=IMAGE_FILETYPE) - scatter_plot_list = big_dict.get("scatter_plot", []) scatter_plot_list = big_dict.get("scatter_plot", []) for dict_ in scatter_plot_list: scatter_plot(data, **dict_, folder=FOLDER, filetype=IMAGE_FILETYPE) + cat_plot_list = big_dict.get("cat_plot", []) + for dict_ in cat_plot_list: + cat_plot(data, **dict_, folder=FOLDER, filetype=IMAGE_FILETYPE) if __name__ == "__main__": args = plots_parser.parse_args() From 1358a71a7dcd4e9daa7a309ac589cf71943e86fb Mon Sep 17 00:00:00 2001 From: Charlie Meyers Date: Tue, 30 Jul 2024 20:13:35 +0200 Subject: [PATCH 31/35] get batched gzip classifier working --- examples/gzip/batchMixin.py | 199 +++++++++++++----------------------- 1 file changed, 72 insertions(+), 127 deletions(-) diff --git a/examples/gzip/batchMixin.py b/examples/gzip/batchMixin.py index 5cc762b7..9ec7a573 100644 --- a/examples/gzip/batchMixin.py +++ b/examples/gzip/batchMixin.py @@ -4,12 +4,9 @@ from sklearn.datasets import make_classification -import random - -# from gzip_classifier import GzipSVC, GzipKNN, GzipLogisticRegressor -from sklearn.svm import SVC +from pathlib import Path +from time import time from sklearn.model_selection import train_test_split -import plotext logger = logging.getLogger(__name__) @@ -25,39 +22,91 @@ def __init__( nb_epoch=1, **kwargs, ): - self.batch_size = kwargs.pop("m", batch_size) + self.batch_size = kwargs.pop("batch_size", batch_size) self.max_batches = kwargs.pop("max_batches", max_batches) + self.training_log = kwargs.pop("training_log", None) nb_epoch = kwargs.pop("nb_epoch", nb_epoch) if not nb_epoch >= 1: nb_epoch = 1 self.nb_epoch = nb_epoch - if "m" in kwargs: - logger.warning( - f"Parameter 'm' is being overwritten with batch_size={self.batch_size}.", - ) - kwargs["m"] = self.batch_size super().__init__(**kwargs) - self.predict = self.batched_predict(self.predict) if hasattr(self, "_find_best_samples"): self._find_best_samples = self.batched_find_best_samples( self._find_best_samples, ) - if hasattr(self, "score"): - self.score = self.batched_score(self.score) self.fit = self.batched_fit(self.fit) - self.predict = self.batched_predict(self.predict) if self.nb_epoch > 1: self.fit = self.epoch_fit(self.fit) - # self.score = self.batched_score(self.score) + def epoch_fit(self, fit_func): def wrapper(*args, **kwargs): X, y = args - for i in range(self.nb_epoch): - random.shuffle(X) - random.shuffle(y) + X_test = kwargs.pop("X_test", None) + y_test = kwargs.pop("y_test", None) + log_file = self.training_log if hasattr(self, "training_log") else None + for i in tqdm(range(self.nb_epoch), desc="Epochs", leave=True, position=0): + # Shuffle the indices of X,y + indices = np.arange(len(X)) + np.random.shuffle(indices) + X = X[indices] + y = y[indices] + logger.debug(f"Epoch {i + 1}/{self.nb_epoch}") fit_func(X, y, **kwargs) - + if hasattr(self, "score"): + score = self.score(X, y) + train_scores.append(score) + if X_test is not None: + assert len(X_test) == len(y_test), "X_test and y_test must have the same length" + test_score = self.score(X_test, y_test) + test_scores.append(test_score) + logger.info(f"Train score: {score}, Test score: {test_score}") + else: + logger.info(f"Train score: {score}") + if log_file is not None: + if Path(log_file).exists(): + if i == 0: + # rotate the log file by appending a timestamp before the extension + rotated_log_name = log_file.replace(".csv", f"_{int(time())}.csv") + # rename the log file + Path(log_file).rename(rotated_log_name) + with open(log_file, "w") as f: + f.write("epoch, train_score,") + if "test_score" in locals(): + f.write(",test_score") + f.write("\n") + f.write(f"{i+1},") + f.write(f"{score},") + if "test_score" in locals(): + f.write(f" {test_score},") + f.write("\n") + else: + with open(log_file, "a") as f: + # assuming csv format + f.write(f"{i+1},") + f.write(f"{score},") + if "test_score" in locals(): + f.write(f"{test_score},") + f.write("\n") + else: + with open(log_file, "w") as f: + f.write("epoch, train_score,") + if "test_score" in locals(): + f.write(" test_score,") + f.write("\n") + f.write(f"{i+1},") + f.write(f"{score},") + if "test_score" in locals(): + f.write(f"{test_score},") + f.write("\n") + import plotext as plt + plt.plot(train_scores, label="Train score") + if X_test is not None: + plt.plot(test_scores, label="Test score") + plt.xlabel("Epochs") + plt.ylabel("Accuracy") + plt.title("Scores") + plt.show() return wrapper def batched_fit(self, fit_func): @@ -70,32 +119,14 @@ def wrapper(*args, **kwargs): f"Number of batches ({n_batches}) is greater than max_batches ({self.max_batches}). Using max_batches.", ) n_batches = self.max_batches - for i in tqdm( - range(n_batches), - desc="Fitting batches", - total=n_batches, - leave=False, - dynamic_ncols=True, - ): + for i in tqdm(range(n_batches), total=n_batches, desc="Fitting batches", leave=False, position=1): start = i * self.batch_size end = (i + 1) * self.batch_size X_batch = X_train[start:end] y_batch = y_train[start:end] - print( - f"Shape of X_batch is {X_batch.shape} and shape of y_batch is {y_batch.shape}", - ) fit_func(X_batch, y_batch, **kwargs) - if self.nb_epoch > 1: - continue - train_score = self.score(X_batch, y_batch) - test_score = self.score(X_train, y_train) - print( - f"Batch {i+1} of {n_batches} - Train score: {np.mean(train_score)}; Test score: {np.mean(test_score)}", - ) - train_scores.append(train_score) - test_scores.append(test_score) - return wrapper + def batched_find_best_samples(self, func): def wrapper(method, **kwargs): @@ -120,8 +151,6 @@ def wrapper(method, **kwargs): new_X = X[i * self.batch_size : (i + 1) * self.batch_size] # noqa new_y = y[i * self.batch_size : (i + 1) * self.batch_size] # noqa indices = func(X=new_X, y=new_y, method=method, n_jobs=n_jobs) - # print("After finding best samples") - # print(f"Length of indices is {len(indices)}") X = X[indices] y = y[indices] self.X_ = X @@ -133,75 +162,8 @@ def wrapper(method, **kwargs): return wrapper - def batched_predict(self, predict_func): - def wrapper(*args, **kwargs): - X_test = args[0] - n = len(X_test) - n_batches = n // self.batch_size - if n_batches > self.max_batches: - n_batches = self.max_batches - elif n_batches == 0: - n_batches = 1 - preds = [] - for i in tqdm( - range(n_batches), - desc="Predicting batches", - total=n_batches, - leave=False, - dynamic_ncols=True, - ): - start = i * self.batch_size - end = (i + 1) * self.batch_size - X_batch = X_test[start:end] - new_preds = predict_func(X_batch, **kwargs) - preds.append(new_preds) - return np.concatenate(preds) - - return wrapper - - def batched_score(self, score_func): - def wrapper(*args, **kwargs): - X_test, y_test = args - n = len(X_test) - n_batches = n // self.batch_size - if n_batches > self.max_batches: - n_batches = self.max_batches - elif n_batches == 0: - n_batches = 1 - scores = [] - for i in tqdm( - range(n_batches), - desc="Scoring batches", - total=n_batches, - leave=False, - dynamic_ncols=True, - ): - start = i * self.batch_size - end = (i + 1) * self.batch_size - X_batch = X_test[start:end] - y_batch = y_test[start:end] - score = score_func(X_batch, y_batch, **kwargs) - scores.append(score) - return scores - - return wrapper - - -def create_batched_class(cls, *args, **kwargs): - name = cls.__name__ - - class BatchedClass(cls, BatchedMixin): - def __init__(self, *args, **kwargs): - self.max_batches = kwargs.pop("max_batches", 100) - self.batch_size = kwargs.pop("batch_size", 10) - super().__init__(*args, **kwargs) - - batched_class = BatchedClass() - combined_name = f"Batched{name}" - batched_class.__name__ = combined_name - batched_class.__init__(*args, **kwargs) - return batched_class + if __name__ == "__main__": logging.basicConfig(level=logging.INFO) @@ -236,20 +198,3 @@ def __init__(self, *args, **kwargs): test_size=0.2, random_state=42, ) - - class BatchedSVC(BatchedMixin, SVC): - pass - - clf = BatchedSVC(max_batches=100, batch_size=100, kernel="rbf") - clf.fit(X_train, y_train) - score = clf.score(X_test, y_test) - print(score) - input("Press enter to continue") - score = round(np.mean(score), 2) - std = round(np.std(score), 3) - logger.info(f"Final Score: {score}") - logger.info(f"Standard Deviation: {std}") - # if plotext_available is True: - plotext.scatter(train_scores, label="Train scores") - plotext.scatter(test_scores, label="Test scores") - plotext.plot() From 7115531cc014f08173278bb6ab21257237686044 Mon Sep 17 00:00:00 2001 From: Charlie Meyers Date: Tue, 30 Jul 2024 20:15:35 +0200 Subject: [PATCH 32/35] refactor gzip classifier --- examples/gzip/gzip_classifier.py | 96 +++++++++++--------------------- examples/gzip/objective.py | 35 ++++++++++++ 2 files changed, 66 insertions(+), 65 deletions(-) create mode 100644 examples/gzip/objective.py diff --git a/examples/gzip/gzip_classifier.py b/examples/gzip/gzip_classifier.py index b592ec0a..08d49366 100644 --- a/examples/gzip/gzip_classifier.py +++ b/examples/gzip/gzip_classifier.py @@ -47,6 +47,8 @@ from typing import Literal from batchMixin import BatchedMixin +warnings.simplefilter(action='ignore', category=FutureWarning) +warnings.simplefilter(action='ignore', category=UserWarning) logger = logging.getLogger(__name__) @@ -185,7 +187,6 @@ def __init__( distance_matrix=None, metric="gzip", symmetric=False, - precompute=True, **kwargs, ): """ @@ -200,24 +201,23 @@ def __init__( If a path is provided, the file will be loaded. If an array is provided, it will be used directly. Default is None. symmetric (bool): If True, the distance matrix will be treated as symmetric. Default is False. - precompute (bool): If True, the distance matrix will be precomputed and stored in self.distance_matrix during the fit method and a sklearn KNeighborsClassifier object will be created and stored in self.clf_. Raises: ValueError: If distance_matrix is not a path to a numpy file or a numpy array. NotImplementedError: If the metric is not supported. """ kwarg_string = str([f"{key}={value}" for key, value in kwargs.items()]) - logger.info( - f"Initializing GzipClassifier with m={m}, method={sampling_method}, distance_matrix={distance_matrix}, metric={metric}, symmetric={symmetric}, precompute={precompute}, {kwarg_string}", + logger.debug( + f"Initializing GzipClassifier with m={m}, method={sampling_method}, distance_matrix={distance_matrix}, metric={metric}, symmetric={symmetric}, {kwarg_string}", ) self.m = m self.sampling_method = sampling_method if metric in compressors.keys(): - logger.info(f"Using NCD metric with {metric} compressor.") + logger.debug(f"Using NCD metric with {metric} compressor.") self._distance = ncd self.metric = metric elif metric in string_metrics.keys(): - logger.info(f"Using {metric} metric") + logger.debug(f"Using {metric} metric") self._distance = _calculate_string_distance self.metric = metric else: @@ -234,7 +234,6 @@ def __init__( self._calculate_distance_matrix = ( self._calculate_rectangular_distance_matrix ) - self.precompute = precompute # If True, the distance matrix will be precomputed and stored in self.distance_matrix during the fit method and a sklearn KNeighborsClassifier object will be created and stored in self.clf_. self.distance_matrix = distance_matrix for key, value in kwargs.items(): setattr(self, key, value) @@ -261,6 +260,7 @@ def _calculate_rectangular_distance_matrix( desc="Calculating asymmetric distance matrix.", leave=False, dynamic_ncols=True, + position=2 ) Cx1 = Cx1 if Cx1 is not None else [None] * len(x1) Cx2 = Cx2 if Cx2 is not None else [None] * len(x2) @@ -313,6 +313,7 @@ def _calculate_lower_triangular_distance_matrix( desc="Calculating symmetric distance metrix.", leave=False, dynamic_ncols=True, + position=0, ) Cx1 = Cx1 if Cx1 is not None else [None] * len(x1) Cx2 = Cx2 if Cx2 is not None else [None] * len(x2) @@ -536,6 +537,8 @@ def _find_best_samples(self, method="medoid", n_jobs=-1): columns=list(range(len(distance_matrix))), ) distance_matrix, y = model.fit_resample(distance_matrix, y) + y = pd.DataFrame(y, columns=["y"]) + y.index = list(range(len(y))) indices = y.index[: m * n_classes] else: raise NotImplementedError(f"Method {method} not supported") @@ -544,7 +547,7 @@ def _find_best_samples(self, method="medoid", n_jobs=-1): indices = indices[: len(self.X_)] return indices - def fit(self, X: np.ndarray, y: np.ndarray, n_jobs=-1): + def fit(self, X: np.ndarray, y: np.ndarray, n_jobs=-1, X_test=None, y_test=None): """Fit the model using X as training data and y as target values. If self.m is not -1, the best m samples will be selected using the method specified in self.sampling_method. Args: @@ -598,19 +601,14 @@ def fit(self, X: np.ndarray, y: np.ndarray, n_jobs=-1): raise ValueError( f"Expected {self.m} to be -1, 0, a positive integer or a float between 0 and 1. Got type {type(self.m)}", ) - if self.precompute is True: - self.distance_matrix = self._prepare_training_matrix(n_jobs=n_jobs) - with warnings.catch_warnings(): - warnings.filterwarnings('error') - try: - self.clf_ = self.clf_.fit(self.distance_matrix, self.y_) - except DataConversionWarning: - y = np.ravel(self.y_) - self.clf_ = self.clf_.fit(self.distance_matrix, y) - else: - raise NotImplementedError( - f"Precompute {self.precompute} not supported for type(self.clf_) {type(self.clf_)}", - ) + self.distance_matrix = self._prepare_training_matrix(n_jobs=n_jobs) + with warnings.catch_warnings(): + warnings.filterwarnings('error') + try: + self.clf_ = self.clf_.fit(self.distance_matrix, self.y_) + except DataConversionWarning: + y = np.ravel(self.y_) + self.clf_ = self.clf_.fit(self.distance_matrix, y) return self def _set_best_indices(self, indices): @@ -705,6 +703,7 @@ def score(self, X: np.ndarray, y: np.ndarray): class BatchedGzipClassifier(BatchedMixin, GzipClassifier): + pass @@ -717,17 +716,14 @@ def __init__( distance_matrix=None, metric="gzip", symmetric=False, - precompute=True, **kwargs, ): - print(f"Initializing GzipKNN with k={k}") super().__init__( sampling_method=sampling_method, m=m, distance_matrix=distance_matrix, metric=metric, symmetric=symmetric, - precompute=precompute, **kwargs, ) self.clf_ = KNeighborsClassifier(n_neighbors=k, metric="precomputed", **kwargs) @@ -744,7 +740,7 @@ def predict(self, X: np.ndarray, n_jobs=-1): """ check_is_fitted(self) - logger.info(f"Predicting with X of shape {X.shape}") + logger.debug(f"Predicting with X of shape {X.shape}") # Pre-compress samples not working if self.metric in compressors.keys(): compressor = compressors[self.metric] @@ -778,27 +774,7 @@ def predict(self, X: np.ndarray, n_jobs=-1): len(X), len(self.X_), ), f"Expected {distance_matrix.shape} == ({len(X)}, {len(self.X_)})" - y_pred = [] - if self.precompute is True: - y_pred = self.clf_.predict(distance_matrix) - else: - for i in tqdm( - range(len(X)), - desc="Predicting", - leave=False, - total=len(X), - dynamic_ncols=True, - ): - # Sort the distances and get the nearest k samples - sorted_idx = np.argsort(distance_matrix[i]) - # Get the first k samples - nearest_k = sorted_idx[: self.k] - # Get the labels of the nearest samples - nearest_labels = list(self.y_[nearest_k]) - # predict class - unique, counts = np.unique(nearest_labels, return_counts=True) - # Get the most frequent label - y_pred.append(unique[np.argmax(counts)]) + y_pred = self.clf_.predict(distance_matrix) return y_pred @@ -814,14 +790,11 @@ def __init__( distance_matrix=None, metric="gzip", symmetric=False, - precompute=True, **kwargs, ): - self.precompute = precompute clf = LogisticRegression(**kwargs) super().__init__( clf_=clf, - precompute=precompute, sampling_method=sampling_method, m=m, distance_matrix=distance_matrix, @@ -844,14 +817,11 @@ def __init__( distance_matrix=None, metric="gzip", symmetric=False, - precompute=True, **kwargs, ): - self.precompute = precompute clf = SVC(kernel=kernel, **kwargs) super().__init__( clf_=clf, - precompute=precompute, sampling_method=sampling_method, m=m, distance_matrix=distance_matrix, @@ -913,16 +883,14 @@ def test_model( dict: A dictionary containing the accuracy, train_time, and pred_time """ if batched is True: - print(f"Using batched model {model_type}") - print(f"Using kwargs {kwargs}") model = batched_models[model_type](**kwargs) else: model = supported_models[model_type](**kwargs) - print(f"Type of model: {type(model)}") alias = model_scorers[model_type] scorer = scorers[alias] start = time.time() - model.fit(X_train, y_train) + + model.fit(X_train, y_train, X_test=X_test, y_test=y_test) check_is_fitted(model) end = time.time() train_time = end - start @@ -959,14 +927,9 @@ def load_data(dataset, precompressed): LabelEncoder().fit(y).transform(y) ) # Turns the labels "alt.atheism" and "talk.religion.misc" into 0 and 1 elif dataset == "kdd_nsl": - df = pd.read_csv("raw_data/kdd_nsl.csv") + df = pd.read_csv("raw_data/kdd_nsl_undersampled_10000.csv") y = df["label"] X = df.drop("label", axis=1) - elif dataset == "kdd_nsl": - df = pd.read_csv("raw_data/kdd_nsl.csv") - y = df["label"] - X = df.drop("label", axis=1) - X = np.array(X) elif dataset == "make_classification": X, y = make_classification( n_samples=1000, @@ -976,7 +939,7 @@ def load_data(dataset, precompressed): ) y = LabelEncoder().fit(y).transform(y) elif dataset == "truthseeker": - df = pd.read_csv("raw_data/truthseeker.csv") + df = pd.read_csv("raw_data/truthseeker_undersampled_8000.csv") y = df["BotScoreBinary"] X = df.drop("BotScoreBinary", axis=1) elif dataset == "sms-spam": @@ -1053,7 +1016,6 @@ def main(args: argparse.Namespace): except: #noqa E722 kwarg_args[k] = v params.update(**kwarg_args) - params["precompute"] = args.precompute X = np.array(X) if not isinstance(X, np.ndarray) else X y = np.array(y) if not isinstance(y, np.ndarray) else y test_model(X_train, X_test, y_train, y_test, **params) @@ -1061,7 +1023,6 @@ def main(args: argparse.Namespace): parser = argparse.ArgumentParser() parser.add_argument("--model_type", type=str, default="knn", help="The type of model to use. Choices are knn, logistic, svc") -parser.add_argument("--precompute", type=str, default=True, help="If True, the distance matrix will be precomputed and stored in self.distance_matrix during the fit method and a sklearn KNeighborsClassifier object will be created and stored in self.clf_.") parser.add_argument("--symmetric", action="store_true", help="If True, the distance matrix will be treated as symmetric. Default is False.") parser.add_argument("--metric", type=str, default="gzip", choices=all_metrics, help=f"The metric used to calculate the distance between samples. Choices are {list(all_metrics.keys())}") parser.add_argument("--m", type=int, default=-1, help="The number of best samples to use. If -1, all samples will be used.") @@ -1075,6 +1036,11 @@ def main(args: argparse.Namespace): parser.add_argument("--random_state", type=int, default=42, help="The random state to use. Default is 42.") parser.add_argument("kwargs", nargs=argparse.REMAINDER, help="Additional keyword arguments to pass to the GzipClassifier") + + + + + if __name__ == "__main__": args = parser.parse_args() logging.basicConfig(level=logging.INFO) diff --git a/examples/gzip/objective.py b/examples/gzip/objective.py new file mode 100644 index 00000000..013904a3 --- /dev/null +++ b/examples/gzip/objective.py @@ -0,0 +1,35 @@ + +import optuna +from gzip_classifier import all_metrics + +def objective(trial: optuna.Trial): + model_type = trial.suggest_categorical("model_type", ["knn", "logistic", "svc"]) + metric = trial.suggest_categorical("model.init.metric", all_metrics.keys()) + if model_type == "knn": + k = trial.suggest_categorical("k", [3,5, 7, 9, 11]) + weights = trial.suggest_categorical("weights", ["uniform", "distance"]) + algorithm = trial.suggest_categorical("algorithm", ["brute"]) + params = {"k": k, "weights": weights, "algorithm": algorithm} + elif model_type == "logistic": + C = trial.suggest_loguniform("C", 1e-10, 1e10) + solver = trial.suggest_categorical("solver", ["saga"]) + penalty = trial.suggest_categorical("penalty", ["l1", "l2", None]) + fit_intercept = trial.suggest_categorical("fit_intercept", [True, False]) + class_weight = trial.suggest_categorical("class_weight", ["balanced", None]) + params = {"C": C, "solver": solver, "penalty": penalty, "fit_intercept": fit_intercept, "class_weight": class_weight} + elif model_type == "svc": + C = trial.suggest_loguniform("C", 1e-10, 1e10) + kernel = trial.suggest_categorical("kernel", ["linear", "rbf", "poly", "sigmoid"]) + class_weight = trial.suggest_categorical("class_weight", ["balanced", None]) + if kernel == "poly": + degree = trial.suggest_int("degree", 2, 5) + params = {"C": C, "kernel": kernel, "degree": degree, "class_weight": class_weight} + elif kernel == "rbf": + gamma = trial.suggest_categorical("gamma", ["auto", "scale"]) + params = {"C": C, "kernel": kernel, "gamma": gamma, "class_weight": class_weight} + else: + params = {"C": C, "kernel": kernel, "class_weight": class_weight} + else: + raise NotImplementedError(f"Model type {model_type} not supported.") + params["metric"] = metric + params['model_name'] = f"{metric}_{model_type}" \ No newline at end of file From 4de24a19c0845324ec7b96c9e37fa69a920ef211 Mon Sep 17 00:00:00 2001 From: Charlie Meyers Date: Tue, 30 Jul 2024 20:18:53 +0200 Subject: [PATCH 33/35] config updates for gzip --- examples/gzip/.gitignore | 1 + examples/gzip/conf/clean.yaml | 40 +- examples/gzip/conf/condense_knn.yaml | 5 +- examples/gzip/conf/condense_logistic.yaml | 5 +- examples/gzip/conf/condense_svc.yaml | 4 +- examples/gzip/conf/condensed_plots.yaml | 139 +- examples/gzip/conf/gzip_knn.yaml | 15 +- examples/gzip/conf/gzip_logistic.yaml | 22 +- examples/gzip/conf/gzip_svc.yaml | 17 +- examples/gzip/conf/merged_plots.yaml | 372 + examples/gzip/conf/plots.yaml | 326 +- examples/gzip/dvc.lock | 25220 ++++++-------------- examples/gzip/dvc.yaml | 258 +- 13 files changed, 8284 insertions(+), 18140 deletions(-) create mode 100644 examples/gzip/conf/merged_plots.yaml diff --git a/examples/gzip/.gitignore b/examples/gzip/.gitignore index 62dda338..14be55ba 100644 --- a/examples/gzip/.gitignore +++ b/examples/gzip/.gitignore @@ -7,6 +7,7 @@ kdd_nsl 2-22/* 2-28/* 3-7/* +7-29/* gzip/* ddos/* kdd_nsl/* diff --git a/examples/gzip/conf/clean.yaml b/examples/gzip/conf/clean.yaml index c5bc3dd5..0d329632 100644 --- a/examples/gzip/conf/clean.yaml +++ b/examples/gzip/conf/clean.yaml @@ -1,14 +1,3 @@ -# params: - # control: - # data.sample.train_size: 100 - # defaults: - # model.init.m : -1 -# fillna: -# model.init.compressor : "None" -# model.init.metric : "ncd" -# model.init.method : "random" -# model.init.m : ${data.sample.random_state} -# model.init.precompute : "False" replace: model.init.metric: jaro: "Jaro" @@ -18,11 +7,11 @@ replace: ratio: "Ratio" seqRatio: "SeqRatio" hamming: "Hamming" - gzip: "Gzip" + gzip: "GZIP" pkl: "Pickle" bz2: "BZ2" - zstd: "Zstd" - lzma : "Lzma" + zstd: "ZSTD" + lzma : "LZMA" model_name: GzipSVC : "k-SVC" GzipLogisticRegressor : "k-Logistic" @@ -30,6 +19,29 @@ replace: model.init.symmetric: True: "Symmetric" False: "Asymmetric" + model.init.sampling_method: + random : "Random" + medoid : "Medoid" + sum : "Sum" + svc : "SVC" + hardness : "Hardness" + nearmiss : "NearMiss" + knn : "KNN" + dataset: + ddos : "DDoS" + sms_spam : "SMS Spam" + kdd_nsl : "KDD NSL" + truthseeker : "Truthseeker" + model.init.m : + -1 : 1 drop_values: accuracy : 0.00000000000 predict_time : 1.00000000000 +replace_cols: + dataset: Dataset + model.init.metric: Metric + model.init.symmetric: Symmetric + model.init.sampling_method: Condensing Method + model.init.m: Condensing Ratio + model_name: Model + diff --git a/examples/gzip/conf/condense_knn.yaml b/examples/gzip/conf/condense_knn.yaml index 52bd92be..82b73c54 100644 --- a/examples/gzip/conf/condense_knn.yaml +++ b/examples/gzip/conf/condense_knn.yaml @@ -44,7 +44,7 @@ hydra: _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper direction: ${direction} storage: sqlite:///optuna.db - study_name: ${dataset}_${model_name}_${stage} + study_name: ${dataset}_${model_name}_condense n_trials: 2 n_jobs: 2 max_failure_rate: 1.0 @@ -52,8 +52,7 @@ hydra: model.init.k : 1,3,5,7,11 +model.init.weights : uniform,distance +model.init.algorithm : brute - model.init.symmetric : True,False - ++model.init.precompute : True + model.init.symmetric : True model.init.metric : gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio model_name : ${model_name} data.sample.random_state: 0,1,2,3,4,5,6,7,8,9 diff --git a/examples/gzip/conf/condense_logistic.yaml b/examples/gzip/conf/condense_logistic.yaml index 5a585b06..9bb99fbd 100644 --- a/examples/gzip/conf/condense_logistic.yaml +++ b/examples/gzip/conf/condense_logistic.yaml @@ -42,7 +42,7 @@ hydra: n_ei_candidates: 24 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name}_${stage} + study_name: ${dataset}_${model_name}_condense storage: sqlite:///optuna.db n_jobs: 1 n_trials : 1 @@ -53,8 +53,7 @@ hydra: +model.init.C : 1e-2,1e-1,1e0,1e1,1e2 +model.init.fit_intercept : True,False +model.init.class_weight : balanced,None - model.init.symmetric : True,False - ++model.init.precompute : True + model.init.symmetric : True model.init.metric : gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio model_name : ${model_name} data.sample.random_state: 0,1,2,3,4,5,6,7,8,9 diff --git a/examples/gzip/conf/condense_svc.yaml b/examples/gzip/conf/condense_svc.yaml index 478c9c97..6f1d3adf 100644 --- a/examples/gzip/conf/condense_svc.yaml +++ b/examples/gzip/conf/condense_svc.yaml @@ -44,7 +44,7 @@ hydra: n_ei_candidates: 24 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ??? + study_name: ${dataset}_${model_name}_condense storage: sqlite:///optuna.db n_jobs: 2 n_trials : 2 @@ -53,8 +53,8 @@ hydra: +model.init.C : 1e-2,1e-1,1e0,1e1,1e2 +model.init.gamma : scale,auto +model.init.class_weight : balanced,null - ++model.init.precompute : True model.init.metric : gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + model.init.symmetric : True model_name : ${model_name} data.sample.random_state: 0,1,2,3,4,5,6,7,8,9 model.init.m: tag(log, interval(.1, 1)) diff --git a/examples/gzip/conf/condensed_plots.yaml b/examples/gzip/conf/condensed_plots.yaml index 268802a3..b2a19969 100644 --- a/examples/gzip/conf/condensed_plots.yaml +++ b/examples/gzip/conf/condensed_plots.yaml @@ -1,61 +1,88 @@ -line_plot: - - file : sampling_method_vs_accuracy.pdf - hue: model.init.sampling_method - title: #"Accuracy vs Sampling Method" - x : model.init.m - xlabel: Percentage of Samples per Class +cat_plot: + - file : condensing_method_vs_accuracy.pdf + digitize : Condensing Ratio + x: Condensing Method + hue : Condensing Ratio y : accuracy - ylabel: Accuracy - hue_order: - - random - - svc - - knn - - sum - - medoid - - nearmiss - - hardness - errorbar: se - err_style: bars - xlim : [0, 1] y_scale : linear - legend: {"title": "Sampling Method", "bbox_to_anchor": [1.05, .5], "loc" : "center left", "prop" : {"size" : 14}} - - file: sampling_method_vs_train_time.pdf - hue: model.init.sampling_method - title: #"Training Time vs Sampling Method" - x : model.init.m - xlabel: Percentage of Samples per Class + legend: {"bbox_to_anchor": [1.05, .5], "loc" : "center left", "prop" : {"size" : 14}} + kind : boxen + col : Model + rotation : 45 + order: + - Random + - Medoid + - Sum + - SVC + - Hardness + - NearMiss + - KNN + xticklabels: + - Random + - Medoid + - Sum + - SVC + - Hardness + - NearMiss + - KNN + xlabels: "Condensing Method" + ylabels: "Accuracy" + legend_title : "Sample Ratio" + - file: condensing_method_vs_train_time.pdf + x: Condensing Method + hue : Condensing Ratio + digitize : Condensing Ratio y : train_time - ylabel: Training Time (s) - y_scale : linear - hue_order: - - random - - svc - - knn - - sum - - medoid - - nearmiss - - hardness - errorbar: se - err_style: bars - xlim : [0, 1] - legend: {"title": "Sampling Method", "bbox_to_anchor": [1.05, .5], "loc" : "center left", "prop" : {"size" : 14}} - - file : sampling_method_vs_predict_time.pdf - hue: model.init.sampling_method - title: #"Prediction Time vs Sampling Method" - x : model.init.m - xlabel: Percentage of Samples per Class + y_scale : log + kind : boxen + col : Model + rotation : 45 + order: + - Random + - Medoid + - Sum + - SVC + - Hardness + - NearMiss + - KNN + xticklabels: + - Random + - Medoid + - Sum + - SVC + - Hardness + - NearMiss + - k-NN + xlabels: "Condensing Method" + ylabels: "Training Time" + legend_title : "Sample Ratio" + legend: {"bbox_to_anchor": [1.05, .5], "loc" : "center left", "prop" : {"size" : 14}} + - file : condensing_method_vs_predict_time.pdf + x: Condensing Method + hue : Condensing Ratio + digitize : Condensing Ratio y : predict_time - ylabel: Prediction Time (s) y_scale : log - hue_order: - - random - - svc - - knn - - sum - - medoid - - nearmiss - - hardness - errorbar: se - err_style: bars - xlim : [0, 1] - legend: {"title": "Sampling Method", "bbox_to_anchor": [1.05, .5], "loc" : "center left", "prop" : {"size" : 14}} + col : Model + rotation : 45 + legend: {"bbox_to_anchor": [1.05, .5], "loc" : "center left", "prop" : {"size" : 14}} + kind : boxen + order: + - Random + - Medoid + - Sum + - SVC + - Hardness + - NearMiss + - KNN + xticklabels: + - Random + - Medoid + - Sum + - SVC + - Hardness + - NearMiss + - k-NN + xlabels: "Condensing Method" + ylabels: "Prediction Time" + legend_title : "Sample Ratio" \ No newline at end of file diff --git a/examples/gzip/conf/gzip_knn.yaml b/examples/gzip/conf/gzip_knn.yaml index 10e85862..fc9f0b73 100644 --- a/examples/gzip/conf/gzip_knn.yaml +++ b/examples/gzip/conf/gzip_knn.yaml @@ -34,28 +34,25 @@ hydra: sampler: _target_: optuna.samplers.TPESampler consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper direction: ${direction} storage: sqlite:///optuna.db study_name: ${dataset}_${model_name}_${stage} - n_trials: 2 - n_jobs: 2 + n_trials: 128 + n_jobs: 8 max_failure_rate: 1.0 params: model.init.k : 1,3,5,7,11 +model.init.weights : uniform,distance +model.init.algorithm : brute - model.init.symmetric : True,False - ++model.init.precompute : True - model.init.metric : gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio model_name : ${model_name} - ++data.sample.random_state: int(interval(1, 10000)) launcher: _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher n_jobs: 8 diff --git a/examples/gzip/conf/gzip_logistic.yaml b/examples/gzip/conf/gzip_logistic.yaml index 7451f213..e7d9f4d0 100644 --- a/examples/gzip/conf/gzip_logistic.yaml +++ b/examples/gzip/conf/gzip_logistic.yaml @@ -34,29 +34,27 @@ hydra: sampler: _target_: optuna.samplers.TPESampler consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper study_name: ${dataset}_${model_name}_${stage} storage: sqlite:///optuna.db - n_jobs: 1 - n_trials : 1 + n_trials: 128 + n_jobs: 8 params: +model.init.solver: saga - +model.init.penalty : l2,l1,l2,none - +model.init.tol : 1e-4,1e-3,1e-2 - +model.init.C : 1e-2,1e-1,1e0,1e1,1e2 + +model.init.penalty : l2,l1 + +model.init.tol: tag(log, interval(1e-5, 1e-1)) + +model.init.C : tag(log, interval(1e-3, 1e3)) +model.init.fit_intercept : True,False +model.init.class_weight : balanced,None - model.init.symmetric : True,False - ++model.init.precompute : True - model.init.metric : gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + model_name : ${model_name} - data.sample.random_state: int(interval(1, 10000)) direction: ${direction} max_failure_rate: 1.0 launcher: diff --git a/examples/gzip/conf/gzip_svc.yaml b/examples/gzip/conf/gzip_svc.yaml index 62b6744d..4c20c962 100644 --- a/examples/gzip/conf/gzip_svc.yaml +++ b/examples/gzip/conf/gzip_svc.yaml @@ -36,27 +36,24 @@ hydra: sampler: _target_: optuna.samplers.TPESampler consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper study_name: ${dataset}_${model_name}_${stage} storage: sqlite:///optuna.db - n_jobs: 2 - n_trials : 2 + n_trials: 128 + n_jobs: 8 params: +model.init.kernel : rbf,precomputed - +model.init.C : 1e-2,1e-1,1e0,1e1,1e2 + +model.init.C : tag(log, interval(1e-3, 1e3)) +model.init.gamma : scale,auto +model.init.class_weight : balanced,null - model.init.symmetric : True,False - ++model.init.precompute : True - model.init.metric : gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio model_name : ${model_name} - data.sample.random_state: int(interval(1, 10000)) direction: ${direction} max_failure_rate: 1.0 launcher: diff --git a/examples/gzip/conf/merged_plots.yaml b/examples/gzip/conf/merged_plots.yaml new file mode 100644 index 00000000..45ac1a9f --- /dev/null +++ b/examples/gzip/conf/merged_plots.yaml @@ -0,0 +1,372 @@ +cat_plot: + - file: models_vs_accuracy.pdf + x : Model + y : accuracy + hue : data.sample.train_size + errorbar: se + kind : boxen + titles : + xlabels : " " + ylabels : Accuracy + legend_title: "Samples" + legend: {"bbox_to_anchor": [1.05, .5], "loc" : "center left", "prop" : {"size" : 14}} + rotation: 90 + col : Dataset + order: + - k-KNN + - k-SVC + - k-Logistic + col_order: + - DDoS + - SMS Spam + - KDD NSL + - Truthseeker + - file: models_vs_train_time.pdf + x : Model + y : train_time + hue : data.sample.train_size + errorbar: se + kind : boxen + titles : + xlabels : " " + ylabels : $t_t$ (s) + legend_title: "Samples" + rotation: 90 + col : Dataset + legend: {"bbox_to_anchor": [1.05, .5], "loc" : "center left", "prop" : {"size" : 14}} + y_scale : log + order: + - k-KNN + - k-SVC + - k-Logistic + col_order: + - DDoS + - SMS Spam + - KDD NSL + - Truthseeker + - file: models_vs_predict_time.pdf + x : Model + y : predict_time_per_sample + hue : data.sample.train_size + errorbar: se + kind : boxen + titles : + xlabels : " " + ylabels : $t_i$ (s) + legend_title: "Samples" + col : Dataset + legend: {"bbox_to_anchor": [1.05, .5], "loc" : "center left", "prop" : {"size" : 14}} + rotation: 90 + y_scale : log + order: + - k-KNN + - k-SVC + - k-Logistic + col_order: + - DDoS + - SMS Spam + - KDD NSL + - Truthseeker + - file: symmetric_models_vs_accuracy.pdf + row : Model + x : data.sample.train_size + y : accuracy + hue : Symmetric + errorbar: se + kind : boxen + titles : + xlabels : "Samples" + ylabels : Accuracy + legend_title: " " + legend: {"bbox_to_anchor": [1.05, .5], "loc" : "center left", "prop" : {"size" : 14}} + rotation: 90 + col : Dataset + col_order: + - DDoS + - SMS Spam + - KDD NSL + - Truthseeker + row_order: + - k-KNN + - k-SVC + - k-Logistic + - file: symmetric_models_vs_train_time.pdf + row : Model + x : data.sample.train_size + y : train_time_per_sample + hue : Symmetric + errorbar: se + kind : boxen + titles : + xlabels : " " + ylabels : $t_t$ (s) + legend_title: " " + rotation: 90 + col : Dataset + legend: {"bbox_to_anchor": [1.05, .5], "loc" : "center left", "prop" : {"size" : 14}} + y_scale : log + col_order: + - DDoS + - SMS Spam + - KDD NSL + - Truthseeker + row_order: + - k-KNN + - k-SVC + - k-Logistic + - file: symmetric_models_vs_predict_time.pdf + x : data.sample.train_size + row : Model + y : predict_time_per_sample + hue : Symmetric + errorbar: se + kind : boxen + titles : + xlabels : " " + ylabels : $t_i$ (s) + legend_title: " " + col : Dataset + legend: {"bbox_to_anchor": [1.05, .5], "loc" : "center left", "prop" : {"size" : 14}} + rotation: 90 + y_scale : log + col_order: + - DDoS + - SMS Spam + - KDD NSL + - Truthseeker + row_order: + - k-KNN + - k-SVC + - k-Logistic + - file: condensing_methods_vs_accuracy.pdf + x : Model + y : accuracy + hue : Condensing Method + errorbar: se + kind : boxen + titles : + xlabels : " " + ylabels : Accuracy + legend: {"bbox_to_anchor": [1.05, .5], "loc" : "center left", "prop" : {"size" : 14}} + rotation: 90 + col : Dataset + col_order: + - DDoS + - SMS Spam + - KDD NSL + - Truthseeker + order: + - k-KNN + - k-SVC + - k-Logistic + legend_title: "Condensing Method" + - file: condensing_methods_vs_train_time.pdf + x : Model + y : train_time + hue : Condensing Method + errorbar: se + kind : boxen + titles : + xlabels : " " + ylabels : $t_t$ (s) + legend_title: "Condensing Method" + rotation: 90 + col : Dataset + y_scale : log + legend: {"bbox_to_anchor": [1.05, .5], "loc" : "center left", "prop" : {"size" : 14}} + col_order: + - DDoS + - SMS Spam + - KDD NSL + - Truthseeker + order: + - k-KNN + - k-SVC + - k-Logistic + - file: condensing_methods_vs_predict_time.pdf + x : Model + y : predict_time_per_sample + hue : Condensing Method + errorbar: se + kind : boxen + titles : + xlabels : " " + ylabels : $t_i$ (s) + legend_title: "Condensing Method" + col : Dataset + legend: {"bbox_to_anchor": [1.05, .5], "loc" : "center left", "prop" : {"size" : 14}} + rotation: 90 + y_scale : log + col_order: + - DDoS + - SMS Spam + - KDD NSL + - Truthseeker + order: + - k-KNN + - k-SVC + - k-Logistic +line_plot: + - file: compressor_metric_vs_accuracy.pdf + hue: Metric + title: #"Accuracy vs $m$-best samples across datasets and compressors" + x: data.sample.train_size + xlabel: Number of Training Samples + y: accuracy + ylabel: Accuracy + hue_order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + errorbar: se + err_style: bars + xlim: [10, 500] + style: Dataset + style_order: + - "DDoS" + - "SMS Spam" + - "KDD NSL" + - "Truthseeker" + legend : + bbox_to_anchor : [1.05, .5] + loc: center left + prop: {"size" : 12} + - file: string_metric_vs_accuracy.pdf + hue : Metric + title: #"Accuracy vs $m$-best samples across datasets and string metrics" + x: data.sample.train_size + xlabel: Number of Training Samples + y: accuracy + ylabel: Accuracy + hue_order: + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + errorbar: se + err_style: bars + xlim: [10, 500] + style: Dataset + style_order: + - "DDoS" + - "SMS Spam" + - "KDD NSL" + - "Truthseeker" + legend : + bbox_to_anchor : [1.05, .5] + loc: center left + prop: {"size" : 12} + - file: string_metric_vs_train_time.pdf + hue : Metric + title: #"Accuracy vs $m$-best samples across datasets and string metrics" + x: data.sample.train_size + xlabel: Number of Training Samples + y: train_time + ylabel: $t_t$ (s) + hue_order: + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + errorbar: se + err_style: bars + xlim: [10, 500] + style: Dataset + style_order: + - "DDoS" + - "SMS Spam" + - "KDD NSL" + - "Truthseeker" + legend : + bbox_to_anchor : [1.05, .5] + loc: center left + prop: {"size" : 12} + y_scale: log + - file: compressor_metric_vs_train_time.pdf + hue: Metric + title: #"Training Time vs $m$-best samples across datasets and compressors" + x: data.sample.train_size + xlabel: Number of Training Samples + y: train_time + ylabel: $t_t$ (s) + hue_order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + errorbar: se + err_style: bars + xlim: [10, 500] + style: Dataset + style_order: + - "DDoS" + - "SMS Spam" + - "KDD NSL" + - "Truthseeker" + legend : + bbox_to_anchor : [1.05, .5] + loc: center left + prop: {"size" : 12} + y_scale: log + - file: string_metric_vs_predict_time.pdf + hue : Metric + title: #"Accuracy vs $m$-best samples across datasets and string metrics" + x: data.sample.train_size + xlabel: Number of Training Samples + y: predict_time_per_sample + ylabel: $t_i$ (s) + hue_order: + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + errorbar: se + err_style: bars + xlim: [10, 500] + style: Dataset + style_order: + - "DDoS" + - "SMS Spam" + - "KDD NSL" + - "Truthseeker" + legend : + bbox_to_anchor : [1.05, .5] + loc: center left + prop: {"size" : 12} + y_scale: log + - file: compressor_metric_vs_predict_time.pdf + hue: Metric + title: #"Prediction Time vs $m$-best samples across datasets and compressors" + x: data.sample.train_size + xlabel: Number of Training Samples + y: predict_time_per_sample + ylabel: $t_i$ (s) + hue_order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + errorbar: se + err_style: bars + xlim: [10, 500] + style: Dataset + style_order: + - "DDoS" + - "SMS Spam" + - "KDD NSL" + - "Truthseeker" + legend : + bbox_to_anchor : [1.05, .5] + loc: center left + prop: {"size" : 12} + y_scale: log \ No newline at end of file diff --git a/examples/gzip/conf/plots.yaml b/examples/gzip/conf/plots.yaml index eac757c4..188f8e2f 100644 --- a/examples/gzip/conf/plots.yaml +++ b/examples/gzip/conf/plots.yaml @@ -1,17 +1,57 @@ line_plot: +- file: compressor_metric_vs_accuracy.pdf + hue: Metric + title: #"Accuracy vs $m$-best samples" + x: data.sample.train_size + xlabel: Number of Training Samples + y: accuracy + ylabel: Accuracy + hue_order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + errorbar: se + err_style: bars + xlim: [10, 500] + legend: {"title": "Metrics", "bbox_to_anchor": [1.05, .5], "loc" : "center left", "prop" : {"size" : 14}} - file: metric_vs_accuracy.pdf - hue: model.init.metric + hue: Metric title: #"Accuracy vs $m$-best samples" x: data.sample.train_size xlabel: Number of Training Samples y: accuracy ylabel: Accuracy hue_order: - - Gzip + - GZIP - Pickle - BZ2 - - Zstd - - Lzma + - ZSTD + - LZMA + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + errorbar: se + err_style: bars + xlim: [10, 500] + legend: {"title": "Metrics", "bbox_to_anchor": [1.05, .5], "loc" : "center left", "prop" : {"size" : 14}} +- file: string_metric_vs_accuracy.pdf + hue: Metric + title: #"Accuracy vs $m$-best samples" + x: data.sample.train_size + xlabel: Number of Training Samples + y: accuracy + ylabel: Accuracy + hue_order: + # - GZIP + # - Pickle + # - BZ2 + # - ZSTD + # - LZMA - Levenshtein - Ratio - Hamming @@ -23,7 +63,31 @@ line_plot: xlim: [10, 500] legend: {"title": "Metrics", "bbox_to_anchor": [1.05, .5], "loc" : "center left", "prop" : {"size" : 14}} - file: metric_vs_train_time.pdf - hue: model.init.metric + hue: Metric + title: #"Training Time vs $m$-best samples" + x: data.sample.train_size + xlabel: Number of Training Samples + y: train_time + ylabel: Training Time (s) + y_scale: linear + hue_order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + errorbar: se + err_style: bars + xlim: [10, 500] + legend: {"title": "Metrics", "bbox_to_anchor": [1.05, .5], "loc" : "center left", "prop" : {"size" : 14}} +- file: compressor_metric_vs_train_time.pdf + hue: Metric title: #"Training Time vs $m$-best samples" x: data.sample.train_size xlabel: Number of Training Samples @@ -31,11 +95,29 @@ line_plot: ylabel: Training Time (s) y_scale: linear hue_order: - - Gzip + - GZIP - Pickle - BZ2 - - Zstd - - Lzma + - ZSTD + - LZMA + errorbar: se + err_style: bars + xlim: [10, 500] + legend: {"title": "Metrics", "bbox_to_anchor": [1.05, .5], "loc" : "center left", "prop" : {"size" : 14}} +- file: string_metric_vs_train_time.pdf + hue: Metric + title: #"Training Time vs $m$-best samples" + x: data.sample.train_size + xlabel: Number of Training Samples + y: train_time + ylabel: Training Time (s) + y_scale: linear + hue_order: + # - GZIP + # - Pickle + # - BZ2 + # - ZSTD + # - LZMA - Levenshtein - Ratio - Hamming @@ -46,8 +128,22 @@ line_plot: err_style: bars xlim: [10, 500] legend: {"title": "Metrics", "bbox_to_anchor": [1.05, .5], "loc" : "center left", "prop" : {"size" : 14}} +- file: compressor_metric_vs_predict_time.pdf + hue: Metric + title: #"Prediction Time vs $m$-best samples" + x: data.sample.train_size + xlabel: Number of Training Samples + y: predict_time + ylabel: Prediction Time (s) + y_scale: linear + hue_order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA - file: metric_vs_predict_time.pdf - hue: model.init.metric + hue: Metric title: #"Prediction Time vs $m$-best samples" x: data.sample.train_size xlabel: Number of Training Samples @@ -55,11 +151,26 @@ line_plot: ylabel: Prediction Time (s) y_scale: linear hue_order: - - Gzip + - GZIP - Pickle - BZ2 - - Zstd - - Lzma + - ZSTD + - LZMA + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio +- file: string_metric_vs_predict_time.pdf + hue: Metric + title: #"Prediction Time vs $m$-best samples" + x: data.sample.train_size + xlabel: Number of Training Samples + y: predict_time + ylabel: Prediction Time (s) + y_scale: linear + hue_order: - Levenshtein - Ratio - Hamming @@ -71,99 +182,166 @@ line_plot: xlim: [10, 500] legend: {"title": "Metrics", "bbox_to_anchor": [1.05, .5], "loc" : "center left", "prop" : {"size" : 14}} cat_plot: - - file: symmetric_vs_metric.pdf - x : model.init.symmetric + - file: symmetric_vs_compressor_metric.pdf + x : Metric y : accuracy - hue : model.init.metric + hue : Symmetric errorbar: se - kind : bar - titles : - xlabels : "" + kind : boxen + titles : " " + xlabels : "Compressor" ylabels : Accuracy legend_title: "Metrics" - hue_order: - - Gzip + order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + hue_order : + - Asymmetric + - Symmetric + # - Levenshtein + # - Ratio + # - Hamming + # - Jaro + # - Jaro-Winkler + # - SeqRatio + rotation: 90 + legend: {"bbox_to_anchor": [1.05, .5], "loc" : "center left", "prop" : {"size" : 14}} + - file: symmetric_vs_string_metric.pdf + x : Metric + y : accuracy + hue : Symmetric + errorbar: se + kind : boxen + titles : " " + xlabels : "Compressors" + ylabels : Accuracy + legend_title: " " + order: + # - GZIP + # - Pickle + # - BZ2 + # - ZSTD + # - LZMA + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + hue_order : + - Asymmetric + - Symmetric + rotation: 90 + legend: {"bbox_to_anchor": [1.05, .5], "loc" : "center left", "prop" : {"size" : 14}} + - file: symmetric_vs_metric.pdf + x : Metric + y : accuracy + hue : Symmetric + errorbar: se + kind : boxen + titles : " " + xlabels : "Compressors" + ylabels : Accuracy + legend_title: " " + order: + - GZIP - Pickle - BZ2 - - Zstd - - Lzma + - ZSTD + - LZMA - Levenshtein - Ratio - Hamming - Jaro - Jaro-Winkler - SeqRatio + hue_order : + - Asymmetric + - Symmetric + rotation: 90 legend: {"bbox_to_anchor": [1.05, .5], "loc" : "center left", "prop" : {"size" : 14}} - set: - yscale: linear - ylim: [0, 1] - file: symmetric_vs_metric_train_time.pdf - x : model.init.symmetric + x : Metric y : train_time - hue : model.init.metric + hue : Symmetric errorbar: se - kind : bar + kind : boxen titles : - xlabels : "" + xlabels : "Metrics" ylabels : Training Time (s) legend_title: "Metrics" - hue_order: - - Gzip + order: + - GZIP - Pickle - BZ2 - - Zstd - - Lzma + - ZSTD + - LZMA - Levenshtein - Ratio - Hamming - Jaro - Jaro-Winkler - SeqRatio + hue_order : + - Asymmetric + - Symmetric + rotation : 90 legend: {"bbox_to_anchor": [1.05, .5], "loc" : "center left", "prop" : {"size" : 14}} - set: - yscale: log - - file: models_vs_accuracy.pdf - x : model_name - y : accuracy - hue : data.sample.train_size + y_scale : linear + - file: symmetric_vs_string_metric_train_time.pdf + x : Metric + y : train_time + hue : Symmetric errorbar: se kind : boxen - titles : - xlabels : Model - ylabels : Accuracy - legend_title: "Samples" - - legend: {"bbox_to_anchor": [1.05, .5], "loc" : "center left", "prop" : {"size" : 14}} - set: - yscale: linear - ylim: [0, 1] - rotation: 90 - - file: models_vs_train_time.pdf - x : model_name - y : accuracy - hue : data.sample.train_size - errorbar: se - kind : bar - titles : - xlabels : Model + titles : + xlabels : "Compressors" ylabels : Training Time (s) - legend_title: "Samples" - rotation: 90 + legend_title: "String Metrics" + order: + # - GZIP + # - Pickle + # - BZ2 + # - ZSTD + # - LZMA + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + hue_order : + - Asymmetric + - Symmetric + rotation : 90 legend: {"bbox_to_anchor": [1.05, .5], "loc" : "center left", "prop" : {"size" : 14}} - set: - yscale: log - - file: models_vs_predict_time.pdf - x : model_name - y : accuracy - hue : data.sample.train_size + - file: symmetric_vs_compressor_metric_train_time.pdf + x : Metric + y : train_time + hue : Symmetric errorbar: se - kind : bar - titles : - xlabels : Model - ylabels : Prediction Time (s) - legend_title: "Samples" - + kind : boxen + titles : + xlabels : "Compressors" + ylabels : Training Time (s) + legend_title: "Metrics" + order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + # - Levenshtein + # - Ratio + # - Hamming + # - Jaro + # - Jaro-Winkler + # - SeqRatio + hue_order : + - Asymmetric + - Symmetric + rotation : 90 legend: {"bbox_to_anchor": [1.05, .5], "loc" : "center left", "prop" : {"size" : 14}} - set: - yscale: log - rotation: 90 diff --git a/examples/gzip/dvc.lock b/examples/gzip/dvc.lock index 7f6e8257..afeed250 100644 --- a/examples/gzip/dvc.lock +++ b/examples/gzip/dvc.lock @@ -1,15491 +1,5601 @@ schema: '2.0' stages: - train: - cmd: python -m deckard.layers.experiment train + clean@sms_spam-gzip_knn: + cmd: python -m deckard.layers.clean_data -i sms_spam/reports/gzip_knn.csv -o + sms_spam/plots/clean/gzip_knn.csv -c conf/clean.yaml deps: - - path: params.yaml - hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 - - path: raw_data/ + - path: sms_spam/reports/gzip_knn.csv hash: md5 - md5: 33d46673e0631bef98be9e8991ed1ed1.dir - size: 50328647 - nfiles: 8 + md5: 2cc3444a2175ce059be641e3c97a3958 + size: 1219660 params: - params.yaml: - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - distance_matrix: kdd_nsl/model/gzip/100-100/0.npz - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss + conf/clean.yaml: + drop_values: + accuracy: 0.0 + predict_time: 1.0 + replace: + model.init.metric: + jaro: Jaro + _winkler: -Winkler + levenshtein: Levenshtein + ncd: NCD + ratio: Ratio + seqRatio: SeqRatio + hamming: Hamming + gzip: GZIP + pkl: Pickle + bz2: BZ2 + zstd: ZSTD + lzma: LZMA + model_name: + GzipSVC: k-SVC + GzipLogisticRegressor: k-Logistic + GzipKNN: k-KNN + model.init.symmetric: + true: Symmetric + false: Asymmetric + model.init.sampling_method: + random: Random + medoid: Medoid + sum: Sum + svc: SVC + hardness: Hardness + nearmiss: NearMiss + knn: KNN + dataset: + ddos: DDoS + sms_spam: SMS Spam + kdd_nsl: KDD NSL + truthseeker: Truthseeker + model.init.m: + -1: 1 + replace_cols: + dataset: Dataset + model.init.metric: Metric + model.init.symmetric: Symmetric + model.init.sampling_method: Condensing Method + model.init.m: Condensing Ratio + model_name: Model outs: - - path: kdd_nsl/reports/train/default/predictions.json - hash: md5 - md5: 986d2f0abe9b96253b196a222a550609 - size: 702 - - path: kdd_nsl/reports/train/default/score_dict.json + - path: sms_spam/plots/clean/gzip_knn.csv hash: md5 - md5: 28a66df15b858d73e5c93b40d316ce35 - size: 485 - test_each_method@knn-kdd_nsl: - cmd: 'python -m deckard.layers.optimise stage=train +model.init.sampling_method=knn model.init.m=10 files.name=knn - files.directory=kdd_nsl data=kdd_nsl dataset=kdd_nsl model_name=gzip_knn hydra.run.dir=kdd_nsl/logs/method/knn - ++raise_exception=True ' + md5: 788afe513b0596808b5125d82019c3ae + size: 704722 + clean@sms_spam-gzip_svc: + cmd: python -m deckard.layers.clean_data -i sms_spam/reports/gzip_svc.csv -o + sms_spam/plots/clean/gzip_svc.csv -c conf/clean.yaml deps: - - path: kdd_nsl/reports/train/default/score_dict.json + - path: sms_spam/reports/gzip_svc.csv hash: md5 - md5: f8a4019adc566855c2a704a0311ff7c4 - size: 489 - - path: params.yaml + md5: c4196fa3f0dbc4a27972b967e7104485 + size: 1327853 + params: + conf/clean.yaml: + drop_values: + accuracy: 0.0 + predict_time: 1.0 + replace: + model.init.metric: + jaro: Jaro + _winkler: -Winkler + levenshtein: Levenshtein + ncd: NCD + ratio: Ratio + seqRatio: SeqRatio + hamming: Hamming + gzip: GZIP + pkl: Pickle + bz2: BZ2 + zstd: ZSTD + lzma: LZMA + model_name: + GzipSVC: k-SVC + GzipLogisticRegressor: k-Logistic + GzipKNN: k-KNN + model.init.symmetric: + true: Symmetric + false: Asymmetric + model.init.sampling_method: + random: Random + medoid: Medoid + sum: Sum + svc: SVC + hardness: Hardness + nearmiss: NearMiss + knn: KNN + dataset: + ddos: DDoS + sms_spam: SMS Spam + kdd_nsl: KDD NSL + truthseeker: Truthseeker + model.init.m: + -1: 1 + replace_cols: + dataset: Dataset + model.init.metric: Metric + model.init.symmetric: Symmetric + model.init.sampling_method: Condensing Method + model.init.m: Condensing Ratio + model_name: Model + outs: + - path: sms_spam/plots/clean/gzip_svc.csv + hash: md5 + md5: 75d1640476b0bfb25b015190f8b4d3ed + size: 1077730 + clean@sms_spam-gzip_logistic: + cmd: python -m deckard.layers.clean_data -i sms_spam/reports/gzip_logistic.csv + -o sms_spam/plots/clean/gzip_logistic.csv -c conf/clean.yaml + deps: + - path: sms_spam/reports/gzip_logistic.csv hash: md5 - md5: f6a5538a55c3c37d8a2d6d1d4eb95ec2 - size: 1467 + md5: 0b87e1a278e97393093edfa85a6c3647 + size: 1324676 params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss + conf/clean.yaml: + drop_values: + accuracy: 0.0 + predict_time: 1.0 + replace: + model.init.metric: + jaro: Jaro + _winkler: -Winkler + levenshtein: Levenshtein + ncd: NCD + ratio: Ratio + seqRatio: SeqRatio + hamming: Hamming + gzip: GZIP + pkl: Pickle + bz2: BZ2 + zstd: ZSTD + lzma: LZMA + model_name: + GzipSVC: k-SVC + GzipLogisticRegressor: k-Logistic + GzipKNN: k-KNN + model.init.symmetric: + true: Symmetric + false: Asymmetric + model.init.sampling_method: + random: Random + medoid: Medoid + sum: Sum + svc: SVC + hardness: Hardness + nearmiss: NearMiss + knn: KNN + dataset: + ddos: DDoS + sms_spam: SMS Spam + kdd_nsl: KDD NSL + truthseeker: Truthseeker + model.init.m: + -1: 1 + replace_cols: + dataset: Dataset + model.init.metric: Metric + model.init.symmetric: Symmetric + model.init.sampling_method: Condensing Method + model.init.m: Condensing Ratio + model_name: Model outs: - - path: kdd_nsl/logs/method/knn + - path: sms_spam/plots/clean/gzip_logistic.csv hash: md5 - md5: f902bdd8882aa06bba0d1fef19c4a313.dir - size: 11613 - nfiles: 4 - - path: kdd_nsl/reports/train/knn/score_dict.json - hash: md5 - md5: 4e7f0750779df5202e5dec6228f94f99 - size: 490 - test_each_method@knn-truthseeker: - cmd: 'python -m deckard.layers.optimise stage=train +model.init.sampling_method=knn model.init.m=10 files.name=knn - files.directory=truthseeker data=truthseeker dataset=truthseeker model_name=gzip_knn - hydra.run.dir=truthseeker/logs/method/knn ++raise_exception=True ' + md5: 66fb493c5dac4d615c1047e8c4432846 + size: 954789 + clean@sms_spam-condense/knn: + cmd: python -m deckard.layers.clean_data -i sms_spam/reports/condense/knn.csv + -o sms_spam/plots/clean/condense/knn.csv -c conf/clean.yaml deps: - - path: kdd_nsl/reports/train/default/score_dict.json + - path: sms_spam/reports/condense/knn.csv hash: md5 - md5: f8a4019adc566855c2a704a0311ff7c4 - size: 489 - - path: params.yaml + md5: 905472e105c51a514aa316767bce543e + size: 1313303 + params: + conf/clean.yaml: + drop_values: + accuracy: 0.0 + predict_time: 1.0 + replace: + model.init.metric: + jaro: Jaro + _winkler: -Winkler + levenshtein: Levenshtein + ncd: NCD + ratio: Ratio + seqRatio: SeqRatio + hamming: Hamming + gzip: GZIP + pkl: Pickle + bz2: BZ2 + zstd: ZSTD + lzma: LZMA + model_name: + GzipSVC: k-SVC + GzipLogisticRegressor: k-Logistic + GzipKNN: k-KNN + model.init.symmetric: + true: Symmetric + false: Asymmetric + model.init.sampling_method: + random: Random + medoid: Medoid + sum: Sum + svc: SVC + hardness: Hardness + nearmiss: NearMiss + knn: KNN + dataset: + ddos: DDoS + sms_spam: SMS Spam + kdd_nsl: KDD NSL + truthseeker: Truthseeker + model.init.m: + -1: 1 + replace_cols: + dataset: Dataset + model.init.metric: Metric + model.init.symmetric: Symmetric + model.init.sampling_method: Condensing Method + model.init.m: Condensing Ratio + model_name: Model + outs: + - path: sms_spam/plots/clean/condense/knn.csv + hash: md5 + md5: ca86373d57bc8ef7b33d53d4113d5b17 + size: 859047 + clean@sms_spam-condense/svc: + cmd: python -m deckard.layers.clean_data -i sms_spam/reports/condense/svc.csv + -o sms_spam/plots/clean/condense/svc.csv -c conf/clean.yaml + deps: + - path: sms_spam/reports/condense/svc.csv hash: md5 - md5: f6a5538a55c3c37d8a2d6d1d4eb95ec2 - size: 1467 + md5: 63204fb6e188d4166e415c86e305631d + size: 1399188 params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss + conf/clean.yaml: + drop_values: + accuracy: 0.0 + predict_time: 1.0 + replace: + model.init.metric: + jaro: Jaro + _winkler: -Winkler + levenshtein: Levenshtein + ncd: NCD + ratio: Ratio + seqRatio: SeqRatio + hamming: Hamming + gzip: GZIP + pkl: Pickle + bz2: BZ2 + zstd: ZSTD + lzma: LZMA + model_name: + GzipSVC: k-SVC + GzipLogisticRegressor: k-Logistic + GzipKNN: k-KNN + model.init.symmetric: + true: Symmetric + false: Asymmetric + model.init.sampling_method: + random: Random + medoid: Medoid + sum: Sum + svc: SVC + hardness: Hardness + nearmiss: NearMiss + knn: KNN + dataset: + ddos: DDoS + sms_spam: SMS Spam + kdd_nsl: KDD NSL + truthseeker: Truthseeker + model.init.m: + -1: 1 + replace_cols: + dataset: Dataset + model.init.metric: Metric + model.init.symmetric: Symmetric + model.init.sampling_method: Condensing Method + model.init.m: Condensing Ratio + model_name: Model outs: - - path: truthseeker/logs/method/knn - hash: md5 - md5: 5a52da2681ff444c53a1623722c2d431.dir - size: 11642 - nfiles: 4 - - path: truthseeker/reports/train/knn/score_dict.json + - path: sms_spam/plots/clean/condense/svc.csv hash: md5 - md5: f09f746efa5c7a56f4dd1a3e20a7ab6b - size: 485 - test_each_method@svc-kdd_nsl: - cmd: 'python -m deckard.layers.optimise stage=train +model.init.sampling_method=svc model.init.m=10 files.name=svc - files.directory=kdd_nsl data=kdd_nsl dataset=kdd_nsl model_name=gzip_knn hydra.run.dir=kdd_nsl/logs/method/svc - ++raise_exception=True ' + md5: c91f0d6cc570e6ea8fe093ba67ea5da8 + size: 1142139 + clean@sms_spam-condense/logistic: + cmd: python -m deckard.layers.clean_data -i sms_spam/reports/condense/logistic.csv + -o sms_spam/plots/clean/condense/logistic.csv -c conf/clean.yaml deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: f8a4019adc566855c2a704a0311ff7c4 - size: 489 - - path: params.yaml + - path: sms_spam/reports/condense/logistic.csv hash: md5 - md5: f6a5538a55c3c37d8a2d6d1d4eb95ec2 - size: 1467 + md5: 5d331b32fbe15e0cdc7611fc3aa946a2 + size: 3983718 params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss + conf/clean.yaml: + drop_values: + accuracy: 0.0 + predict_time: 1.0 + replace: + model.init.metric: + jaro: Jaro + _winkler: -Winkler + levenshtein: Levenshtein + ncd: NCD + ratio: Ratio + seqRatio: SeqRatio + hamming: Hamming + gzip: GZIP + pkl: Pickle + bz2: BZ2 + zstd: ZSTD + lzma: LZMA + model_name: + GzipSVC: k-SVC + GzipLogisticRegressor: k-Logistic + GzipKNN: k-KNN + model.init.symmetric: + true: Symmetric + false: Asymmetric + model.init.sampling_method: + random: Random + medoid: Medoid + sum: Sum + svc: SVC + hardness: Hardness + nearmiss: NearMiss + knn: KNN + dataset: + ddos: DDoS + sms_spam: SMS Spam + kdd_nsl: KDD NSL + truthseeker: Truthseeker + model.init.m: + -1: 1 + replace_cols: + dataset: Dataset + model.init.metric: Metric + model.init.symmetric: Symmetric + model.init.sampling_method: Condensing Method + model.init.m: Condensing Ratio + model_name: Model outs: - - path: kdd_nsl/logs/method/svc + - path: sms_spam/plots/clean/condense/logistic.csv hash: md5 - md5: 433b30d37ba64e71527ac2d837b44fa2.dir - size: 11612 - nfiles: 4 - - path: kdd_nsl/reports/train/svc/score_dict.json - hash: md5 - md5: f41538adb6ffa9182ea126c85c353abf - size: 489 - test_each_method@svc-truthseeker: - cmd: 'python -m deckard.layers.optimise stage=train +model.init.sampling_method=svc model.init.m=10 files.name=svc - files.directory=truthseeker data=truthseeker dataset=truthseeker model_name=gzip_knn - hydra.run.dir=truthseeker/logs/method/svc ++raise_exception=True ' + md5: 6d5bc96d209d77fefaf76e73109b26ac + size: 2257621 + merge@sms_spam: + cmd: python merge.py --big_dir sms_spam/plots/ --data_file clean/gzip_knn.csv + --little_dir_data_file clean/gzip_logistic.csv clean/gzip_svc.csv --output_folder + sms_spam/plots --output_file merged.csv deps: - - path: kdd_nsl/reports/train/default/score_dict.json + - path: sms_spam/plots/clean/gzip_knn.csv hash: md5 - md5: f8a4019adc566855c2a704a0311ff7c4 - size: 489 - - path: params.yaml + md5: 788afe513b0596808b5125d82019c3ae + size: 704722 + - path: sms_spam/plots/clean/gzip_logistic.csv hash: md5 - md5: f6a5538a55c3c37d8a2d6d1d4eb95ec2 - size: 1467 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss + md5: 66fb493c5dac4d615c1047e8c4432846 + size: 954789 + - path: sms_spam/plots/clean/gzip_svc.csv + hash: md5 + md5: 75d1640476b0bfb25b015190f8b4d3ed + size: 1077730 outs: - - path: truthseeker/logs/method/svc + - path: sms_spam/plots/merged.csv hash: md5 - md5: bc37655235ef0d2919a62c85456d379c.dir - size: 11645 - nfiles: 4 - - path: truthseeker/reports/train/svc/score_dict.json + md5: 4baf51fdcc220aedc6443147a057559e + size: 2765074 + merge_condense@sms_spam: + cmd: python merge.py --big_dir sms_spam/plots/ --data_file clean/condense/knn.csv + --little_dir_data_file clean/condense/logistic.csv clean/condense/svc.csv --output_folder + sms_spam/plots/ --output_file condensed_merged.csv + deps: + - path: sms_spam/plots/clean/condense/knn.csv hash: md5 - md5: 97f1fed3ee2887773ca9a50eeeb5b1ed - size: 488 - test_each_method@medoid-kdd_nsl: - cmd: 'python -m deckard.layers.optimise stage=train +model.init.sampling_method=medoid model.init.m=10 files.name=medoid - files.directory=kdd_nsl data=kdd_nsl dataset=kdd_nsl model_name=gzip_knn hydra.run.dir=kdd_nsl/logs/method/medoid - ++raise_exception=True ' + md5: ca86373d57bc8ef7b33d53d4113d5b17 + size: 859047 + - path: sms_spam/plots/clean/condense/logistic.csv + hash: md5 + md5: 6d5bc96d209d77fefaf76e73109b26ac + size: 2257621 + - path: sms_spam/plots/clean/condense/svc.csv + hash: md5 + md5: c91f0d6cc570e6ea8fe093ba67ea5da8 + size: 1142139 + outs: + - path: sms_spam/plots/condensed_merged.csv + hash: md5 + md5: aff0ab5439e406220d4c0c95d7032f71 + size: 4293513 + plot@sms_spam: + cmd: python -m deckard.layers.plots --path sms_spam/plots/ --file sms_spam/plots/merged.csv -c + conf/plots.yaml deps: - - path: kdd_nsl/reports/train/default/score_dict.json + - path: conf/plots.yaml hash: md5 - md5: f8a4019adc566855c2a704a0311ff7c4 - size: 489 - - path: params.yaml + md5: 43e3ec0876b55c83f231615f7a904e33 + size: 7386 + - path: sms_spam/plots/merged.csv hash: md5 - md5: f6a5538a55c3c37d8a2d6d1d4eb95ec2 - size: 1467 + md5: 4baf51fdcc220aedc6443147a057559e + size: 2765074 params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: kdd_nsl/logs/method/medoid - hash: md5 - md5: 5b972c1f6a8c4ebff94a088e2be12b28.dir - size: 11661 - nfiles: 4 - - path: kdd_nsl/reports/train/medoid/score_dict.json - hash: md5 - md5: 10a0913632dea0d6717263ba1854b1e2 - size: 484 - test_each_method@medoid-truthseeker: - cmd: 'python -m deckard.layers.optimise stage=train +model.init.sampling_method=medoid model.init.m=10 files.name=medoid - files.directory=truthseeker data=truthseeker dataset=truthseeker model_name=medoid - hydra.run.dir=truthseeker/logs/method/medoid ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 064e5bb42979e36c917c538b2a7bc0cc - size: 489 - - path: params.yaml - hash: md5 - md5: 8e937140db56a135e97c05461c573520 - size: 1345 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: truthseeker/logs/method/medoid - hash: md5 - md5: 7b6fef8487e5b8dec0f76f4b4fc59ccb.dir - size: 10226 - nfiles: 4 - - path: truthseeker/reports/train/medoid/score_dict.json - hash: md5 - md5: 8cebb3ee0098d2ee2bb4130e346e8e0f - size: 282 - test_each_method@sum-kdd_nsl: - cmd: 'python -m deckard.layers.optimise stage=train +model.init.sampling_method=sum model.init.m=10 files.name=sum - files.directory=kdd_nsl data=kdd_nsl dataset=kdd_nsl model_name=gzip_knn hydra.run.dir=kdd_nsl/logs/method/sum - ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: f8a4019adc566855c2a704a0311ff7c4 - size: 489 - - path: params.yaml - hash: md5 - md5: f6a5538a55c3c37d8a2d6d1d4eb95ec2 - size: 1467 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: kdd_nsl/logs/method/sum - hash: md5 - md5: 41cd7632a1d85e7380d14b0e8eccc819.dir - size: 11607 - nfiles: 4 - - path: kdd_nsl/reports/train/sum/score_dict.json - hash: md5 - md5: 2a97e468ea2e9071e1f7d5bdb1e7495b - size: 484 - test_each_method@sum-truthseeker: - cmd: 'python -m deckard.layers.optimise stage=train +model.init.sampling_method=sum model.init.m=10 files.name=sum - files.directory=truthseeker data=truthseeker dataset=truthseeker model_name=sum - hydra.run.dir=truthseeker/logs/method/sum ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 064e5bb42979e36c917c538b2a7bc0cc - size: 489 - - path: params.yaml - hash: md5 - md5: 8e937140db56a135e97c05461c573520 - size: 1345 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: truthseeker/logs/method/sum - hash: md5 - md5: e7f9741f777d98f3d3416264b9f3e6b2.dir - size: 10164 - nfiles: 4 - - path: truthseeker/reports/train/sum/score_dict.json - hash: md5 - md5: d49a3cbdeb348bbf9ad3b59e9e8e0e32 - size: 283 - test_each_method@random-kdd_nsl: - cmd: 'python -m deckard.layers.optimise stage=train +model.init.sampling_method=random model.init.m=10 files.name=random - files.directory=kdd_nsl data=kdd_nsl dataset=kdd_nsl model_name=gzip_knn hydra.run.dir=kdd_nsl/logs/method/random - ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: f8a4019adc566855c2a704a0311ff7c4 - size: 489 - - path: params.yaml - hash: md5 - md5: f6a5538a55c3c37d8a2d6d1d4eb95ec2 - size: 1467 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: kdd_nsl/logs/method/random - hash: md5 - md5: 723e8c93428a09edb21943a20fca5c3c.dir - size: 11639 - nfiles: 4 - - path: kdd_nsl/reports/train/random/score_dict.json - hash: md5 - md5: ed402e68904e8888b8ba6b0bebf6fa05 - size: 488 - test_each_method@random-truthseeker: - cmd: 'python -m deckard.layers.optimise stage=train +model.init.sampling_method=random model.init.m=10 files.name=random - files.directory=truthseeker data=truthseeker dataset=truthseeker model_name=gzip_knn - hydra.run.dir=truthseeker/logs/method/random ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: f8a4019adc566855c2a704a0311ff7c4 - size: 489 - - path: params.yaml - hash: md5 - md5: f6a5538a55c3c37d8a2d6d1d4eb95ec2 - size: 1467 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: truthseeker/logs/method/random - hash: md5 - md5: f785fe50b4007a169c37e6e9cb856268.dir - size: 11670 - nfiles: 4 - - path: truthseeker/reports/train/random/score_dict.json - hash: md5 - md5: 8bfb4b2efa55e9944cec7331401762f9 - size: 485 - prepare_distance_matrices@0-10-kdd_nsl: - cmd: python -m deckard.layers.optimise files.name=0-10 stage=train data=kdd_nsl - dataset=kdd_nsl data.sample.random_state=0 data.sample.train_size=10 dataset=kdd_nsl - files.directory=kdd_nsl model_name=gzip_classifier model=gzip_classifier model.init.distance_matrix=kdd_nsl/model/gzip_classifier/gzip/0-10.npz - model.init.method=random model.init.m=100 ++raise_exception=True - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 3332d80113acf55f8e69e46aea82a1cc - size: 412 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: - https://gist.githubusercontent.com/simplymathematics/8c6c04bd151950d5ea9e62825db97fdd/raw/d6a22cdb42a1db624c89f0298cb4f654d3812703/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: - https://gist.githubusercontent.com/simplymathematics/8c6c04bd151950d5ea9e62825db97fdd/raw/d6a22cdb42a1db624c89f0298cb4f654d3812703/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: kdd_nsl/model/gzip_classifier/gzip/0-100.npz - k: 1 - m: -1 - method: - name: gzip_classifier.GzipClassifier - library: sklearn - model_name: gzip_classifier - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: kdd_nsl/model/gzip_classifier/gzip/0-10.npz - hash: md5 - md5: 1b745ff8dbc88f247f3245d9efd6de7e - size: 208 - - path: kdd_nsl/reports/train/0-10/score_dict.json - hash: md5 - md5: cae521db2dcda14d0d3ed880c26adf62 - size: 233 - prepare_distance_matrices@0-100-kdd_nsl: - cmd: python -m deckard.layers.optimise files.name=0-100 stage=train data=kdd_nsl - dataset=kdd_nsl data.sample.random_state=0 data.sample.train_size=100 dataset=kdd_nsl - files.directory=kdd_nsl model_name=gzip_classifier model=gzip_classifier model.init.distance_matrix=kdd_nsl/model/gzip_classifier/gzip/0-100.npz - model.init.method=random model.init.m=100 ++raise_exception=True - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 222b4b55b1b16639ce30218bf60c1f32 - size: 412 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: - https://gist.githubusercontent.com/simplymathematics/8c6c04bd151950d5ea9e62825db97fdd/raw/d6a22cdb42a1db624c89f0298cb4f654d3812703/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - data: - cmd: python data_prep.py - deps: - - path: data_prep.py - hash: md5 - md5: 18244c921ed2d7cbf25b8362b3ca33aa - size: 5146 - outs: - - path: raw_data/ - hash: md5 - md5: 33d46673e0631bef98be9e8991ed1ed1.dir - size: 50328647 - nfiles: 8 - test_symmetric_methods@true-kdd_nsl: - cmd: 'python -m deckard.layers.optimise stage=train model.init.method=random - model.init.m=10 files.name=symmetric_true files.directory=kdd_nsl data=kdd_nsl - dataset=kdd_nsl model_name=gzip_knn model.init.symmetric=true hydra.run.dir=kdd_nsl/logs/symmetric/true - model.init.distance_matrix=kdd_nsl/model/gzip_knn/None/symmetric_true.npz ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - - path: raw_data/ - hash: md5 - md5: d897229dd67895957a0a4330ce95b09a.dir - size: 42279674 - nfiles: 4 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: kdd_nsl/model/gzip_knn/None/symmetric_true.npz - hash: md5 - md5: 1b745ff8dbc88f247f3245d9efd6de7e - size: 208 - - path: kdd_nsl/reports/train/symmetric_true/score_dict.json - hash: md5 - md5: bb10a010ac3f8790cdbe4310288efc63 - size: 432 - test_symmetric_methods@true-truthseeker: - cmd: 'python -m deckard.layers.optimise stage=train model.init.method=random - model.init.m=10 files.name=symmetric_true files.directory=truthseeker data=truthseeker - dataset=truthseeker model_name=gzip_knn model.init.symmetric=true hydra.run.dir=truthseeker/logs/symmetric/true - model.init.distance_matrix=truthseeker/model/gzip_knn/None/symmetric_true.npz - ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - - path: raw_data/ - hash: md5 - md5: d897229dd67895957a0a4330ce95b09a.dir - size: 42279674 - nfiles: 4 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: truthseeker/model/gzip_knn/None/symmetric_true.npz - hash: md5 - md5: f71a2727e708fdfb7867a6983f3aa8cf - size: 223 - - path: truthseeker/reports/train/symmetric_true/score_dict.json - hash: md5 - md5: 6d7a4eb01733e4e2fda1c40b5562646c - size: 434 - test_symmetric_methods@true-sms_spam: - cmd: 'python -m deckard.layers.optimise stage=train model.init.method=random - model.init.m=10 files.name=symmetric_true files.directory=sms_spam data=sms_spam - dataset=sms_spam model_name=gzip_knn model.init.symmetric=true hydra.run.dir=sms_spam/logs/symmetric/true - model.init.distance_matrix=sms_spam/model/gzip_knn/None/symmetric_true.npz ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - - path: raw_data/ - hash: md5 - md5: d897229dd67895957a0a4330ce95b09a.dir - size: 42279674 - nfiles: 4 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: sms_spam/model/gzip_knn/None/symmetric_true.npz - hash: md5 - md5: 1b745ff8dbc88f247f3245d9efd6de7e - size: 208 - - path: sms_spam/reports/train/symmetric_true/score_dict.json - hash: md5 - md5: 0b8d690ffca7173942d490a2f0cbeec4 - size: 432 - test_symmetric_methods@true-ddos: - cmd: 'python -m deckard.layers.optimise stage=train model.init.method=random - model.init.m=10 files.name=symmetric_true files.directory=ddos data=ddos dataset=ddos - model_name=gzip_knn model.init.symmetric=true hydra.run.dir=ddos/logs/symmetric/true - model.init.distance_matrix=ddos/model/gzip_knn/None/symmetric_true.npz ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - - path: raw_data/ - hash: md5 - md5: d897229dd67895957a0a4330ce95b09a.dir - size: 42279674 - nfiles: 4 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: ddos/model/gzip_knn/None/symmetric_true.npz - hash: md5 - md5: 1b745ff8dbc88f247f3245d9efd6de7e - size: 208 - - path: ddos/reports/train/symmetric_true/score_dict.json - hash: md5 - md5: 2c12176f8bf7355f284e059b2527cf44 - size: 418 - test_symmetric_methods@false-kdd_nsl: - cmd: 'python -m deckard.layers.optimise stage=train model.init.method=random - model.init.m=10 files.name=symmetric_false files.directory=kdd_nsl data=kdd_nsl - dataset=kdd_nsl model_name=gzip_knn model.init.symmetric=false hydra.run.dir=kdd_nsl/logs/symmetric/false - model.init.distance_matrix=kdd_nsl/model/gzip_knn/None/symmetric_false.npz ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - - path: raw_data/ - hash: md5 - md5: d897229dd67895957a0a4330ce95b09a.dir - size: 42279674 - nfiles: 4 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: kdd_nsl/model/gzip_knn/None/symmetric_false.npz - hash: md5 - md5: 9a9fcf9ba5dbc34eb2ca1f203088fc47 - size: 740 - - path: kdd_nsl/reports/train/symmetric_false/score_dict.json - hash: md5 - md5: 8ae56e642565330a37e731472a6c2d76 - size: 429 - test_symmetric_methods@false-truthseeker: - cmd: 'python -m deckard.layers.optimise stage=train model.init.method=random - model.init.m=10 files.name=symmetric_false files.directory=truthseeker data=truthseeker - dataset=truthseeker model_name=gzip_knn model.init.symmetric=false hydra.run.dir=truthseeker/logs/symmetric/false - model.init.distance_matrix=truthseeker/model/gzip_knn/None/symmetric_false.npz - ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - - path: raw_data/ - hash: md5 - md5: d897229dd67895957a0a4330ce95b09a.dir - size: 42279674 - nfiles: 4 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: truthseeker/model/gzip_knn/None/symmetric_false.npz - hash: md5 - md5: b02cc76ddfb10d1e0e63e0f6e05cdaae - size: 1791 - - path: truthseeker/reports/train/symmetric_false/score_dict.json - hash: md5 - md5: 4ef36cb0b198d778dc8e0e6ff282d778 - size: 433 - test_symmetric_methods@false-sms_spam: - cmd: 'python -m deckard.layers.optimise stage=train model.init.method=random - model.init.m=10 files.name=symmetric_false files.directory=sms_spam data=sms_spam - dataset=sms_spam model_name=gzip_knn model.init.symmetric=false hydra.run.dir=sms_spam/logs/symmetric/false - model.init.distance_matrix=sms_spam/model/gzip_knn/None/symmetric_false.npz - ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - - path: raw_data/ - hash: md5 - md5: d897229dd67895957a0a4330ce95b09a.dir - size: 42279674 - nfiles: 4 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: sms_spam/model/gzip_knn/None/symmetric_false.npz - hash: md5 - md5: ac71e5af3607731b783a490caf81c37f - size: 694 - - path: sms_spam/reports/train/symmetric_false/score_dict.json - hash: md5 - md5: 66d92f0ed630b08fbddb1a9c07f13981 - size: 432 - test_symmetric_methods@false-ddos: - cmd: 'python -m deckard.layers.optimise stage=train model.init.method=random - model.init.m=10 files.name=symmetric_false files.directory=ddos data=ddos dataset=ddos - model_name=gzip_knn model.init.symmetric=false hydra.run.dir=ddos/logs/symmetric/false - model.init.distance_matrix=ddos/model/gzip_knn/None/symmetric_false.npz ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - - path: raw_data/ - hash: md5 - md5: d897229dd67895957a0a4330ce95b09a.dir - size: 42279674 - nfiles: 4 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: ddos/model/gzip_knn/None/symmetric_false.npz - hash: md5 - md5: 0d3f08d9c6cb8ddc6d3e68f8208c9bc5 - size: 821 - - path: ddos/reports/train/symmetric_false/score_dict.json - hash: md5 - md5: ba81be29d56943d6d573597c93ba8081 - size: 412 - test_each_compressor@gzip-kdd_nsl: - cmd: 'python -m deckard.layers.optimise stage=train files.name=gzip files.directory=kdd_nsl - data=kdd_nsl dataset=kdd_nsl model_name=gzip_knn model.init.method=random model.init.distance_matrix=kdd_nsl/model/gzip_knn/None/gzip.npz - model.init.compressor=gzip model.init.m=10 hydra.run.dir=kdd_nsl/logs/compressor/gzip - ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: kdd_nsl/reports/train/gzip/score_dict.json - hash: md5 - md5: b3f76b5e7fe68821d9336c4968888b08 - size: 431 - test_each_compressor@gzip-truthseeker: - cmd: 'python -m deckard.layers.optimise stage=train files.name=gzip files.directory=truthseeker - data=truthseeker dataset=truthseeker model_name=gzip_knn model.init.method=random - model.init.distance_matrix=truthseeker/model/gzip_knn/None/gzip.npz model.init.compressor=gzip model.init.m=10 - hydra.run.dir=truthseeker/logs/compressor/gzip ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: truthseeker/reports/train/gzip/score_dict.json - hash: md5 - md5: df9b8a302dfb3b85b5c3c7623d86383e - size: 434 - test_each_compressor@gzip-sms_spam: - cmd: 'python -m deckard.layers.optimise stage=train files.name=gzip files.directory=sms_spam - data=sms_spam dataset=sms_spam model_name=gzip_knn model.init.method=random - model.init.distance_matrix=sms_spam/model/gzip_knn/None/gzip.npz model.init.compressor=gzip model.init.m=10 - hydra.run.dir=sms_spam/logs/compressor/gzip ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: sms_spam/reports/train/gzip/score_dict.json - hash: md5 - md5: 39a6710366ed557259ef981fc0b45a6a - size: 432 - test_each_compressor@gzip-ddos: - cmd: 'python -m deckard.layers.optimise stage=train files.name=gzip files.directory=ddos - data=ddos dataset=ddos model_name=gzip_knn model.init.method=random model.init.distance_matrix=ddos/model/gzip_knn/None/gzip.npz - model.init.compressor=gzip model.init.m=10 hydra.run.dir=ddos/logs/compressor/gzip - ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: ddos/reports/train/gzip/score_dict.json - hash: md5 - md5: 1919cb29d6196b8dd14c01458e341a6b - size: 414 - test_each_compressor@zstd-kdd_nsl: - cmd: 'python -m deckard.layers.optimise stage=train files.name=zstd files.directory=kdd_nsl - data=kdd_nsl dataset=kdd_nsl model_name=gzip_knn model.init.method=random model.init.distance_matrix=kdd_nsl/model/gzip_knn/None/zstd.npz - model.init.compressor=zstd model.init.m=10 hydra.run.dir=kdd_nsl/logs/compressor/zstd - ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: kdd_nsl/reports/train/zstd/score_dict.json - hash: md5 - md5: 868509c201cbb0093818357427896da7 - size: 416 - test_each_compressor@zstd-truthseeker: - cmd: 'python -m deckard.layers.optimise stage=train files.name=zstd files.directory=truthseeker - data=truthseeker dataset=truthseeker model_name=gzip_knn model.init.method=random - model.init.distance_matrix=truthseeker/model/gzip_knn/None/zstd.npz model.init.compressor=zstd model.init.m=10 - hydra.run.dir=truthseeker/logs/compressor/zstd ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: truthseeker/reports/train/zstd/score_dict.json - hash: md5 - md5: 89546ca3a3510fd73671341863c69cb9 - size: 434 - test_each_compressor@zstd-sms_spam: - cmd: 'python -m deckard.layers.optimise stage=train files.name=zstd files.directory=sms_spam - data=sms_spam dataset=sms_spam model_name=gzip_knn model.init.method=random - model.init.distance_matrix=sms_spam/model/gzip_knn/None/zstd.npz model.init.compressor=zstd model.init.m=10 - hydra.run.dir=sms_spam/logs/compressor/zstd ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: sms_spam/reports/train/zstd/score_dict.json - hash: md5 - md5: e5a10b0013b032b22dd6cc596a7810bb - size: 429 - test_each_compressor@zstd-ddos: - cmd: 'python -m deckard.layers.optimise stage=train files.name=zstd files.directory=ddos - data=ddos dataset=ddos model_name=gzip_knn model.init.method=random model.init.distance_matrix=ddos/model/gzip_knn/None/zstd.npz - model.init.compressor=zstd model.init.m=10 hydra.run.dir=ddos/logs/compressor/zstd - ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: ddos/reports/train/zstd/score_dict.json - hash: md5 - md5: 898feb287504053c9de9c1a809733c4b - size: 432 - test_each_compressor@pkl-kdd_nsl: - cmd: 'python -m deckard.layers.optimise stage=train files.name=pkl files.directory=kdd_nsl - data=kdd_nsl dataset=kdd_nsl model_name=gzip_knn model.init.method=random model.init.distance_matrix=kdd_nsl/model/gzip_knn/None/pkl.npz - model.init.compressor=pkl model.init.m=10 hydra.run.dir=kdd_nsl/logs/compressor/pkl - ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: kdd_nsl/reports/train/pkl/score_dict.json - hash: md5 - md5: 3e01c227095014ab9f4665ea98e7f3b5 - size: 430 - test_each_compressor@pkl-truthseeker: - cmd: 'python -m deckard.layers.optimise stage=train files.name=pkl files.directory=truthseeker - data=truthseeker dataset=truthseeker model_name=gzip_knn model.init.method=random - model.init.distance_matrix=truthseeker/model/gzip_knn/None/pkl.npz model.init.compressor=pkl model.init.m=10 - hydra.run.dir=truthseeker/logs/compressor/pkl ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: truthseeker/reports/train/pkl/score_dict.json - hash: md5 - md5: 85d4598fcbe6077a465a9edeadd3843a - size: 430 - test_each_compressor@pkl-sms_spam: - cmd: 'python -m deckard.layers.optimise stage=train files.name=pkl files.directory=sms_spam - data=sms_spam dataset=sms_spam model_name=gzip_knn model.init.method=random - model.init.distance_matrix=sms_spam/model/gzip_knn/None/pkl.npz model.init.compressor=pkl model.init.m=10 - hydra.run.dir=sms_spam/logs/compressor/pkl ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: sms_spam/reports/train/pkl/score_dict.json - hash: md5 - md5: a4667414e7721ee7ed489df1e412e0b0 - size: 431 - test_each_compressor@pkl-ddos: - cmd: 'python -m deckard.layers.optimise stage=train files.name=pkl files.directory=ddos - data=ddos dataset=ddos model_name=gzip_knn model.init.method=random model.init.distance_matrix=ddos/model/gzip_knn/None/pkl.npz - model.init.compressor=pkl model.init.m=10 hydra.run.dir=ddos/logs/compressor/pkl - ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: ddos/reports/train/pkl/score_dict.json - hash: md5 - md5: 340261dd836239b846699c4c687b3042 - size: 432 - test_each_compressor@bz2-kdd_nsl: - cmd: 'python -m deckard.layers.optimise stage=train files.name=bz2 files.directory=kdd_nsl - data=kdd_nsl dataset=kdd_nsl model_name=gzip_knn model.init.method=random model.init.distance_matrix=kdd_nsl/model/gzip_knn/None/bz2.npz - model.init.compressor=bz2 model.init.m=10 hydra.run.dir=kdd_nsl/logs/compressor/bz2 - ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: kdd_nsl/reports/train/bz2/score_dict.json - hash: md5 - md5: 05fd4b45d252c648d4afb4ba3ffc05e4 - size: 430 - test_each_compressor@bz2-truthseeker: - cmd: 'python -m deckard.layers.optimise stage=train files.name=bz2 files.directory=truthseeker - data=truthseeker dataset=truthseeker model_name=gzip_knn model.init.method=random - model.init.distance_matrix=truthseeker/model/gzip_knn/None/bz2.npz model.init.compressor=bz2 model.init.m=10 - hydra.run.dir=truthseeker/logs/compressor/bz2 ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: truthseeker/reports/train/bz2/score_dict.json - hash: md5 - md5: 1b3094ea4075cb1b5b8cd3f74bf0c3dc - size: 432 - test_each_compressor@bz2-sms_spam: - cmd: 'python -m deckard.layers.optimise stage=train files.name=bz2 files.directory=sms_spam - data=sms_spam dataset=sms_spam model_name=gzip_knn model.init.method=random - model.init.distance_matrix=sms_spam/model/gzip_knn/None/bz2.npz model.init.compressor=bz2 model.init.m=10 - hydra.run.dir=sms_spam/logs/compressor/bz2 ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: sms_spam/reports/train/bz2/score_dict.json - hash: md5 - md5: 45303b7d052fb91e65c9f3ad97999b6a - size: 431 - test_each_compressor@bz2-ddos: - cmd: 'python -m deckard.layers.optimise stage=train files.name=bz2 files.directory=ddos - data=ddos dataset=ddos model_name=gzip_knn model.init.method=random model.init.distance_matrix=ddos/model/gzip_knn/None/bz2.npz - model.init.compressor=bz2 model.init.m=10 hydra.run.dir=ddos/logs/compressor/bz2 - ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: ddos/reports/train/bz2/score_dict.json - hash: md5 - md5: fdfa470b2053f561dea2e047423b54cd - size: 431 - test_each_precompute@True-kdd_nsl: - cmd: 'python -m deckard.layers.optimise stage=train files.name=precompute_True - files.directory=kdd_nsl data=kdd_nsl dataset=kdd_nsl model_name=gzip_knn model.init.method=random - model.init.distance_matrix=kdd_nsl/model/gzip_knn/None/True.npz +model.init.precompute=True model.init.m=10 hydra.run.dir=kdd_nsl/logs/precompute/True - ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: kdd_nsl/reports/train/precompute_True/score_dict.json - hash: md5 - md5: f5c9a9ce41a0680f1e18874d6f21bd25 - size: 433 - test_each_precompute@True-truthseeker: - cmd: 'python -m deckard.layers.optimise stage=train files.name=precompute_True - files.directory=truthseeker data=truthseeker dataset=truthseeker model_name=gzip_knn - model.init.method=random model.init.distance_matrix=truthseeker/model/gzip_knn/None/True.npz - +model.init.precompute=True model.init.m=10 hydra.run.dir=truthseeker/logs/precompute/True - ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: truthseeker/reports/train/precompute_True/score_dict.json - hash: md5 - md5: 76dcdbf7dc1fb63ce7b978c2f6bef8a2 - size: 435 - test_each_precompute@True-sms_spam: - cmd: 'python -m deckard.layers.optimise stage=train files.name=precompute_True - files.directory=sms_spam data=sms_spam dataset=sms_spam model_name=gzip_knn - model.init.method=random model.init.distance_matrix=sms_spam/model/gzip_knn/None/True.npz - +model.init.precompute=True model.init.m=10 hydra.run.dir=sms_spam/logs/precompute/True - ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: sms_spam/reports/train/precompute_True/score_dict.json - hash: md5 - md5: fe9a23520513840fe4a90fb8413e62da - size: 432 - test_each_precompute@True-ddos: - cmd: 'python -m deckard.layers.optimise stage=train files.name=precompute_True - files.directory=ddos data=ddos dataset=ddos model_name=gzip_knn model.init.method=random - model.init.distance_matrix=ddos/model/gzip_knn/None/True.npz +model.init.precompute=True model.init.m=10 hydra.run.dir=ddos/logs/precompute/True - ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: ddos/reports/train/precompute_True/score_dict.json - hash: md5 - md5: 0d72c99dc99df13629a383ca9745712e - size: 429 - test_each_precompute@False-kdd_nsl: - cmd: 'python -m deckard.layers.optimise stage=train files.name=precompute_False - files.directory=kdd_nsl data=kdd_nsl dataset=kdd_nsl model_name=gzip_knn model.init.method=random - model.init.distance_matrix=kdd_nsl/model/gzip_knn/None/False.npz +model.init.precompute=False model.init.m=10 hydra.run.dir=kdd_nsl/logs/precompute/False - ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: kdd_nsl/reports/train/precompute_False/score_dict.json - hash: md5 - md5: d225ea006c02f56f552431e223ef6576 - size: 429 - test_each_precompute@False-truthseeker: - cmd: 'python -m deckard.layers.optimise stage=train files.name=precompute_False - files.directory=truthseeker data=truthseeker dataset=truthseeker model_name=gzip_knn - model.init.method=random model.init.distance_matrix=truthseeker/model/gzip_knn/None/False.npz - +model.init.precompute=False model.init.m=10 hydra.run.dir=truthseeker/logs/precompute/False - ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: truthseeker/reports/train/precompute_False/score_dict.json - hash: md5 - md5: e8094fb43b55432d298346a0a291ac71 - size: 431 - test_each_precompute@False-sms_spam: - cmd: 'python -m deckard.layers.optimise stage=train files.name=precompute_False - files.directory=sms_spam data=sms_spam dataset=sms_spam model_name=gzip_knn - model.init.method=random model.init.distance_matrix=sms_spam/model/gzip_knn/None/False.npz - +model.init.precompute=False model.init.m=10 hydra.run.dir=sms_spam/logs/precompute/False - ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: sms_spam/reports/train/precompute_False/score_dict.json - hash: md5 - md5: 0f3b13aba3cc817f2327769f36b54939 - size: 432 - test_each_precompute@False-ddos: - cmd: 'python -m deckard.layers.optimise stage=train files.name=precompute_False - files.directory=ddos data=ddos dataset=ddos model_name=gzip_knn model.init.method=random - model.init.distance_matrix=ddos/model/gzip_knn/None/False.npz +model.init.precompute=False model.init.m=10 hydra.run.dir=ddos/logs/precompute/False - ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: ddos/reports/train/precompute_False/score_dict.json - hash: md5 - md5: 9cc47f921a908ad81e486980d134f453 - size: 418 - test_each_metric@levenshtein-kdd_nsl: - cmd: 'python -m deckard.layers.optimise stage=train model.init.metric=levenshtein files.name=levenshtein - files.directory=kdd_nsl data=kdd_nsl dataset=kdd_nsl model_name=gzip_knn model.init.distance_matrix=kdd_nsl/model/gzip_knn/ncd/levenshtein.npz - hydra.sweeper.n_jobs=1 hydra.run.dir=kdd_nsl/logs/metric/levenshtein ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: kdd_nsl/reports/train/levenshtein/score_dict.json - hash: md5 - md5: 4f517489b794c13bbbbb477bd7b14ea8 - size: 248 - test_each_metric@levenshtein-truthseeker: - cmd: 'python -m deckard.layers.optimise stage=train model.init.metric=levenshtein files.name=levenshtein - files.directory=truthseeker data=truthseeker dataset=truthseeker model_name=gzip_knn - model.init.distance_matrix=truthseeker/model/gzip_knn/ncd/levenshtein.npz hydra.sweeper.n_jobs=1 - hydra.run.dir=truthseeker/logs/metric/levenshtein ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: truthseeker/reports/train/levenshtein/score_dict.json - hash: md5 - md5: 2f0fa43167cde43c2d8c901ee6bc360d - size: 250 - test_each_metric@levenshtein-sms_spam: - cmd: 'python -m deckard.layers.optimise stage=train model.init.metric=levenshtein files.name=levenshtein - files.directory=sms_spam data=sms_spam dataset=sms_spam model_name=gzip_knn - model.init.distance_matrix=sms_spam/model/gzip_knn/ncd/levenshtein.npz hydra.sweeper.n_jobs=1 - hydra.run.dir=sms_spam/logs/metric/levenshtein ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: sms_spam/reports/train/levenshtein/score_dict.json - hash: md5 - md5: bb8456e5a2457e841619d5750922bd0c - size: 246 - test_each_metric@levenshtein-ddos: - cmd: 'python -m deckard.layers.optimise stage=train model.init.metric=levenshtein files.name=levenshtein - files.directory=ddos data=ddos dataset=ddos model_name=gzip_knn model.init.distance_matrix=ddos/model/gzip_knn/ncd/levenshtein.npz - hydra.sweeper.n_jobs=1 hydra.run.dir=ddos/logs/metric/levenshtein ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: ddos/reports/train/levenshtein/score_dict.json - hash: md5 - md5: 1956a0651292bf6919a103e46c0c5906 - size: 248 - test_each_metric@ratio-kdd_nsl: - cmd: 'python -m deckard.layers.optimise stage=train model.init.metric=ratio files.name=ratio - files.directory=kdd_nsl data=kdd_nsl dataset=kdd_nsl model_name=gzip_knn model.init.distance_matrix=kdd_nsl/model/gzip_knn/ncd/ratio.npz - hydra.sweeper.n_jobs=1 hydra.run.dir=kdd_nsl/logs/metric/ratio ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: kdd_nsl/reports/train/ratio/score_dict.json - hash: md5 - md5: 841058c500666af10a3a84fd7769e53d - size: 244 - test_each_metric@ratio-truthseeker: - cmd: 'python -m deckard.layers.optimise stage=train model.init.metric=ratio files.name=ratio - files.directory=truthseeker data=truthseeker dataset=truthseeker model_name=gzip_knn - model.init.distance_matrix=truthseeker/model/gzip_knn/ncd/ratio.npz hydra.sweeper.n_jobs=8 - hydra.run.dir=truthseeker/logs/metric/ratio ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: truthseeker/reports/train/ratio/score_dict.json - hash: md5 - md5: 5cbc24c928a073a9459428d4e1984ba1 - size: 426 - test_each_metric@ratio-sms_spam: - cmd: 'python -m deckard.layers.optimise stage=train model.init.metric=ratio files.name=ratio - files.directory=sms_spam data=sms_spam dataset=sms_spam model_name=gzip_knn - model.init.distance_matrix=sms_spam/model/gzip_knn/ncd/ratio.npz hydra.sweeper.n_jobs=8 - hydra.run.dir=sms_spam/logs/metric/ratio ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: sms_spam/reports/train/ratio/score_dict.json - hash: md5 - md5: b8ea7bf8de9af2250f1a2c84695be1f9 - size: 425 - test_each_metric@ratio-ddos: - cmd: 'python -m deckard.layers.optimise stage=train model.init.metric=ratio files.name=ratio - files.directory=ddos data=ddos dataset=ddos model_name=gzip_knn model.init.distance_matrix=ddos/model/gzip_knn/ncd/ratio.npz - hydra.sweeper.n_jobs=8 hydra.run.dir=ddos/logs/metric/ratio ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: ddos/reports/train/ratio/score_dict.json - hash: md5 - md5: 5f9750a5729db8f4912f50a8610fc48c - size: 429 - test_each_metric@hamming-kdd_nsl: - cmd: 'python -m deckard.layers.optimise stage=train model.init.metric=hamming files.name=hamming - files.directory=kdd_nsl data=kdd_nsl dataset=kdd_nsl model_name=gzip_knn model.init.distance_matrix=kdd_nsl/model/gzip_knn/ncd/hamming.npz - hydra.sweeper.n_jobs=8 hydra.run.dir=kdd_nsl/logs/metric/hamming ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: kdd_nsl/reports/train/hamming/score_dict.json - hash: md5 - md5: ed699605a76c4116a461994f139da237 - size: 429 - test_each_metric@hamming-truthseeker: - cmd: 'python -m deckard.layers.optimise stage=train model.init.metric=hamming files.name=hamming - files.directory=truthseeker data=truthseeker dataset=truthseeker model_name=gzip_knn - model.init.distance_matrix=truthseeker/model/gzip_knn/ncd/hamming.npz hydra.sweeper.n_jobs=8 - hydra.run.dir=truthseeker/logs/metric/hamming ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: truthseeker/reports/train/hamming/score_dict.json - hash: md5 - md5: 8a3f87734f208a61bc27114729fd4fd6 - size: 432 - test_each_metric@hamming-sms_spam: - cmd: 'python -m deckard.layers.optimise stage=train model.init.metric=hamming files.name=hamming - files.directory=sms_spam data=sms_spam dataset=sms_spam model_name=gzip_knn - model.init.distance_matrix=sms_spam/model/gzip_knn/ncd/hamming.npz hydra.sweeper.n_jobs=8 - hydra.run.dir=sms_spam/logs/metric/hamming ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: sms_spam/reports/train/hamming/score_dict.json - hash: md5 - md5: 0c0988090568dc526d0137ff7e38ca6a - size: 428 - test_each_metric@hamming-ddos: - cmd: 'python -m deckard.layers.optimise stage=train model.init.metric=hamming files.name=hamming - files.directory=ddos data=ddos dataset=ddos model_name=gzip_knn model.init.distance_matrix=ddos/model/gzip_knn/ncd/hamming.npz - hydra.sweeper.n_jobs=8 hydra.run.dir=ddos/logs/metric/hamming ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: ddos/reports/train/hamming/score_dict.json - hash: md5 - md5: 949f7ea27f2521fbbb2b05ec3a111346 - size: 428 - test_each_metric@jaro-kdd_nsl: - cmd: 'python -m deckard.layers.optimise stage=train model.init.metric=jaro files.name=jaro - files.directory=kdd_nsl data=kdd_nsl dataset=kdd_nsl model_name=gzip_knn model.init.distance_matrix=kdd_nsl/model/gzip_knn/ncd/jaro.npz - hydra.sweeper.n_jobs=8 hydra.run.dir=kdd_nsl/logs/metric/jaro ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: kdd_nsl/reports/train/jaro/score_dict.json - hash: md5 - md5: 3bd4e5c89097070d439c3f13359ff369 - size: 428 - test_each_metric@jaro-truthseeker: - cmd: 'python -m deckard.layers.optimise stage=train model.init.metric=jaro files.name=jaro - files.directory=truthseeker data=truthseeker dataset=truthseeker model_name=gzip_knn - model.init.distance_matrix=truthseeker/model/gzip_knn/ncd/jaro.npz hydra.sweeper.n_jobs=8 - hydra.run.dir=truthseeker/logs/metric/jaro ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: truthseeker/reports/train/jaro/score_dict.json - hash: md5 - md5: b86d70f18ea7ee85132f4d8407058d60 - size: 429 - test_each_metric@jaro-sms_spam: - cmd: 'python -m deckard.layers.optimise stage=train model.init.metric=jaro files.name=jaro - files.directory=sms_spam data=sms_spam dataset=sms_spam model_name=gzip_knn - model.init.distance_matrix=sms_spam/model/gzip_knn/ncd/jaro.npz hydra.sweeper.n_jobs=8 - hydra.run.dir=sms_spam/logs/metric/jaro ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: sms_spam/reports/train/jaro/score_dict.json - hash: md5 - md5: b7550248d10852d10a16610f707ea50f - size: 429 - test_each_metric@jaro-ddos: - cmd: 'python -m deckard.layers.optimise stage=train model.init.metric=jaro files.name=jaro - files.directory=ddos data=ddos dataset=ddos model_name=gzip_knn model.init.distance_matrix=ddos/model/gzip_knn/ncd/jaro.npz - hydra.sweeper.n_jobs=8 hydra.run.dir=ddos/logs/metric/jaro ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: ddos/reports/train/jaro/score_dict.json - hash: md5 - md5: e7987cb2d248f7eaa20a842bbcacc442 - size: 430 - test_each_metric@jaro_winkler-kdd_nsl: - cmd: 'python -m deckard.layers.optimise stage=train model.init.metric=jaro_winkler files.name=jaro_winkler - files.directory=kdd_nsl data=kdd_nsl dataset=kdd_nsl model_name=gzip_knn model.init.distance_matrix=kdd_nsl/model/gzip_knn/ncd/jaro_winkler.npz - hydra.sweeper.n_jobs=8 hydra.run.dir=kdd_nsl/logs/metric/jaro_winkler ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: kdd_nsl/reports/train/jaro_winkler/score_dict.json - hash: md5 - md5: a44e09663d05f8330352712ccfd72f17 - size: 428 - test_each_metric@jaro_winkler-truthseeker: - cmd: 'python -m deckard.layers.optimise stage=train model.init.metric=jaro_winkler files.name=jaro_winkler - files.directory=truthseeker data=truthseeker dataset=truthseeker model_name=gzip_knn - model.init.distance_matrix=truthseeker/model/gzip_knn/ncd/jaro_winkler.npz hydra.sweeper.n_jobs=8 - hydra.run.dir=truthseeker/logs/metric/jaro_winkler ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: truthseeker/reports/train/jaro_winkler/score_dict.json - hash: md5 - md5: 2a80298804f36bc7af477e11ff9f6679 - size: 428 - test_each_metric@jaro_winkler-sms_spam: - cmd: 'python -m deckard.layers.optimise stage=train model.init.metric=jaro_winkler files.name=jaro_winkler - files.directory=sms_spam data=sms_spam dataset=sms_spam model_name=gzip_knn - model.init.distance_matrix=sms_spam/model/gzip_knn/ncd/jaro_winkler.npz hydra.sweeper.n_jobs=8 - hydra.run.dir=sms_spam/logs/metric/jaro_winkler ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: sms_spam/reports/train/jaro_winkler/score_dict.json - hash: md5 - md5: 8b7d0f92e14d74042fb8cd907e3a8274 - size: 430 - test_each_metric@jaro_winkler-ddos: - cmd: 'python -m deckard.layers.optimise stage=train model.init.metric=jaro_winkler files.name=jaro_winkler - files.directory=ddos data=ddos dataset=ddos model_name=gzip_knn model.init.distance_matrix=ddos/model/gzip_knn/ncd/jaro_winkler.npz - hydra.sweeper.n_jobs=8 hydra.run.dir=ddos/logs/metric/jaro_winkler ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: ddos/reports/train/jaro_winkler/score_dict.json - hash: md5 - md5: aa4130c79130ddbaaebaa35a1cae7d91 - size: 426 - test_each_metric@seqratio-kdd_nsl: - cmd: 'python -m deckard.layers.optimise stage=train model.init.metric=seqratio files.name=seqratio - files.directory=kdd_nsl data=kdd_nsl dataset=kdd_nsl model_name=gzip_knn model.init.distance_matrix=kdd_nsl/model/gzip_knn/ncd/seqratio.npz - hydra.sweeper.n_jobs=8 hydra.run.dir=kdd_nsl/logs/metric/seqratio ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: kdd_nsl/reports/train/seqratio/score_dict.json - hash: md5 - md5: 9075115a02136aaa59bd87074589ce42 - size: 430 - test_each_metric@seqratio-truthseeker: - cmd: 'python -m deckard.layers.optimise stage=train model.init.metric=seqratio files.name=seqratio - files.directory=truthseeker data=truthseeker dataset=truthseeker model_name=gzip_knn - model.init.distance_matrix=truthseeker/model/gzip_knn/ncd/seqratio.npz hydra.sweeper.n_jobs=8 - hydra.run.dir=truthseeker/logs/metric/seqratio ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: truthseeker/reports/train/seqratio/score_dict.json - hash: md5 - md5: ac2bdff9261ce4c9e511294dd69b19f8 - size: 434 - test_each_metric@seqratio-sms_spam: - cmd: 'python -m deckard.layers.optimise stage=train model.init.metric=seqratio files.name=seqratio - files.directory=sms_spam data=sms_spam dataset=sms_spam model_name=gzip_knn - model.init.distance_matrix=sms_spam/model/gzip_knn/ncd/seqratio.npz hydra.sweeper.n_jobs=8 - hydra.run.dir=sms_spam/logs/metric/seqratio ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 14173762472fe294a1d3228b4ee83d4b - size: 431 - - path: params.yaml - hash: md5 - md5: 4999b48c21cb63a45801003d03576594 - size: 2082 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - art: - _target_: deckard.base.model.art_pipeline.ArtPipeline - initialize: - nb_classes: 2 - library: sklearn - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 10 - train_size: 10 - sklearn_pipeline: - encoder: - handle_unknown: use_encoded_value - name: sklearn.preprocessing.OrdinalEncoder - unknown_value: -1 - preprocessor: - name: sklearn.preprocessing.StandardScaler - with_mean: true - with_std: true - target: label - init: - _target_: deckard.base.model.ModelInitializer - compressor: gzip - distance_matrix: - k: 1 - m: -1 - method: - metric: ncd - test_each_method@ddos-random: - cmd: 'python -m deckard.layers.optimise stage=train +model.init.sampling_method=random model.init.m=3 - data.sample.train_size=100 files.name=random files.directory=ddos data=ddos - dataset=ddos model_name=random hydra.run.dir=ddos/logs/method/random ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 973ed0af499fa6561450dcb64d7984e3 - size: 485 - - path: params.yaml - hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - distance_matrix: kdd_nsl/model/gzip/100-100/0.npz - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: ddos/logs/method/random - hash: md5 - md5: 29a986df4db8948c2ea6811b04bbdebb.dir - size: 8943 - nfiles: 4 - - path: ddos/reports/train/random/score_dict.json - hash: md5 - md5: b872883c62c790b4f95cb465b6764e46 - size: 485 - test_each_method@ddos-medoid: - cmd: 'python -m deckard.layers.optimise stage=train +model.init.sampling_method=medoid model.init.m=3 - data.sample.train_size=100 files.name=medoid files.directory=ddos data=ddos - dataset=ddos model_name=medoid hydra.run.dir=ddos/logs/method/medoid ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 973ed0af499fa6561450dcb64d7984e3 - size: 485 - - path: params.yaml - hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - distance_matrix: kdd_nsl/model/gzip/100-100/0.npz - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: ddos/logs/method/medoid - hash: md5 - md5: 133714b5aace8be0844f1ae067b8fc88.dir - size: 8974 - nfiles: 4 - - path: ddos/reports/train/medoid/score_dict.json - hash: md5 - md5: 9fa569b8ca4d0ace8b86481327414340 - size: 482 - test_each_method@ddos-sum: - cmd: 'python -m deckard.layers.optimise stage=train +model.init.sampling_method=sum model.init.m=3 - data.sample.train_size=100 files.name=sum files.directory=ddos data=ddos dataset=ddos - model_name=sum hydra.run.dir=ddos/logs/method/sum ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 973ed0af499fa6561450dcb64d7984e3 - size: 485 - - path: params.yaml - hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - distance_matrix: kdd_nsl/model/gzip/100-100/0.npz - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: ddos/logs/method/sum - hash: md5 - md5: 9ad704553613244def3c71d19475de52.dir - size: 8917 - nfiles: 4 - - path: ddos/reports/train/sum/score_dict.json - hash: md5 - md5: 32e8e92591cdbdd9f01b7011fc8f6956 - size: 485 - test_each_method@ddos-svc: - cmd: 'python -m deckard.layers.optimise stage=train +model.init.sampling_method=svc model.init.m=3 - data.sample.train_size=100 files.name=svc files.directory=ddos data=ddos dataset=ddos - model_name=svc hydra.run.dir=ddos/logs/method/svc ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 973ed0af499fa6561450dcb64d7984e3 - size: 485 - - path: params.yaml - hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - distance_matrix: kdd_nsl/model/gzip/100-100/0.npz - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: ddos/logs/method/svc - hash: md5 - md5: 7c6f3e4cfed1d02a4868eb559c2f98e2.dir - size: 8917 - nfiles: 4 - - path: ddos/reports/train/svc/score_dict.json - hash: md5 - md5: 5f41c1a6d48486c25f5b8cbcdf9c60a1 - size: 485 - test_each_method@ddos-condensed: - cmd: 'python -m deckard.layers.optimise stage=train +model.init.sampling_method=condensed model.init.m=1 - files.name=condensed files.directory=ddos data=ddos dataset=ddos model_name=condensed - hydra.run.dir=ddos/logs/method/condensed ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 064e5bb42979e36c917c538b2a7bc0cc - size: 489 - - path: params.yaml - hash: md5 - md5: 8e937140db56a135e97c05461c573520 - size: 1345 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: ddos/logs/method/condensed - hash: md5 - md5: 5dfc9ebfe1c6f3e496814c86a05a5329.dir - size: 10117 - nfiles: 4 - - path: ddos/reports/train/condensed/score_dict.json - hash: md5 - md5: 56bcddf54558d9cdd1a7587878aceffa - size: 284 - test_each_method@ddos-hardness: - cmd: 'python -m deckard.layers.optimise stage=train +model.init.sampling_method=hardness model.init.m=3 - data.sample.train_size=100 files.name=hardness files.directory=ddos data=ddos - dataset=ddos model_name=hardness hydra.run.dir=ddos/logs/method/hardness ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 973ed0af499fa6561450dcb64d7984e3 - size: 485 - - path: params.yaml - hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - distance_matrix: kdd_nsl/model/gzip/100-100/0.npz - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: ddos/logs/method/hardness - hash: md5 - md5: 2009d992e93043783624a9b8c06c8224.dir - size: 9017 - nfiles: 4 - - path: ddos/reports/train/hardness/score_dict.json - hash: md5 - md5: 7384df7fafdf729b83b81f6e8cf2dcc1 - size: 485 - test_each_method@ddos-nearmiss: - cmd: 'python -m deckard.layers.optimise stage=train +model.init.sampling_method=nearmiss model.init.m=3 - data.sample.train_size=100 files.name=nearmiss files.directory=ddos data=ddos - dataset=ddos model_name=nearmiss hydra.run.dir=ddos/logs/method/nearmiss ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 973ed0af499fa6561450dcb64d7984e3 - size: 485 - - path: params.yaml - hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - distance_matrix: kdd_nsl/model/gzip/100-100/0.npz - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: ddos/logs/method/nearmiss - hash: md5 - md5: 607b7a4c87f67644af483f6b8cd8bf73.dir - size: 9017 - nfiles: 4 - - path: ddos/reports/train/nearmiss/score_dict.json - hash: md5 - md5: eac48d691d334069383832fb917363f6 - size: 485 - test_each_method@truthseeker-svc: - cmd: 'python -m deckard.layers.optimise stage=train +model.init.sampling_method=svc model.init.m=3 - data.sample.train_size=100 files.name=svc files.directory=truthseeker data=truthseeker - dataset=truthseeker model_name=svc hydra.run.dir=truthseeker/logs/method/svc - ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 064e5bb42979e36c917c538b2a7bc0cc - size: 489 - - path: params.yaml - hash: md5 - md5: 8e937140db56a135e97c05461c573520 - size: 1345 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: truthseeker/logs/method/svc - hash: md5 - md5: 7f9ad95f5b5a7d8ea8a41d09560bca7e.dir - size: 10252 - nfiles: 4 - - path: truthseeker/reports/train/svc/score_dict.json - hash: md5 - md5: dca27d752d8d9db2b52a61d9e0d9bebf - size: 283 - test_each_method@truthseeker-medoid: - cmd: 'python -m deckard.layers.optimise stage=train +model.init.sampling_method=medoid model.init.m=3 - data.sample.train_size=100 files.name=medoid files.directory=truthseeker data=truthseeker - dataset=truthseeker model_name=medoid hydra.run.dir=truthseeker/logs/method/medoid - ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 064e5bb42979e36c917c538b2a7bc0cc - size: 489 - - path: params.yaml - hash: md5 - md5: 8e937140db56a135e97c05461c573520 - size: 1345 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: truthseeker/logs/method/medoid - hash: md5 - md5: 57b1e2e154ae8653331898992d0d7f7c.dir - size: 10316 - nfiles: 4 - - path: truthseeker/reports/train/medoid/score_dict.json - hash: md5 - md5: a728020aeb632257e52cc9b13337870e - size: 284 - test_each_method@truthseeker-sum: - cmd: 'python -m deckard.layers.optimise stage=train +model.init.sampling_method=sum model.init.m=3 - data.sample.train_size=100 files.name=sum files.directory=truthseeker data=truthseeker - dataset=truthseeker model_name=sum hydra.run.dir=truthseeker/logs/method/sum - ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 064e5bb42979e36c917c538b2a7bc0cc - size: 489 - - path: params.yaml - hash: md5 - md5: 8e937140db56a135e97c05461c573520 - size: 1345 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: truthseeker/logs/method/sum - hash: md5 - md5: b8934f0660e9e6043e5a7117d2e3d462.dir - size: 10252 - nfiles: 4 - - path: truthseeker/reports/train/sum/score_dict.json - hash: md5 - md5: 0a4117f35aab6ec4b41ac526f8715aa2 - size: 283 - test_each_method@truthseeker-random: - cmd: 'python -m deckard.layers.optimise stage=train +model.init.sampling_method=random model.init.m=3 - data.sample.train_size=100 files.name=random files.directory=truthseeker data=truthseeker - dataset=truthseeker model_name=random hydra.run.dir=truthseeker/logs/method/random - ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 064e5bb42979e36c917c538b2a7bc0cc - size: 489 - - path: params.yaml - hash: md5 - md5: 8e937140db56a135e97c05461c573520 - size: 1345 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: truthseeker/logs/method/random - hash: md5 - md5: a77f4e67f85e529063b18617cda5525a.dir - size: 10289 - nfiles: 4 - - path: truthseeker/reports/train/random/score_dict.json - hash: md5 - md5: 08f3cc499d61caaa4ab912af1a2ff558 - size: 283 - test_each_method@truthseeker-nearmiss: - cmd: 'python -m deckard.layers.optimise stage=train +model.init.sampling_method=nearmiss model.init.m=3 - data.sample.train_size=100 files.name=nearmiss files.directory=truthseeker data=truthseeker - dataset=truthseeker model_name=nearmiss hydra.run.dir=truthseeker/logs/method/nearmiss - ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 064e5bb42979e36c917c538b2a7bc0cc - size: 489 - - path: params.yaml - hash: md5 - md5: 8e937140db56a135e97c05461c573520 - size: 1345 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: truthseeker/logs/method/nearmiss - hash: md5 - md5: 6ea3f0a574d7abd052e3ee5466356e13.dir - size: 10359 - nfiles: 4 - - path: truthseeker/reports/train/nearmiss/score_dict.json - hash: md5 - md5: f03918d65cac7f21e210a14be8ee1373 - size: 285 - test_each_method@truthseeker-hardness: - cmd: 'python -m deckard.layers.optimise stage=train +model.init.sampling_method=hardness model.init.m=3 - data.sample.train_size=100 files.name=hardness files.directory=truthseeker data=truthseeker - dataset=truthseeker model_name=hardness hydra.run.dir=truthseeker/logs/method/hardness - ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 064e5bb42979e36c917c538b2a7bc0cc - size: 489 - - path: params.yaml - hash: md5 - md5: 8e937140db56a135e97c05461c573520 - size: 1345 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: truthseeker/logs/method/hardness - hash: md5 - md5: c5ea09925ae34a0fee42f1ec06d88090.dir - size: 10355 - nfiles: 4 - - path: truthseeker/reports/train/hardness/score_dict.json - hash: md5 - md5: 87bdbb0cafd4462b87035af79efc81c5 - size: 281 - test_each_method@truthseeker-knn: - cmd: 'python -m deckard.layers.optimise stage=train +model.init.sampling_method=knn model.init.m=3 - data.sample.train_size=100 files.name=knn files.directory=truthseeker data=truthseeker - dataset=truthseeker model_name=knn hydra.run.dir=truthseeker/logs/method/knn - ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 064e5bb42979e36c917c538b2a7bc0cc - size: 489 - - path: params.yaml - hash: md5 - md5: 8e937140db56a135e97c05461c573520 - size: 1345 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: truthseeker/logs/method/knn - hash: md5 - md5: 5c5fe8f17151816b01d863f51db3d01a.dir - size: 10254 - nfiles: 4 - - path: truthseeker/reports/train/knn/score_dict.json - hash: md5 - md5: 4157a5deabda43d207a543b9f038b5af - size: 285 - test_each_method@ddos-knn: - cmd: 'python -m deckard.layers.optimise stage=train +model.init.sampling_method=knn model.init.m=3 - data.sample.train_size=100 files.name=knn files.directory=ddos data=ddos dataset=ddos - model_name=knn hydra.run.dir=ddos/logs/method/knn ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 973ed0af499fa6561450dcb64d7984e3 - size: 485 - - path: params.yaml - hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - distance_matrix: kdd_nsl/model/gzip/100-100/0.npz - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: ddos/logs/method/knn - hash: md5 - md5: 21f2fbc9dd76645ccdfee5605c66d339.dir - size: 8916 - nfiles: 4 - - path: ddos/reports/train/knn/score_dict.json - hash: md5 - md5: a1d6839e09a63dfdab8ea61ccc0d485b - size: 484 - condense@sms_spam-gzip_logistic: - cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam - data.sample.test_size=100 model_name=gzip_logistic model=gzip_logistic hydra.sweeper.study_name=condense_gzip_logistic_sms_spam - hydra.sweeper.n_trials=1 hydra.sweeper.n_jobs=32 hydra.sweep.dir=sms_spam/logs/condense/gzip_logistic/ - hydra.callbacks.study_dump.output_file=sms_spam/logs/gzip_logistic/study.csv - ++data.sample.train_size='int(interval(30, 1000))' ++data.sample.random_state='int(interval(10000, - 20000))' ++data.sample.stratify=True model.init.m='tag(log, interval(.1, 1))' - +model.init.sampling_method=medoid,sum,svc,random,hardness,nearmiss,knn files.directory=sms_spam - files.reports=reports/condense/gzip_logistic/ hydra.launcher.n_jobs=32 --config-name - gzip_logistic --multirun - deps: - - path: conf/model/best_gzip_logistic_sms_spam.yaml - hash: md5 - md5: 026fca7fe5d7bb75c4a3ae245f86a2c2 - size: 332 - - path: sms_spam/logs/method/ - hash: md5 - md5: e8e327bbd5859a6c1c362fd482435727.dir - size: 69377 - nfiles: 24 - params: - conf/condense.yaml: - hydra: - run: - dir: ${dataset}/logs/condense/ - sweep: - dir: ??? - subdir: ${hydra.job.num} - callbacks: - study_dump: - _target_: database.OptunaStudyDumpCallback - storage: ${hydra.sweeper.storage} - study_name: ${hydra.sweeper.study_name} - directions: ${direction} - metric_names: ${optimizers} - output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv - sweeper: - sampler: - _target_: optuna.samplers.TPESampler - seed: ??? - _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name} - storage: sqlite:///optuna.db - n_jobs: 1 - n_trials: 2 - direction: ${direction} - params: - ++data.sample.train_size: int(interval(20, 1000)) - ++data.sample.random_state: int(interval(10000, 20000)) - model.init.m: tag(log, interval(.1, 1)) - +model.init.sampling_method: medoid,sum,svc,random,hardness,nearmiss,knn - launcher: - _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher - n_jobs: 8 - prefer: processes - verbose: 1 - timeout: - pre_dispatch: ${hydra.sweeper.n_jobs} - batch_size: auto - temp_folder: /tmp/deckard - max_nbytes: 100000 - mmap_mode: r - outs: - - path: sms_spam/logs/condense/gzip_logistic/ - hash: md5 - md5: 9496098bd1497b6c46124e40e665ee74.dir - size: 14280 - nfiles: 5 - - path: sms_spam/reports/condense/gzip_logistic/ - hash: md5 - md5: c7e2a43c1dc170c3d593825f57ad0e9b.dir - size: 2707 - nfiles: 3 - condense@truthseeker-gzip_svc: - cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker - data.sample.test_size=100 model_name=gzip_svc model=gzip_svc hydra.sweeper.study_name=condense_gzip_svc_truthseeker - hydra.sweeper.n_trials=1 hydra.sweeper.n_jobs=32 hydra.sweep.dir=truthseeker/logs/condense/gzip_svc/ - hydra.callbacks.study_dump.output_file=truthseeker/logs/gzip_svc/study.csv ++data.sample.train_size='int(interval(30, - 1000))' ++data.sample.random_state='int(interval(10000, 20000))' ++data.sample.stratify=True - model.init.m='tag(log, interval(.1, 1))' +model.init.sampling_method=medoid,sum,svc,random,hardness,nearmiss,knn - files.directory=truthseeker files.reports=reports/condense/gzip_svc/ hydra.launcher.n_jobs=32 - --config-name gzip_svc --multirun - deps: - - path: conf/model/best_gzip_svc_truthseeker.yaml - hash: md5 - md5: 97d9d5857744b1cc077513ac5a659f62 - size: 302 - - path: truthseeker/logs/method/ - hash: md5 - md5: 6f6693db2bb9520dc7956f0d0c003e23.dir - size: 116543 - nfiles: 44 - params: - conf/condense.yaml: - hydra: - run: - dir: ${dataset}/logs/condense/ - sweep: - dir: ??? - subdir: ${hydra.job.num} - callbacks: - study_dump: - _target_: database.OptunaStudyDumpCallback - storage: ${hydra.sweeper.storage} - study_name: ${hydra.sweeper.study_name} - directions: ${direction} - metric_names: ${optimizers} - output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv - sweeper: - sampler: - _target_: optuna.samplers.TPESampler - seed: ??? - _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name} - storage: sqlite:///optuna.db - n_jobs: 1 - n_trials: 2 - direction: ${direction} - params: - ++data.sample.train_size: int(interval(20, 1000)) - ++data.sample.random_state: int(interval(10000, 20000)) - model.init.m: tag(log, interval(.1, 1)) - +model.init.sampling_method: medoid,sum,svc,random,hardness,nearmiss,knn - launcher: - _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher - n_jobs: 8 - prefer: processes - verbose: 1 - timeout: - pre_dispatch: ${hydra.sweeper.n_jobs} - batch_size: auto - temp_folder: /tmp/deckard - max_nbytes: 100000 - mmap_mode: r - outs: - - path: truthseeker/logs/condense/gzip_svc/ - hash: md5 - md5: bd7cbae34fd6feecf60a49cb537b0f80.dir - size: 13751 - nfiles: 5 - - path: truthseeker/reports/condense/gzip_svc/ - hash: md5 - md5: a24584cdc3464b86b6ff88b90dc62e5e.dir - size: 2701 - nfiles: 3 - condense@sms_spam-gzip_svc: - cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam - data.sample.test_size=100 model_name=gzip_svc model=best_gzip_svc_sms_spam hydra.sweeper.study_name=condense_gzip_svc_sms_spam - hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 hydra.sweep.dir=sms_spam/logs/condense/gzip_svc/ - hydra.callbacks.study_dump.output_file=sms_spam/logs/gzip_svc/study.csv model.init.m='tag(log, - interval(.01, .1))' +model.init.sampling_method=medoid,sum,svc,random,hardness,nearmiss,knn - files.directory=sms_spam files.reports=reports/condense/gzip_svc/ hydra.launcher.n_jobs=16 - --config-name condense --multirun - deps: - - path: conf/model/best_gzip_svc_sms_spam.yaml - hash: md5 - md5: 771cd8e3b1368f0fbb30e518002db80f - size: 317 - - path: sms_spam/logs/method/ - hash: md5 - md5: e8e327bbd5859a6c1c362fd482435727.dir - size: 69377 - nfiles: 24 - params: - conf/condense.yaml: - hydra: - run: - dir: ${dataset}/logs/condense/ - sweep: - dir: ??? - subdir: ${hydra.job.num} - callbacks: - study_dump: - _target_: database.OptunaStudyDumpCallback - storage: ${hydra.sweeper.storage} - study_name: ${hydra.sweeper.study_name} - directions: ${direction} - metric_names: ${optimizers} - output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv - sweeper: - sampler: - _target_: optuna.samplers.TPESampler - seed: ??? - _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name} - storage: sqlite:///optuna.db - n_jobs: 1 - n_trials: 2 - direction: ${direction} - params: - ++data.sample.train_size: 1000 - ++data.sample.random_state: int(interval(10000, 20000)) - model.init.m: tag(log, interval(.01, .1)) - +model.init.sampling_method: medoid,sum,svc,random,hardness,nearmiss,knn - launcher: - _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher - n_jobs: 8 - prefer: processes - verbose: 1 - timeout: - pre_dispatch: ${hydra.sweeper.n_jobs} - batch_size: auto - temp_folder: /tmp/deckard - max_nbytes: 100000 - mmap_mode: r - outs: - - path: sms_spam/logs/condense/gzip_svc/ - hash: md5 - md5: c6ef4ecf2bec03894b2f2018cffc0888.dir - size: 1597147 - nfiles: 513 - - path: sms_spam/reports/condense/gzip_svc/ - hash: md5 - md5: aff4ca5c41e7043fe0d36b4a669ad6a7.dir - size: 344414 - nfiles: 381 - condense@ddos-gzip_svc: - cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.test_size=100 - model_name=gzip_svc model=best_gzip_svc_ddos hydra.sweeper.study_name=condense_gzip_svc_ddos - hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 hydra.sweep.dir=ddos/logs/condense/gzip_svc/ - hydra.callbacks.study_dump.output_file=ddos/logs/gzip_svc/study.csv model.init.m='tag(log, - interval(.01, .1))' +model.init.sampling_method=medoid,sum,svc,random,hardness,nearmiss,knn - files.directory=ddos files.reports=reports/condense/gzip_svc/ hydra.launcher.n_jobs=16 - ++raise_exception=True --config-name condense --multirun - deps: - - path: conf/model/best_gzip_svc_ddos.yaml - hash: md5 - md5: f2ec5b2ff8103b93ca61a5b86888a3e6 - size: 305 - - path: ddos/logs/method/ - hash: md5 - md5: 7128c67930147170f54fb89880528199.dir - size: 120518 - nfiles: 48 - params: - conf/condense.yaml: - hydra: - run: - dir: ${dataset}/logs/condense/ - sweep: - dir: ??? - subdir: ${hydra.job.num} - callbacks: - study_dump: - _target_: database.OptunaStudyDumpCallback - storage: ${hydra.sweeper.storage} - study_name: ${hydra.sweeper.study_name} - directions: ${direction} - metric_names: ${optimizers} - output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv - sweeper: - sampler: - _target_: optuna.samplers.TPESampler - seed: ??? - _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name} - storage: sqlite:///optuna.db - n_jobs: 1 - n_trials: 2 - direction: ${direction} - params: - ++data.sample.train_size: 1000 - ++data.sample.random_state: int(interval(10000, 20000)) - model.init.m: tag(log, interval(.01, .1)) - +model.init.sampling_method: medoid,sum,svc,random,hardness,nearmiss,knn - launcher: - _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher - n_jobs: 8 - prefer: processes - verbose: 1 - timeout: - pre_dispatch: ${hydra.sweeper.n_jobs} - batch_size: auto - temp_folder: /tmp/deckard - max_nbytes: 100000 - mmap_mode: r - outs: - - path: ddos/logs/condense/gzip_svc/ - hash: md5 - md5: 98f11cc76f9f370871bfb325ec4186e4.dir - size: 1589126 - nfiles: 513 - - path: ddos/reports/condense/gzip_svc/ - hash: md5 - md5: 87ca8778bbdb8363a1e237019c87ebf5.dir - size: 345583 - nfiles: 384 - condense@sms_spam-gzip_knn: - cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam - data.sample.test_size=100 model_name=gzip_knn model=best_gzip_knn_sms_spam hydra.sweeper.study_name=condense_gzip_knn_sms_spam - hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 hydra.sweep.dir=sms_spam/logs/condense/gzip_knn/ - hydra.callbacks.study_dump.output_file=sms_spam/logs/gzip_knn/study.csv model.init.m='tag(log, - interval(.01, .1))' +model.init.sampling_method=medoid,sum,svc,random,hardness,nearmiss,knn - files.directory=sms_spam files.reports=reports/condense/gzip_knn/ hydra.launcher.n_jobs=16 - --config-name condense --multirun - deps: - - path: conf/model/best_gzip_knn_sms_spam.yaml - hash: md5 - md5: 430e2be20ddaa39808a6739627a98d77 - size: 259 - - path: sms_spam/logs/method/ - hash: md5 - md5: e8e327bbd5859a6c1c362fd482435727.dir - size: 69377 - nfiles: 24 - params: - conf/condense.yaml: - hydra: - run: - dir: ${dataset}/logs/condense/ - sweep: - dir: ??? - subdir: ${hydra.job.num} - callbacks: - study_dump: - _target_: database.OptunaStudyDumpCallback - storage: ${hydra.sweeper.storage} - study_name: ${hydra.sweeper.study_name} - directions: ${direction} - metric_names: ${optimizers} - output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv - sweeper: - sampler: - _target_: optuna.samplers.TPESampler - seed: ??? - _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name} - storage: sqlite:///optuna.db - n_jobs: 1 - n_trials: 2 - direction: ${direction} - params: - ++data.sample.train_size: 1000 - ++data.sample.random_state: int(interval(10000, 20000)) - model.init.m: tag(log, interval(.01, .1)) - +model.init.sampling_method: medoid,sum,svc,random,hardness,nearmiss,knn - launcher: - _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher - n_jobs: 8 - prefer: processes - verbose: 1 - timeout: - pre_dispatch: ${hydra.sweeper.n_jobs} - batch_size: auto - temp_folder: /tmp/deckard - max_nbytes: 100000 - mmap_mode: r - outs: - - path: sms_spam/logs/condense/gzip_knn/ - hash: md5 - md5: a45625dcc1d1cc1f1e20d19440e1cdf1.dir - size: 1559584 - nfiles: 513 - - path: sms_spam/reports/condense/gzip_knn/ - hash: md5 - md5: 0ac87faa8d16d77b4e7d5a96cfdde177.dir - size: 335094 - nfiles: 384 - compile@sms_spam-gzip_knn: - cmd: python -m deckard.layers.compile --report_folder sms_spam/reports/gzip_knn --results_file - sms_spam/reports/gzip_knn.csv - deps: - - path: sms_spam/reports/gzip_knn/ - hash: md5 - md5: 1e4bd6f4f64ae27f0563c9f749af5844.dir - size: 1428322 - nfiles: 1419 - outs: - - path: sms_spam/reports/gzip_knn.csv - hash: md5 - md5: f4e3e2a76c7a2faca4862de57bef75fd - size: 627317 - compile@truthseeker-gzip_knn: - cmd: python -m deckard.layers.compile --report_folder truthseeker/reports/gzip_knn --results_file - truthseeker/reports/gzip_knn.csv - deps: - - path: truthseeker/reports/gzip_knn/ - hash: md5 - md5: e5702237f62021b85240717035b53d81.dir - size: 1537318 - nfiles: 1325 - outs: - - path: truthseeker/reports/gzip_knn.csv - hash: md5 - md5: 183afe36078f60e3e478f3813b1b52a7 - size: 711959 - compile@kdd_nsl-gzip_knn: - cmd: python -m deckard.layers.compile --report_folder kdd_nsl/reports/gzip_knn --results_file - kdd_nsl/reports/gzip_knn.csv - deps: - - path: kdd_nsl/reports/gzip_knn/ - hash: md5 - md5: 5ae8335951f3ab0ba19d97e7fca7300e.dir - size: 1493484 - nfiles: 1411 - outs: - - path: kdd_nsl/reports/gzip_knn.csv - hash: md5 - md5: ccc8afe2274d4133de9777ef19db82b0 - size: 663510 - compile@truthseeker-gzip_svc: - cmd: python -m deckard.layers.compile --report_folder truthseeker/reports/gzip_svc --results_file - truthseeker/reports/gzip_svc.csv - deps: - - path: truthseeker/reports/gzip_svc/ - hash: md5 - md5: e6e273bb143c7a8949d5be4acca87eb9.dir - size: 1536370 - nfiles: 1725 - outs: - - path: truthseeker/reports/gzip_svc.csv - hash: md5 - md5: 746aae81f4af3c8ce4c8c7e3c3e866b1 - size: 870818 - compile@truthseeker-gzip_logistic: - cmd: python -m deckard.layers.compile --report_folder truthseeker/reports/gzip_logistic --results_file - truthseeker/reports/gzip_logistic.csv - deps: - - path: truthseeker/reports/gzip_logistic/ - hash: md5 - md5: 5074027dccab644424973514ae7c8922.dir - size: 2225784 - nfiles: 1473 - outs: - - path: truthseeker/reports/gzip_logistic.csv - hash: md5 - md5: ed858c429ea35f3dac4eca9c52e036ce - size: 786129 - compile@ddos-gzip_logistic: - cmd: python -m deckard.layers.compile --report_folder ddos/reports/gzip_logistic --results_file - ddos/reports/gzip_logistic.csv - deps: - - path: ddos/reports/gzip_logistic/ - hash: md5 - md5: 6349daea939a27d36ded546b54d7f930.dir - size: 2370952 - nfiles: 1527 - outs: - - path: ddos/reports/gzip_logistic.csv - hash: md5 - md5: 923840c89f3b2ffa5a6b206a283d11ca - size: 722803 - compile@ddos-gzip_knn: - cmd: python -m deckard.layers.compile --report_folder ddos/reports/gzip_knn --results_file - ddos/reports/gzip_knn.csv - deps: - - path: ddos/reports/gzip_knn/ - hash: md5 - md5: 2803b737e4d632f8e6b3c51b20122d9e.dir - size: 2110621 - nfiles: 2298 - outs: - - path: ddos/reports/gzip_knn.csv - hash: md5 - md5: 020ec9b121d87045903d2a06c407d879 - size: 1025696 - compile@kdd_nsl-gzip_logistic: - cmd: python -m deckard.layers.compile --report_folder kdd_nsl/reports/gzip_logistic --results_file - kdd_nsl/reports/gzip_logistic.csv - deps: - - path: kdd_nsl/reports/gzip_logistic/ - hash: md5 - md5: 69899acdacb66fea2b065186b94c823f.dir - size: 2252531 - nfiles: 1450 - outs: - - path: kdd_nsl/reports/gzip_logistic.csv - hash: md5 - md5: 717dc514ddfc831b201602c4b79b6481 - size: 697000 - compile@kdd_nsl-gzip_svc: - cmd: python -m deckard.layers.compile --report_folder kdd_nsl/reports/gzip_svc --results_file - kdd_nsl/reports/gzip_svc.csv - deps: - - path: kdd_nsl/reports/gzip_svc/ - hash: md5 - md5: 5a17f3a37936bce8f3c48742b2b8bcad.dir - size: 2217855 - nfiles: 1533 - outs: - - path: kdd_nsl/reports/gzip_svc.csv - hash: md5 - md5: 49ac432e2fe12371b79c7d1f13814bb1 - size: 703910 - compile@sms_spam-gzip_logistic: - cmd: python -m deckard.layers.compile --report_folder sms_spam/reports/gzip_logistic --results_file - sms_spam/reports/gzip_logistic.csv - deps: - - path: sms_spam/reports/gzip_logistic/ - hash: md5 - md5: 9f7db05e10754c5ecc4da28cafb2465a.dir - size: 2207285 - nfiles: 1469 - outs: - - path: sms_spam/reports/gzip_logistic.csv - hash: md5 - md5: 03af493e4f340bc94e6669749f1b93fe - size: 666006 - compile@ddos-gzip_svc: - cmd: python -m deckard.layers.compile --report_folder ddos/reports/gzip_svc --results_file - ddos/reports/gzip_svc.csv - deps: - - path: ddos/reports/gzip_svc/ - hash: md5 - md5: bedf50f5955fcf2a231efde77931b3e8.dir - size: 2208783 - nfiles: 1536 - outs: - - path: ddos/reports/gzip_svc.csv - hash: md5 - md5: e6a761ee6e103e7b57a7251cc2b7042e - size: 689158 - compile@sms_spam-gzip_svc: - cmd: python -m deckard.layers.compile --report_folder sms_spam/reports/gzip_svc --results_file - sms_spam/reports/gzip_svc.csv - deps: - - path: sms_spam/reports/gzip_svc/ - hash: md5 - md5: 659b5b78a0134f1ad10d5fa867067b74.dir - size: 2170821 - nfiles: 1536 - outs: - - path: sms_spam/reports/gzip_svc.csv - hash: md5 - md5: 2e5f3b40875a790db808872c65fc73ef - size: 664866 - clean@truthseeker-gzip_svc: - cmd: python -m deckard.layers.clean_data -i truthseeker/reports/gzip_svc.csv - -o truthseeker/plots/clean/gzip_svc.csv -c conf/clean.yaml - deps: - - path: truthseeker/reports/gzip_svc.csv - hash: md5 - md5: 746aae81f4af3c8ce4c8c7e3c3e866b1 - size: 870818 - params: - conf/clean.yaml: - replace: - model.init.metric: - jaro: Jaro - _winkler: -Winkler - levenshtein: Levenshtein - ncd: NCD - ratio: Ratio - seqRatio: SeqRatio - hamming: Hamming - gzip: Gzip - pkl: Pickle - bz2: BZ2 - zstd: Zstd - lzma: Lzma - model_name: - GzipSVC: k-SVC - GzipLogisticRegressor: k-Logistic - GzipKNN: k-KNN - model.init.symmetric: - true: Symmetric - false: Asymmetric - outs: - - path: truthseeker/plots/clean/gzip_svc.csv - hash: md5 - md5: cdb96b7ba00dc0bf6b4c8db38311447b - size: 679004 - clean@kdd_nsl-gzip_svc: - cmd: python -m deckard.layers.clean_data -i kdd_nsl/reports/gzip_svc.csv -o kdd_nsl/plots/clean/gzip_svc.csv - -c conf/clean.yaml - deps: - - path: kdd_nsl/reports/gzip_svc.csv - hash: md5 - md5: 49ac432e2fe12371b79c7d1f13814bb1 - size: 703910 - params: - conf/clean.yaml: - replace: - model.init.metric: - jaro: Jaro - _winkler: -Winkler - levenshtein: Levenshtein - ncd: NCD - ratio: Ratio - seqRatio: SeqRatio - hamming: Hamming - gzip: Gzip - pkl: Pickle - bz2: BZ2 - zstd: Zstd - lzma: Lzma - model_name: - GzipSVC: k-SVC - GzipLogisticRegressor: k-Logistic - GzipKNN: k-KNN - model.init.symmetric: - true: Symmetric - false: Asymmetric - outs: - - path: kdd_nsl/plots/clean/gzip_svc.csv - hash: md5 - md5: e0b8b895887d4d243b43274f722773f3 - size: 581625 - clean@kdd_nsl-gzip_knn: - cmd: python -m deckard.layers.clean_data -i kdd_nsl/reports/gzip_knn.csv -o kdd_nsl/plots/clean/gzip_knn.csv - -c conf/clean.yaml - deps: - - path: kdd_nsl/reports/gzip_knn.csv - hash: md5 - md5: ccc8afe2274d4133de9777ef19db82b0 - size: 663510 - params: - conf/clean.yaml: - replace: - model.init.metric: - jaro: Jaro - _winkler: -Winkler - levenshtein: Levenshtein - ncd: NCD - ratio: Ratio - seqRatio: SeqRatio - hamming: Hamming - gzip: Gzip - pkl: Pickle - bz2: BZ2 - zstd: Zstd - lzma: Lzma - model_name: - GzipSVC: k-SVC - GzipLogisticRegressor: k-Logistic - GzipKNN: k-KNN - model.init.symmetric: - true: Symmetric - false: Asymmetric - outs: - - path: kdd_nsl/plots/clean/gzip_knn.csv - hash: md5 - md5: 4d844c3227459afa876952f176216c33 - size: 436451 - clean@ddos-gzip_knn: - cmd: python -m deckard.layers.clean_data -i ddos/reports/gzip_knn.csv -o ddos/plots/clean/gzip_knn.csv - -c conf/clean.yaml - deps: - - path: ddos/reports/gzip_knn.csv - hash: md5 - md5: 020ec9b121d87045903d2a06c407d879 - size: 1025696 - params: - conf/clean.yaml: - replace: - model.init.metric: - jaro: Jaro - _winkler: -Winkler - levenshtein: Levenshtein - ncd: NCD - ratio: Ratio - seqRatio: SeqRatio - hamming: Hamming - gzip: Gzip - pkl: Pickle - bz2: BZ2 - zstd: Zstd - lzma: Lzma - model_name: - GzipSVC: k-SVC - GzipLogisticRegressor: k-Logistic - GzipKNN: k-KNN - model.init.symmetric: - true: Symmetric - false: Asymmetric - outs: - - path: ddos/plots/clean/gzip_knn.csv - hash: md5 - md5: b0b99d435ad867232db8a243ef62c051 - size: 822043 - clean@ddos-gzip_svc: - cmd: python -m deckard.layers.clean_data -i ddos/reports/gzip_svc.csv -o ddos/plots/clean/gzip_svc.csv - -c conf/clean.yaml - deps: - - path: ddos/reports/gzip_svc.csv - hash: md5 - md5: e6a761ee6e103e7b57a7251cc2b7042e - size: 689158 - params: - conf/clean.yaml: - replace: - model.init.metric: - jaro: Jaro - _winkler: -Winkler - levenshtein: Levenshtein - ncd: NCD - ratio: Ratio - seqRatio: SeqRatio - hamming: Hamming - gzip: Gzip - pkl: Pickle - bz2: BZ2 - zstd: Zstd - lzma: Lzma - model_name: - GzipSVC: k-SVC - GzipLogisticRegressor: k-Logistic - GzipKNN: k-KNN - model.init.symmetric: - true: Symmetric - false: Asymmetric - outs: - - path: ddos/plots/clean/gzip_svc.csv - hash: md5 - md5: 226094721223ed497570e1addadd5efd - size: 559957 - clean@kdd_nsl-gzip_logistic: - cmd: python -m deckard.layers.clean_data -i kdd_nsl/reports/gzip_logistic.csv - -o kdd_nsl/plots/clean/gzip_logistic.csv -c conf/clean.yaml - deps: - - path: kdd_nsl/reports/gzip_logistic.csv - hash: md5 - md5: 717dc514ddfc831b201602c4b79b6481 - size: 697000 - params: - conf/clean.yaml: - replace: - model.init.metric: - jaro: Jaro - _winkler: -Winkler - levenshtein: Levenshtein - ncd: NCD - ratio: Ratio - seqRatio: SeqRatio - hamming: Hamming - gzip: Gzip - pkl: Pickle - bz2: BZ2 - zstd: Zstd - lzma: Lzma - model_name: - GzipSVC: k-SVC - GzipLogisticRegressor: k-Logistic - GzipKNN: k-KNN - model.init.symmetric: - true: Symmetric - false: Asymmetric - outs: - - path: kdd_nsl/plots/clean/gzip_logistic.csv - hash: md5 - md5: cbc25910d449719a898903a86f443f35 - size: 504190 - clean@truthseeker-gzip_knn: - cmd: python -m deckard.layers.clean_data -i truthseeker/reports/gzip_knn.csv - -o truthseeker/plots/clean/gzip_knn.csv -c conf/clean.yaml - deps: - - path: truthseeker/reports/gzip_knn.csv - hash: md5 - md5: 183afe36078f60e3e478f3813b1b52a7 - size: 711959 - params: - conf/clean.yaml: - replace: - model.init.metric: - jaro: Jaro - _winkler: -Winkler - levenshtein: Levenshtein - ncd: NCD - ratio: Ratio - seqRatio: SeqRatio - hamming: Hamming - gzip: Gzip - pkl: Pickle - bz2: BZ2 - zstd: Zstd - lzma: Lzma - model_name: - GzipSVC: k-SVC - GzipLogisticRegressor: k-Logistic - GzipKNN: k-KNN - model.init.symmetric: - true: Symmetric - false: Asymmetric - outs: - - path: truthseeker/plots/clean/gzip_knn.csv - hash: md5 - md5: dbbbb4c6ab13f540b1b4d9ee23d4a91a - size: 354842 - clean@ddos-gzip_logistic: - cmd: python -m deckard.layers.clean_data -i ddos/reports/gzip_logistic.csv -o - ddos/plots/clean/gzip_logistic.csv -c conf/clean.yaml - deps: - - path: ddos/reports/gzip_logistic.csv - hash: md5 - md5: 923840c89f3b2ffa5a6b206a283d11ca - size: 722803 - params: - conf/clean.yaml: - replace: - model.init.metric: - jaro: Jaro - _winkler: -Winkler - levenshtein: Levenshtein - ncd: NCD - ratio: Ratio - seqRatio: SeqRatio - hamming: Hamming - gzip: Gzip - pkl: Pickle - bz2: BZ2 - zstd: Zstd - lzma: Lzma - model_name: - GzipSVC: k-SVC - GzipLogisticRegressor: k-Logistic - GzipKNN: k-KNN - model.init.symmetric: - true: Symmetric - false: Asymmetric - outs: - - path: ddos/plots/clean/gzip_logistic.csv - hash: md5 - md5: ea6974bfb86de59d5cc77b5082edcff3 - size: 511437 - clean@sms_spam-gzip_knn: - cmd: python -m deckard.layers.clean_data -i sms_spam/reports/gzip_knn.csv -o - sms_spam/plots/clean/gzip_knn.csv -c conf/clean.yaml - deps: - - path: sms_spam/reports/gzip_knn.csv - hash: md5 - md5: f4e3e2a76c7a2faca4862de57bef75fd - size: 627317 - params: - conf/clean.yaml: - replace: - model.init.metric: - jaro: Jaro - _winkler: -Winkler - levenshtein: Levenshtein - ncd: NCD - ratio: Ratio - seqRatio: SeqRatio - hamming: Hamming - gzip: Gzip - pkl: Pickle - bz2: BZ2 - zstd: Zstd - lzma: Lzma - model_name: - GzipSVC: k-SVC - GzipLogisticRegressor: k-Logistic - GzipKNN: k-KNN - model.init.symmetric: - true: Symmetric - false: Asymmetric - outs: - - path: sms_spam/plots/clean/gzip_knn.csv - hash: md5 - md5: eeaaa80725256e5beba9c95958533e9c - size: 417929 - clean@sms_spam-gzip_logistic: - cmd: python -m deckard.layers.clean_data -i sms_spam/reports/gzip_logistic.csv - -o sms_spam/plots/clean/gzip_logistic.csv -c conf/clean.yaml - deps: - - path: sms_spam/reports/gzip_logistic.csv - hash: md5 - md5: 03af493e4f340bc94e6669749f1b93fe - size: 666006 - params: - conf/clean.yaml: - replace: - model.init.metric: - jaro: Jaro - _winkler: -Winkler - levenshtein: Levenshtein - ncd: NCD - ratio: Ratio - seqRatio: SeqRatio - hamming: Hamming - gzip: Gzip - pkl: Pickle - bz2: BZ2 - zstd: Zstd - lzma: Lzma - model_name: - GzipSVC: k-SVC - GzipLogisticRegressor: k-Logistic - GzipKNN: k-KNN - model.init.symmetric: - true: Symmetric - false: Asymmetric - outs: - - path: sms_spam/plots/clean/gzip_logistic.csv - hash: md5 - md5: 280c2094c04ea09f1559217cbc3ec47f - size: 492146 - clean@sms_spam-gzip_svc: - cmd: python -m deckard.layers.clean_data -i sms_spam/reports/gzip_svc.csv -o - sms_spam/plots/clean/gzip_svc.csv -c conf/clean.yaml - deps: - - path: sms_spam/reports/gzip_svc.csv - hash: md5 - md5: 2e5f3b40875a790db808872c65fc73ef - size: 664866 - params: - conf/clean.yaml: - replace: - model.init.metric: - jaro: Jaro - _winkler: -Winkler - levenshtein: Levenshtein - ncd: NCD - ratio: Ratio - seqRatio: SeqRatio - hamming: Hamming - gzip: Gzip - pkl: Pickle - bz2: BZ2 - zstd: Zstd - lzma: Lzma - model_name: - GzipSVC: k-SVC - GzipLogisticRegressor: k-Logistic - GzipKNN: k-KNN - model.init.symmetric: - true: Symmetric - false: Asymmetric - outs: - - path: sms_spam/plots/clean/gzip_svc.csv - hash: md5 - md5: d7cf076fa27322a406727c66c38d0f12 - size: 542023 - clean@truthseeker-gzip_logistic: - cmd: python -m deckard.layers.clean_data -i truthseeker/reports/gzip_logistic.csv - -o truthseeker/plots/clean/gzip_logistic.csv -c conf/clean.yaml - deps: - - path: truthseeker/reports/gzip_logistic.csv - hash: md5 - md5: 276fcd9d025d60418d6a92db6bee859e - size: 748894 - params: - conf/clean.yaml: - replace: - model.init.metric: - jaro: Jaro - _winkler: -Winkler - levenshtein: Levenshtein - ncd: NCD - ratio: Ratio - seqRatio: SeqRatio - hamming: Hamming - gzip: Gzip - pkl: Pickle - bz2: BZ2 - zstd: Zstd - lzma: Lzma - model_name: - GzipSVC: k-SVC - GzipLogisticRegressor: k-Logistic - GzipKNN: k-KNN - model.init.symmetric: - true: Symmetric - false: Asymmetric - outs: - - path: truthseeker/plots/clean/gzip_logistic.csv - hash: md5 - md5: 82450f3b94f517f586b35ed85b494add - size: 417258 - copy@sms_spam: - cmd: 'rm -rf ~/Gzip-KNN/figs/sms_spam/ && mkdir -p ~/Gzip-KNN/figs/sms_spam/ && - cp -r sms_spam/plots/* ~/Gzip-KNN/figs/sms_spam/ ' - deps: - - path: sms_spam/plots/ - hash: md5 - md5: b4562b1ad06e680bf0247d4e8dab85c1.dir - size: 10160120 - nfiles: 19 - copy@truthseeker: - cmd: 'rm -rf ~/Gzip-KNN/figs/truthseeker/ && mkdir -p ~/Gzip-KNN/figs/truthseeker/ - && cp -r truthseeker/plots/* ~/Gzip-KNN/figs/truthseeker/ ' - deps: - - path: truthseeker/plots/ - hash: md5 - md5: 47a062972487c796e962fa241d4bf108.dir - size: 8761443 - nfiles: 18 - copy@kdd_nsl: - cmd: 'rm -rf ~/Gzip-KNN/figs/kdd_nsl/ && mkdir -p ~/Gzip-KNN/figs/kdd_nsl/ && - cp -r kdd_nsl/plots/* ~/Gzip-KNN/figs/kdd_nsl/ ' - deps: - - path: kdd_nsl/plots/ - hash: md5 - md5: 526bfd7a3ffd1b1cee332632d79a96f8.dir - size: 13281984 - nfiles: 18 - copy@ddos: - cmd: 'rm -rf ~/Gzip-KNN/figs/ddos/ && mkdir -p ~/Gzip-KNN/figs/ddos/ && cp -r - ddos/plots/* ~/Gzip-KNN/figs/ddos/ ' - deps: - - path: ddos/plots/ - hash: md5 - md5: 22ac4455d4f24b7a0624f5d670f81e24.dir - size: 15551940 - nfiles: 19 - condense@truthseeker-gzip_knn: - cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker - data.sample.test_size=100 model_name=gzip_knn model=best_gzip_knn_truthseeker - hydra.sweeper.study_name=condense_gzip_knn_truthseeker hydra.sweeper.n_trials=128 - hydra.sweeper.n_jobs=8 hydra.sweep.dir=truthseeker/logs/condense/gzip_knn/ hydra.callbacks.study_dump.output_file=truthseeker/logs/gzip_knn/study.csv - model.init.m='tag(log, interval(.01, .1))' +model.init.sampling_method=medoid,sum,svc,random,hardness,nearmiss,knn - files.directory=truthseeker files.reports=reports/condense/gzip_knn/ hydra.launcher.n_jobs=16 - --config-name condense --multirun - deps: - - path: conf/model/best_gzip_knn_truthseeker.yaml - hash: md5 - md5: 79baf4709c4a5f2535059ef8d1b6a082 - size: 258 - - path: truthseeker/logs/method/ - hash: md5 - md5: 6f6693db2bb9520dc7956f0d0c003e23.dir - size: 116543 - nfiles: 44 - params: - conf/condense.yaml: - hydra: - run: - dir: ${dataset}/logs/condense/ - sweep: - dir: ??? - subdir: ${hydra.job.num} - callbacks: - study_dump: - _target_: database.OptunaStudyDumpCallback - storage: ${hydra.sweeper.storage} - study_name: ${hydra.sweeper.study_name} - directions: ${direction} - metric_names: ${optimizers} - output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv - sweeper: - sampler: - _target_: optuna.samplers.TPESampler - seed: ??? - _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name} - storage: sqlite:///optuna.db - n_jobs: 1 - n_trials: 2 - direction: ${direction} - params: - ++data.sample.train_size: 1000 - ++data.sample.random_state: int(interval(10000, 20000)) - model.init.m: tag(log, interval(.01, .1)) - +model.init.sampling_method: medoid,sum,svc,random,hardness,nearmiss,knn - launcher: - _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher - n_jobs: 8 - prefer: processes - verbose: 1 - timeout: - pre_dispatch: ${hydra.sweeper.n_jobs} - batch_size: auto - temp_folder: /tmp/deckard - max_nbytes: 100000 - mmap_mode: r - outs: - - path: truthseeker/logs/condense/gzip_knn/ - hash: md5 - md5: 029aa9a618d0edd127756b0b724a1742.dir - size: 1568426 - nfiles: 513 - - path: truthseeker/reports/condense/gzip_knn/ - hash: md5 - md5: ef4ee3a0a4c954cea9b4f557a216e421.dir - size: 353591 - nfiles: 374 - plot@ddos-gzip_knn: - cmd: python -m deckard.layers.plots --path ddos/plots/ --file ddos/plots/clean_gzip_knn.csv -c - conf/plots.yaml - deps: - - path: ddos/plots/clean_gzip_knn.csv - hash: md5 - md5: c730af75faf35ba958b15b2da82b25be - size: 451405 - params: - conf/plots.yaml: - cat_plot: - - file: symmetric_vs_metric.pdf - x: model.init.symmetric - y: accuracy - hue: model.init.metric - errorbar: se - kind: bar - titles: - xlabels: '' - ylabels: Accuracy - legend_title: Metrics - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - set: - yscale: linear - ylim: - - 0 - - 1 - - file: symmetric_vs_metric_train_time.pdf - x: model.init.symmetric - y: train_time - hue: model.init.metric - errorbar: se - kind: bar - titles: - xlabels: '' - ylabels: Training Time (s) - legend_title: Metrics - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - set: - yscale: log - - file: models_vs_accuracy.pdf - x: model_name - y: accuracy - hue: dataset - errorbar: se - kind: bar - titles: - xlabels: Model - ylabels: Accuracy - legend_title: Samples - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - set: - yscale: linear - ylim: - - 0 - - 1 - rotation: 90 - - file: models_vs_train_time.pdf - x: model_name - y: train_time - hue: dataset - errorbar: se - kind: bar - titles: - xlabels: Model - ylabels: Training Time (s) - legend_title: Samples - rotation: 90 - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - set: - yscale: log - - file: models_vs_predict_time.pdf - x: model_name - y: predict_time - hue: dataset - errorbar: se - kind: bar - titles: - xlabels: Model - ylabels: Prediction Time (s) - legend_title: Samples - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - set: - yscale: log - rotation: 90 - line_plot: - - file: metric_vs_accuracy.pdf - hue: model.init.metric - title: - x: data.sample.train_size - xlabel: Number of Training Samples - y: accuracy - ylabel: Accuracy - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - errorbar: se - err_style: bars - xlim: - - 10 - - 500 - legend: - title: Metrics - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - - file: metric_vs_train_time.pdf - hue: model.init.metric - title: - x: data.sample.train_size - xlabel: Number of Training Samples - y: train_time - ylabel: Training Time (s) - y_scale: log - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - errorbar: se - err_style: bars - xlim: - - 10 - - 500 - legend: - title: Metrics - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - - file: metric_vs_predict_time.pdf - hue: model.init.metric - title: - x: data.sample.train_size - xlabel: Number of Training Samples - y: predict_time - ylabel: Prediction Time (s) - y_scale: log - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - errorbar: se - err_style: bars - xlim: - - 10 - - 500 - legend: - title: Metrics - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - outs: - - path: ddos/plots/metric_vs_accuracy.pdf - hash: md5 - md5: b8279045dcf3a1fc574578e991427e73 - size: 23629 - - path: ddos/plots/metric_vs_predict_time.pdf - hash: md5 - md5: 1512c0c363753afc28a3c093cc8e252c - size: 22784 - - path: ddos/plots/metric_vs_train_time.pdf - hash: md5 - md5: dd17a922e53b59b2d9b2d91c1237bb54 - size: 22329 - - path: ddos/plots/models_vs_accuracy.pdf - hash: md5 - md5: bbbc08a7161735b6174984688003809f - size: 13970 - - path: ddos/plots/models_vs_predict_time.pdf - hash: md5 - md5: 9b6acd61045df87af51626be2bdff7ab - size: 15507 - - path: ddos/plots/models_vs_train_time.pdf - hash: md5 - md5: 6a2303b531dfc78f20d9bf3dc62d8d42 - size: 16118 - - path: ddos/plots/symmetric_vs_metric.pdf - hash: md5 - md5: 9cd54391a16400664710c9f0589a4d5f - size: 22044 - - path: ddos/plots/symmetric_vs_metric_train_time.pdf - hash: md5 - md5: 0397f39f681300638b6fcc7c2d4e3bda - size: 21616 - plot@kdd_nsl-gzip_knn: - cmd: python -m deckard.layers.plots --path kdd_nsl/plots/ --file kdd_nsl/plots/clean_gzip_knn.csv -c - conf/plots.yaml - deps: - - path: kdd_nsl/plots/clean_gzip_knn.csv - hash: md5 - md5: 1c001f5a7008b439ee4c7946998cbe25 - size: 1002255 - params: - conf/plots.yaml: - cat_plot: - - file: symmetric_vs_metric.pdf - x: model.init.symmetric - y: accuracy - hue: model.init.metric - errorbar: se - kind: bar - titles: - xlabels: '' - ylabels: Accuracy - legend_title: Metrics - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - set: - yscale: linear - ylim: - - 0 - - 1 - - file: symmetric_vs_metric_train_time.pdf - x: model.init.symmetric - y: train_time - hue: model.init.metric - errorbar: se - kind: bar - titles: - xlabels: '' - ylabels: Training Time (s) - legend_title: Metrics - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - set: - yscale: log - - file: models_vs_accuracy.pdf - x: model_name - y: accuracy - hue: dataset - errorbar: se - kind: bar - titles: - xlabels: Model - ylabels: Accuracy - legend_title: Samples - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - set: - yscale: linear - ylim: - - 0 - - 1 - rotation: 90 - - file: models_vs_train_time.pdf - x: model_name - y: train_time - hue: dataset - errorbar: se - kind: bar - titles: - xlabels: Model - ylabels: Training Time (s) - legend_title: Samples - rotation: 90 - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - set: - yscale: log - - file: models_vs_predict_time.pdf - x: model_name - y: predict_time - hue: dataset - errorbar: se - kind: bar - titles: - xlabels: Model - ylabels: Prediction Time (s) - legend_title: Samples - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - set: - yscale: log - rotation: 90 - line_plot: - - file: metric_vs_accuracy.pdf - hue: model.init.metric - title: - x: data.sample.train_size - xlabel: Number of Training Samples - y: accuracy - ylabel: Accuracy - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - errorbar: se - err_style: bars - xlim: - - 10 - - 500 - legend: - title: Metrics - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - - file: metric_vs_train_time.pdf - hue: model.init.metric - title: - x: data.sample.train_size - xlabel: Number of Training Samples - y: train_time - ylabel: Training Time (s) - y_scale: log - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - errorbar: se - err_style: bars - xlim: - - 10 - - 500 - legend: - title: Metrics - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - - file: metric_vs_predict_time.pdf - hue: model.init.metric - title: - x: data.sample.train_size - xlabel: Number of Training Samples - y: predict_time - ylabel: Prediction Time (s) - y_scale: log - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - errorbar: se - err_style: bars - xlim: - - 10 - - 500 - legend: - title: Metrics - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - outs: - - path: kdd_nsl/plots/metric_vs_accuracy.pdf - hash: md5 - md5: a146ab8c45d548ecd6c285a40c5d49e7 - size: 23228 - - path: kdd_nsl/plots/metric_vs_predict_time.pdf - hash: md5 - md5: 59f7befb701cf34c5bf62a78206d7867 - size: 22642 - - path: kdd_nsl/plots/metric_vs_train_time.pdf - hash: md5 - md5: 938036a897293cbf7dc0b4caa19a5596 - size: 22182 - - path: kdd_nsl/plots/models_vs_accuracy.pdf - hash: md5 - md5: 0dad2f21fc6049c3a24972a35514ee71 - size: 15035 - - path: kdd_nsl/plots/models_vs_predict_time.pdf - hash: md5 - md5: 4361ffb492bff25d3cde95fcdb941ced - size: 16578 - - path: kdd_nsl/plots/models_vs_train_time.pdf - hash: md5 - md5: 416681afbf2e0e87dcc7dfe97f0835fc - size: 16239 - - path: kdd_nsl/plots/symmetric_vs_metric.pdf - hash: md5 - md5: 05a28fb9adea7b847f396fdd96c37d02 - size: 22208 - - path: kdd_nsl/plots/symmetric_vs_metric_train_time.pdf - hash: md5 - md5: 0a0a9daf98ab6efe98cb31b69cba2c65 - size: 21578 - plot@truthseeker-gzip_knn: - cmd: python -m deckard.layers.plots --path truthseeker/plots/ --file truthseeker/plots/clean_gzip_knn.csv -c - conf/plots.yaml - deps: - - path: truthseeker/plots/clean_gzip_knn.csv - hash: md5 - md5: ff0162ac672b57d59126b965580901d9 - size: 620009 - params: - conf/plots.yaml: - cat_plot: - - file: symmetric_vs_metric.pdf - x: model.init.symmetric - y: accuracy - hue: model.init.metric - errorbar: se - kind: bar - titles: - xlabels: '' - ylabels: Accuracy - legend_title: Metrics - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - set: - yscale: linear - ylim: - - 0 - - 1 - - file: symmetric_vs_metric_train_time.pdf - x: model.init.symmetric - y: train_time - hue: model.init.metric - errorbar: se - kind: bar - titles: - xlabels: '' - ylabels: Training Time (s) - legend_title: Metrics - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - set: - yscale: log - - file: models_vs_accuracy.pdf - x: model_name - y: accuracy - hue: dataset - errorbar: se - kind: bar - titles: - xlabels: Model - ylabels: Accuracy - legend_title: Samples - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - set: - yscale: linear - ylim: - - 0 - - 1 - rotation: 90 - - file: models_vs_train_time.pdf - x: model_name - y: train_time - hue: dataset - errorbar: se - kind: bar - titles: - xlabels: Model - ylabels: Training Time (s) - legend_title: Samples - rotation: 90 - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - set: - yscale: log - - file: models_vs_predict_time.pdf - x: model_name - y: predict_time - hue: dataset - errorbar: se - kind: bar - titles: - xlabels: Model - ylabels: Prediction Time (s) - legend_title: Samples - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - set: - yscale: log - rotation: 90 - line_plot: - - file: metric_vs_accuracy.pdf - hue: model.init.metric - title: - x: data.sample.train_size - xlabel: Number of Training Samples - y: accuracy - ylabel: Accuracy - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - errorbar: se - err_style: bars - xlim: - - 10 - - 500 - legend: - title: Metrics - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - - file: metric_vs_train_time.pdf - hue: model.init.metric - title: - x: data.sample.train_size - xlabel: Number of Training Samples - y: train_time - ylabel: Training Time (s) - y_scale: log - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - errorbar: se - err_style: bars - xlim: - - 10 - - 500 - legend: - title: Metrics - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - - file: metric_vs_predict_time.pdf - hue: model.init.metric - title: - x: data.sample.train_size - xlabel: Number of Training Samples - y: predict_time - ylabel: Prediction Time (s) - y_scale: log - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - errorbar: se - err_style: bars - xlim: - - 10 - - 500 - legend: - title: Metrics - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - outs: - - path: truthseeker/plots/metric_vs_accuracy.pdf - hash: md5 - md5: 3cef9a04adf0d3378d4627c1a8b097a7 - size: 23348 - - path: truthseeker/plots/metric_vs_predict_time.pdf - hash: md5 - md5: a4a5f2426ffaf289e124fb09235e374b - size: 22838 - - path: truthseeker/plots/metric_vs_train_time.pdf - hash: md5 - md5: cda8914da9fabcfb40ea1eb0943e28d3 - size: 22333 - - path: truthseeker/plots/models_vs_accuracy.pdf - hash: md5 - md5: 7ef865e460d2652c873cfe333e7a308d - size: 15215 - - path: truthseeker/plots/models_vs_predict_time.pdf - hash: md5 - md5: eb57bd848d231a47615e311dbd1102b1 - size: 17930 - - path: truthseeker/plots/models_vs_train_time.pdf - hash: md5 - md5: e7bc6589ed86e8f5c3fbb5a747c652fe - size: 17739 - - path: truthseeker/plots/symmetric_vs_metric.pdf - hash: md5 - md5: 0e7c326bef4c0d835f810c67172b2698 - size: 22057 - - path: truthseeker/plots/symmetric_vs_metric_train_time.pdf - hash: md5 - md5: ce21956e382cc48f0a71ef7ccfd79751 - size: 21593 - plot@sms_spam-gzip_knn: - cmd: python -m deckard.layers.plots --path sms_spam/plots/ --file sms_spam/plots/clean_gzip_knn.csv -c - conf/plots.yaml - deps: - - path: sms_spam/plots/clean_gzip_knn.csv - hash: md5 - md5: 13a5803849f7dfdefe18ba16b0a5010f - size: 448070 - params: - conf/plots.yaml: - cat_plot: - - file: symmetric_vs_metric.pdf - x: model.init.symmetric - y: accuracy - hue: model.init.metric - errorbar: se - kind: bar - titles: - xlabels: '' - ylabels: Accuracy - legend_title: Metrics - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - set: - yscale: linear - ylim: - - 0 - - 1 - - file: symmetric_vs_metric_train_time.pdf - x: model.init.symmetric - y: train_time - hue: model.init.metric - errorbar: se - kind: bar - titles: - xlabels: '' - ylabels: Training Time (s) - legend_title: Metrics - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - set: - yscale: log - - file: models_vs_accuracy.pdf - x: model_name - y: accuracy - hue: dataset - errorbar: se - kind: bar - titles: - xlabels: Model - ylabels: Accuracy - legend_title: Samples - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - set: - yscale: linear - ylim: - - 0 - - 1 - rotation: 90 - - file: models_vs_train_time.pdf - x: model_name - y: train_time - hue: dataset - errorbar: se - kind: bar - titles: - xlabels: Model - ylabels: Training Time (s) - legend_title: Samples - rotation: 90 - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - set: - yscale: log - - file: models_vs_predict_time.pdf - x: model_name - y: predict_time - hue: dataset - errorbar: se - kind: bar - titles: - xlabels: Model - ylabels: Prediction Time (s) - legend_title: Samples - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - set: - yscale: log - rotation: 90 - line_plot: - - file: metric_vs_accuracy.pdf - hue: model.init.metric - title: - x: data.sample.train_size - xlabel: Number of Training Samples - y: accuracy - ylabel: Accuracy - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - errorbar: se - err_style: bars - xlim: - - 10 - - 500 - legend: - title: Metrics - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - - file: metric_vs_train_time.pdf - hue: model.init.metric - title: - x: data.sample.train_size - xlabel: Number of Training Samples - y: train_time - ylabel: Training Time (s) - y_scale: log - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - errorbar: se - err_style: bars - xlim: - - 10 - - 500 - legend: - title: Metrics - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - - file: metric_vs_predict_time.pdf - hue: model.init.metric - title: - x: data.sample.train_size - xlabel: Number of Training Samples - y: predict_time - ylabel: Prediction Time (s) - y_scale: log - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - errorbar: se - err_style: bars - xlim: - - 10 - - 500 - legend: - title: Metrics - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - outs: - - path: sms_spam/plots/metric_vs_accuracy.pdf - hash: md5 - md5: 507715814c07145dbb140b2b6714973b - size: 23499 - - path: sms_spam/plots/metric_vs_predict_time.pdf - hash: md5 - md5: 97ec5498625837c79fc02850afba09f1 - size: 22606 - - path: sms_spam/plots/metric_vs_train_time.pdf - hash: md5 - md5: f4c9d0805ea5d0ac8e1a2210ee788d47 - size: 22104 - - path: sms_spam/plots/models_vs_accuracy.pdf - hash: md5 - md5: 2eb9ea23cba4e5b734565b7aacdcf43c - size: 14146 - - path: sms_spam/plots/models_vs_predict_time.pdf - hash: md5 - md5: b518bf6b070e7916ad71febd3d3face6 - size: 15523 - - path: sms_spam/plots/models_vs_train_time.pdf - hash: md5 - md5: 617f20892ba643f5c47077af63ae727f - size: 14895 - - path: sms_spam/plots/symmetric_vs_metric.pdf - hash: md5 - md5: 40aa8607331327c4f667fda367defb5f - size: 22033 - - path: sms_spam/plots/symmetric_vs_metric_train_time.pdf - hash: md5 - md5: 775c0bdfc7d9524f1e63b8879ddefccd - size: 21590 - merge@truthseeker: - cmd: python merge.py --big_dir truthseeker/plots/ --data_file clean/gzip_knn.csv - --little_dir_data_file clean/gzip_logistic.csv clean/gzip_svc.csv --output_folder - truthseeker/plots --output_file merged.csv - deps: - - path: truthseeker/plots/clean/gzip_knn.csv - hash: md5 - md5: 1f46e4b3afd875ee11939b23bd1c0852 - size: 560551 - - path: truthseeker/plots/clean/gzip_logistic.csv - hash: md5 - md5: 82450f3b94f517f586b35ed85b494add - size: 417258 - - path: truthseeker/plots/clean/gzip_svc.csv - hash: md5 - md5: cdb96b7ba00dc0bf6b4c8db38311447b - size: 679004 - outs: - - path: truthseeker/plots/merged.csv - hash: md5 - md5: a9b4f71f4d7eccde5a901730969b0bb1 - size: 1711555 - merge@sms_spam: - cmd: python merge.py --big_dir sms_spam/plots/ --data_file clean/gzip_knn.csv - --little_dir_data_file clean/gzip_logistic.csv clean/gzip_svc.csv --output_folder - sms_spam/plots --output_file merged.csv - deps: - - path: sms_spam/plots/clean/gzip_knn.csv - hash: md5 - md5: eeaaa80725256e5beba9c95958533e9c - size: 417929 - - path: sms_spam/plots/clean/gzip_logistic.csv - hash: md5 - md5: 280c2094c04ea09f1559217cbc3ec47f - size: 492146 - - path: sms_spam/plots/clean/gzip_svc.csv - hash: md5 - md5: d7cf076fa27322a406727c66c38d0f12 - size: 542023 - outs: - - path: sms_spam/plots/merged.csv - hash: md5 - md5: 534291e353ef58c5ce65ac66c3381654 - size: 1504936 - merge@ddos: - cmd: python merge.py --big_dir ddos/plots/ --data_file clean/gzip_knn.csv --little_dir_data_file - clean/gzip_logistic.csv clean/gzip_svc.csv --output_folder ddos/plots --output_file - merged.csv - deps: - - path: ddos/plots/clean/gzip_knn.csv - hash: md5 - md5: b0b99d435ad867232db8a243ef62c051 - size: 822043 - - path: ddos/plots/clean/gzip_logistic.csv - hash: md5 - md5: ea6974bfb86de59d5cc77b5082edcff3 - size: 511437 - - path: ddos/plots/clean/gzip_svc.csv - hash: md5 - md5: 226094721223ed497570e1addadd5efd - size: 559957 - outs: - - path: ddos/plots/merged.csv - hash: md5 - md5: 4d967dc422fd9f25b15fc4181e92778f - size: 1961397 - merge@kdd_nsl: - cmd: python merge.py --big_dir kdd_nsl/plots/ --data_file clean/gzip_knn.csv --little_dir_data_file - clean/gzip_logistic.csv clean/gzip_svc.csv --output_folder kdd_nsl/plots --output_file - merged.csv - deps: - - path: kdd_nsl/plots/clean/gzip_knn.csv - hash: md5 - md5: 4d844c3227459afa876952f176216c33 - size: 436451 - - path: kdd_nsl/plots/clean/gzip_logistic.csv - hash: md5 - md5: cbc25910d449719a898903a86f443f35 - size: 504190 - - path: kdd_nsl/plots/clean/gzip_svc.csv - hash: md5 - md5: e0b8b895887d4d243b43274f722773f3 - size: 581625 - outs: - - path: kdd_nsl/plots/merged.csv - hash: md5 - md5: 888018922b696e148cd9d36b32075af9 - size: 1573889 - plot@kdd_nsl: - cmd: python -m deckard.layers.plots --path kdd_nsl/plots/ --file kdd_nsl/plots/merged.csv -c - conf/plots.yaml - deps: - - path: kdd_nsl/plots/merged.csv - hash: md5 - md5: 888018922b696e148cd9d36b32075af9 - size: 1573889 - params: - conf/plots.yaml: - cat_plot: - - file: symmetric_vs_metric.pdf - x: model.init.symmetric - y: accuracy - hue: model.init.metric - errorbar: se - kind: bar - titles: - xlabels: '' - ylabels: Accuracy - legend_title: Metrics - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - set: - yscale: linear - ylim: - - 0 - - 1 - - file: symmetric_vs_metric_train_time.pdf - x: model.init.symmetric - y: train_time - hue: model.init.metric - errorbar: se - kind: bar - titles: - xlabels: '' - ylabels: Training Time (s) - legend_title: Metrics - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - set: - yscale: log - - file: models_vs_accuracy.pdf - x: model_name - y: accuracy - hue: data.sample.train_size - errorbar: se - kind: boxen - titles: - xlabels: Model - ylabels: Accuracy - legend_title: Samples - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - set: - yscale: linear - ylim: - - 0 - - 1 - rotation: 90 - - file: models_vs_train_time.pdf - x: model_name - y: accuracy - hue: data.sample.train_size - errorbar: se - kind: bar - titles: - xlabels: Model - ylabels: Training Time (s) - legend_title: Samples - rotation: 90 - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - set: - yscale: log - - file: models_vs_predict_time.pdf - x: model_name - y: accuracy - hue: data.sample.train_size - errorbar: se - kind: bar - titles: - xlabels: Model - ylabels: Prediction Time (s) - legend_title: Samples - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - set: - yscale: log - rotation: 90 - line_plot: - - file: metric_vs_accuracy.pdf - hue: model.init.metric - title: - x: data.sample.train_size - xlabel: Number of Training Samples - y: accuracy - ylabel: Accuracy - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - errorbar: se - err_style: bars - xlim: - - 10 - - 500 - legend: - title: Metrics - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - - file: metric_vs_train_time.pdf - hue: model.init.metric - title: - x: data.sample.train_size - xlabel: Number of Training Samples - y: train_time - ylabel: Training Time (s) - y_scale: linear - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - errorbar: se - err_style: bars - xlim: - - 10 - - 500 - legend: - title: Metrics - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - - file: metric_vs_predict_time.pdf - hue: model.init.metric - title: - x: data.sample.train_size - xlabel: Number of Training Samples - y: predict_time - ylabel: Prediction Time (s) - y_scale: linear - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - errorbar: se - err_style: bars - xlim: - - 10 - - 500 - legend: - title: Metrics - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - outs: - - path: kdd_nsl/plots/metric_vs_accuracy.pdf - hash: md5 - md5: e9d548a5e926f285654804b2f484c054 - size: 24697 - - path: kdd_nsl/plots/metric_vs_predict_time.pdf - hash: md5 - md5: 14c6752580fb9f764dffd6e00dbb7d8b - size: 24260 - - path: kdd_nsl/plots/metric_vs_train_time.pdf - hash: md5 - md5: aee452c8d796ee31e04ed2309335140c - size: 23263 - - path: kdd_nsl/plots/models_vs_accuracy.pdf - hash: md5 - md5: 3c4f26f1d95b12df8b1f4d776c1eb450 - size: 22926 - - path: kdd_nsl/plots/models_vs_predict_time.pdf - hash: md5 - md5: 31f939c60279bef48afcd11ad37ded6a - size: 19840 - - path: kdd_nsl/plots/models_vs_train_time.pdf - hash: md5 - md5: 56411639dc8ad805a8f75e0b75bbaa21 - size: 19419 - - path: kdd_nsl/plots/symmetric_vs_metric.pdf - hash: md5 - md5: 959d2acbe4a5d87921fa1ccf66b21e9f - size: 22222 - - path: kdd_nsl/plots/symmetric_vs_metric_train_time.pdf - hash: md5 - md5: d1e9df1cf1a8290451cac1e04b7b1593 - size: 21620 - plot@truthseeker: - cmd: python -m deckard.layers.plots --path truthseeker/plots/ --file truthseeker/plots/merged.csv -c - conf/plots.yaml - deps: - - path: truthseeker/plots/merged.csv - hash: md5 - md5: a9b4f71f4d7eccde5a901730969b0bb1 - size: 1711555 - params: - conf/plots.yaml: - cat_plot: - - file: symmetric_vs_metric.pdf - x: model.init.symmetric - y: accuracy - hue: model.init.metric - errorbar: se - kind: bar - titles: - xlabels: '' - ylabels: Accuracy - legend_title: Metrics - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - set: - yscale: linear - ylim: - - 0 - - 1 - - file: symmetric_vs_metric_train_time.pdf - x: model.init.symmetric - y: train_time - hue: model.init.metric - errorbar: se - kind: bar - titles: - xlabels: '' - ylabels: Training Time (s) - legend_title: Metrics - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - set: - yscale: log - - file: models_vs_accuracy.pdf - x: model_name - y: accuracy - hue: data.sample.train_size - errorbar: se - kind: boxen - titles: - xlabels: Model - ylabels: Accuracy - legend_title: Samples - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - set: - yscale: linear - ylim: - - 0 - - 1 - rotation: 90 - - file: models_vs_train_time.pdf - x: model_name - y: accuracy - hue: data.sample.train_size - errorbar: se - kind: bar - titles: - xlabels: Model - ylabels: Training Time (s) - legend_title: Samples - rotation: 90 - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - set: - yscale: log - - file: models_vs_predict_time.pdf - x: model_name - y: accuracy - hue: data.sample.train_size - errorbar: se - kind: bar - titles: - xlabels: Model - ylabels: Prediction Time (s) - legend_title: Samples - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - set: - yscale: log - rotation: 90 - line_plot: - - file: metric_vs_accuracy.pdf - hue: model.init.metric - title: - x: data.sample.train_size - xlabel: Number of Training Samples - y: accuracy - ylabel: Accuracy - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - errorbar: se - err_style: bars - xlim: - - 10 - - 500 - legend: - title: Metrics - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - - file: metric_vs_train_time.pdf - hue: model.init.metric - title: - x: data.sample.train_size - xlabel: Number of Training Samples - y: train_time - ylabel: Training Time (s) - y_scale: linear - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - errorbar: se - err_style: bars - xlim: - - 10 - - 500 - legend: - title: Metrics - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - - file: metric_vs_predict_time.pdf - hue: model.init.metric - title: - x: data.sample.train_size - xlabel: Number of Training Samples - y: predict_time - ylabel: Prediction Time (s) - y_scale: linear - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - errorbar: se - err_style: bars - xlim: - - 10 - - 500 - legend: - title: Metrics - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - outs: - - path: truthseeker/plots/metric_vs_accuracy.pdf - hash: md5 - md5: 935a8c7365ac4b738a1ab222357db671 - size: 23824 - - path: truthseeker/plots/metric_vs_predict_time.pdf - hash: md5 - md5: d5095d1375ed12b1a9b9f8ce5bfee839 - size: 22984 - - path: truthseeker/plots/metric_vs_train_time.pdf - hash: md5 - md5: c6dec8707d3da6a57eb64874b8489aa1 - size: 23404 - - path: truthseeker/plots/models_vs_accuracy.pdf - hash: md5 - md5: c09acc549b30af58463a3a8af31b80d1 - size: 20437 - - path: truthseeker/plots/models_vs_predict_time.pdf - hash: md5 - md5: ff7ffac5905b059ec6670c9220caf124 - size: 18153 - - path: truthseeker/plots/models_vs_train_time.pdf - hash: md5 - md5: f48cdb573700e225810e4ed960768e57 - size: 17725 - - path: truthseeker/plots/symmetric_vs_metric.pdf - hash: md5 - md5: 4b92b154563b9c13bb5f177d0e106002 - size: 22192 - - path: truthseeker/plots/symmetric_vs_metric_train_time.pdf - hash: md5 - md5: 2013309b971cea5728652df1a18ece16 - size: 21586 - plot@sms_spam: - cmd: python -m deckard.layers.plots --path sms_spam/plots/ --file sms_spam/plots/merged.csv -c - conf/plots.yaml - deps: - - path: sms_spam/plots/merged.csv - hash: md5 - md5: 3e3e63943b3d62dddc79e554cb691405 - size: 1492939 - params: - conf/plots.yaml: - cat_plot: - - file: symmetric_vs_metric.pdf - x: model.init.symmetric - y: accuracy - hue: model.init.metric - errorbar: se - kind: bar - titles: - xlabels: '' - ylabels: Accuracy - legend_title: Metrics - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - set: - yscale: linear - ylim: - - 0 - - 1 - - file: symmetric_vs_metric_train_time.pdf - x: model.init.symmetric - y: train_time - hue: model.init.metric - errorbar: se - kind: bar - titles: - xlabels: '' - ylabels: Training Time (s) - legend_title: Metrics - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - set: - yscale: log - - file: models_vs_accuracy.pdf - x: model_name - y: accuracy - hue: data.sample.train_size - errorbar: se - kind: boxen - titles: - xlabels: Model - ylabels: Accuracy - legend_title: Samples - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - set: - yscale: linear - ylim: - - 0 - - 1 - rotation: 90 - - file: models_vs_train_time.pdf - x: model_name - y: accuracy - hue: data.sample.train_size - errorbar: se - kind: bar - titles: - xlabels: Model - ylabels: Training Time (s) - legend_title: Samples - rotation: 90 - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - set: - yscale: log - - file: models_vs_predict_time.pdf - x: model_name - y: accuracy - hue: data.sample.train_size - errorbar: se - kind: bar - titles: - xlabels: Model - ylabels: Prediction Time (s) - legend_title: Samples - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - set: - yscale: log - rotation: 90 - line_plot: - - file: metric_vs_accuracy.pdf - hue: model.init.metric - title: - x: data.sample.train_size - xlabel: Number of Training Samples - y: accuracy - ylabel: Accuracy - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - errorbar: se - err_style: bars - xlim: - - 10 - - 500 - legend: - title: Metrics - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - - file: metric_vs_train_time.pdf - hue: model.init.metric - title: - x: data.sample.train_size - xlabel: Number of Training Samples - y: train_time - ylabel: Training Time (s) - y_scale: linear - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - errorbar: se - err_style: bars - xlim: - - 10 - - 500 - legend: - title: Metrics - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - - file: metric_vs_predict_time.pdf - hue: model.init.metric - title: - x: data.sample.train_size - xlabel: Number of Training Samples - y: predict_time - ylabel: Prediction Time (s) - y_scale: linear - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - errorbar: se - err_style: bars - xlim: - - 10 - - 500 - legend: - title: Metrics - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - outs: - - path: sms_spam/plots/metric_vs_accuracy.pdf - hash: md5 - md5: 695e96d374959cef893859230a15f1a7 - size: 24667 - - path: sms_spam/plots/metric_vs_predict_time.pdf - hash: md5 - md5: 857505ffce8416303759a76cb29b26a3 - size: 23552 - - path: sms_spam/plots/metric_vs_train_time.pdf - hash: md5 - md5: 98b34d861b84d36cb30f58c763445eb7 - size: 23637 - - path: sms_spam/plots/models_vs_accuracy.pdf - hash: md5 - md5: 3d9cda5e091398ec195ff1c763fb0b5a - size: 23033 - - path: sms_spam/plots/models_vs_predict_time.pdf - hash: md5 - md5: 06ae4883133a4f2bb4c19f531c693fdd - size: 19365 - - path: sms_spam/plots/models_vs_train_time.pdf - hash: md5 - md5: f8af33a8abf0caf4fc83a69b6af565a0 - size: 18945 - - path: sms_spam/plots/symmetric_vs_metric.pdf - hash: md5 - md5: 43b4f4865931fca59079491745c20f1c - size: 22231 - - path: sms_spam/plots/symmetric_vs_metric_train_time.pdf - hash: md5 - md5: 4f5b0a9ac3efe2e0daa225f79fe0e40c - size: 21606 - plot@ddos: - cmd: python -m deckard.layers.plots --path ddos/plots/ --file ddos/plots/merged.csv -c - conf/plots.yaml - deps: - - path: ddos/plots/merged.csv - hash: md5 - md5: 4d967dc422fd9f25b15fc4181e92778f - size: 1961397 - params: - conf/plots.yaml: - cat_plot: - - file: symmetric_vs_metric.pdf - x: model.init.symmetric - y: accuracy - hue: model.init.metric - errorbar: se - kind: bar - titles: - xlabels: '' - ylabels: Accuracy - legend_title: Metrics - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - set: - yscale: linear - ylim: - - 0 - - 1 - - file: symmetric_vs_metric_train_time.pdf - x: model.init.symmetric - y: train_time - hue: model.init.metric - errorbar: se - kind: bar - titles: - xlabels: '' - ylabels: Training Time (s) - legend_title: Metrics - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - set: - yscale: log - - file: models_vs_accuracy.pdf - x: model_name - y: accuracy - hue: data.sample.train_size - errorbar: se - kind: boxen - titles: - xlabels: Model - ylabels: Accuracy - legend_title: Samples - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - set: - yscale: linear - ylim: - - 0 - - 1 - rotation: 90 - - file: models_vs_train_time.pdf - x: model_name - y: accuracy - hue: data.sample.train_size - errorbar: se - kind: bar - titles: - xlabels: Model - ylabels: Training Time (s) - legend_title: Samples - rotation: 90 - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - set: - yscale: log - - file: models_vs_predict_time.pdf - x: model_name - y: accuracy - hue: data.sample.train_size - errorbar: se - kind: bar - titles: - xlabels: Model - ylabels: Prediction Time (s) - legend_title: Samples - legend: - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - set: - yscale: log - rotation: 90 - line_plot: - - file: metric_vs_accuracy.pdf - hue: model.init.metric - title: - x: data.sample.train_size - xlabel: Number of Training Samples - y: accuracy - ylabel: Accuracy - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - errorbar: se - err_style: bars - xlim: - - 10 - - 500 - legend: - title: Metrics - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - - file: metric_vs_train_time.pdf - hue: model.init.metric - title: - x: data.sample.train_size - xlabel: Number of Training Samples - y: train_time - ylabel: Training Time (s) - y_scale: linear - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - errorbar: se - err_style: bars - xlim: - - 10 - - 500 - legend: - title: Metrics - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - - file: metric_vs_predict_time.pdf - hue: model.init.metric - title: - x: data.sample.train_size - xlabel: Number of Training Samples - y: predict_time - ylabel: Prediction Time (s) - y_scale: linear - hue_order: - - Gzip - - Pickle - - BZ2 - - Zstd - - Lzma - - Levenshtein - - Ratio - - Hamming - - Jaro - - Jaro-Winkler - - SeqRatio - errorbar: se - err_style: bars - xlim: - - 10 - - 500 - legend: - title: Metrics - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - outs: - - path: ddos/plots/metric_vs_accuracy.pdf - hash: md5 - md5: bca86297bef41787bb36fd06cfb8bf2f - size: 24684 - - path: ddos/plots/metric_vs_predict_time.pdf - hash: md5 - md5: 92e1f01777252a1e818620ca418d951f - size: 23249 - - path: ddos/plots/metric_vs_train_time.pdf - hash: md5 - md5: 4195de5934e58cbab9afedccd721c4af - size: 23136 - - path: ddos/plots/models_vs_accuracy.pdf - hash: md5 - md5: dabac7041fa81f072f70a2b317915777 - size: 22241 - - path: ddos/plots/models_vs_predict_time.pdf - hash: md5 - md5: 34e6604bea2a20e85c9464a722c12fd7 - size: 19837 - - path: ddos/plots/models_vs_train_time.pdf - hash: md5 - md5: 1ca29825abe607fd9b7c16ccde130580 - size: 19411 - - path: ddos/plots/symmetric_vs_metric.pdf - hash: md5 - md5: efcb40057243e307c1302cad19a711ef - size: 22228 - - path: ddos/plots/symmetric_vs_metric_train_time.pdf - hash: md5 - md5: 14bc1aa22843b3899c8653b943ef45bd - size: 22116 - condense@truthseeker-gzip_logistic: - cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker - data.sample.test_size=100 model_name=gzip_logistic model=best_gzip_logistic_truthseeker - hydra.sweeper.study_name=condense_gzip_logistic_truthseeker hydra.sweeper.n_trials=128 - hydra.sweeper.n_jobs=8 hydra.sweep.dir=truthseeker/logs/condense/gzip_logistic/ - hydra.callbacks.study_dump.output_file=truthseeker/logs/gzip_logistic/study.csv - model.init.m='tag(log, interval(.01, .1))' +model.init.sampling_method=medoid,sum,svc,random,hardness,nearmiss,knn - files.directory=truthseeker files.reports=reports/condense/gzip_logistic/ hydra.launcher.n_jobs=16 - --config-name condense --multirun - deps: - - path: conf/model/best_gzip_logistic_truthseeker.yaml - hash: md5 - md5: 448e12c542f48c074057e9374743d61e - size: 326 - - path: truthseeker/logs/method/ - hash: md5 - md5: 6f6693db2bb9520dc7956f0d0c003e23.dir - size: 116543 - nfiles: 44 - params: - conf/condense.yaml: - hydra: - run: - dir: ${dataset}/logs/condense/ - sweep: - dir: ??? - subdir: ${hydra.job.num} - callbacks: - study_dump: - _target_: database.OptunaStudyDumpCallback - storage: ${hydra.sweeper.storage} - study_name: ${hydra.sweeper.study_name} - directions: ${direction} - metric_names: ${optimizers} - output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv - sweeper: - sampler: - _target_: optuna.samplers.TPESampler - seed: ??? - _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name} - storage: sqlite:///optuna.db - n_jobs: 1 - n_trials: 2 - direction: ${direction} - params: - ++data.sample.train_size: 1000 - ++data.sample.random_state: int(interval(10000, 20000)) - model.init.m: tag(log, interval(.01, .1)) - +model.init.sampling_method: medoid,sum,svc,random,hardness,nearmiss,knn - launcher: - _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher - n_jobs: 8 - prefer: processes - verbose: 1 - timeout: - pre_dispatch: ${hydra.sweeper.n_jobs} - batch_size: auto - temp_folder: /tmp/deckard - max_nbytes: 100000 - mmap_mode: r - outs: - - path: truthseeker/logs/condense/gzip_logistic/ - hash: md5 - md5: 79d74a0dfe0486ada3f03b24c68973dc.dir - size: 1576129 - nfiles: 513 - - path: truthseeker/reports/condense/gzip_logistic/ - hash: md5 - md5: 3de3011b1d96e4990111f5b1601e3b9d.dir - size: 400559 - nfiles: 343 - condense@ddos-gzip_knn: - cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.test_size=100 - model_name=gzip_knn model=best_gzip_knn_ddos hydra.sweeper.study_name=condense_gzip_knn_ddos - hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 hydra.sweep.dir=ddos/logs/condense/gzip_knn/ - hydra.callbacks.study_dump.output_file=ddos/logs/gzip_knn/study.csv model.init.m='tag(log, - interval(.01, .1))' +model.init.sampling_method=medoid,sum,svc,random,hardness,nearmiss,knn - files.directory=ddos files.reports=reports/condense/gzip_knn/ hydra.launcher.n_jobs=16 - --config-name condense --multirun - deps: - - path: conf/model/best_gzip_knn_ddos.yaml - hash: md5 - md5: 74721f3e7ab6096e246c486d6080e1ab - size: 259 - - path: ddos/logs/method/ - hash: md5 - md5: 7128c67930147170f54fb89880528199.dir - size: 120518 - nfiles: 48 - params: - conf/condense.yaml: - hydra: - run: - dir: ${dataset}/logs/condense/ - sweep: - dir: ??? - subdir: ${hydra.job.num} - callbacks: - study_dump: - _target_: database.OptunaStudyDumpCallback - storage: ${hydra.sweeper.storage} - study_name: ${hydra.sweeper.study_name} - directions: ${direction} - metric_names: ${optimizers} - output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv - sweeper: - sampler: - _target_: optuna.samplers.TPESampler - seed: ??? - _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name} - storage: sqlite:///optuna.db - n_jobs: 1 - n_trials: 2 - direction: ${direction} - params: - ++data.sample.train_size: 1000 - ++data.sample.random_state: int(interval(10000, 20000)) - model.init.m: tag(log, interval(.01, .1)) - +model.init.sampling_method: medoid,sum,svc,random,hardness,nearmiss,knn - launcher: - _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher - n_jobs: 8 - prefer: processes - verbose: 1 - timeout: - pre_dispatch: ${hydra.sweeper.n_jobs} - batch_size: auto - temp_folder: /tmp/deckard - max_nbytes: 100000 - mmap_mode: r - outs: - - path: ddos/logs/condense/gzip_knn/ - hash: md5 - md5: a2dc5aef876897f53c4076e4012b678a.dir - size: 1542474 - nfiles: 513 - - path: ddos/reports/condense/gzip_knn/ - hash: md5 - md5: 781709e87f2e740f6a0f4e914ee9754f.dir - size: 340848 - nfiles: 379 - condense@ddos-gzip_logistic: - cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.test_size=100 - model_name=gzip_logistic model=best_gzip_logistic_ddos hydra.sweeper.study_name=condense_gzip_logistic_ddos - hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 hydra.sweep.dir=ddos/logs/condense/gzip_logistic/ - hydra.callbacks.study_dump.output_file=ddos/logs/gzip_logistic/study.csv model.init.m='tag(log, - interval(.01, .1))' +model.init.sampling_method=medoid,sum,svc,random,hardness,nearmiss,knn - files.directory=ddos files.reports=reports/condense/gzip_logistic/ hydra.launcher.n_jobs=16 - --config-name condense --multirun - deps: - - path: conf/model/best_gzip_logistic_ddos.yaml - hash: md5 - md5: 9507b28fa5a18b501fe9d80ec33bed1c - size: 334 - - path: ddos/logs/method/ - hash: md5 - md5: 7128c67930147170f54fb89880528199.dir - size: 120518 - nfiles: 48 - params: - conf/condense.yaml: - hydra: - run: - dir: ${dataset}/logs/condense/ - sweep: - dir: ??? - subdir: ${hydra.job.num} - callbacks: - study_dump: - _target_: database.OptunaStudyDumpCallback - storage: ${hydra.sweeper.storage} - study_name: ${hydra.sweeper.study_name} - directions: ${direction} - metric_names: ${optimizers} - output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv - sweeper: - sampler: - _target_: optuna.samplers.TPESampler - seed: ??? - _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name} - storage: sqlite:///optuna.db - n_jobs: 1 - n_trials: 2 - direction: ${direction} - params: - ++data.sample.train_size: 1000 - ++data.sample.random_state: int(interval(10000, 20000)) - model.init.m: tag(log, interval(.01, .1)) - +model.init.sampling_method: medoid,sum,svc,random,hardness,nearmiss,knn - launcher: - _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher - n_jobs: 8 - prefer: processes - verbose: 1 - timeout: - pre_dispatch: ${hydra.sweeper.n_jobs} - batch_size: auto - temp_folder: /tmp/deckard - max_nbytes: 100000 - mmap_mode: r - outs: - - path: ddos/logs/condense/gzip_logistic/ - hash: md5 - md5: 4f8f846516837f0e7cd63c8911aff99a.dir - size: 1623568 - nfiles: 513 - - path: ddos/reports/condense/gzip_logistic/ - hash: md5 - md5: 051b71717b4a7986a1965ebadf448838.dir - size: 350870 - nfiles: 384 - condense@kdd_nsl-gzip_knn: - cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl - data.sample.test_size=100 model_name=gzip_knn model=best_gzip_knn_kdd_nsl hydra.sweeper.study_name=condense_gzip_knn_kdd_nsl - hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 hydra.sweep.dir=kdd_nsl/logs/condense/gzip_knn/ - hydra.callbacks.study_dump.output_file=kdd_nsl/logs/gzip_knn/study.csv model.init.m='tag(log, - interval(.01, .1))' +model.init.sampling_method=medoid,sum,svc,random,hardness,nearmiss,knn - files.directory=kdd_nsl files.reports=reports/condense/gzip_knn/ hydra.launcher.n_jobs=16 - --config-name condense --multirun - deps: - - path: conf/model/best_gzip_knn_kdd_nsl.yaml - hash: md5 - md5: 2697918626643d0136286367b83ee6b9 - size: 258 - - path: kdd_nsl/logs/method/ - hash: md5 - md5: de8764bbb2daa13261f3f5d1dff27a30.dir - size: 79348 - nfiles: 28 - params: - conf/condense.yaml: - hydra: - run: - dir: ${dataset}/logs/condense/ - sweep: - dir: ??? - subdir: ${hydra.job.num} - callbacks: - study_dump: - _target_: database.OptunaStudyDumpCallback - storage: ${hydra.sweeper.storage} - study_name: ${hydra.sweeper.study_name} - directions: ${direction} - metric_names: ${optimizers} - output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv - sweeper: - sampler: - _target_: optuna.samplers.TPESampler - seed: ??? - _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name} - storage: sqlite:///optuna.db - n_jobs: 1 - n_trials: 2 - direction: ${direction} - params: - ++data.sample.train_size: 1000 - ++data.sample.random_state: int(interval(10000, 20000)) - model.init.m: tag(log, interval(.01, .1)) - +model.init.sampling_method: medoid,sum,svc,random,hardness,nearmiss,knn - launcher: - _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher - n_jobs: 8 - prefer: processes - verbose: 1 - timeout: - pre_dispatch: ${hydra.sweeper.n_jobs} - batch_size: auto - temp_folder: /tmp/deckard - max_nbytes: 100000 - mmap_mode: r - outs: - - path: kdd_nsl/logs/condense/gzip_knn/ - hash: md5 - md5: 7d53f3534ceb486e6601d344562cfb32.dir - size: 1564530 - nfiles: 513 - - path: kdd_nsl/reports/condense/gzip_knn/ - hash: md5 - md5: 7e5a283215281be3ee4189ebd5a6e3f1.dir - size: 342924 - nfiles: 384 - parse_params: - cmd: python -m deckard.layers.parse - deps: - - path: conf/data/default.yaml - hash: md5 - md5: 86639d6672cfd9529dda3e2ae4036c01 - size: 22 - - path: conf/default.yaml - hash: md5 - md5: a0a533f84a7ffce197e0db5439219faf - size: 1504 - - path: conf/files/default.yaml - hash: md5 - md5: 7a2df5f8b98699376c3fb4da05d70dea - size: 306 - - path: conf/model/default.yaml - hash: md5 - md5: 39dc7512b1d19fea54550b080d880153 - size: 27 - - path: conf/scorers/default.yaml - hash: md5 - md5: d8d00e7d284ea68b1244743dfef8f00c - size: 280 - outs: - - path: params.yaml - hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 - test_each_metric@gzip-gzip_knn-kdd_nsl-20: - cmd: 'python -m deckard.layers.optimise stage=test_each_metric files.name=gzip_knn/gzip/20 - files.directory=kdd_nsl data=kdd_nsl data.sample.train_size=20 dataset=kdd_nsl - model=gzip_knn model_name=gzip_knn model.init.metric=gzip model.init.m=-1 hydra.run.dir=kdd_nsl/logs/test_each_metric/gzip_knn/gzip/20 - ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 973ed0af499fa6561450dcb64d7984e3 - size: 485 - - path: params.yaml - hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - distance_matrix: kdd_nsl/model/gzip/100-100/0.npz - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: kdd_nsl/logs/test_each_metric/gzip_knn/gzip/20 - hash: md5 - md5: 13a41c1dee24226c155c7cd919d7be72.dir - size: 7896 - nfiles: 4 - - path: kdd_nsl/reports/test_each_metric/gzip_knn/gzip/20/score_dict.json - hash: md5 - md5: 5d8bf090bc8e34df8ed01766adfca5eb - size: 26 - test_each_metric@zstd-gzip_knn-kdd_nsl-20: - cmd: 'python -m deckard.layers.optimise stage=test_each_metric files.name=gzip_knn/zstd/20 - files.directory=kdd_nsl data=kdd_nsl data.sample.train_size=20 dataset=kdd_nsl - model=gzip_knn model_name=gzip_knn model.init.metric=zstd model.init.m=-1 hydra.run.dir=kdd_nsl/logs/test_each_metric/gzip_knn/zstd/20 - ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 973ed0af499fa6561450dcb64d7984e3 - size: 485 - - path: params.yaml - hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - distance_matrix: kdd_nsl/model/gzip/100-100/0.npz - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: kdd_nsl/logs/test_each_metric/gzip_knn/zstd/20 - hash: md5 - md5: 2a9de1bf8f13a51810454b0f8e542813.dir - size: 7896 - nfiles: 4 - - path: kdd_nsl/reports/test_each_metric/gzip_knn/zstd/20/score_dict.json - hash: md5 - md5: 5d8bf090bc8e34df8ed01766adfca5eb - size: 26 - test_each_metric@pkl-gzip_knn-kdd_nsl-20: - cmd: 'python -m deckard.layers.optimise stage=test_each_metric files.name=gzip_knn/pkl/20 - files.directory=kdd_nsl data=kdd_nsl data.sample.train_size=20 dataset=kdd_nsl - model=gzip_knn model_name=gzip_knn model.init.metric=pkl model.init.m=-1 hydra.run.dir=kdd_nsl/logs/test_each_metric/gzip_knn/pkl/20 - ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 973ed0af499fa6561450dcb64d7984e3 - size: 485 - - path: params.yaml - hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - distance_matrix: kdd_nsl/model/gzip/100-100/0.npz - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: kdd_nsl/logs/test_each_metric/gzip_knn/pkl/20 - hash: md5 - md5: 547875056b9e7537bb6b547f9a12d663.dir - size: 7881 - nfiles: 4 - - path: kdd_nsl/reports/test_each_metric/gzip_knn/pkl/20/score_dict.json - hash: md5 - md5: 5d8bf090bc8e34df8ed01766adfca5eb - size: 26 - test_each_metric@bz2-gzip_knn-kdd_nsl-20: - cmd: 'python -m deckard.layers.optimise stage=test_each_metric files.name=gzip_knn/bz2/20 - files.directory=kdd_nsl data=kdd_nsl data.sample.train_size=20 dataset=kdd_nsl - model=gzip_knn model_name=gzip_knn model.init.metric=bz2 model.init.m=-1 hydra.run.dir=kdd_nsl/logs/test_each_metric/gzip_knn/bz2/20 - ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 973ed0af499fa6561450dcb64d7984e3 - size: 485 - - path: params.yaml - hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - distance_matrix: kdd_nsl/model/gzip/100-100/0.npz - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: kdd_nsl/logs/test_each_metric/gzip_knn/bz2/20 - hash: md5 - md5: 78e71b1316246e3eb1d2204f065fe315.dir - size: 7881 - nfiles: 4 - - path: kdd_nsl/reports/test_each_metric/gzip_knn/bz2/20/score_dict.json - hash: md5 - md5: 5d8bf090bc8e34df8ed01766adfca5eb - size: 26 - test_each_metric@lzma-gzip_knn-kdd_nsl-20: - cmd: 'python -m deckard.layers.optimise stage=test_each_metric files.name=gzip_knn/lzma/20 - files.directory=kdd_nsl data=kdd_nsl data.sample.train_size=20 dataset=kdd_nsl - model=gzip_knn model_name=gzip_knn model.init.metric=lzma model.init.m=-1 hydra.run.dir=kdd_nsl/logs/test_each_metric/gzip_knn/lzma/20 - ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 973ed0af499fa6561450dcb64d7984e3 - size: 485 - - path: params.yaml - hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - distance_matrix: kdd_nsl/model/gzip/100-100/0.npz - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss + conf/plots.yaml: + cat_plot: + - file: symmetric_vs_compressor_metric.pdf + x: Metric + y: accuracy + hue: Symmetric + errorbar: se + kind: boxen + titles: ' ' + xlabels: Compressor + ylabels: Accuracy + legend_title: Metrics + order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + hue_order: + - Asymmetric + - Symmetric + rotation: 90 + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: symmetric_vs_string_metric.pdf + x: Metric + y: accuracy + hue: Symmetric + errorbar: se + kind: boxen + titles: ' ' + xlabels: Compressors + ylabels: Accuracy + legend_title: ' ' + order: + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + hue_order: + - Asymmetric + - Symmetric + rotation: 90 + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: symmetric_vs_metric.pdf + x: Metric + y: accuracy + hue: Symmetric + errorbar: se + kind: boxen + titles: ' ' + xlabels: Compressors + ylabels: Accuracy + legend_title: ' ' + order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + hue_order: + - Asymmetric + - Symmetric + rotation: 90 + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: symmetric_vs_metric_train_time.pdf + x: Metric + y: train_time + hue: Symmetric + errorbar: se + kind: boxen + titles: + xlabels: Metrics + ylabels: Training Time (s) + legend_title: Metrics + order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + hue_order: + - Asymmetric + - Symmetric + rotation: 90 + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + y_scale: linear + - file: symmetric_vs_string_metric_train_time.pdf + x: Metric + y: train_time + hue: Symmetric + errorbar: se + kind: boxen + titles: + xlabels: Compressors + ylabels: Training Time (s) + legend_title: String Metrics + order: + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + hue_order: + - Asymmetric + - Symmetric + rotation: 90 + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: symmetric_vs_compressor_metric_train_time.pdf + x: Metric + y: train_time + hue: Symmetric + errorbar: se + kind: boxen + titles: + xlabels: Compressors + ylabels: Training Time (s) + legend_title: Metrics + order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + hue_order: + - Asymmetric + - Symmetric + rotation: 90 + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + line_plot: + - file: compressor_metric_vs_accuracy.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: accuracy + ylabel: Accuracy + hue_order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + errorbar: se + err_style: bars + xlim: + - 10 + - 500 + legend: + title: Metrics + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: metric_vs_accuracy.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: accuracy + ylabel: Accuracy + hue_order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + errorbar: se + err_style: bars + xlim: + - 10 + - 500 + legend: + title: Metrics + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: string_metric_vs_accuracy.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: accuracy + ylabel: Accuracy + hue_order: + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + errorbar: se + err_style: bars + xlim: + - 10 + - 500 + legend: + title: Metrics + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: metric_vs_train_time.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: train_time + ylabel: Training Time (s) + y_scale: linear + hue_order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + errorbar: se + err_style: bars + xlim: + - 10 + - 500 + legend: + title: Metrics + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: compressor_metric_vs_train_time.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: train_time + ylabel: Training Time (s) + y_scale: linear + hue_order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + errorbar: se + err_style: bars + xlim: + - 10 + - 500 + legend: + title: Metrics + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: string_metric_vs_train_time.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: train_time + ylabel: Training Time (s) + y_scale: linear + hue_order: + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + errorbar: se + err_style: bars + xlim: + - 10 + - 500 + legend: + title: Metrics + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: compressor_metric_vs_predict_time.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: predict_time + ylabel: Prediction Time (s) + y_scale: linear + hue_order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + - file: metric_vs_predict_time.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: predict_time + ylabel: Prediction Time (s) + y_scale: linear + hue_order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + - file: string_metric_vs_predict_time.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: predict_time + ylabel: Prediction Time (s) + y_scale: linear + hue_order: + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + errorbar: se + err_style: bars + xlim: + - 10 + - 500 + legend: + title: Metrics + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 outs: - - path: kdd_nsl/logs/test_each_metric/gzip_knn/lzma/20 + - path: sms_spam/plots/compressor_metric_vs_accuracy.pdf hash: md5 - md5: 181e750b0b50a3ee26430453289ebff3.dir - size: 7896 - nfiles: 4 - - path: kdd_nsl/reports/test_each_metric/gzip_knn/lzma/20/score_dict.json + md5: 5dffa574fee935f98ce74c5cd6058666 + size: 21187 + - path: sms_spam/plots/metric_vs_accuracy.pdf hash: md5 - md5: 5d8bf090bc8e34df8ed01766adfca5eb - size: 26 - test_each_metric@levenshtein-gzip_knn-kdd_nsl-20: - cmd: 'python -m deckard.layers.optimise stage=test_each_metric files.name=gzip_knn/levenshtein/20 - files.directory=kdd_nsl data=kdd_nsl data.sample.train_size=20 dataset=kdd_nsl - model=gzip_knn model_name=gzip_knn model.init.metric=levenshtein model.init.m=-1 - hydra.run.dir=kdd_nsl/logs/test_each_metric/gzip_knn/levenshtein/20 ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json + md5: b9f73f48c8c024650db938dd804cfb05 + size: 24114 + - path: sms_spam/plots/string_metric_vs_accuracy.pdf hash: md5 - md5: 973ed0af499fa6561450dcb64d7984e3 - size: 485 - - path: params.yaml + md5: 864db5ed7b357958078bdea3ba0bad42 + size: 20486 + - path: sms_spam/plots/symmetric_vs_compressor_metric.pdf hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - distance_matrix: kdd_nsl/model/gzip/100-100/0.npz - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: kdd_nsl/logs/test_each_metric/gzip_knn/levenshtein/20 + md5: 501f5407e6906966dcb8b0c277d44dc3 + size: 21377 + - path: sms_spam/plots/symmetric_vs_metric.pdf hash: md5 - md5: 7f5aa2c40f749f116843ad495f377c69.dir - size: 7980 - nfiles: 4 - - path: kdd_nsl/reports/test_each_metric/gzip_knn/levenshtein/20/score_dict.json + md5: 060ab65502a83ee367156e0414905962 + size: 31387 + - path: sms_spam/plots/symmetric_vs_metric_train_time.pdf hash: md5 - md5: 5d8bf090bc8e34df8ed01766adfca5eb - size: 26 - test_each_metric@ratio-gzip_knn-kdd_nsl-20: - cmd: 'python -m deckard.layers.optimise stage=test_each_metric files.name=gzip_knn/ratio/20 - files.directory=kdd_nsl data=kdd_nsl data.sample.train_size=20 dataset=kdd_nsl - model=gzip_knn model_name=gzip_knn model.init.metric=ratio model.init.m=-1 - hydra.run.dir=kdd_nsl/logs/test_each_metric/gzip_knn/ratio/20 ++raise_exception=True ' + md5: 18653a51a07e2fc5598620c2cf268fc8 + size: 31725 + - path: sms_spam/plots/symmetric_vs_string_metric.pdf + hash: md5 + md5: fbbd49babe5bee5e8b16ac52bb01ffaa + size: 23669 + - path: sms_spam/plots/symmetric_vs_string_metric_train_time.pdf + hash: md5 + md5: 9b25b9f84afa0f43c3276b7e8f1866d3 + size: 24712 + plot_condense@sms_spam: + cmd: python -m deckard.layers.plots --path sms_spam/plots/ --file sms_spam/plots/condensed_merged.csv -c + conf/condensed_plots.yaml deps: - - path: kdd_nsl/reports/train/default/score_dict.json + - path: conf/condensed_plots.yaml hash: md5 - md5: 973ed0af499fa6561450dcb64d7984e3 - size: 485 - - path: params.yaml + md5: af17fa58e7c01bcbb396ab08de5b78d5 + size: 1915 + - path: sms_spam/plots/condensed_merged.csv hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 + md5: aff0ab5439e406220d4c0c95d7032f71 + size: 4293513 params: - params.yaml: - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - distance_matrix: kdd_nsl/model/gzip/100-100/0.npz - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss + conf/condensed_plots.yaml: + cat_plot: + - file: condensing_method_vs_accuracy.pdf + digitize: Condensing Ratio + x: Condensing Method + hue: Condensing Ratio + y: accuracy + y_scale: linear + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + kind: boxen + col: Model + rotation: 45 + order: + - Random + - Medoid + - Sum + - SVC + - Hardness + - NearMiss + - KNN + xticklabels: + - Random + - Medoid + - Sum + - SVC + - Hardness + - NearMiss + - KNN + xlabels: Condensing Method + ylabels: Accuracy + legend_title: Sample Ratio + - file: condensing_method_vs_train_time.pdf + x: Condensing Method + hue: Condensing Ratio + digitize: Condensing Ratio + y: train_time + y_scale: log + kind: boxen + col: Model + rotation: 45 + order: + - Random + - Medoid + - Sum + - SVC + - Hardness + - NearMiss + - KNN + xticklabels: + - Random + - Medoid + - Sum + - SVC + - Hardness + - NearMiss + - k-NN + xlabels: Condensing Method + ylabels: Training Time + legend_title: Sample Ratio + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: condensing_method_vs_predict_time.pdf + x: Condensing Method + hue: Condensing Ratio + digitize: Condensing Ratio + y: predict_time + y_scale: log + col: Model + rotation: 45 + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + kind: boxen + order: + - Random + - Medoid + - Sum + - SVC + - Hardness + - NearMiss + - KNN + xticklabels: + - Random + - Medoid + - Sum + - SVC + - Hardness + - NearMiss + - k-NN + xlabels: Condensing Method + ylabels: Prediction Time + legend_title: Sample Ratio + outs: + - path: sms_spam/plots/condensing_method_vs_accuracy.pdf + hash: md5 + md5: 367e877eaa1c765d35ab91cb242684ea + size: 77057 + - path: sms_spam/plots/condensing_method_vs_predict_time.pdf + hash: md5 + md5: d2376488f2a0c040274c3d2036733e00 + size: 79014 + - path: sms_spam/plots/condensing_method_vs_train_time.pdf + hash: md5 + md5: cc97909ea8a9d7df69647a6705d624b4 + size: 78699 + copy@sms_spam: + cmd: rm -rf ~/Gzip-KNN/figs/sms_spam/ && mkdir -p ~/Gzip-KNN/figs/sms_spam/ && + cp -r sms_spam/plots/* ~/Gzip-KNN/figs/sms_spam/ && rm -rf ~/Gzip-KNN/figs/sms_spam/.gitignore + deps: + - path: sms_spam/plots/ + hash: md5 + md5: ee777ff721b32fb8529b6b3d4cf0241f.dir + size: 14711161 + nfiles: 29 + clean@kdd_nsl-condense/knn: + cmd: python -m deckard.layers.clean_data -i kdd_nsl/reports/condense/knn.csv + -o kdd_nsl/plots/clean/condense/knn.csv -c conf/clean.yaml + deps: + - path: kdd_nsl/reports/condense/knn.csv + hash: md5 + md5: 36a67671da89d39ab7d0c45296693749 + size: 2482710 + params: + conf/clean.yaml: + drop_values: + accuracy: 0.0 + predict_time: 1.0 + replace: + model.init.metric: + jaro: Jaro + _winkler: -Winkler + levenshtein: Levenshtein + ncd: NCD + ratio: Ratio + seqRatio: SeqRatio + hamming: Hamming + gzip: GZIP + pkl: Pickle + bz2: BZ2 + zstd: ZSTD + lzma: LZMA + model_name: + GzipSVC: k-SVC + GzipLogisticRegressor: k-Logistic + GzipKNN: k-KNN + model.init.symmetric: + true: Symmetric + false: Asymmetric + model.init.sampling_method: + random: Random + medoid: Medoid + sum: Sum + svc: SVC + hardness: Hardness + nearmiss: NearMiss + knn: KNN + dataset: + ddos: DDoS + sms_spam: SMS Spam + kdd_nsl: KDD NSL + truthseeker: Truthseeker + model.init.m: + -1: 1 + replace_cols: + dataset: Dataset + model.init.metric: Metric + model.init.symmetric: Symmetric + model.init.sampling_method: Condensing Method + model.init.m: Condensing Ratio + model_name: Model outs: - - path: kdd_nsl/logs/test_each_metric/gzip_knn/ratio/20 - hash: md5 - md5: 4a94942040f87457812b1bf29e530c34.dir - size: 7890 - nfiles: 4 - - path: kdd_nsl/reports/test_each_metric/gzip_knn/ratio/20/score_dict.json + - path: kdd_nsl/plots/clean/condense/knn.csv hash: md5 - md5: 5d8bf090bc8e34df8ed01766adfca5eb - size: 26 - test_each_metric@hamming-gzip_knn-kdd_nsl-20: - cmd: 'python -m deckard.layers.optimise stage=test_each_metric files.name=gzip_knn/hamming/20 - files.directory=kdd_nsl data=kdd_nsl data.sample.train_size=20 dataset=kdd_nsl - model=gzip_knn model_name=gzip_knn model.init.metric=hamming model.init.m=-1 - hydra.run.dir=kdd_nsl/logs/test_each_metric/gzip_knn/hamming/20 ++raise_exception=True ' + md5: 7faf7190b1f806dbc3eb6477cedc7ee5 + size: 1507783 + clean@kdd_nsl-condense/logistic: + cmd: python -m deckard.layers.clean_data -i kdd_nsl/reports/condense/logistic.csv + -o kdd_nsl/plots/clean/condense/logistic.csv -c conf/clean.yaml deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 973ed0af499fa6561450dcb64d7984e3 - size: 485 - - path: params.yaml + - path: kdd_nsl/reports/condense/logistic.csv hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 + md5: 1325ef7a8bebf6d77e0793ce344e95cc + size: 2886969 params: - params.yaml: - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - distance_matrix: kdd_nsl/model/gzip/100-100/0.npz - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss + conf/clean.yaml: + drop_values: + accuracy: 0.0 + predict_time: 1.0 + replace: + model.init.metric: + jaro: Jaro + _winkler: -Winkler + levenshtein: Levenshtein + ncd: NCD + ratio: Ratio + seqRatio: SeqRatio + hamming: Hamming + gzip: GZIP + pkl: Pickle + bz2: BZ2 + zstd: ZSTD + lzma: LZMA + model_name: + GzipSVC: k-SVC + GzipLogisticRegressor: k-Logistic + GzipKNN: k-KNN + model.init.symmetric: + true: Symmetric + false: Asymmetric + model.init.sampling_method: + random: Random + medoid: Medoid + sum: Sum + svc: SVC + hardness: Hardness + nearmiss: NearMiss + knn: KNN + dataset: + ddos: DDoS + sms_spam: SMS Spam + kdd_nsl: KDD NSL + truthseeker: Truthseeker + model.init.m: + -1: 1 + replace_cols: + dataset: Dataset + model.init.metric: Metric + model.init.symmetric: Symmetric + model.init.sampling_method: Condensing Method + model.init.m: Condensing Ratio + model_name: Model outs: - - path: kdd_nsl/logs/test_each_metric/gzip_knn/hamming/20 + - path: kdd_nsl/plots/clean/condense/logistic.csv hash: md5 - md5: 0f632830e12eebb966911772f2835aa9.dir - size: 7920 - nfiles: 4 - - path: kdd_nsl/reports/test_each_metric/gzip_knn/hamming/20/score_dict.json + md5: 8baf78c24cf0a48103fe3f5c3b7ea340 + size: 2014871 + clean@kdd_nsl-condense/svc: + cmd: python -m deckard.layers.clean_data -i kdd_nsl/reports/condense/svc.csv + -o kdd_nsl/plots/clean/condense/svc.csv -c conf/clean.yaml + deps: + - path: kdd_nsl/reports/condense/svc.csv hash: md5 - md5: 5d8bf090bc8e34df8ed01766adfca5eb - size: 26 - test_each_dataset@gzip_knn-kdd_nsl: - cmd: 'python -m deckard.layers.optimise stage=test_each_dataset files.name=gzip_knn - data.sample.train_size=100 files.directory=kdd_nsl data=kdd_nsl dataset=kdd_nsl - model_name=gzip_knn model=gzip_knn hydra.run.dir=kdd_nsl/logs/test_each_dataset/gzip_knn - ++raise_exception=True ' + md5: d825a5d325742621f7cfaf2849ddf79f + size: 2731160 + params: + conf/clean.yaml: + drop_values: + accuracy: 0.0 + predict_time: 1.0 + replace: + model.init.metric: + jaro: Jaro + _winkler: -Winkler + levenshtein: Levenshtein + ncd: NCD + ratio: Ratio + seqRatio: SeqRatio + hamming: Hamming + gzip: GZIP + pkl: Pickle + bz2: BZ2 + zstd: ZSTD + lzma: LZMA + model_name: + GzipSVC: k-SVC + GzipLogisticRegressor: k-Logistic + GzipKNN: k-KNN + model.init.symmetric: + true: Symmetric + false: Asymmetric + model.init.sampling_method: + random: Random + medoid: Medoid + sum: Sum + svc: SVC + hardness: Hardness + nearmiss: NearMiss + knn: KNN + dataset: + ddos: DDoS + sms_spam: SMS Spam + kdd_nsl: KDD NSL + truthseeker: Truthseeker + model.init.m: + -1: 1 + replace_cols: + dataset: Dataset + model.init.metric: Metric + model.init.symmetric: Symmetric + model.init.sampling_method: Condensing Method + model.init.m: Condensing Ratio + model_name: Model + outs: + - path: kdd_nsl/plots/clean/condense/svc.csv + hash: md5 + md5: c0b256435cf12d7637b92514bf852c4c + size: 2007338 + merge_condense@kdd_nsl: + cmd: python merge.py --big_dir kdd_nsl/plots/ --data_file clean/condense/knn.csv + --little_dir_data_file clean/condense/logistic.csv clean/condense/svc.csv --output_folder + kdd_nsl/plots/ --output_file condensed_merged.csv deps: - - path: kdd_nsl/reports/train/default/score_dict.json + - path: kdd_nsl/plots/clean/condense/knn.csv hash: md5 - md5: 41e95614d524a857c0260b13ce77202b - size: 488 - - path: params.yaml + md5: 7faf7190b1f806dbc3eb6477cedc7ee5 + size: 1507783 + - path: kdd_nsl/plots/clean/condense/logistic.csv hash: md5 - md5: 9a178db02b5ad8f990c7a557790a36c7 - size: 1381 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss + md5: 8baf78c24cf0a48103fe3f5c3b7ea340 + size: 2014871 + - path: kdd_nsl/plots/clean/condense/svc.csv + hash: md5 + md5: c0b256435cf12d7637b92514bf852c4c + size: 2007338 outs: - - path: kdd_nsl/logs/test_each_dataset/gzip_knn + - path: kdd_nsl/plots/condensed_merged.csv hash: md5 - md5: 955370e62c64341f4410f3f46f6d84fd.dir - size: 7263 - nfiles: 4 - - path: kdd_nsl/reports/test_each_dataset/gzip_knn/score_dict.json + md5: 3ce3f32f881b93574c5e475e5617847e + size: 5582885 + clean@kdd_nsl-gzip_knn: + cmd: python -m deckard.layers.clean_data -i kdd_nsl/reports/gzip_knn.csv -o kdd_nsl/plots/clean/gzip_knn.csv + -c conf/clean.yaml + deps: + - path: kdd_nsl/reports/gzip_knn.csv hash: md5 - md5: 5d8bf090bc8e34df8ed01766adfca5eb - size: 26 - test_each_dataset@gzip_knn-truthseeker: - cmd: 'python -m deckard.layers.optimise stage=test_each_dataset files.name=gzip_knn - data.sample.train_size=100 files.directory=truthseeker data=truthseeker dataset=truthseeker - model_name=gzip_knn model=gzip_knn hydra.run.dir=truthseeker/logs/test_each_dataset/gzip_knn - ++raise_exception=True ' + md5: 2e569940af77f7280eaa067077d75b0b + size: 1286094 + params: + conf/clean.yaml: + drop_values: + accuracy: 0.0 + predict_time: 1.0 + replace: + model.init.metric: + jaro: Jaro + _winkler: -Winkler + levenshtein: Levenshtein + ncd: NCD + ratio: Ratio + seqRatio: SeqRatio + hamming: Hamming + gzip: GZIP + pkl: Pickle + bz2: BZ2 + zstd: ZSTD + lzma: LZMA + model_name: + GzipSVC: k-SVC + GzipLogisticRegressor: k-Logistic + GzipKNN: k-KNN + model.init.symmetric: + true: Symmetric + false: Asymmetric + model.init.sampling_method: + random: Random + medoid: Medoid + sum: Sum + svc: SVC + hardness: Hardness + nearmiss: NearMiss + knn: KNN + dataset: + ddos: DDoS + sms_spam: SMS Spam + kdd_nsl: KDD NSL + truthseeker: Truthseeker + model.init.m: + -1: 1 + replace_cols: + dataset: Dataset + model.init.metric: Metric + model.init.symmetric: Symmetric + model.init.sampling_method: Condensing Method + model.init.m: Condensing Ratio + model_name: Model + outs: + - path: kdd_nsl/plots/clean/gzip_knn.csv + hash: md5 + md5: 24f521894702af73c82fd3b8b8ff27b1 + size: 715749 + clean@kdd_nsl-gzip_logistic: + cmd: python -m deckard.layers.clean_data -i kdd_nsl/reports/gzip_logistic.csv + -o kdd_nsl/plots/clean/gzip_logistic.csv -c conf/clean.yaml deps: - - path: kdd_nsl/reports/train/default/score_dict.json + - path: kdd_nsl/reports/gzip_logistic.csv + hash: md5 + md5: a5d9359b42a7d7b06cdc0d9438bfa836 + size: 1406330 + params: + conf/clean.yaml: + drop_values: + accuracy: 0.0 + predict_time: 1.0 + replace: + model.init.metric: + jaro: Jaro + _winkler: -Winkler + levenshtein: Levenshtein + ncd: NCD + ratio: Ratio + seqRatio: SeqRatio + hamming: Hamming + gzip: GZIP + pkl: Pickle + bz2: BZ2 + zstd: ZSTD + lzma: LZMA + model_name: + GzipSVC: k-SVC + GzipLogisticRegressor: k-Logistic + GzipKNN: k-KNN + model.init.symmetric: + true: Symmetric + false: Asymmetric + model.init.sampling_method: + random: Random + medoid: Medoid + sum: Sum + svc: SVC + hardness: Hardness + nearmiss: NearMiss + knn: KNN + dataset: + ddos: DDoS + sms_spam: SMS Spam + kdd_nsl: KDD NSL + truthseeker: Truthseeker + model.init.m: + -1: 1 + replace_cols: + dataset: Dataset + model.init.metric: Metric + model.init.symmetric: Symmetric + model.init.sampling_method: Condensing Method + model.init.m: Condensing Ratio + model_name: Model + outs: + - path: kdd_nsl/plots/clean/gzip_logistic.csv hash: md5 - md5: 41e95614d524a857c0260b13ce77202b - size: 488 - - path: params.yaml + md5: 2847de576a49e63aae2ae02937d39ce4 + size: 1056239 + clean@kdd_nsl-gzip_svc: + cmd: python -m deckard.layers.clean_data -i kdd_nsl/reports/gzip_svc.csv -o kdd_nsl/plots/clean/gzip_svc.csv + -c conf/clean.yaml + deps: + - path: kdd_nsl/reports/gzip_svc.csv hash: md5 - md5: 9a178db02b5ad8f990c7a557790a36c7 - size: 1381 + md5: db5b11d405596dfa38b7592ad89e4e4a + size: 1407185 params: - params.yaml: - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss + conf/clean.yaml: + drop_values: + accuracy: 0.0 + predict_time: 1.0 + replace: + model.init.metric: + jaro: Jaro + _winkler: -Winkler + levenshtein: Levenshtein + ncd: NCD + ratio: Ratio + seqRatio: SeqRatio + hamming: Hamming + gzip: GZIP + pkl: Pickle + bz2: BZ2 + zstd: ZSTD + lzma: LZMA + model_name: + GzipSVC: k-SVC + GzipLogisticRegressor: k-Logistic + GzipKNN: k-KNN + model.init.symmetric: + true: Symmetric + false: Asymmetric + model.init.sampling_method: + random: Random + medoid: Medoid + sum: Sum + svc: SVC + hardness: Hardness + nearmiss: NearMiss + knn: KNN + dataset: + ddos: DDoS + sms_spam: SMS Spam + kdd_nsl: KDD NSL + truthseeker: Truthseeker + model.init.m: + -1: 1 + replace_cols: + dataset: Dataset + model.init.metric: Metric + model.init.symmetric: Symmetric + model.init.sampling_method: Condensing Method + model.init.m: Condensing Ratio + model_name: Model outs: - - path: truthseeker/logs/test_each_dataset/gzip_knn - hash: md5 - md5: f8dd2e14f7e12daed6ebfd9a552d6c4e.dir - size: 7305 - nfiles: 4 - - path: truthseeker/reports/test_each_dataset/gzip_knn/score_dict.json + - path: kdd_nsl/plots/clean/gzip_svc.csv hash: md5 - md5: 5d8bf090bc8e34df8ed01766adfca5eb - size: 26 - test_each_dataset@ddos-gzip_knn: - cmd: 'python -m deckard.layers.optimise stage=train files.name=gzip_knn data.sample.train_size=100 - files.directory=ddos data=ddos dataset=ddos model_name=gzip_knn model=gzip_knn - hydra.run.dir=ddos/logs/train/gzip_knn ++raise_exception=True ' + md5: 9438c5a8752b7c4224ba94b8ee98dee5 + size: 1156562 + merge@kdd_nsl: + cmd: python merge.py --big_dir kdd_nsl/plots/ --data_file clean/gzip_knn.csv --little_dir_data_file + clean/gzip_logistic.csv clean/gzip_svc.csv --output_folder kdd_nsl/plots --output_file + merged.csv deps: - - path: kdd_nsl/reports/train/default/score_dict.json + - path: kdd_nsl/plots/clean/gzip_knn.csv hash: md5 - md5: 973ed0af499fa6561450dcb64d7984e3 - size: 485 - - path: params.yaml + md5: 24f521894702af73c82fd3b8b8ff27b1 + size: 715749 + - path: kdd_nsl/plots/clean/gzip_logistic.csv hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - distance_matrix: kdd_nsl/model/gzip/100-100/0.npz - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss + md5: 2847de576a49e63aae2ae02937d39ce4 + size: 1056239 + - path: kdd_nsl/plots/clean/gzip_svc.csv + hash: md5 + md5: 9438c5a8752b7c4224ba94b8ee98dee5 + size: 1156562 outs: - - path: ddos/logs/train/gzip_knn + - path: kdd_nsl/plots/merged.csv hash: md5 - md5: 3138594b2987a54b6196684bdd2fd2dc.dir - size: 8270 - nfiles: 4 - - path: ddos/reports/train/gzip_knn/score_dict.json - hash: md5 - md5: 50948425401e9655694b7bae24a4b24a - size: 282 - test_each_dataset@ddos-gzip_svc: - cmd: 'python -m deckard.layers.optimise stage=train files.name=gzip_svc data.sample.train_size=100 - files.directory=ddos data=ddos dataset=ddos model_name=gzip_svc model=gzip_svc - hydra.run.dir=ddos/logs/train/gzip_svc ++raise_exception=True ' + md5: e9aaa44e6ef176c174b296c31a6760f9 + size: 2956133 + plot@kdd_nsl: + cmd: python -m deckard.layers.plots --path kdd_nsl/plots/ --file kdd_nsl/plots/merged.csv -c + conf/plots.yaml deps: - - path: kdd_nsl/reports/train/default/score_dict.json + - path: conf/plots.yaml hash: md5 - md5: 973ed0af499fa6561450dcb64d7984e3 - size: 485 - - path: params.yaml + md5: 43e3ec0876b55c83f231615f7a904e33 + size: 7386 + - path: kdd_nsl/plots/merged.csv hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 + md5: e9aaa44e6ef176c174b296c31a6760f9 + size: 2956133 params: - params.yaml: - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - distance_matrix: kdd_nsl/model/gzip/100-100/0.npz - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss + conf/plots.yaml: + cat_plot: + - file: symmetric_vs_compressor_metric.pdf + x: Metric + y: accuracy + hue: Symmetric + errorbar: se + kind: boxen + titles: ' ' + xlabels: Compressor + ylabels: Accuracy + legend_title: Metrics + order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + hue_order: + - Asymmetric + - Symmetric + rotation: 90 + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: symmetric_vs_string_metric.pdf + x: Metric + y: accuracy + hue: Symmetric + errorbar: se + kind: boxen + titles: ' ' + xlabels: Compressors + ylabels: Accuracy + legend_title: ' ' + order: + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + hue_order: + - Asymmetric + - Symmetric + rotation: 90 + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: symmetric_vs_metric.pdf + x: Metric + y: accuracy + hue: Symmetric + errorbar: se + kind: boxen + titles: ' ' + xlabels: Compressors + ylabels: Accuracy + legend_title: ' ' + order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + hue_order: + - Asymmetric + - Symmetric + rotation: 90 + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: symmetric_vs_metric_train_time.pdf + x: Metric + y: train_time + hue: Symmetric + errorbar: se + kind: boxen + titles: + xlabels: Metrics + ylabels: Training Time (s) + legend_title: Metrics + order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + hue_order: + - Asymmetric + - Symmetric + rotation: 90 + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + y_scale: linear + - file: symmetric_vs_string_metric_train_time.pdf + x: Metric + y: train_time + hue: Symmetric + errorbar: se + kind: boxen + titles: + xlabels: Compressors + ylabels: Training Time (s) + legend_title: String Metrics + order: + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + hue_order: + - Asymmetric + - Symmetric + rotation: 90 + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: symmetric_vs_compressor_metric_train_time.pdf + x: Metric + y: train_time + hue: Symmetric + errorbar: se + kind: boxen + titles: + xlabels: Compressors + ylabels: Training Time (s) + legend_title: Metrics + order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + hue_order: + - Asymmetric + - Symmetric + rotation: 90 + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + line_plot: + - file: compressor_metric_vs_accuracy.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: accuracy + ylabel: Accuracy + hue_order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + errorbar: se + err_style: bars + xlim: + - 10 + - 500 + legend: + title: Metrics + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: metric_vs_accuracy.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: accuracy + ylabel: Accuracy + hue_order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + errorbar: se + err_style: bars + xlim: + - 10 + - 500 + legend: + title: Metrics + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: string_metric_vs_accuracy.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: accuracy + ylabel: Accuracy + hue_order: + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + errorbar: se + err_style: bars + xlim: + - 10 + - 500 + legend: + title: Metrics + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: metric_vs_train_time.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: train_time + ylabel: Training Time (s) + y_scale: linear + hue_order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + errorbar: se + err_style: bars + xlim: + - 10 + - 500 + legend: + title: Metrics + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: compressor_metric_vs_train_time.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: train_time + ylabel: Training Time (s) + y_scale: linear + hue_order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + errorbar: se + err_style: bars + xlim: + - 10 + - 500 + legend: + title: Metrics + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: string_metric_vs_train_time.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: train_time + ylabel: Training Time (s) + y_scale: linear + hue_order: + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + errorbar: se + err_style: bars + xlim: + - 10 + - 500 + legend: + title: Metrics + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: compressor_metric_vs_predict_time.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: predict_time + ylabel: Prediction Time (s) + y_scale: linear + hue_order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + - file: metric_vs_predict_time.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: predict_time + ylabel: Prediction Time (s) + y_scale: linear + hue_order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + - file: string_metric_vs_predict_time.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: predict_time + ylabel: Prediction Time (s) + y_scale: linear + hue_order: + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + errorbar: se + err_style: bars + xlim: + - 10 + - 500 + legend: + title: Metrics + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 outs: - - path: ddos/logs/train/gzip_svc + - path: kdd_nsl/plots/compressor_metric_vs_accuracy.pdf hash: md5 - md5: 35f0d02aabaf1976bb3cedb8d0e37f95.dir - size: 8267 - nfiles: 4 - - path: ddos/reports/train/gzip_svc/score_dict.json - hash: md5 - md5: bc8aa822c76d4b1d76800780f3ea72e8 - size: 281 - test_each_dataset@ddos-gzip_logistic: - cmd: 'python -m deckard.layers.optimise stage=train files.name=gzip_logistic - data.sample.train_size=100 files.directory=ddos data=ddos dataset=ddos model_name=gzip_logistic - model=gzip_logistic hydra.run.dir=ddos/logs/train/gzip_logistic ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json + md5: c489db933d8ba20b46f2c660a0a3047a + size: 21218 + - path: kdd_nsl/plots/metric_vs_accuracy.pdf hash: md5 - md5: 973ed0af499fa6561450dcb64d7984e3 - size: 485 - - path: params.yaml + md5: 7a142e5701cc21160fda0863069f047d + size: 24512 + - path: kdd_nsl/plots/string_metric_vs_accuracy.pdf hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 + md5: 887d2ab7003eaf8f7802f4283dfc7fef + size: 20482 + - path: kdd_nsl/plots/symmetric_vs_compressor_metric.pdf + hash: md5 + md5: 3a7c06d30bdcbca9f6a07d638868fbba + size: 21400 + - path: kdd_nsl/plots/symmetric_vs_metric.pdf + hash: md5 + md5: c6702ce379c3f136e12dc9ea9026388a + size: 31309 + - path: kdd_nsl/plots/symmetric_vs_metric_train_time.pdf + hash: md5 + md5: 96cbbe31be92230fb5fa87cc8c4e439f + size: 32172 + - path: kdd_nsl/plots/symmetric_vs_string_metric.pdf + hash: md5 + md5: cc66d61cd5b6709b480d5040eca3dd6a + size: 22907 + - path: kdd_nsl/plots/symmetric_vs_string_metric_train_time.pdf + hash: md5 + md5: 2a87a16ab34be554a1c5cba1a00f5ff8 + size: 25045 + clean@ddos-gzip_knn: + cmd: python -m deckard.layers.clean_data -i ddos/reports/gzip_knn.csv -o ddos/plots/clean/gzip_knn.csv + -c conf/clean.yaml + deps: + - path: ddos/reports/gzip_knn.csv + hash: md5 + md5: 300b372df1c4be34b85f4080667329a1 + size: 1537512 params: - params.yaml: - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - distance_matrix: kdd_nsl/model/gzip/100-100/0.npz - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss + conf/clean.yaml: + drop_values: + accuracy: 0.0 + predict_time: 1.0 + replace: + model.init.metric: + jaro: Jaro + _winkler: -Winkler + levenshtein: Levenshtein + ncd: NCD + ratio: Ratio + seqRatio: SeqRatio + hamming: Hamming + gzip: GZIP + pkl: Pickle + bz2: BZ2 + zstd: ZSTD + lzma: LZMA + model_name: + GzipSVC: k-SVC + GzipLogisticRegressor: k-Logistic + GzipKNN: k-KNN + model.init.symmetric: + true: Symmetric + false: Asymmetric + model.init.sampling_method: + random: Random + medoid: Medoid + sum: Sum + svc: SVC + hardness: Hardness + nearmiss: NearMiss + knn: KNN + dataset: + ddos: DDoS + sms_spam: SMS Spam + kdd_nsl: KDD NSL + truthseeker: Truthseeker + model.init.m: + -1: 1 + replace_cols: + dataset: Dataset + model.init.metric: Metric + model.init.symmetric: Symmetric + model.init.sampling_method: Condensing Method + model.init.m: Condensing Ratio + model_name: Model outs: - - path: ddos/logs/train/gzip_logistic + - path: ddos/plots/clean/gzip_knn.csv hash: md5 - md5: 059857ff224bd0df8bbb6aa1052565fb.dir - size: 8405 - nfiles: 4 - - path: ddos/reports/train/gzip_logistic/score_dict.json - hash: md5 - md5: f5d793be8917596666827272421f0b32 - size: 282 - test_each_dataset@truthseeker-gzip_knn: - cmd: 'python -m deckard.layers.optimise stage=train files.name=gzip_knn data.sample.train_size=100 - files.directory=truthseeker data=truthseeker dataset=truthseeker model_name=gzip_knn - model=gzip_knn hydra.run.dir=truthseeker/logs/train/gzip_knn ++raise_exception=True ' + md5: 4dcfbd9357af1a17978265cd5cf7b389 + size: 1231290 + clean@ddos-gzip_logistic: + cmd: python -m deckard.layers.clean_data -i ddos/reports/gzip_logistic.csv -o + ddos/plots/clean/gzip_logistic.csv -c conf/clean.yaml deps: - - path: kdd_nsl/reports/train/default/score_dict.json + - path: ddos/reports/gzip_logistic.csv hash: md5 - md5: 973ed0af499fa6561450dcb64d7984e3 - size: 485 - - path: params.yaml + md5: 476499955f6c0b8f796c2d8274ad108d + size: 1387052 + params: + conf/clean.yaml: + drop_values: + accuracy: 0.0 + predict_time: 1.0 + replace: + model.init.metric: + jaro: Jaro + _winkler: -Winkler + levenshtein: Levenshtein + ncd: NCD + ratio: Ratio + seqRatio: SeqRatio + hamming: Hamming + gzip: GZIP + pkl: Pickle + bz2: BZ2 + zstd: ZSTD + lzma: LZMA + model_name: + GzipSVC: k-SVC + GzipLogisticRegressor: k-Logistic + GzipKNN: k-KNN + model.init.symmetric: + true: Symmetric + false: Asymmetric + model.init.sampling_method: + random: Random + medoid: Medoid + sum: Sum + svc: SVC + hardness: Hardness + nearmiss: NearMiss + knn: KNN + dataset: + ddos: DDoS + sms_spam: SMS Spam + kdd_nsl: KDD NSL + truthseeker: Truthseeker + model.init.m: + -1: 1 + replace_cols: + dataset: Dataset + model.init.metric: Metric + model.init.symmetric: Symmetric + model.init.sampling_method: Condensing Method + model.init.m: Condensing Ratio + model_name: Model + outs: + - path: ddos/plots/clean/gzip_logistic.csv hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 + md5: 10f4e37f4dc1bf7874461430c547a9c8 + size: 929254 + clean@ddos-gzip_svc: + cmd: python -m deckard.layers.clean_data -i ddos/reports/gzip_svc.csv -o ddos/plots/clean/gzip_svc.csv + -c conf/clean.yaml + deps: + - path: ddos/reports/gzip_svc.csv + hash: md5 + md5: d85b5ddf9fab15d76641603c4d774a79 + size: 1376765 params: - params.yaml: - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - distance_matrix: kdd_nsl/model/gzip/100-100/0.npz - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss + conf/clean.yaml: + drop_values: + accuracy: 0.0 + predict_time: 1.0 + replace: + model.init.metric: + jaro: Jaro + _winkler: -Winkler + levenshtein: Levenshtein + ncd: NCD + ratio: Ratio + seqRatio: SeqRatio + hamming: Hamming + gzip: GZIP + pkl: Pickle + bz2: BZ2 + zstd: ZSTD + lzma: LZMA + model_name: + GzipSVC: k-SVC + GzipLogisticRegressor: k-Logistic + GzipKNN: k-KNN + model.init.symmetric: + true: Symmetric + false: Asymmetric + model.init.sampling_method: + random: Random + medoid: Medoid + sum: Sum + svc: SVC + hardness: Hardness + nearmiss: NearMiss + knn: KNN + dataset: + ddos: DDoS + sms_spam: SMS Spam + kdd_nsl: KDD NSL + truthseeker: Truthseeker + model.init.m: + -1: 1 + replace_cols: + dataset: Dataset + model.init.metric: Metric + model.init.symmetric: Symmetric + model.init.sampling_method: Condensing Method + model.init.m: Condensing Ratio + model_name: Model outs: - - path: truthseeker/logs/train/gzip_knn - hash: md5 - md5: b2c2b8a6bf5e3de7e2b9fcb27ebc9b0e.dir - size: 8766 - nfiles: 4 - - path: truthseeker/reports/train/gzip_knn/score_dict.json + - path: ddos/plots/clean/gzip_svc.csv hash: md5 - md5: dddc45ec409b3bd343d743789a2735fb - size: 485 - test_each_dataset@truthseeker-gzip_svc: - cmd: 'python -m deckard.layers.optimise stage=train files.name=gzip_svc data.sample.train_size=100 - files.directory=truthseeker data=truthseeker dataset=truthseeker model_name=gzip_svc - model=gzip_svc hydra.run.dir=truthseeker/logs/train/gzip_svc ++raise_exception=True ' + md5: 39e10d3afe8e5a6a008300166abf64b6 + size: 1111620 + merge@ddos: + cmd: python merge.py --big_dir ddos/plots/ --data_file clean/gzip_knn.csv --little_dir_data_file + clean/gzip_logistic.csv clean/gzip_svc.csv --output_folder ddos/plots --output_file + merged.csv deps: - - path: kdd_nsl/reports/train/default/score_dict.json + - path: ddos/plots/clean/gzip_knn.csv hash: md5 - md5: 973ed0af499fa6561450dcb64d7984e3 - size: 485 - - path: params.yaml + md5: 4dcfbd9357af1a17978265cd5cf7b389 + size: 1231290 + - path: ddos/plots/clean/gzip_logistic.csv hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - distance_matrix: kdd_nsl/model/gzip/100-100/0.npz - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: truthseeker/logs/train/gzip_svc + md5: 10f4e37f4dc1bf7874461430c547a9c8 + size: 929254 + - path: ddos/plots/clean/gzip_svc.csv hash: md5 - md5: a92b8a9af468c50e22a1b70393f80383.dir - size: 8764 - nfiles: 4 - - path: truthseeker/reports/train/gzip_svc/score_dict.json + md5: 39e10d3afe8e5a6a008300166abf64b6 + size: 1111620 + outs: + - path: ddos/plots/merged.csv hash: md5 - md5: ef9a491e592eb39757863246ef9ea9ee - size: 485 - test_each_dataset@truthseeker-gzip_logistic: - cmd: 'python -m deckard.layers.optimise stage=train files.name=gzip_logistic - data.sample.train_size=100 files.directory=truthseeker data=truthseeker dataset=truthseeker - model_name=gzip_logistic model=gzip_logistic hydra.run.dir=truthseeker/logs/train/gzip_logistic - ++raise_exception=True ' + md5: ddd7e1f8412a6a8d397888033a755ad2 + size: 3305983 + clean@truthseeker-gzip_knn: + cmd: python -m deckard.layers.clean_data -i truthseeker/reports/gzip_knn.csv + -o truthseeker/plots/clean/gzip_knn.csv -c conf/clean.yaml deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 973ed0af499fa6561450dcb64d7984e3 - size: 485 - - path: params.yaml + - path: truthseeker/reports/gzip_knn.csv hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 + md5: 2298733dbbc1d3a699eeaedaee005a91 + size: 1246208 params: - params.yaml: - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - distance_matrix: kdd_nsl/model/gzip/100-100/0.npz - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss + conf/clean.yaml: + drop_values: + accuracy: 0.0 + predict_time: 1.0 + replace: + model.init.metric: + jaro: Jaro + _winkler: -Winkler + levenshtein: Levenshtein + ncd: NCD + ratio: Ratio + seqRatio: SeqRatio + hamming: Hamming + gzip: GZIP + pkl: Pickle + bz2: BZ2 + zstd: ZSTD + lzma: LZMA + model_name: + GzipSVC: k-SVC + GzipLogisticRegressor: k-Logistic + GzipKNN: k-KNN + model.init.symmetric: + true: Symmetric + false: Asymmetric + model.init.sampling_method: + random: Random + medoid: Medoid + sum: Sum + svc: SVC + hardness: Hardness + nearmiss: NearMiss + knn: KNN + dataset: + ddos: DDoS + sms_spam: SMS Spam + kdd_nsl: KDD NSL + truthseeker: Truthseeker + model.init.m: + -1: 1 + replace_cols: + dataset: Dataset + model.init.metric: Metric + model.init.symmetric: Symmetric + model.init.sampling_method: Condensing Method + model.init.m: Condensing Ratio + model_name: Model outs: - - path: truthseeker/logs/train/gzip_logistic - hash: md5 - md5: 4307ed8d2c6c1842abf7c919effa5585.dir - size: 8927 - nfiles: 4 - - path: truthseeker/reports/train/gzip_logistic/score_dict.json + - path: truthseeker/plots/clean/gzip_knn.csv hash: md5 - md5: c924984f0bc0a668bd204cd1368cca29 - size: 484 - test_each_dataset@sms_spam-gzip_knn: - cmd: 'python -m deckard.layers.optimise stage=train files.name=gzip_knn data.sample.train_size=100 - files.directory=sms_spam data=sms_spam dataset=sms_spam model_name=gzip_knn - model=gzip_knn hydra.run.dir=sms_spam/logs/train/gzip_knn ++raise_exception=True ' + md5: 1f8dbb1f89957121ca5f935f2c6503bd + size: 691191 + clean@truthseeker-gzip_logistic: + cmd: python -m deckard.layers.clean_data -i truthseeker/reports/gzip_logistic.csv + -o truthseeker/plots/clean/gzip_logistic.csv -c conf/clean.yaml deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 973ed0af499fa6561450dcb64d7984e3 - size: 485 - - path: params.yaml + - path: truthseeker/reports/gzip_logistic.csv hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 + md5: 6ed79959e5c663c55217dcf02ed58cc9 + size: 1351631 params: - params.yaml: - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - distance_matrix: kdd_nsl/model/gzip/100-100/0.npz - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss + conf/clean.yaml: + drop_values: + accuracy: 0.0 + predict_time: 1.0 + replace: + model.init.metric: + jaro: Jaro + _winkler: -Winkler + levenshtein: Levenshtein + ncd: NCD + ratio: Ratio + seqRatio: SeqRatio + hamming: Hamming + gzip: GZIP + pkl: Pickle + bz2: BZ2 + zstd: ZSTD + lzma: LZMA + model_name: + GzipSVC: k-SVC + GzipLogisticRegressor: k-Logistic + GzipKNN: k-KNN + model.init.symmetric: + true: Symmetric + false: Asymmetric + model.init.sampling_method: + random: Random + medoid: Medoid + sum: Sum + svc: SVC + hardness: Hardness + nearmiss: NearMiss + knn: KNN + dataset: + ddos: DDoS + sms_spam: SMS Spam + kdd_nsl: KDD NSL + truthseeker: Truthseeker + model.init.m: + -1: 1 + replace_cols: + dataset: Dataset + model.init.metric: Metric + model.init.symmetric: Symmetric + model.init.sampling_method: Condensing Method + model.init.m: Condensing Ratio + model_name: Model outs: - - path: sms_spam/logs/train/gzip_knn - hash: md5 - md5: 288289a63ad41945ee6f553954e63fb6.dir - size: 8696 - nfiles: 4 - - path: sms_spam/reports/train/gzip_knn/score_dict.json + - path: truthseeker/plots/clean/gzip_logistic.csv hash: md5 - md5: cbf84c1419d004160232153789ef857e - size: 484 - test_each_dataset@sms_spam-gzip_svc: - cmd: 'python -m deckard.layers.optimise stage=train files.name=gzip_svc data.sample.train_size=100 - files.directory=sms_spam data=sms_spam dataset=sms_spam model_name=gzip_svc - model=gzip_svc hydra.run.dir=sms_spam/logs/train/gzip_svc ++raise_exception=True ' + md5: e06aa9e97e30f80c615606ecd610195c + size: 952678 + clean@truthseeker-gzip_svc: + cmd: python -m deckard.layers.clean_data -i truthseeker/reports/gzip_svc.csv + -o truthseeker/plots/clean/gzip_svc.csv -c conf/clean.yaml deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 973ed0af499fa6561450dcb64d7984e3 - size: 485 - - path: params.yaml + - path: truthseeker/reports/gzip_svc.csv hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 + md5: e7567275d1f0e7952c116b6533d43c2d + size: 1366409 params: - params.yaml: - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - distance_matrix: kdd_nsl/model/gzip/100-100/0.npz - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss + conf/clean.yaml: + drop_values: + accuracy: 0.0 + predict_time: 1.0 + replace: + model.init.metric: + jaro: Jaro + _winkler: -Winkler + levenshtein: Levenshtein + ncd: NCD + ratio: Ratio + seqRatio: SeqRatio + hamming: Hamming + gzip: GZIP + pkl: Pickle + bz2: BZ2 + zstd: ZSTD + lzma: LZMA + model_name: + GzipSVC: k-SVC + GzipLogisticRegressor: k-Logistic + GzipKNN: k-KNN + model.init.symmetric: + true: Symmetric + false: Asymmetric + model.init.sampling_method: + random: Random + medoid: Medoid + sum: Sum + svc: SVC + hardness: Hardness + nearmiss: NearMiss + knn: KNN + dataset: + ddos: DDoS + sms_spam: SMS Spam + kdd_nsl: KDD NSL + truthseeker: Truthseeker + model.init.m: + -1: 1 + replace_cols: + dataset: Dataset + model.init.metric: Metric + model.init.symmetric: Symmetric + model.init.sampling_method: Condensing Method + model.init.m: Condensing Ratio + model_name: Model outs: - - path: sms_spam/logs/train/gzip_svc + - path: truthseeker/plots/clean/gzip_svc.csv hash: md5 - md5: 2092d70cd452792ca000dc00fa339c98.dir - size: 8693 - nfiles: 4 - - path: sms_spam/reports/train/gzip_svc/score_dict.json - hash: md5 - md5: 570fd51555af3014e9cc9d7ede806f99 - size: 483 - test_each_dataset@sms_spam-gzip_logistic: - cmd: 'python -m deckard.layers.optimise stage=train files.name=gzip_logistic - data.sample.train_size=100 files.directory=sms_spam data=sms_spam dataset=sms_spam - model_name=gzip_logistic model=gzip_logistic hydra.run.dir=sms_spam/logs/train/gzip_logistic - ++raise_exception=True ' + md5: 39120e9e457e55ab86298d192b7b8d51 + size: 1112569 + merge@truthseeker: + cmd: python merge.py --big_dir truthseeker/plots/ --data_file clean/gzip_knn.csv + --little_dir_data_file clean/gzip_logistic.csv clean/gzip_svc.csv --output_folder + truthseeker/plots --output_file merged.csv deps: - - path: kdd_nsl/reports/train/default/score_dict.json + - path: truthseeker/plots/clean/gzip_knn.csv hash: md5 - md5: 973ed0af499fa6561450dcb64d7984e3 - size: 485 - - path: params.yaml + md5: 1f8dbb1f89957121ca5f935f2c6503bd + size: 691191 + - path: truthseeker/plots/clean/gzip_logistic.csv hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - distance_matrix: kdd_nsl/model/gzip/100-100/0.npz - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss + md5: e06aa9e97e30f80c615606ecd610195c + size: 952678 + - path: truthseeker/plots/clean/gzip_svc.csv + hash: md5 + md5: 39120e9e457e55ab86298d192b7b8d51 + size: 1112569 outs: - - path: sms_spam/logs/train/gzip_logistic + - path: truthseeker/plots/merged.csv hash: md5 - md5: 529420680b63e63951e2ea7fee603c6e.dir - size: 8839 - nfiles: 4 - - path: sms_spam/reports/train/gzip_logistic/score_dict.json - hash: md5 - md5: 609514cfb9a8a234c82823b402deebd5 - size: 487 - test_each_dataset@kdd_nsl-gzip_knn: - cmd: 'python -m deckard.layers.optimise stage=train files.name=gzip_knn data.sample.train_size=100 - files.directory=kdd_nsl data=kdd_nsl dataset=kdd_nsl model_name=gzip_knn model=gzip_knn - hydra.run.dir=kdd_nsl/logs/train/gzip_knn ++raise_exception=True ' + md5: a6294ee4d1fc5b445dbf585745dfb18e + size: 2783534 + merge_datasets: + cmd: python merge.py --big_dir . --little_dir . --data_file sms_spam/plots/merged.csv + --little_dir_data_file kdd_nsl/plots/merged.csv ddos/plots/merged.csv truthseeker/plots/merged.csv + kdd_nsl/plots/condensed_merged.csv ddos/plots/condensed_merged.csv truthseeker/plots/condensed_merged.csv + sms_spam/plots/condensed_merged.csv --output_folder combined/plots/ --output_file + merged.csv deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 973ed0af499fa6561450dcb64d7984e3 - size: 485 - - path: params.yaml + - path: ddos/plots/merged.csv hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - distance_matrix: kdd_nsl/model/gzip/100-100/0.npz - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: kdd_nsl/logs/train/gzip_knn + md5: ddd7e1f8412a6a8d397888033a755ad2 + size: 3305983 + - path: kdd_nsl/plots/merged.csv hash: md5 - md5: b4064f5ba018d961ca5d94272f10cc98.dir - size: 8332 - nfiles: 4 - - path: kdd_nsl/reports/train/gzip_knn/score_dict.json - hash: md5 - md5: 15433bc09490e34086340cdc126809af - size: 279 - test_each_dataset@kdd_nsl-gzip_svc: - cmd: 'python -m deckard.layers.optimise stage=train files.name=gzip_svc data.sample.train_size=100 - files.directory=kdd_nsl data=kdd_nsl dataset=kdd_nsl model_name=gzip_svc model=gzip_svc - hydra.run.dir=kdd_nsl/logs/train/gzip_svc ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json + md5: e9aaa44e6ef176c174b296c31a6760f9 + size: 2956133 + - path: sms_spam/plots/merged.csv hash: md5 - md5: 973ed0af499fa6561450dcb64d7984e3 - size: 485 - - path: params.yaml + md5: 4baf51fdcc220aedc6443147a057559e + size: 2765074 + - path: truthseeker/plots/merged.csv hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - distance_matrix: kdd_nsl/model/gzip/100-100/0.npz - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss + md5: a6294ee4d1fc5b445dbf585745dfb18e + size: 2783534 outs: - - path: kdd_nsl/logs/train/gzip_svc + - path: combined/plots/merged.csv hash: md5 - md5: 82aa62187135fa6761797bffad730bf5.dir - size: 8333 - nfiles: 4 - - path: kdd_nsl/reports/train/gzip_svc/score_dict.json - hash: md5 - md5: 8d6cc7f69c732f2bf2618889dbc4d27f - size: 282 - test_each_dataset@kdd_nsl-gzip_logistic: - cmd: 'python -m deckard.layers.optimise stage=train files.name=gzip_logistic - data.sample.train_size=100 files.directory=kdd_nsl data=kdd_nsl dataset=kdd_nsl - model_name=gzip_logistic model=gzip_logistic hydra.run.dir=kdd_nsl/logs/train/gzip_logistic - ++raise_exception=True ' + md5: a7ca9f759ab63a1649889ad57e928578 + size: 33289497 + clean@ddos-condense/svc: + cmd: python -m deckard.layers.clean_data -i ddos/reports/condense/svc.csv -o + ddos/plots/clean/condense/svc.csv -c conf/clean.yaml deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 973ed0af499fa6561450dcb64d7984e3 - size: 485 - - path: params.yaml + - path: ddos/reports/condense/svc.csv hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 + md5: f7fa9ef13258b1cc8e4dee82f395cabc + size: 2853089 params: - params.yaml: - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - distance_matrix: kdd_nsl/model/gzip/100-100/0.npz - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss + conf/clean.yaml: + drop_values: + accuracy: 0.0 + predict_time: 1.0 + replace: + model.init.metric: + jaro: Jaro + _winkler: -Winkler + levenshtein: Levenshtein + ncd: NCD + ratio: Ratio + seqRatio: SeqRatio + hamming: Hamming + gzip: GZIP + pkl: Pickle + bz2: BZ2 + zstd: ZSTD + lzma: LZMA + model_name: + GzipSVC: k-SVC + GzipLogisticRegressor: k-Logistic + GzipKNN: k-KNN + model.init.symmetric: + true: Symmetric + false: Asymmetric + model.init.sampling_method: + random: Random + medoid: Medoid + sum: Sum + svc: SVC + hardness: Hardness + nearmiss: NearMiss + knn: KNN + dataset: + ddos: DDoS + sms_spam: SMS Spam + kdd_nsl: KDD NSL + truthseeker: Truthseeker + model.init.m: + -1: 1 + replace_cols: + dataset: Dataset + model.init.metric: Metric + model.init.symmetric: Symmetric + model.init.sampling_method: Condensing Method + model.init.m: Condensing Ratio + model_name: Model outs: - - path: kdd_nsl/logs/train/gzip_logistic - hash: md5 - md5: 9c885fb9fc086d581e13a69b83e3168f.dir - size: 8469 - nfiles: 4 - - path: kdd_nsl/reports/train/gzip_logistic/score_dict.json + - path: ddos/plots/clean/condense/svc.csv hash: md5 - md5: 8d9b7d68ae18c0b4d887522cdfb620f8 - size: 281 - test_each_metric@jaro-gzip_knn-kdd_nsl-20: - cmd: 'python -m deckard.layers.optimise stage=test_each_metric files.name=gzip_knn/jaro/20 - files.directory=kdd_nsl data=kdd_nsl data.sample.train_size=20 dataset=kdd_nsl - model=gzip_knn model_name=gzip_knn model.init.metric=jaro model.init.m=-1 hydra.run.dir=kdd_nsl/logs/test_each_metric/gzip_knn/jaro/20 - ++raise_exception=True ' + md5: a016c3958a5bedbce540628908c94082 + size: 2336402 + clean@truthseeker-condense/svc: + cmd: python -m deckard.layers.clean_data -i truthseeker/reports/condense/svc.csv + -o truthseeker/plots/clean/condense/svc.csv -c conf/clean.yaml deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 973ed0af499fa6561450dcb64d7984e3 - size: 485 - - path: params.yaml + - path: truthseeker/reports/condense/svc.csv hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 + md5: 789d469a26448549761aa6140fd4bc7d + size: 2260420 params: - params.yaml: - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - distance_matrix: kdd_nsl/model/gzip/100-100/0.npz - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss + conf/clean.yaml: + drop_values: + accuracy: 0.0 + predict_time: 1.0 + replace: + model.init.metric: + jaro: Jaro + _winkler: -Winkler + levenshtein: Levenshtein + ncd: NCD + ratio: Ratio + seqRatio: SeqRatio + hamming: Hamming + gzip: GZIP + pkl: Pickle + bz2: BZ2 + zstd: ZSTD + lzma: LZMA + model_name: + GzipSVC: k-SVC + GzipLogisticRegressor: k-Logistic + GzipKNN: k-KNN + model.init.symmetric: + true: Symmetric + false: Asymmetric + model.init.sampling_method: + random: Random + medoid: Medoid + sum: Sum + svc: SVC + hardness: Hardness + nearmiss: NearMiss + knn: KNN + dataset: + ddos: DDoS + sms_spam: SMS Spam + kdd_nsl: KDD NSL + truthseeker: Truthseeker + model.init.m: + -1: 1 + replace_cols: + dataset: Dataset + model.init.metric: Metric + model.init.symmetric: Symmetric + model.init.sampling_method: Condensing Method + model.init.m: Condensing Ratio + model_name: Model outs: - - path: kdd_nsl/logs/test_each_metric/gzip_knn/jaro/20 - hash: md5 - md5: 52a4717452195943e7f45e9cece5b870.dir - size: 7875 - nfiles: 4 - - path: kdd_nsl/reports/test_each_metric/gzip_knn/jaro/20/score_dict.json + - path: truthseeker/plots/clean/condense/svc.csv hash: md5 - md5: 5d8bf090bc8e34df8ed01766adfca5eb - size: 26 - test_each_metric@jaro_winkler-gzip_knn-kdd_nsl-20: - cmd: 'python -m deckard.layers.optimise stage=test_each_metric files.name=gzip_knn/jaro_winkler/20 - files.directory=kdd_nsl data=kdd_nsl data.sample.train_size=20 dataset=kdd_nsl - model=gzip_knn model_name=gzip_knn model.init.metric=jaro_winkler model.init.m=-1 - hydra.run.dir=kdd_nsl/logs/test_each_metric/gzip_knn/jaro_winkler/20 ++raise_exception=True ' + md5: 5217ab37267115a9f3a887dda0ca9716 + size: 1837203 + clean@truthseeker-condense/logistic: + cmd: python -m deckard.layers.clean_data -i truthseeker/reports/condense/logistic.csv + -o truthseeker/plots/clean/condense/logistic.csv -c conf/clean.yaml deps: - - path: kdd_nsl/reports/train/default/score_dict.json - hash: md5 - md5: 973ed0af499fa6561450dcb64d7984e3 - size: 485 - - path: params.yaml + - path: truthseeker/reports/condense/logistic.csv hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 + md5: d7854b284f4668d9b5706002ede597cd + size: 1461329 params: - params.yaml: - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - distance_matrix: kdd_nsl/model/gzip/100-100/0.npz - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss + conf/clean.yaml: + drop_values: + accuracy: 0.0 + predict_time: 1.0 + replace: + model.init.metric: + jaro: Jaro + _winkler: -Winkler + levenshtein: Levenshtein + ncd: NCD + ratio: Ratio + seqRatio: SeqRatio + hamming: Hamming + gzip: GZIP + pkl: Pickle + bz2: BZ2 + zstd: ZSTD + lzma: LZMA + model_name: + GzipSVC: k-SVC + GzipLogisticRegressor: k-Logistic + GzipKNN: k-KNN + model.init.symmetric: + true: Symmetric + false: Asymmetric + model.init.sampling_method: + random: Random + medoid: Medoid + sum: Sum + svc: SVC + hardness: Hardness + nearmiss: NearMiss + knn: KNN + dataset: + ddos: DDoS + sms_spam: SMS Spam + kdd_nsl: KDD NSL + truthseeker: Truthseeker + model.init.m: + -1: 1 + replace_cols: + dataset: Dataset + model.init.metric: Metric + model.init.symmetric: Symmetric + model.init.sampling_method: Condensing Method + model.init.m: Condensing Ratio + model_name: Model outs: - - path: kdd_nsl/logs/test_each_metric/gzip_knn/jaro_winkler/20 + - path: truthseeker/plots/clean/condense/logistic.csv hash: md5 - md5: 389e1b4dbd6f40645320412591511d48.dir - size: 7995 - nfiles: 4 - - path: kdd_nsl/reports/test_each_metric/gzip_knn/jaro_winkler/20/score_dict.json + md5: 2834667122a045b2815d6d8669d13855 + size: 1195763 + clean@truthseeker-condense/knn: + cmd: python -m deckard.layers.clean_data -i truthseeker/reports/condense/knn.csv + -o truthseeker/plots/clean/condense/knn.csv -c conf/clean.yaml + deps: + - path: truthseeker/reports/condense/knn.csv hash: md5 - md5: 5d8bf090bc8e34df8ed01766adfca5eb - size: 26 - test_each_metric@seqratio-gzip_knn-kdd_nsl-20: - cmd: 'python -m deckard.layers.optimise stage=test_each_metric files.name=gzip_knn/seqratio/20 - files.directory=kdd_nsl data=kdd_nsl data.sample.train_size=20 dataset=kdd_nsl - model=gzip_knn model_name=gzip_knn model.init.metric=seqratio model.init.m=-1 - hydra.run.dir=kdd_nsl/logs/test_each_metric/gzip_knn/seqratio/20 ++raise_exception=True ' + md5: 09ff6b9152372998f2cc0cf9e5b10a52 + size: 2364296 + params: + conf/clean.yaml: + drop_values: + accuracy: 0.0 + predict_time: 1.0 + replace: + model.init.metric: + jaro: Jaro + _winkler: -Winkler + levenshtein: Levenshtein + ncd: NCD + ratio: Ratio + seqRatio: SeqRatio + hamming: Hamming + gzip: GZIP + pkl: Pickle + bz2: BZ2 + zstd: ZSTD + lzma: LZMA + model_name: + GzipSVC: k-SVC + GzipLogisticRegressor: k-Logistic + GzipKNN: k-KNN + model.init.symmetric: + true: Symmetric + false: Asymmetric + model.init.sampling_method: + random: Random + medoid: Medoid + sum: Sum + svc: SVC + hardness: Hardness + nearmiss: NearMiss + knn: KNN + dataset: + ddos: DDoS + sms_spam: SMS Spam + kdd_nsl: KDD NSL + truthseeker: Truthseeker + model.init.m: + -1: 1 + replace_cols: + dataset: Dataset + model.init.metric: Metric + model.init.symmetric: Symmetric + model.init.sampling_method: Condensing Method + model.init.m: Condensing Ratio + model_name: Model + outs: + - path: truthseeker/plots/clean/condense/knn.csv + hash: md5 + md5: bb4310ab3db56fef5287c968e923a946 + size: 1416979 + plot@truthseeker: + cmd: python -m deckard.layers.plots --path truthseeker/plots/ --file truthseeker/plots/merged.csv -c + conf/plots.yaml deps: - - path: kdd_nsl/reports/train/default/score_dict.json + - path: conf/plots.yaml hash: md5 - md5: 973ed0af499fa6561450dcb64d7984e3 - size: 485 - - path: params.yaml + md5: 43e3ec0876b55c83f231615f7a904e33 + size: 7386 + - path: truthseeker/plots/merged.csv hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 + md5: a6294ee4d1fc5b445dbf585745dfb18e + size: 2783534 params: - params.yaml: - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - distance_matrix: kdd_nsl/model/gzip/100-100/0.npz - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss + conf/plots.yaml: + cat_plot: + - file: symmetric_vs_compressor_metric.pdf + x: Metric + y: accuracy + hue: Symmetric + errorbar: se + kind: boxen + titles: ' ' + xlabels: Compressor + ylabels: Accuracy + legend_title: Metrics + order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + hue_order: + - Asymmetric + - Symmetric + rotation: 90 + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: symmetric_vs_string_metric.pdf + x: Metric + y: accuracy + hue: Symmetric + errorbar: se + kind: boxen + titles: ' ' + xlabels: Compressors + ylabels: Accuracy + legend_title: ' ' + order: + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + hue_order: + - Asymmetric + - Symmetric + rotation: 90 + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: symmetric_vs_metric.pdf + x: Metric + y: accuracy + hue: Symmetric + errorbar: se + kind: boxen + titles: ' ' + xlabels: Compressors + ylabels: Accuracy + legend_title: ' ' + order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + hue_order: + - Asymmetric + - Symmetric + rotation: 90 + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: symmetric_vs_metric_train_time.pdf + x: Metric + y: train_time + hue: Symmetric + errorbar: se + kind: boxen + titles: + xlabels: Metrics + ylabels: Training Time (s) + legend_title: Metrics + order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + hue_order: + - Asymmetric + - Symmetric + rotation: 90 + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + y_scale: linear + - file: symmetric_vs_string_metric_train_time.pdf + x: Metric + y: train_time + hue: Symmetric + errorbar: se + kind: boxen + titles: + xlabels: Compressors + ylabels: Training Time (s) + legend_title: String Metrics + order: + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + hue_order: + - Asymmetric + - Symmetric + rotation: 90 + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: symmetric_vs_compressor_metric_train_time.pdf + x: Metric + y: train_time + hue: Symmetric + errorbar: se + kind: boxen + titles: + xlabels: Compressors + ylabels: Training Time (s) + legend_title: Metrics + order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + hue_order: + - Asymmetric + - Symmetric + rotation: 90 + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + line_plot: + - file: compressor_metric_vs_accuracy.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: accuracy + ylabel: Accuracy + hue_order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + errorbar: se + err_style: bars + xlim: + - 10 + - 500 + legend: + title: Metrics + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: metric_vs_accuracy.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: accuracy + ylabel: Accuracy + hue_order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + errorbar: se + err_style: bars + xlim: + - 10 + - 500 + legend: + title: Metrics + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: string_metric_vs_accuracy.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: accuracy + ylabel: Accuracy + hue_order: + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + errorbar: se + err_style: bars + xlim: + - 10 + - 500 + legend: + title: Metrics + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: metric_vs_train_time.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: train_time + ylabel: Training Time (s) + y_scale: linear + hue_order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + errorbar: se + err_style: bars + xlim: + - 10 + - 500 + legend: + title: Metrics + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: compressor_metric_vs_train_time.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: train_time + ylabel: Training Time (s) + y_scale: linear + hue_order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + errorbar: se + err_style: bars + xlim: + - 10 + - 500 + legend: + title: Metrics + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: string_metric_vs_train_time.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: train_time + ylabel: Training Time (s) + y_scale: linear + hue_order: + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + errorbar: se + err_style: bars + xlim: + - 10 + - 500 + legend: + title: Metrics + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: compressor_metric_vs_predict_time.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: predict_time + ylabel: Prediction Time (s) + y_scale: linear + hue_order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + - file: metric_vs_predict_time.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: predict_time + ylabel: Prediction Time (s) + y_scale: linear + hue_order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + - file: string_metric_vs_predict_time.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: predict_time + ylabel: Prediction Time (s) + y_scale: linear + hue_order: + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + errorbar: se + err_style: bars + xlim: + - 10 + - 500 + legend: + title: Metrics + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 outs: - - path: kdd_nsl/logs/test_each_metric/gzip_knn/seqratio/20 - hash: md5 - md5: aa1bc45346aa8fa60bf6e8b91df7559a.dir - size: 7935 - nfiles: 4 - - path: kdd_nsl/reports/test_each_metric/gzip_knn/seqratio/20/score_dict.json - hash: md5 - md5: 5d8bf090bc8e34df8ed01766adfca5eb - size: 26 - test_each_model@gzip-gzip_knn-kdd_nsl-20: - cmd: 'python -m deckard.layers.optimise stage=test_each_model files.name=gzip_knn/gzip/20 - files.directory=kdd_nsl data=kdd_nsl data.sample.train_size=20 dataset=kdd_nsl - model=gzip_knn model_name=gzip_knn model.init.metric=gzip model.init.m=-1 hydra.run.dir=kdd_nsl/logs/test_each_model/gzip_knn/gzip/20 - ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json + - path: truthseeker/plots/compressor_metric_vs_accuracy.pdf hash: md5 - md5: 973ed0af499fa6561450dcb64d7984e3 - size: 485 - - path: params.yaml + md5: fe9b34fc5c7bdb52f8092be432715ad6 + size: 19529 + - path: truthseeker/plots/metric_vs_accuracy.pdf hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - distance_matrix: kdd_nsl/model/gzip/100-100/0.npz - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: kdd_nsl/logs/test_each_model/gzip_knn/gzip/20 + md5: 2a49ccd20406d6d58692f241855c3d08 + size: 22804 + - path: truthseeker/plots/string_metric_vs_accuracy.pdf hash: md5 - md5: 3f15457aa4eb5b13f14c84d6299d6033.dir - size: 7888 - nfiles: 4 - - path: kdd_nsl/reports/test_each_model/gzip_knn/gzip/20/score_dict.json + md5: 9ae3cf88045c9556d26df2d79d493e35 + size: 20944 + - path: truthseeker/plots/symmetric_vs_compressor_metric.pdf hash: md5 - md5: 5d8bf090bc8e34df8ed01766adfca5eb - size: 26 - test_each_model@gzip-gzip_svc-kdd_nsl-20: - cmd: 'python -m deckard.layers.optimise stage=test_each_model files.name=gzip_svc/gzip/20 - files.directory=kdd_nsl data=kdd_nsl data.sample.train_size=20 dataset=kdd_nsl - model=gzip_svc model_name=gzip_knn model.init.metric=gzip model.init.m=-1 hydra.run.dir=kdd_nsl/logs/test_each_model/gzip_svc/gzip/20 - ++raise_exception=True ' - deps: - - path: kdd_nsl/reports/train/default/score_dict.json + md5: e1765300eb083de79d90786e3ca35374 + size: 21369 + - path: truthseeker/plots/symmetric_vs_metric.pdf hash: md5 - md5: 973ed0af499fa6561450dcb64d7984e3 - size: 485 - - path: params.yaml + md5: 00178f8d5d5644099848f066d44d5316 + size: 31272 + - path: truthseeker/plots/symmetric_vs_metric_train_time.pdf hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 - params: - params.yaml: - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - distance_matrix: kdd_nsl/model/gzip/100-100/0.npz - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss - outs: - - path: kdd_nsl/logs/test_each_model/gzip_svc/gzip/20 + md5: ae31c23accfaa8696452aceae673db53 + size: 32498 + - path: truthseeker/plots/symmetric_vs_string_metric.pdf hash: md5 - md5: 7ab534004d714b2a74f8c5fdb5d75b61.dir - size: 7891 - nfiles: 4 - - path: kdd_nsl/reports/test_each_model/gzip_svc/gzip/20/score_dict.json + md5: 79fd5831809a53057c775ef1c52e089a + size: 23079 + - path: truthseeker/plots/symmetric_vs_string_metric_train_time.pdf hash: md5 - md5: 5d8bf090bc8e34df8ed01766adfca5eb - size: 26 - test_each_model@gzip-gzip_logistic-kdd_nsl-20: - cmd: 'python -m deckard.layers.optimise stage=test_each_model files.name=gzip_logistic/gzip/20 - files.directory=kdd_nsl data=kdd_nsl data.sample.train_size=20 dataset=kdd_nsl - model=gzip_logistic model_name=gzip_knn model.init.metric=gzip model.init.m=-1 - hydra.run.dir=kdd_nsl/logs/test_each_model/gzip_logistic/gzip/20 ++raise_exception=True ' + md5: 35f27e898700bb9b4e941a1c6fc06273 + size: 24558 + plot@ddos: + cmd: python -m deckard.layers.plots --path ddos/plots/ --file ddos/plots/merged.csv -c + conf/plots.yaml deps: - - path: kdd_nsl/reports/train/default/score_dict.json + - path: conf/plots.yaml hash: md5 - md5: 973ed0af499fa6561450dcb64d7984e3 - size: 485 - - path: params.yaml + md5: 43e3ec0876b55c83f231615f7a904e33 + size: 7386 + - path: ddos/plots/merged.csv hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 + md5: ddd7e1f8412a6a8d397888033a755ad2 + size: 3305983 params: - params.yaml: - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - dataset: kdd_nsl - device_id: cpu - files: - _target_: deckard.base.files.FileConfig - data_dir: data - data_type: .csv - directory: kdd_nsl - model_dir: model - name: default - params_file: params.yaml - predictions_file: predictions.json - reports: reports - score_dict_file: score_dict.json - model: - _target_: deckard.base.model.Model - data: - _target_: deckard.base.data.Data - drop: - - id - name: raw_data/kdd_nsl_undersampled_5000.csv - sample: - _target_: deckard.base.data.SklearnDataSampler - random_state: 0 - stratify: true - test_size: 100 - train_size: 100 - target: label - init: - _target_: deckard.base.model.ModelInitializer - distance_matrix: kdd_nsl/model/gzip/100-100/0.npz - k: 1 - m: -1 - metric: gzip - name: gzip_classifier.GzipKNN - symmetric: false - library: sklearn - model_name: gzip_knn - scorers: - _target_: deckard.base.scorer.ScorerDict - accuracy: - _target_: deckard.base.scorer.ScorerConfig - direction: maximize - name: sklearn.metrics.accuracy_score - log_loss: - _target_: deckard.base.scorer.ScorerConfig - direction: minimize - name: sklearn.metrics.log_loss + conf/plots.yaml: + cat_plot: + - file: symmetric_vs_compressor_metric.pdf + x: Metric + y: accuracy + hue: Symmetric + errorbar: se + kind: boxen + titles: ' ' + xlabels: Compressor + ylabels: Accuracy + legend_title: Metrics + order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + hue_order: + - Asymmetric + - Symmetric + rotation: 90 + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: symmetric_vs_string_metric.pdf + x: Metric + y: accuracy + hue: Symmetric + errorbar: se + kind: boxen + titles: ' ' + xlabels: Compressors + ylabels: Accuracy + legend_title: ' ' + order: + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + hue_order: + - Asymmetric + - Symmetric + rotation: 90 + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: symmetric_vs_metric.pdf + x: Metric + y: accuracy + hue: Symmetric + errorbar: se + kind: boxen + titles: ' ' + xlabels: Compressors + ylabels: Accuracy + legend_title: ' ' + order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + hue_order: + - Asymmetric + - Symmetric + rotation: 90 + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: symmetric_vs_metric_train_time.pdf + x: Metric + y: train_time + hue: Symmetric + errorbar: se + kind: boxen + titles: + xlabels: Metrics + ylabels: Training Time (s) + legend_title: Metrics + order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + hue_order: + - Asymmetric + - Symmetric + rotation: 90 + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + y_scale: linear + - file: symmetric_vs_string_metric_train_time.pdf + x: Metric + y: train_time + hue: Symmetric + errorbar: se + kind: boxen + titles: + xlabels: Compressors + ylabels: Training Time (s) + legend_title: String Metrics + order: + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + hue_order: + - Asymmetric + - Symmetric + rotation: 90 + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: symmetric_vs_compressor_metric_train_time.pdf + x: Metric + y: train_time + hue: Symmetric + errorbar: se + kind: boxen + titles: + xlabels: Compressors + ylabels: Training Time (s) + legend_title: Metrics + order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + hue_order: + - Asymmetric + - Symmetric + rotation: 90 + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + line_plot: + - file: compressor_metric_vs_accuracy.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: accuracy + ylabel: Accuracy + hue_order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + errorbar: se + err_style: bars + xlim: + - 10 + - 500 + legend: + title: Metrics + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: metric_vs_accuracy.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: accuracy + ylabel: Accuracy + hue_order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + errorbar: se + err_style: bars + xlim: + - 10 + - 500 + legend: + title: Metrics + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: string_metric_vs_accuracy.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: accuracy + ylabel: Accuracy + hue_order: + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + errorbar: se + err_style: bars + xlim: + - 10 + - 500 + legend: + title: Metrics + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: metric_vs_train_time.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: train_time + ylabel: Training Time (s) + y_scale: linear + hue_order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + errorbar: se + err_style: bars + xlim: + - 10 + - 500 + legend: + title: Metrics + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: compressor_metric_vs_train_time.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: train_time + ylabel: Training Time (s) + y_scale: linear + hue_order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + errorbar: se + err_style: bars + xlim: + - 10 + - 500 + legend: + title: Metrics + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: string_metric_vs_train_time.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: train_time + ylabel: Training Time (s) + y_scale: linear + hue_order: + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + errorbar: se + err_style: bars + xlim: + - 10 + - 500 + legend: + title: Metrics + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: compressor_metric_vs_predict_time.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: predict_time + ylabel: Prediction Time (s) + y_scale: linear + hue_order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + - file: metric_vs_predict_time.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: predict_time + ylabel: Prediction Time (s) + y_scale: linear + hue_order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + - file: string_metric_vs_predict_time.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: predict_time + ylabel: Prediction Time (s) + y_scale: linear + hue_order: + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + errorbar: se + err_style: bars + xlim: + - 10 + - 500 + legend: + title: Metrics + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 outs: - - path: kdd_nsl/logs/test_each_model/gzip_logistic/gzip/20 + - path: ddos/plots/compressor_metric_vs_accuracy.pdf hash: md5 - md5: 5f861380183240881b3d9a73a67b18e4.dir - size: 7980 - nfiles: 4 - - path: kdd_nsl/reports/test_each_model/gzip_logistic/gzip/20/score_dict.json + md5: 4e9ec7bc40de0eb9686c80001471c633 + size: 21223 + - path: ddos/plots/metric_vs_accuracy.pdf hash: md5 - md5: 5d8bf090bc8e34df8ed01766adfca5eb - size: 26 - grid_search@20-kdd_nsl-gzip_knn: - cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl - data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_knn_kdd_nsl hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=kdd_nsl/logs/gzip_knn/20 hydra.callbacks.study_dump.output_file=kdd_nsl/logs/gzip_knn/20/study.csv - files.directory=kdd_nsl files.reports=reports/gzip_knn/20 hydra.launcher.n_jobs=-1 - ++raise_exception=True --config-name gzip_knn --multirun + md5: 55f65e038473f751761c89450273e99f + size: 24492 + - path: ddos/plots/string_metric_vs_accuracy.pdf + hash: md5 + md5: 080a9ad5352a1c8a4ea0742d8fa2064d + size: 21341 + - path: ddos/plots/symmetric_vs_compressor_metric.pdf + hash: md5 + md5: 7868ca14c1c3b8cff7377e570b3cd1fd + size: 21164 + - path: ddos/plots/symmetric_vs_metric.pdf + hash: md5 + md5: 3a1fdd75ec075371e20a43f6fceb5865 + size: 31323 + - path: ddos/plots/symmetric_vs_metric_train_time.pdf + hash: md5 + md5: 2d477f3dae3b1985f0f06b4b50e47b6d + size: 32595 + - path: ddos/plots/symmetric_vs_string_metric.pdf + hash: md5 + md5: c1d20c58447ed0ce378586a0a741cd2f + size: 23231 + - path: ddos/plots/symmetric_vs_string_metric_train_time.pdf + hash: md5 + md5: 96008fa9732748ceca2292daa7b10d5c + size: 25192 + merge_condense@truthseeker: + cmd: python merge.py --big_dir truthseeker/plots/ --data_file clean/condense/knn.csv + --little_dir_data_file clean/condense/logistic.csv clean/condense/svc.csv --output_folder + truthseeker/plots/ --output_file condensed_merged.csv deps: - - path: conf/gzip_knn.yaml + - path: truthseeker/plots/clean/condense/knn.csv hash: md5 - md5: a58015cd6f327e171842b045a2524bfd - size: 2062 - - path: params.yaml + md5: bb4310ab3db56fef5287c968e923a946 + size: 1416979 + - path: truthseeker/plots/clean/condense/logistic.csv hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 - params: - conf/gzip_knn.yaml: - hydra: - run: - dir: ${dataset}/logs/${stage}/ - sweep: - dir: ??? - subdir: ${hydra.job.num} - callbacks: - study_dump: - _target_: database.OptunaStudyDumpCallback - storage: ${hydra.sweeper.storage} - study_name: ${hydra.sweeper.study_name} - directions: ${direction} - metric_names: ${optimizers} - output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv - sweeper: - sampler: - _target_: optuna.samplers.TPESampler - seed: 123 - consider_prior: true - prior_weight: 1.0 - consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 - multivariate: true - _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - direction: ${direction} - storage: sqlite:///optuna.db - study_name: ${dataset}_${model_name}_${stage} - n_trials: 2 - n_jobs: 2 - max_failure_rate: 1.0 - params: - model.init.k: 1,3,5,7,11 - +model.init.weights: uniform,distance - +model.init.algorithm: brute - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio - model_name: ${model_name} - ++data.sample.random_state: int(interval(1, 10000)) - launcher: - _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher - n_jobs: 8 - prefer: processes - verbose: 1 - timeout: - pre_dispatch: ${hydra.sweeper.n_jobs} - batch_size: auto - temp_folder: /tmp/deckard - max_nbytes: 100000 - mmap_mode: r - model_name: gzip_knn + md5: 2834667122a045b2815d6d8669d13855 + size: 1195763 + - path: truthseeker/plots/clean/condense/svc.csv + hash: md5 + md5: 5217ab37267115a9f3a887dda0ca9716 + size: 1837203 outs: - - path: kdd_nsl/logs/gzip_knn/20 + - path: truthseeker/plots/condensed_merged.csv hash: md5 - md5: 115a41970ebe91128cffd1e8c3b61498.dir - size: 1296774 - nfiles: 513 - - path: kdd_nsl/reports/gzip_knn/20/train/ + md5: fc78969e3c4df404d5954d906de1e2fe + size: 4494580 + plot_condense@truthseeker: + cmd: python -m deckard.layers.plots --path truthseeker/plots/ --file truthseeker/plots/condensed_merged.csv -c + conf/condensed_plots.yaml + deps: + - path: conf/condensed_plots.yaml hash: md5 - md5: 4d755edd5b38adc5b7f526e3d15ebac2.dir - size: 359689 - nfiles: 368 - grid_search@20-kdd_nsl-gzip_logistic: - cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl - data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_logistic - model.init.distance_matrix=null hydra.sweeper.study_name=gzip_logistic_kdd_nsl - hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 hydra.sweep.dir=kdd_nsl/logs/gzip_logistic/20 - hydra.callbacks.study_dump.output_file=kdd_nsl/logs/gzip_logistic/20/study.csv - files.directory=kdd_nsl files.reports=reports/gzip_logistic/20 hydra.launcher.n_jobs=-1 - ++raise_exception=True --config-name gzip_logistic --multirun + md5: af17fa58e7c01bcbb396ab08de5b78d5 + size: 1915 + - path: truthseeker/plots/condensed_merged.csv + hash: md5 + md5: fc78969e3c4df404d5954d906de1e2fe + size: 4494580 + params: + conf/condensed_plots.yaml: + cat_plot: + - file: condensing_method_vs_accuracy.pdf + digitize: Condensing Ratio + x: Condensing Method + hue: Condensing Ratio + y: accuracy + y_scale: linear + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + kind: boxen + col: Model + rotation: 45 + order: + - Random + - Medoid + - Sum + - SVC + - Hardness + - NearMiss + - KNN + xticklabels: + - Random + - Medoid + - Sum + - SVC + - Hardness + - NearMiss + - KNN + xlabels: Condensing Method + ylabels: Accuracy + legend_title: Sample Ratio + - file: condensing_method_vs_train_time.pdf + x: Condensing Method + hue: Condensing Ratio + digitize: Condensing Ratio + y: train_time + y_scale: log + kind: boxen + col: Model + rotation: 45 + order: + - Random + - Medoid + - Sum + - SVC + - Hardness + - NearMiss + - KNN + xticklabels: + - Random + - Medoid + - Sum + - SVC + - Hardness + - NearMiss + - k-NN + xlabels: Condensing Method + ylabels: Training Time + legend_title: Sample Ratio + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: condensing_method_vs_predict_time.pdf + x: Condensing Method + hue: Condensing Ratio + digitize: Condensing Ratio + y: predict_time + y_scale: log + col: Model + rotation: 45 + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + kind: boxen + order: + - Random + - Medoid + - Sum + - SVC + - Hardness + - NearMiss + - KNN + xticklabels: + - Random + - Medoid + - Sum + - SVC + - Hardness + - NearMiss + - k-NN + xlabels: Condensing Method + ylabels: Prediction Time + legend_title: Sample Ratio + outs: + - path: truthseeker/plots/condensing_method_vs_accuracy.pdf + hash: md5 + md5: 43daa962adc5b178b1ecd1ce631f7a82 + size: 79151 + - path: truthseeker/plots/condensing_method_vs_predict_time.pdf + hash: md5 + md5: 8052368bafdaa94f3135e094f68bd55c + size: 76155 + - path: truthseeker/plots/condensing_method_vs_train_time.pdf + hash: md5 + md5: 5a88008752dd280bc73cee793026b594 + size: 75513 + copy@truthseeker: + cmd: rm -rf ~/Gzip-KNN/figs/truthseeker/ && mkdir -p ~/Gzip-KNN/figs/truthseeker/ + && cp -r truthseeker/plots/* ~/Gzip-KNN/figs/truthseeker/ && rm -rf ~/Gzip-KNN/figs/truthseeker/.gitignore deps: - - path: conf/gzip_logistic.yaml + - path: truthseeker/plots/ hash: md5 - md5: 847d4d804fff0b6f2533f90820eebd04 - size: 2205 - - path: params.yaml + md5: fed82eba40c5f980d2ecc49dcd0bd732.dir + size: 15135833 + nfiles: 29 + clean@ddos-condense/knn: + cmd: python -m deckard.layers.clean_data -i ddos/reports/condense/knn.csv -o + ddos/plots/clean/condense/knn.csv -c conf/clean.yaml + deps: + - path: ddos/reports/condense/knn.csv hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 + md5: 1bd44b90db430d5d5785537fe732b2a6 + size: 2816581 params: - conf/gzip_logistic.yaml: - hydra: - run: - dir: ${dataset}/logs/${stage}/ - sweep: - dir: ??? - subdir: ${hydra.job.id} - callbacks: - study_dump: - _target_: database.OptunaStudyDumpCallback - storage: ${hydra.sweeper.storage} - study_name: ${hydra.sweeper.study_name} - directions: ${direction} - metric_names: ${optimizers} - output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv - sweeper: - sampler: - _target_: optuna.samplers.TPESampler - seed: 123 - consider_prior: true - prior_weight: 1.0 - consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 - multivariate: true - _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name}_${stage} - storage: sqlite:///optuna.db - n_jobs: 1 - n_trials: 1 - params: - +model.init.solver: saga - +model.init.penalty: l2,l1,l2,none - +model.init.tol: 1e-4,1e-3,1e-2 - +model.init.C: 1e-2,1e-1,1e0,1e1,1e2 - +model.init.fit_intercept: True,False - +model.init.class_weight: balanced,None - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio - model_name: ${model_name} - data.sample.random_state: int(interval(1, 10000)) - direction: ${direction} - max_failure_rate: 1.0 - launcher: - _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher - n_jobs: 8 - prefer: processes - verbose: 1 - timeout: - pre_dispatch: ${hydra.sweeper.n_jobs} - batch_size: auto - temp_folder: /tmp/deckard - max_nbytes: 100000 - mmap_mode: r - model_name: gzip_logistic + conf/clean.yaml: + drop_values: + accuracy: 0.0 + predict_time: 1.0 + replace: + model.init.metric: + jaro: Jaro + _winkler: -Winkler + levenshtein: Levenshtein + ncd: NCD + ratio: Ratio + seqRatio: SeqRatio + hamming: Hamming + gzip: GZIP + pkl: Pickle + bz2: BZ2 + zstd: ZSTD + lzma: LZMA + model_name: + GzipSVC: k-SVC + GzipLogisticRegressor: k-Logistic + GzipKNN: k-KNN + model.init.symmetric: + true: Symmetric + false: Asymmetric + model.init.sampling_method: + random: Random + medoid: Medoid + sum: Sum + svc: SVC + hardness: Hardness + nearmiss: NearMiss + knn: KNN + dataset: + ddos: DDoS + sms_spam: SMS Spam + kdd_nsl: KDD NSL + truthseeker: Truthseeker + model.init.m: + -1: 1 + replace_cols: + dataset: Dataset + model.init.metric: Metric + model.init.symmetric: Symmetric + model.init.sampling_method: Condensing Method + model.init.m: Condensing Ratio + model_name: Model outs: - - path: kdd_nsl/logs/gzip_logistic/20 - hash: md5 - md5: a8595a459255817fd6640cc39046e4a1.dir - size: 1388361 - nfiles: 513 - - path: kdd_nsl/reports/gzip_logistic/20/train/ + - path: ddos/plots/clean/condense/knn.csv hash: md5 - md5: 3873a418a31a09159aa0613c29f84612.dir - size: 559098 - nfiles: 362 - grid_search@20-kdd_nsl-gzip_svc: - cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl - data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_svc_kdd_nsl hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=kdd_nsl/logs/gzip_svc/20 hydra.callbacks.study_dump.output_file=kdd_nsl/logs/gzip_svc/20/study.csv - files.directory=kdd_nsl files.reports=reports/gzip_svc/20 hydra.launcher.n_jobs=-1 - ++raise_exception=True --config-name gzip_svc --multirun + md5: 3a1acbf38f64695356c6b052547800f7 + size: 2246228 + clean@ddos-condense/logistic: + cmd: python -m deckard.layers.clean_data -i ddos/reports/condense/logistic.csv + -o ddos/plots/clean/condense/logistic.csv -c conf/clean.yaml deps: - - path: conf/gzip_svc.yaml - hash: md5 - md5: 957922cb6993eb99866232d944a4a106 - size: 2131 - - path: params.yaml + - path: ddos/reports/condense/logistic.csv hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 + md5: 83a34019f32c069c16172b171a602a26 + size: 2848813 params: - conf/gzip_svc.yaml: - hydra: - run: - dir: ${dataset}/logs/${stage}/ - sweep: - dir: ??? - subdir: ${hydra.job.id} - callbacks: - study_dump: - _target_: database.OptunaStudyDumpCallback - storage: ${hydra.sweeper.storage} - study_name: ${hydra.sweeper.study_name} - directions: - - maximize - metric_names: - - accuracy - output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv - sweeper: - sampler: - _target_: optuna.samplers.TPESampler - seed: 123 - consider_prior: true - prior_weight: 1.0 - consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 - multivariate: true - _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name}_${stage} - storage: sqlite:///optuna.db - n_jobs: 2 - n_trials: 2 - params: - +model.init.kernel: rbf,precomputed - +model.init.C: 1e-2,1e-1,1e0,1e1,1e2 - +model.init.gamma: scale,auto - +model.init.class_weight: balanced,null - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio - model_name: ${model_name} - data.sample.random_state: int(interval(1, 10000)) - direction: ${direction} - max_failure_rate: 1.0 - launcher: - _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher - n_jobs: 8 - prefer: processes - verbose: 1 - timeout: - pre_dispatch: ${hydra.sweeper.n_jobs} - batch_size: auto - temp_folder: /tmp/deckard - max_nbytes: 100000 - mmap_mode: r - model_name: gzip_svc + conf/clean.yaml: + drop_values: + accuracy: 0.0 + predict_time: 1.0 + replace: + model.init.metric: + jaro: Jaro + _winkler: -Winkler + levenshtein: Levenshtein + ncd: NCD + ratio: Ratio + seqRatio: SeqRatio + hamming: Hamming + gzip: GZIP + pkl: Pickle + bz2: BZ2 + zstd: ZSTD + lzma: LZMA + model_name: + GzipSVC: k-SVC + GzipLogisticRegressor: k-Logistic + GzipKNN: k-KNN + model.init.symmetric: + true: Symmetric + false: Asymmetric + model.init.sampling_method: + random: Random + medoid: Medoid + sum: Sum + svc: SVC + hardness: Hardness + nearmiss: NearMiss + knn: KNN + dataset: + ddos: DDoS + sms_spam: SMS Spam + kdd_nsl: KDD NSL + truthseeker: Truthseeker + model.init.m: + -1: 1 + replace_cols: + dataset: Dataset + model.init.metric: Metric + model.init.symmetric: Symmetric + model.init.sampling_method: Condensing Method + model.init.m: Condensing Ratio + model_name: Model outs: - - path: kdd_nsl/logs/gzip_svc/20 - hash: md5 - md5: 1e27f2d1dbecceabc4ae0cd019e492f6.dir - size: 1348650 - nfiles: 513 - - path: kdd_nsl/reports/gzip_svc/20/train/ + - path: ddos/plots/clean/condense/logistic.csv hash: md5 - md5: 0fd2193b53abea1c13ef342dfa19f2ee.dir - size: 554769 - nfiles: 384 - grid_search@20-truthseeker-gzip_knn: - cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker - data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_knn_truthseeker hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=truthseeker/logs/gzip_knn/20 hydra.callbacks.study_dump.output_file=truthseeker/logs/gzip_knn/20/study.csv - files.directory=truthseeker files.reports=reports/gzip_knn/20 hydra.launcher.n_jobs=-1 - ++raise_exception=True --config-name gzip_knn --multirun + md5: 37106f4477460267406dd80d90987cac + size: 2287660 + merge_condense@ddos: + cmd: python merge.py --big_dir ddos/plots/ --data_file clean/condense/knn.csv + --little_dir_data_file clean/condense/logistic.csv clean/condense/svc.csv --output_folder + ddos/plots/ --output_file condensed_merged.csv deps: - - path: conf/gzip_knn.yaml + - path: ddos/plots/clean/condense/knn.csv hash: md5 - md5: a58015cd6f327e171842b045a2524bfd - size: 2062 - - path: params.yaml + md5: 3a1acbf38f64695356c6b052547800f7 + size: 2246228 + - path: ddos/plots/clean/condense/logistic.csv hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 - params: - conf/gzip_knn.yaml: - hydra: - run: - dir: ${dataset}/logs/${stage}/ - sweep: - dir: ??? - subdir: ${hydra.job.num} - callbacks: - study_dump: - _target_: database.OptunaStudyDumpCallback - storage: ${hydra.sweeper.storage} - study_name: ${hydra.sweeper.study_name} - directions: ${direction} - metric_names: ${optimizers} - output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv - sweeper: - sampler: - _target_: optuna.samplers.TPESampler - seed: 123 - consider_prior: true - prior_weight: 1.0 - consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 - multivariate: true - _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - direction: ${direction} - storage: sqlite:///optuna.db - study_name: ${dataset}_${model_name}_${stage} - n_trials: 2 - n_jobs: 2 - max_failure_rate: 1.0 - params: - model.init.k: 1,3,5,7,11 - +model.init.weights: uniform,distance - +model.init.algorithm: brute - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio - model_name: ${model_name} - ++data.sample.random_state: int(interval(1, 10000)) - launcher: - _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher - n_jobs: 8 - prefer: processes - verbose: 1 - timeout: - pre_dispatch: ${hydra.sweeper.n_jobs} - batch_size: auto - temp_folder: /tmp/deckard - max_nbytes: 100000 - mmap_mode: r - model_name: gzip_knn + md5: 37106f4477460267406dd80d90987cac + size: 2287660 + - path: ddos/plots/clean/condense/svc.csv + hash: md5 + md5: a016c3958a5bedbce540628908c94082 + size: 2336402 outs: - - path: truthseeker/logs/gzip_knn/20 + - path: ddos/plots/condensed_merged.csv hash: md5 - md5: 4282261388bfb47a0ecc305c43c0774e.dir - size: 1308247 - nfiles: 513 - - path: truthseeker/reports/gzip_knn/20/train/ + md5: a509ca15f5da44a1c7fd5fa86541824a + size: 6939926 + plot_condense@ddos: + cmd: python -m deckard.layers.plots --path ddos/plots/ --file ddos/plots/condensed_merged.csv -c + conf/condensed_plots.yaml + deps: + - path: conf/condensed_plots.yaml hash: md5 - md5: b10cdd98077d4675ca84697074387129.dir - size: 347576 - nfiles: 372 - grid_search@20-truthseeker-gzip_logistic: - cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker - data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_logistic - model.init.distance_matrix=null hydra.sweeper.study_name=gzip_logistic_truthseeker - hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 hydra.sweep.dir=truthseeker/logs/gzip_logistic/20 - hydra.callbacks.study_dump.output_file=truthseeker/logs/gzip_logistic/20/study.csv - files.directory=truthseeker files.reports=reports/gzip_logistic/20 hydra.launcher.n_jobs=-1 - ++raise_exception=True --config-name gzip_logistic --multirun + md5: af17fa58e7c01bcbb396ab08de5b78d5 + size: 1915 + - path: ddos/plots/condensed_merged.csv + hash: md5 + md5: a509ca15f5da44a1c7fd5fa86541824a + size: 6939926 + params: + conf/condensed_plots.yaml: + cat_plot: + - file: condensing_method_vs_accuracy.pdf + digitize: Condensing Ratio + x: Condensing Method + hue: Condensing Ratio + y: accuracy + y_scale: linear + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + kind: boxen + col: Model + rotation: 45 + order: + - Random + - Medoid + - Sum + - SVC + - Hardness + - NearMiss + - KNN + xticklabels: + - Random + - Medoid + - Sum + - SVC + - Hardness + - NearMiss + - KNN + xlabels: Condensing Method + ylabels: Accuracy + legend_title: Sample Ratio + - file: condensing_method_vs_train_time.pdf + x: Condensing Method + hue: Condensing Ratio + digitize: Condensing Ratio + y: train_time + y_scale: log + kind: boxen + col: Model + rotation: 45 + order: + - Random + - Medoid + - Sum + - SVC + - Hardness + - NearMiss + - KNN + xticklabels: + - Random + - Medoid + - Sum + - SVC + - Hardness + - NearMiss + - k-NN + xlabels: Condensing Method + ylabels: Training Time + legend_title: Sample Ratio + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: condensing_method_vs_predict_time.pdf + x: Condensing Method + hue: Condensing Ratio + digitize: Condensing Ratio + y: predict_time + y_scale: log + col: Model + rotation: 45 + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + kind: boxen + order: + - Random + - Medoid + - Sum + - SVC + - Hardness + - NearMiss + - KNN + xticklabels: + - Random + - Medoid + - Sum + - SVC + - Hardness + - NearMiss + - k-NN + xlabels: Condensing Method + ylabels: Prediction Time + legend_title: Sample Ratio + outs: + - path: ddos/plots/condensing_method_vs_accuracy.pdf + hash: md5 + md5: 799f438072661472c3581b7783187e27 + size: 95036 + - path: ddos/plots/condensing_method_vs_predict_time.pdf + hash: md5 + md5: e9d99a4d20977d908bc6125b4d3ec64c + size: 92611 + - path: ddos/plots/condensing_method_vs_train_time.pdf + hash: md5 + md5: 38d50e2531e75b0ed7e25f99fe3a020a + size: 92297 + plot_condense@kdd_nsl: + cmd: python -m deckard.layers.plots --path kdd_nsl/plots/ --file kdd_nsl/plots/condensed_merged.csv -c + conf/condensed_plots.yaml deps: - - path: conf/gzip_logistic.yaml + - path: conf/condensed_plots.yaml hash: md5 - md5: a051c1bd6690aa80000909c49eb45023 - size: 2189 - - path: params.yaml + md5: af17fa58e7c01bcbb396ab08de5b78d5 + size: 1915 + - path: kdd_nsl/plots/condensed_merged.csv hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 + md5: 3ce3f32f881b93574c5e475e5617847e + size: 5582885 params: - conf/gzip_logistic.yaml: - hydra: - run: - dir: ${dataset}/logs/${stage}/ - sweep: - dir: ??? - subdir: ${hydra.job.id} - callbacks: - study_dump: - _target_: database.OptunaStudyDumpCallback - storage: ${hydra.sweeper.storage} - study_name: ${hydra.sweeper.study_name} - directions: ${direction} - metric_names: ${optimizers} - output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv - sweeper: - sampler: - _target_: optuna.samplers.TPESampler - consider_prior: true - prior_weight: 1.0 - consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 - multivariate: true - _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name}_${stage} - storage: sqlite:///optuna.db - n_jobs: 1 - n_trials: 1 - params: - +model.init.solver: saga - +model.init.penalty: l2,l1,l2,none - +model.init.tol: 1e-4,1e-3,1e-2 - +model.init.C: 1e-2,1e-1,1e0,1e1,1e2 - +model.init.fit_intercept: True,False - +model.init.class_weight: balanced,None - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio - model_name: ${model_name} - data.sample.random_state: int(interval(1, 10000)) - direction: ${direction} - max_failure_rate: 1.0 - launcher: - _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher - n_jobs: 8 - prefer: processes - verbose: 1 - timeout: - pre_dispatch: ${hydra.sweeper.n_jobs} - batch_size: auto - temp_folder: /tmp/deckard - max_nbytes: 100000 - mmap_mode: r - model_name: gzip_logistic + conf/condensed_plots.yaml: + cat_plot: + - file: condensing_method_vs_accuracy.pdf + digitize: Condensing Ratio + x: Condensing Method + hue: Condensing Ratio + y: accuracy + y_scale: linear + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + kind: boxen + col: Model + rotation: 45 + order: + - Random + - Medoid + - Sum + - SVC + - Hardness + - NearMiss + - KNN + xticklabels: + - Random + - Medoid + - Sum + - SVC + - Hardness + - NearMiss + - KNN + xlabels: Condensing Method + ylabels: Accuracy + legend_title: Sample Ratio + - file: condensing_method_vs_train_time.pdf + x: Condensing Method + hue: Condensing Ratio + digitize: Condensing Ratio + y: train_time + y_scale: log + kind: boxen + col: Model + rotation: 45 + order: + - Random + - Medoid + - Sum + - SVC + - Hardness + - NearMiss + - KNN + xticklabels: + - Random + - Medoid + - Sum + - SVC + - Hardness + - NearMiss + - k-NN + xlabels: Condensing Method + ylabels: Training Time + legend_title: Sample Ratio + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + - file: condensing_method_vs_predict_time.pdf + x: Condensing Method + hue: Condensing Ratio + digitize: Condensing Ratio + y: predict_time + y_scale: log + col: Model + rotation: 45 + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + kind: boxen + order: + - Random + - Medoid + - Sum + - SVC + - Hardness + - NearMiss + - KNN + xticklabels: + - Random + - Medoid + - Sum + - SVC + - Hardness + - NearMiss + - k-NN + xlabels: Condensing Method + ylabels: Prediction Time + legend_title: Sample Ratio + outs: + - path: kdd_nsl/plots/condensing_method_vs_accuracy.pdf + hash: md5 + md5: 02804fa85242e8873e257703d36292b3 + size: 93543 + - path: kdd_nsl/plots/condensing_method_vs_predict_time.pdf + hash: md5 + md5: a19ac9d498ba7a48818804efd89cc7ac + size: 89049 + - path: kdd_nsl/plots/condensing_method_vs_train_time.pdf + hash: md5 + md5: 0b856f827819de35d07371b6801edf04 + size: 88882 + plot_merged: + cmd: python -m deckard.layers.plots --path combined/plots/ --file combined/plots/merged.csv -c + conf/merged_plots.yaml + deps: + - path: combined/plots/merged.csv + hash: md5 + md5: a7ca9f759ab63a1649889ad57e928578 + size: 33289497 + - path: conf/merged_plots.yaml + hash: md5 + md5: 07cbd496003579ae0a5dc56bf03dc1a5 + size: 8296 + params: + conf/merged_plots.yaml: + cat_plot: + - file: models_vs_accuracy.pdf + x: Model + y: accuracy + hue: data.sample.train_size + errorbar: se + kind: boxen + titles: + xlabels: ' ' + ylabels: Accuracy + legend_title: Samples + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + rotation: 90 + col: Dataset + order: + - k-KNN + - k-SVC + - k-Logistic + col_order: + - DDoS + - SMS Spam + - KDD NSL + - Truthseeker + - file: models_vs_train_time.pdf + x: Model + y: train_time + hue: data.sample.train_size + errorbar: se + kind: boxen + titles: + xlabels: ' ' + ylabels: $t_t$ (s) + legend_title: Samples + rotation: 90 + col: Dataset + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + y_scale: log + order: + - k-KNN + - k-SVC + - k-Logistic + col_order: + - DDoS + - SMS Spam + - KDD NSL + - Truthseeker + - file: models_vs_predict_time.pdf + x: Model + y: predict_time_per_sample + hue: data.sample.train_size + errorbar: se + kind: boxen + titles: + xlabels: ' ' + ylabels: $t_i$ (s) + legend_title: Samples + col: Dataset + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + rotation: 90 + y_scale: log + order: + - k-KNN + - k-SVC + - k-Logistic + col_order: + - DDoS + - SMS Spam + - KDD NSL + - Truthseeker + - file: symmetric_models_vs_accuracy.pdf + row: Model + x: data.sample.train_size + y: accuracy + hue: Symmetric + errorbar: se + kind: boxen + titles: + xlabels: Samples + ylabels: Accuracy + legend_title: ' ' + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + rotation: 90 + col: Dataset + col_order: + - DDoS + - SMS Spam + - KDD NSL + - Truthseeker + row_order: + - k-KNN + - k-SVC + - k-Logistic + - file: symmetric_models_vs_train_time.pdf + row: Model + x: data.sample.train_size + y: train_time_per_sample + hue: Symmetric + errorbar: se + kind: boxen + titles: + xlabels: ' ' + ylabels: $t_t$ (s) + legend_title: ' ' + rotation: 90 + col: Dataset + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + y_scale: log + col_order: + - DDoS + - SMS Spam + - KDD NSL + - Truthseeker + row_order: + - k-KNN + - k-SVC + - k-Logistic + - file: symmetric_models_vs_predict_time.pdf + x: data.sample.train_size + row: Model + y: predict_time_per_sample + hue: Symmetric + errorbar: se + kind: boxen + titles: + xlabels: ' ' + ylabels: $t_i$ (s) + legend_title: ' ' + col: Dataset + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + rotation: 90 + y_scale: log + col_order: + - DDoS + - SMS Spam + - KDD NSL + - Truthseeker + row_order: + - k-KNN + - k-SVC + - k-Logistic + - file: condensing_methods_vs_accuracy.pdf + x: Model + y: accuracy + hue: Condensing Method + errorbar: se + kind: boxen + titles: + xlabels: ' ' + ylabels: Accuracy + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + rotation: 90 + col: Dataset + col_order: + - DDoS + - SMS Spam + - KDD NSL + - Truthseeker + order: + - k-KNN + - k-SVC + - k-Logistic + legend_title: Condensing Method + - file: condensing_methods_vs_train_time.pdf + x: Model + y: train_time + hue: Condensing Method + errorbar: se + kind: boxen + titles: + xlabels: ' ' + ylabels: $t_t$ (s) + legend_title: Condensing Method + rotation: 90 + col: Dataset + y_scale: log + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + col_order: + - DDoS + - SMS Spam + - KDD NSL + - Truthseeker + order: + - k-KNN + - k-SVC + - k-Logistic + - file: condensing_methods_vs_predict_time.pdf + x: Model + y: predict_time_per_sample + hue: Condensing Method + errorbar: se + kind: boxen + titles: + xlabels: ' ' + ylabels: $t_i$ (s) + legend_title: Condensing Method + col: Dataset + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 14 + rotation: 90 + y_scale: log + col_order: + - DDoS + - SMS Spam + - KDD NSL + - Truthseeker + order: + - k-KNN + - k-SVC + - k-Logistic + line_plot: + - file: compressor_metric_vs_accuracy.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: accuracy + ylabel: Accuracy + hue_order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + errorbar: se + err_style: bars + xlim: + - 10 + - 500 + style: Dataset + style_order: + - DDoS + - SMS Spam + - KDD NSL + - Truthseeker + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 12 + - file: string_metric_vs_accuracy.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: accuracy + ylabel: Accuracy + hue_order: + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + errorbar: se + err_style: bars + xlim: + - 10 + - 500 + style: Dataset + style_order: + - DDoS + - SMS Spam + - KDD NSL + - Truthseeker + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 12 + - file: string_metric_vs_train_time.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: train_time + ylabel: $t_t$ (s) + hue_order: + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + errorbar: se + err_style: bars + xlim: + - 10 + - 500 + style: Dataset + style_order: + - DDoS + - SMS Spam + - KDD NSL + - Truthseeker + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 12 + y_scale: log + - file: compressor_metric_vs_train_time.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: train_time + ylabel: $t_t$ (s) + hue_order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + errorbar: se + err_style: bars + xlim: + - 10 + - 500 + style: Dataset + style_order: + - DDoS + - SMS Spam + - KDD NSL + - Truthseeker + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 12 + y_scale: log + - file: string_metric_vs_predict_time.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: predict_time_per_sample + ylabel: $t_i$ (s) + hue_order: + - Levenshtein + - Ratio + - Hamming + - Jaro + - Jaro-Winkler + - SeqRatio + errorbar: se + err_style: bars + xlim: + - 10 + - 500 + style: Dataset + style_order: + - DDoS + - SMS Spam + - KDD NSL + - Truthseeker + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 12 + y_scale: log + - file: compressor_metric_vs_predict_time.pdf + hue: Metric + title: + x: data.sample.train_size + xlabel: Number of Training Samples + y: predict_time_per_sample + ylabel: $t_i$ (s) + hue_order: + - GZIP + - Pickle + - BZ2 + - ZSTD + - LZMA + errorbar: se + err_style: bars + xlim: + - 10 + - 500 + style: Dataset + style_order: + - DDoS + - SMS Spam + - KDD NSL + - Truthseeker + legend: + bbox_to_anchor: + - 1.05 + - 0.5 + loc: center left + prop: + size: 12 + y_scale: log outs: - - path: truthseeker/logs/gzip_logistic/20 + - path: combined/plots/compressor_metric_vs_accuracy.pdf hash: md5 - md5: 03df4633c0f5202339af4e4ce28986a7.dir - size: 1385960 - nfiles: 513 - - path: truthseeker/reports/gzip_logistic/20/train/ + md5: 48aea5d713cb4eac12301c89d815af62 + size: 23029 + - path: combined/plots/compressor_metric_vs_predict_time.pdf hash: md5 - md5: b8710b865151f76a1dba111e029ba3e0.dir - size: 555685 - nfiles: 357 - grid_search@20-truthseeker-gzip_svc: - cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker - data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_svc_truthseeker hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=truthseeker/logs/gzip_svc/20 hydra.callbacks.study_dump.output_file=truthseeker/logs/gzip_svc/20/study.csv - files.directory=truthseeker files.reports=reports/gzip_svc/20 hydra.launcher.n_jobs=-1 - ++raise_exception=True --config-name gzip_svc --multirun - deps: - - path: conf/gzip_svc.yaml + md5: 7d690d0d9381702841645a8cc47c4228 + size: 23691 + - path: combined/plots/compressor_metric_vs_train_time.pdf hash: md5 - md5: 71702231d42f4d68a2237772b3475697 - size: 2115 - - path: params.yaml + md5: 7684f9f2d3fd807f5ca0791947a4f495 + size: 23217 + - path: combined/plots/condensing_methods_vs_accuracy.pdf hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 - params: - conf/gzip_svc.yaml: - hydra: - run: - dir: ${dataset}/logs/${stage}/ - sweep: - dir: ??? - subdir: ${hydra.job.id} - callbacks: - study_dump: - _target_: database.OptunaStudyDumpCallback - storage: ${hydra.sweeper.storage} - study_name: ${hydra.sweeper.study_name} - directions: - - maximize - metric_names: - - accuracy - output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv - sweeper: - sampler: - _target_: optuna.samplers.TPESampler - consider_prior: true - prior_weight: 1.0 - consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 - multivariate: true - _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name}_${stage} - storage: sqlite:///optuna.db - n_jobs: 2 - n_trials: 2 - params: - +model.init.kernel: rbf,precomputed - +model.init.C: 1e-2,1e-1,1e0,1e1,1e2 - +model.init.gamma: scale,auto - +model.init.class_weight: balanced,null - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio - model_name: ${model_name} - data.sample.random_state: int(interval(1, 10000)) - direction: ${direction} - max_failure_rate: 1.0 - launcher: - _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher - n_jobs: 8 - prefer: processes - verbose: 1 - timeout: - pre_dispatch: ${hydra.sweeper.n_jobs} - batch_size: auto - temp_folder: /tmp/deckard - max_nbytes: 100000 - mmap_mode: r - model_name: gzip_svc - outs: - - path: truthseeker/logs/gzip_svc/20 + md5: ee93a76c66f25ab3f33d04e66dbc6c89 + size: 61419 + - path: combined/plots/condensing_methods_vs_predict_time.pdf hash: md5 - md5: ff0d33bc9c6ce8637eedd463d73c22a3.dir - size: 1352377 - nfiles: 513 - - path: truthseeker/reports/gzip_svc/20/train/ + md5: c4d4d6309ccb922f0896c0682ebc62bb + size: 75130 + - path: combined/plots/condensing_methods_vs_train_time.pdf hash: md5 - md5: 7d179884b582e5b8ef27863c6b6f1445.dir - size: 545932 - nfiles: 384 - grid_search@20-sms_spam-gzip_knn: - cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam - data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_knn_sms_spam hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=sms_spam/logs/gzip_knn/20 hydra.callbacks.study_dump.output_file=sms_spam/logs/gzip_knn/20/study.csv - files.directory=sms_spam files.reports=reports/gzip_knn/20 hydra.launcher.n_jobs=-1 - ++raise_exception=True --config-name gzip_knn --multirun - deps: - - path: conf/gzip_knn.yaml + md5: 5630caa9d7cd712e9eade1e3f1f989ce + size: 74744 + - path: combined/plots/models_vs_accuracy.pdf hash: md5 - md5: a58015cd6f327e171842b045a2524bfd - size: 2062 - - path: params.yaml + md5: 89fbf635c37ad049a9d7581c819232fb + size: 44138 + - path: combined/plots/models_vs_predict_time.pdf hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 - params: - conf/gzip_knn.yaml: - hydra: - run: - dir: ${dataset}/logs/${stage}/ - sweep: - dir: ??? - subdir: ${hydra.job.num} - callbacks: - study_dump: - _target_: database.OptunaStudyDumpCallback - storage: ${hydra.sweeper.storage} - study_name: ${hydra.sweeper.study_name} - directions: ${direction} - metric_names: ${optimizers} - output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv - sweeper: - sampler: - _target_: optuna.samplers.TPESampler - seed: 123 - consider_prior: true - prior_weight: 1.0 - consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 - multivariate: true - _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - direction: ${direction} - storage: sqlite:///optuna.db - study_name: ${dataset}_${model_name}_${stage} - n_trials: 2 - n_jobs: 2 - max_failure_rate: 1.0 - params: - model.init.k: 1,3,5,7,11 - +model.init.weights: uniform,distance - +model.init.algorithm: brute - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio - model_name: ${model_name} - ++data.sample.random_state: int(interval(1, 10000)) - launcher: - _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher - n_jobs: 8 - prefer: processes - verbose: 1 - timeout: - pre_dispatch: ${hydra.sweeper.n_jobs} - batch_size: auto - temp_folder: /tmp/deckard - max_nbytes: 100000 - mmap_mode: r - model_name: gzip_knn - outs: - - path: sms_spam/logs/gzip_knn/20 + md5: 7426493cc2eea4a3c795774dca34c3d7 + size: 52991 + - path: combined/plots/models_vs_train_time.pdf hash: md5 - md5: e9e56d342ed2c474422627ff4d66a2bf.dir - size: 1299391 - nfiles: 513 - - path: sms_spam/reports/gzip_knn/20/train/ + md5: 8e94cfaf2d29f7900c5a79b728d22a3d + size: 52701 + - path: combined/plots/string_metric_vs_accuracy.pdf hash: md5 - md5: 125eb4c7a912bd644ad2d883b63756e2.dir - size: 342531 - nfiles: 374 - grid_search@20-sms_spam-gzip_logistic: - cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam - data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_logistic - model.init.distance_matrix=null hydra.sweeper.study_name=gzip_logistic_sms_spam - hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 hydra.sweep.dir=sms_spam/logs/gzip_logistic/20 - hydra.callbacks.study_dump.output_file=sms_spam/logs/gzip_logistic/20/study.csv - files.directory=sms_spam files.reports=reports/gzip_logistic/20 hydra.launcher.n_jobs=-1 - ++raise_exception=True --config-name gzip_logistic --multirun + md5: 5da7b7e5fd2f428af3936550d29149ea + size: 24176 + - path: combined/plots/string_metric_vs_predict_time.pdf + hash: md5 + md5: ca75801d85720c0bab65447ab9310868 + size: 24398 + - path: combined/plots/string_metric_vs_train_time.pdf + hash: md5 + md5: 9053fd4d1b86e8a6453c7862b2b7483a + size: 24458 + - path: combined/plots/symmetric_models_vs_accuracy.pdf + hash: md5 + md5: 14906a8e21db525a46910f6cc9776b37 + size: 64101 + - path: combined/plots/symmetric_models_vs_predict_time.pdf + hash: md5 + md5: 20bbaa2bd5fb395b8d579246d0364937 + size: 80822 + - path: combined/plots/symmetric_models_vs_train_time.pdf + hash: md5 + md5: b38a529d8bfd5dd25d8ffb4b57859225 + size: 81185 + copy@combined: + cmd: rm -rf ~/Gzip-KNN/figs/combined/ && mkdir -p ~/Gzip-KNN/figs/combined/ && + cp -r combined/plots/* ~/Gzip-KNN/figs/combined/ && rm -rf ~/Gzip-KNN/figs/combined/.gitignore deps: - - path: conf/gzip_logistic.yaml + - path: combined/plots/ hash: md5 - md5: 847d4d804fff0b6f2533f90820eebd04 - size: 2205 - - path: params.yaml + md5: fad9d0d19a575c84c55daa1cbd67b514.dir + size: 34019697 + nfiles: 16 + copy@ddos: + cmd: rm -rf ~/Gzip-KNN/figs/ddos/ && mkdir -p ~/Gzip-KNN/figs/ddos/ && cp -r ddos/plots/* + ~/Gzip-KNN/figs/ddos/ && rm -rf ~/Gzip-KNN/figs/ddos/.gitignore + deps: + - path: ddos/plots/ hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 + md5: 377bb3bca5774b42a32ad343d074462d.dir + size: 21089165 + nfiles: 29 + copy@kdd_nsl: + cmd: rm -rf ~/Gzip-KNN/figs/kdd_nsl/ && mkdir -p ~/Gzip-KNN/figs/kdd_nsl/ && cp + -r kdd_nsl/plots/* ~/Gzip-KNN/figs/kdd_nsl/ && rm -rf ~/Gzip-KNN/figs/kdd_nsl/.gitignore + deps: + - path: kdd_nsl/plots/ + hash: md5 + md5: dc76f478efb0cbc46246b1ee240687fe.dir + size: 17691329 + nfiles: 29 + clean_merged: + cmd: python -m deckard.layers.clean_data -i combined/plots/merged.csv -o combined/plots/clean_merged.csv + -c conf/clean.yaml + deps: + - path: combined/plots/merged.csv + hash: md5 + md5: 14b7b6d947a96066ff2ad028680511d5 + size: 33462041 + - path: conf/clean.yaml + hash: md5 + md5: 3fdcad8f5751398ace2b94aaa74e4e18 + size: 1023 params: - conf/gzip_logistic.yaml: - hydra: - run: - dir: ${dataset}/logs/${stage}/ - sweep: - dir: ??? - subdir: ${hydra.job.id} - callbacks: - study_dump: - _target_: database.OptunaStudyDumpCallback - storage: ${hydra.sweeper.storage} - study_name: ${hydra.sweeper.study_name} - directions: ${direction} - metric_names: ${optimizers} - output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv - sweeper: - sampler: - _target_: optuna.samplers.TPESampler - seed: 123 - consider_prior: true - prior_weight: 1.0 - consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 - multivariate: true - _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name}_${stage} - storage: sqlite:///optuna.db - n_jobs: 1 - n_trials: 1 - params: - +model.init.solver: saga - +model.init.penalty: l2,l1,l2,none - +model.init.tol: 1e-4,1e-3,1e-2 - +model.init.C: 1e-2,1e-1,1e0,1e1,1e2 - +model.init.fit_intercept: True,False - +model.init.class_weight: balanced,None - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio - model_name: ${model_name} - data.sample.random_state: int(interval(1, 10000)) - direction: ${direction} - max_failure_rate: 1.0 - launcher: - _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher - n_jobs: 8 - prefer: processes - verbose: 1 - timeout: - pre_dispatch: ${hydra.sweeper.n_jobs} - batch_size: auto - temp_folder: /tmp/deckard - max_nbytes: 100000 - mmap_mode: r - model_name: gzip_logistic + conf/clean.yaml: + drop_values: + accuracy: 0.0 + predict_time: 1.0 + replace: + model.init.metric: + jaro: Jaro + _winkler: -Winkler + levenshtein: Levenshtein + ncd: NCD + ratio: Ratio + seqRatio: SeqRatio + hamming: Hamming + gzip: GZIP + pkl: Pickle + bz2: BZ2 + zstd: ZSTD + lzma: LZMA + model_name: + GzipSVC: k-SVC + GzipLogisticRegressor: k-Logistic + GzipKNN: k-KNN + model.init.symmetric: + true: Symmetric + false: Asymmetric + model.init.sampling_method: + random: Random + medoid: Medoid + sum: Sum + svc: SVC + hardness: Hardness + nearmiss: NearMiss + knn: KNN + dataset: + ddos: DDoS + sms_spam: SMS Spam + kdd_nsl: KDD NSL + truthseeker: Truthseeker + model.init.m: + -1: 1 + replace_cols: + dataset: Dataset + model.init.metric: Metric + model.init.symmetric: Symmetric + model.init.sampling_method: Condensing Method + model.init.m: Condensing Ratio + model_name: Model + outs: + - path: combined/plots/clean_merged.csv + hash: md5 + md5: c156f464018e66193d396f270be55786 + size: 33579589 + data: + cmd: python data_prep.py + deps: + - path: data_prep.py + hash: md5 + md5: 18244c921ed2d7cbf25b8362b3ca33aa + size: 5146 outs: - - path: sms_spam/logs/gzip_logistic/20 + - path: raw_data/ + hash: md5 + md5: 33d46673e0631bef98be9e8991ed1ed1.dir + size: 50328647 + nfiles: 8 + parse_params: + cmd: python -m deckard.layers.parse + deps: + - path: conf/data/default.yaml + hash: md5 + md5: 86639d6672cfd9529dda3e2ae4036c01 + size: 22 + - path: conf/default.yaml + hash: md5 + md5: a0a533f84a7ffce197e0db5439219faf + size: 1504 + - path: conf/files/default.yaml hash: md5 - md5: cbf374500fd5125d98f2f65d4a5b2fa2.dir - size: 1374488 - nfiles: 513 - - path: sms_spam/reports/gzip_logistic/20/train/ + md5: 7a2df5f8b98699376c3fb4da05d70dea + size: 306 + - path: conf/model/default.yaml hash: md5 - md5: 5a05a497802592f4fc283e42d47d3c3b.dir - size: 551814 - nfiles: 356 - grid_search@20-sms_spam-gzip_svc: - cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam - data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_svc_sms_spam hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=sms_spam/logs/gzip_svc/20 hydra.callbacks.study_dump.output_file=sms_spam/logs/gzip_svc/20/study.csv - files.directory=sms_spam files.reports=reports/gzip_svc/20 hydra.launcher.n_jobs=-1 - ++raise_exception=True --config-name gzip_svc --multirun - deps: - - path: conf/gzip_svc.yaml + md5: 39dc7512b1d19fea54550b080d880153 + size: 27 + - path: conf/scorers/default.yaml hash: md5 - md5: 957922cb6993eb99866232d944a4a106 - size: 2131 + md5: d8d00e7d284ea68b1244743dfef8f00c + size: 280 + outs: - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead size: 1469 - params: - conf/gzip_svc.yaml: - hydra: - run: - dir: ${dataset}/logs/${stage}/ - sweep: - dir: ??? - subdir: ${hydra.job.id} - callbacks: - study_dump: - _target_: database.OptunaStudyDumpCallback - storage: ${hydra.sweeper.storage} - study_name: ${hydra.sweeper.study_name} - directions: - - maximize - metric_names: - - accuracy - output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv - sweeper: - sampler: - _target_: optuna.samplers.TPESampler - seed: 123 - consider_prior: true - prior_weight: 1.0 - consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 - multivariate: true - _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name}_${stage} - storage: sqlite:///optuna.db - n_jobs: 2 - n_trials: 2 - params: - +model.init.kernel: rbf,precomputed - +model.init.C: 1e-2,1e-1,1e0,1e1,1e2 - +model.init.gamma: scale,auto - +model.init.class_weight: balanced,null - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio - model_name: ${model_name} - data.sample.random_state: int(interval(1, 10000)) - direction: ${direction} - max_failure_rate: 1.0 - launcher: - _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher - n_jobs: 8 - prefer: processes - verbose: 1 - timeout: - pre_dispatch: ${hydra.sweeper.n_jobs} - batch_size: auto - temp_folder: /tmp/deckard - max_nbytes: 100000 - mmap_mode: r - model_name: gzip_svc - outs: - - path: sms_spam/logs/gzip_svc/20 - hash: md5 - md5: 79953e6df3b0bc872d6e777c46915b12.dir - size: 1340891 - nfiles: 513 - - path: sms_spam/reports/gzip_svc/20/train/ - hash: md5 - md5: 61a986d1b7c3deaa918526f61eb9897b.dir - size: 542016 - nfiles: 384 - grid_search@20-ddos-gzip_knn: - cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=20 - data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_knn_ddos hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=ddos/logs/gzip_knn/20 hydra.callbacks.study_dump.output_file=ddos/logs/gzip_knn/20/study.csv - files.directory=ddos files.reports=reports/gzip_knn/20 hydra.launcher.n_jobs=-1 - ++raise_exception=True --config-name gzip_knn --multirun + train: + cmd: python -m deckard.layers.experiment train deps: - - path: conf/gzip_knn.yaml - hash: md5 - md5: ceff1a602afc3323e49200a1da539310 - size: 2046 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead size: 1469 + - path: raw_data/ + hash: md5 + md5: 33d46673e0631bef98be9e8991ed1ed1.dir + size: 50328647 + nfiles: 8 params: - conf/gzip_knn.yaml: - hydra: - run: - dir: ${dataset}/logs/${stage}/ - sweep: - dir: ??? - subdir: ${hydra.job.num} - callbacks: - study_dump: - _target_: database.OptunaStudyDumpCallback - storage: ${hydra.sweeper.storage} - study_name: ${hydra.sweeper.study_name} - directions: ${direction} - metric_names: ${optimizers} - output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv - sweeper: - sampler: - _target_: optuna.samplers.TPESampler - consider_prior: true - prior_weight: 1.0 - consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 - multivariate: true - _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - direction: ${direction} - storage: sqlite:///optuna.db - study_name: ${dataset}_${model_name}_${stage} - n_trials: 2 - n_jobs: 2 - max_failure_rate: 1.0 - params: - model.init.k: 1,3,5,7,11 - +model.init.weights: uniform,distance - +model.init.algorithm: brute - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio - model_name: ${model_name} - ++data.sample.random_state: int(interval(1, 10000)) - launcher: - _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher - n_jobs: 8 - prefer: processes - verbose: 1 - timeout: - pre_dispatch: ${hydra.sweeper.n_jobs} - batch_size: auto - temp_folder: /tmp/deckard - max_nbytes: 100000 - mmap_mode: r + params.yaml: + data: + _target_: deckard.base.data.Data + drop: + - id + name: raw_data/kdd_nsl_undersampled_5000.csv + sample: + _target_: deckard.base.data.SklearnDataSampler + random_state: 0 + stratify: true + test_size: 100 + train_size: 100 + target: label + dataset: kdd_nsl + device_id: cpu + files: + _target_: deckard.base.files.FileConfig + data_dir: data + data_type: .csv + directory: kdd_nsl + model_dir: model + name: default + params_file: params.yaml + predictions_file: predictions.json + reports: reports + score_dict_file: score_dict.json + model: + _target_: deckard.base.model.Model + data: + _target_: deckard.base.data.Data + drop: + - id + name: raw_data/kdd_nsl_undersampled_5000.csv + sample: + _target_: deckard.base.data.SklearnDataSampler + random_state: 0 + stratify: true + test_size: 100 + train_size: 100 + target: label + init: + _target_: deckard.base.model.ModelInitializer + distance_matrix: kdd_nsl/model/gzip/100-100/0.npz + k: 1 + m: -1 + metric: gzip + name: gzip_classifier.GzipKNN + symmetric: false + library: sklearn model_name: gzip_knn + scorers: + _target_: deckard.base.scorer.ScorerDict + accuracy: + _target_: deckard.base.scorer.ScorerConfig + direction: maximize + name: sklearn.metrics.accuracy_score + log_loss: + _target_: deckard.base.scorer.ScorerConfig + direction: minimize + name: sklearn.metrics.log_loss outs: - - path: ddos/logs/gzip_knn/20 + - path: kdd_nsl/reports/train/default/predictions.json hash: md5 - md5: 1c588820bb8cc7ed0622a2dd2a1cc08b.dir - size: 1452384 - nfiles: 514 - - path: ddos/reports/gzip_knn/20/train/ + md5: 986d2f0abe9b96253b196a222a550609 + size: 702 + - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 69518d6bf12dde705dd3b50cd987f1af.dir - size: 1062291 - nfiles: 1163 - grid_search@20-ddos-gzip_logistic: - cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=20 - data.sample.test_size=100 model_name=gzip_logistic model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_logistic_ddos hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=ddos/logs/gzip_logistic/20 hydra.callbacks.study_dump.output_file=ddos/logs/gzip_logistic/20/study.csv - files.directory=ddos files.reports=reports/gzip_logistic/20 hydra.launcher.n_jobs=-1 - ++raise_exception=True --config-name gzip_logistic --multirun + md5: 492e1219d803759a686caa2859c91d21 + size: 485 + test_each_model@gzip-gzip_logistic-sms_spam-20: + cmd: 'python -m deckard.layers.optimise stage=test_each_model files.name=gzip_logistic/gzip/20 + files.directory=sms_spam data=sms_spam data.sample.train_size=20 dataset=sms_spam + model=gzip_logistic model_name=gzip_knn model.init.metric=gzip model.init.m=-1 + hydra.run.dir=sms_spam/logs/test_each_model/gzip_logistic/gzip/20 ++raise_exception=True ' deps: - - path: conf/gzip_logistic.yaml - hash: md5 - md5: 847d4d804fff0b6f2533f90820eebd04 - size: 2205 - - path: params.yaml + - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 - params: - conf/gzip_logistic.yaml: - hydra: - run: - dir: ${dataset}/logs/${stage}/ - sweep: - dir: ??? - subdir: ${hydra.job.id} - callbacks: - study_dump: - _target_: database.OptunaStudyDumpCallback - storage: ${hydra.sweeper.storage} - study_name: ${hydra.sweeper.study_name} - directions: ${direction} - metric_names: ${optimizers} - output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv - sweeper: - sampler: - _target_: optuna.samplers.TPESampler - seed: 123 - consider_prior: true - prior_weight: 1.0 - consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 - multivariate: true - _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name}_${stage} - storage: sqlite:///optuna.db - n_jobs: 1 - n_trials: 1 - params: - +model.init.solver: saga - +model.init.penalty: l2,l1,l2,none - +model.init.tol: 1e-4,1e-3,1e-2 - +model.init.C: 1e-2,1e-1,1e0,1e1,1e2 - +model.init.fit_intercept: True,False - +model.init.class_weight: balanced,None - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio - model_name: ${model_name} - data.sample.random_state: int(interval(1, 10000)) - direction: ${direction} - max_failure_rate: 1.0 - launcher: - _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher - n_jobs: 8 - prefer: processes - verbose: 1 - timeout: - pre_dispatch: ${hydra.sweeper.n_jobs} - batch_size: auto - temp_folder: /tmp/deckard - max_nbytes: 100000 - mmap_mode: r - model_name: gzip_logistic + md5: ee4344da4a735fb0b6e6d2cf83ddef6e + size: 484 + - path: params.yaml + hash: md5 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 + params: + params.yaml: + data: + _target_: deckard.base.data.Data + drop: + - id + name: raw_data/kdd_nsl_undersampled_5000.csv + sample: + _target_: deckard.base.data.SklearnDataSampler + random_state: 0 + stratify: true + test_size: 100 + train_size: 100 + target: label + dataset: kdd_nsl + device_id: cpu + files: + _target_: deckard.base.files.FileConfig + data_dir: data + data_type: .csv + directory: kdd_nsl + model_dir: model + name: default + params_file: params.yaml + predictions_file: predictions.json + reports: reports + score_dict_file: score_dict.json + model: + _target_: deckard.base.model.Model + data: + _target_: deckard.base.data.Data + drop: + - id + name: raw_data/kdd_nsl_undersampled_5000.csv + sample: + _target_: deckard.base.data.SklearnDataSampler + random_state: 0 + stratify: true + test_size: 100 + train_size: 100 + target: label + init: + _target_: deckard.base.model.ModelInitializer + distance_matrix: kdd_nsl/model/gzip/100-100/0.npz + k: 1 + m: -1 + metric: gzip + name: gzip_classifier.GzipKNN + symmetric: false + library: sklearn + model_name: gzip_knn + scorers: + _target_: deckard.base.scorer.ScorerDict + accuracy: + _target_: deckard.base.scorer.ScorerConfig + direction: maximize + name: sklearn.metrics.accuracy_score + log_loss: + _target_: deckard.base.scorer.ScorerConfig + direction: minimize + name: sklearn.metrics.log_loss outs: - - path: ddos/logs/gzip_logistic/20 + - path: sms_spam/logs/test_each_model/gzip_logistic/gzip/20 hash: md5 - md5: 862388e015eae9fb28dd1de9e79f12ce.dir - size: 1384742 - nfiles: 513 - - path: ddos/reports/gzip_logistic/20/train/ + md5: d121a07eb6c0e96c7cd18fe1f2d0fbd6.dir + size: 7950 + nfiles: 4 + - path: sms_spam/reports/test_each_model/gzip_logistic/gzip/20/score_dict.json hash: md5 - md5: f7b00527e60c1f473954a36991327b51.dir - size: 560045 - nfiles: 369 - grid_search@20-ddos-gzip_svc: - cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=20 - data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_svc_ddos hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=ddos/logs/gzip_svc/20 hydra.callbacks.study_dump.output_file=ddos/logs/gzip_svc/20/study.csv - files.directory=ddos files.reports=reports/gzip_svc/20 hydra.launcher.n_jobs=-1 - ++raise_exception=True --config-name gzip_svc --multirun + md5: 5d8bf090bc8e34df8ed01766adfca5eb + size: 26 + test_each_model@gzip-gzip_knn-ddos-20: + cmd: 'python -m deckard.layers.optimise stage=test_each_model files.name=gzip_knn/gzip/20 + files.directory=ddos data=ddos data.sample.train_size=20 dataset=ddos model=gzip_knn + model_name=gzip_knn model.init.metric=gzip model.init.m=-1 hydra.run.dir=ddos/logs/test_each_model/gzip_knn/gzip/20 + ++raise_exception=True ' deps: - - path: conf/gzip_svc.yaml + - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 957922cb6993eb99866232d944a4a106 - size: 2131 + md5: ee4344da4a735fb0b6e6d2cf83ddef6e + size: 484 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead size: 1469 params: - conf/gzip_svc.yaml: - hydra: - run: - dir: ${dataset}/logs/${stage}/ - sweep: - dir: ??? - subdir: ${hydra.job.id} - callbacks: - study_dump: - _target_: database.OptunaStudyDumpCallback - storage: ${hydra.sweeper.storage} - study_name: ${hydra.sweeper.study_name} - directions: - - maximize - metric_names: - - accuracy - output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv - sweeper: - sampler: - _target_: optuna.samplers.TPESampler - seed: 123 - consider_prior: true - prior_weight: 1.0 - consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 - multivariate: true - _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name}_${stage} - storage: sqlite:///optuna.db - n_jobs: 2 - n_trials: 2 - params: - +model.init.kernel: rbf,precomputed - +model.init.C: 1e-2,1e-1,1e0,1e1,1e2 - +model.init.gamma: scale,auto - +model.init.class_weight: balanced,null - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio - model_name: ${model_name} - data.sample.random_state: int(interval(1, 10000)) - direction: ${direction} - max_failure_rate: 1.0 - launcher: - _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher - n_jobs: 8 - prefer: processes - verbose: 1 - timeout: - pre_dispatch: ${hydra.sweeper.n_jobs} - batch_size: auto - temp_folder: /tmp/deckard - max_nbytes: 100000 - mmap_mode: r - model_name: gzip_svc + params.yaml: + data: + _target_: deckard.base.data.Data + drop: + - id + name: raw_data/kdd_nsl_undersampled_5000.csv + sample: + _target_: deckard.base.data.SklearnDataSampler + random_state: 0 + stratify: true + test_size: 100 + train_size: 100 + target: label + dataset: kdd_nsl + device_id: cpu + files: + _target_: deckard.base.files.FileConfig + data_dir: data + data_type: .csv + directory: kdd_nsl + model_dir: model + name: default + params_file: params.yaml + predictions_file: predictions.json + reports: reports + score_dict_file: score_dict.json + model: + _target_: deckard.base.model.Model + data: + _target_: deckard.base.data.Data + drop: + - id + name: raw_data/kdd_nsl_undersampled_5000.csv + sample: + _target_: deckard.base.data.SklearnDataSampler + random_state: 0 + stratify: true + test_size: 100 + train_size: 100 + target: label + init: + _target_: deckard.base.model.ModelInitializer + distance_matrix: kdd_nsl/model/gzip/100-100/0.npz + k: 1 + m: -1 + metric: gzip + name: gzip_classifier.GzipKNN + symmetric: false + library: sklearn + model_name: gzip_knn + scorers: + _target_: deckard.base.scorer.ScorerDict + accuracy: + _target_: deckard.base.scorer.ScorerConfig + direction: maximize + name: sklearn.metrics.accuracy_score + log_loss: + _target_: deckard.base.scorer.ScorerConfig + direction: minimize + name: sklearn.metrics.log_loss outs: - - path: ddos/logs/gzip_svc/20 + - path: ddos/logs/test_each_model/gzip_knn/gzip/20 hash: md5 - md5: dc81f350e6d3bf8d34c4a550d3e3c9bd.dir - size: 1337099 - nfiles: 513 - - path: ddos/reports/gzip_svc/20/train/ + md5: 3a4d1598b93a5a00ffd486b26a568475.dir + size: 7826 + nfiles: 4 + - path: ddos/reports/test_each_model/gzip_knn/gzip/20/score_dict.json hash: md5 - md5: b86c76493d70bb1732050043f72b63a5.dir - size: 551373 - nfiles: 384 - grid_search@100-kdd_nsl-gzip_knn: - cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl - data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_knn_kdd_nsl hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=kdd_nsl/logs/gzip_knn/100 hydra.callbacks.study_dump.output_file=kdd_nsl/logs/gzip_knn/100/study.csv - files.directory=kdd_nsl files.reports=reports/gzip_knn/100 hydra.launcher.n_jobs=-1 - ++raise_exception=True --config-name gzip_knn --multirun + md5: 5d8bf090bc8e34df8ed01766adfca5eb + size: 26 + test_each_model@gzip-gzip_svc-sms_spam-20: + cmd: 'python -m deckard.layers.optimise stage=test_each_model files.name=gzip_svc/gzip/20 + files.directory=sms_spam data=sms_spam data.sample.train_size=20 dataset=sms_spam + model=gzip_svc model_name=gzip_knn model.init.metric=gzip model.init.m=-1 hydra.run.dir=sms_spam/logs/test_each_model/gzip_svc/gzip/20 + ++raise_exception=True ' deps: - - path: conf/gzip_knn.yaml + - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: ceff1a602afc3323e49200a1da539310 - size: 2046 + md5: ee4344da4a735fb0b6e6d2cf83ddef6e + size: 484 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead size: 1469 params: - conf/gzip_knn.yaml: - hydra: - run: - dir: ${dataset}/logs/${stage}/ - sweep: - dir: ??? - subdir: ${hydra.job.num} - callbacks: - study_dump: - _target_: database.OptunaStudyDumpCallback - storage: ${hydra.sweeper.storage} - study_name: ${hydra.sweeper.study_name} - directions: ${direction} - metric_names: ${optimizers} - output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv - sweeper: - sampler: - _target_: optuna.samplers.TPESampler - consider_prior: true - prior_weight: 1.0 - consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 - multivariate: true - _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - direction: ${direction} - storage: sqlite:///optuna.db - study_name: ${dataset}_${model_name}_${stage} - n_trials: 2 - n_jobs: 2 - max_failure_rate: 1.0 - params: - model.init.k: 1,3,5,7,11 - +model.init.weights: uniform,distance - +model.init.algorithm: brute - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio - model_name: ${model_name} - ++data.sample.random_state: int(interval(1, 10000)) - launcher: - _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher - n_jobs: 8 - prefer: processes - verbose: 1 - timeout: - pre_dispatch: ${hydra.sweeper.n_jobs} - batch_size: auto - temp_folder: /tmp/deckard - max_nbytes: 100000 - mmap_mode: r + params.yaml: + data: + _target_: deckard.base.data.Data + drop: + - id + name: raw_data/kdd_nsl_undersampled_5000.csv + sample: + _target_: deckard.base.data.SklearnDataSampler + random_state: 0 + stratify: true + test_size: 100 + train_size: 100 + target: label + dataset: kdd_nsl + device_id: cpu + files: + _target_: deckard.base.files.FileConfig + data_dir: data + data_type: .csv + directory: kdd_nsl + model_dir: model + name: default + params_file: params.yaml + predictions_file: predictions.json + reports: reports + score_dict_file: score_dict.json + model: + _target_: deckard.base.model.Model + data: + _target_: deckard.base.data.Data + drop: + - id + name: raw_data/kdd_nsl_undersampled_5000.csv + sample: + _target_: deckard.base.data.SklearnDataSampler + random_state: 0 + stratify: true + test_size: 100 + train_size: 100 + target: label + init: + _target_: deckard.base.model.ModelInitializer + distance_matrix: kdd_nsl/model/gzip/100-100/0.npz + k: 1 + m: -1 + metric: gzip + name: gzip_classifier.GzipKNN + symmetric: false + library: sklearn model_name: gzip_knn + scorers: + _target_: deckard.base.scorer.ScorerDict + accuracy: + _target_: deckard.base.scorer.ScorerConfig + direction: maximize + name: sklearn.metrics.accuracy_score + log_loss: + _target_: deckard.base.scorer.ScorerConfig + direction: minimize + name: sklearn.metrics.log_loss outs: - - path: kdd_nsl/logs/gzip_knn/100 + - path: sms_spam/logs/test_each_model/gzip_svc/gzip/20 hash: md5 - md5: 627b7ee87613bc63fbee1347dff2a211.dir - size: 1331375 - nfiles: 514 - - path: kdd_nsl/reports/gzip_knn/100/train/ + md5: ac59a56d56834986ab013ff5cb6b4448.dir + size: 7861 + nfiles: 4 + - path: sms_spam/reports/test_each_model/gzip_svc/gzip/20/score_dict.json hash: md5 - md5: e2ce656f9f6ac2cf23f557a32dac018c.dir - size: 374498 - nfiles: 352 - grid_search@100-kdd_nsl-gzip_logistic: - cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl - data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_logistic - model.init.distance_matrix=null hydra.sweeper.study_name=gzip_logistic_kdd_nsl - hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 hydra.sweep.dir=kdd_nsl/logs/gzip_logistic/100 - hydra.callbacks.study_dump.output_file=kdd_nsl/logs/gzip_logistic/100/study.csv - files.directory=kdd_nsl files.reports=reports/gzip_logistic/100 hydra.launcher.n_jobs=-1 - ++raise_exception=True --config-name gzip_logistic --multirun + md5: 5d8bf090bc8e34df8ed01766adfca5eb + size: 26 + test_each_model@gzip-gzip_knn-sms_spam-20: + cmd: 'python -m deckard.layers.optimise stage=test_each_model files.name=gzip_knn/gzip/20 + files.directory=sms_spam data=sms_spam data.sample.train_size=20 dataset=sms_spam + model=gzip_knn model_name=gzip_knn model.init.metric=gzip model.init.m=-1 hydra.run.dir=sms_spam/logs/test_each_model/gzip_knn/gzip/20 + ++raise_exception=True ' deps: - - path: conf/gzip_logistic.yaml + - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: a051c1bd6690aa80000909c49eb45023 - size: 2189 + md5: ee4344da4a735fb0b6e6d2cf83ddef6e + size: 484 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead size: 1469 params: - conf/gzip_logistic.yaml: - hydra: - run: - dir: ${dataset}/logs/${stage}/ - sweep: - dir: ??? - subdir: ${hydra.job.id} - callbacks: - study_dump: - _target_: database.OptunaStudyDumpCallback - storage: ${hydra.sweeper.storage} - study_name: ${hydra.sweeper.study_name} - directions: ${direction} - metric_names: ${optimizers} - output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv - sweeper: - sampler: - _target_: optuna.samplers.TPESampler - consider_prior: true - prior_weight: 1.0 - consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 - multivariate: true - _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name}_${stage} - storage: sqlite:///optuna.db - n_jobs: 1 - n_trials: 1 - params: - +model.init.solver: saga - +model.init.penalty: l2,l1,l2,none - +model.init.tol: 1e-4,1e-3,1e-2 - +model.init.C: 1e-2,1e-1,1e0,1e1,1e2 - +model.init.fit_intercept: True,False - +model.init.class_weight: balanced,None - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio - model_name: ${model_name} - data.sample.random_state: int(interval(1, 10000)) - direction: ${direction} - max_failure_rate: 1.0 - launcher: - _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher - n_jobs: 8 - prefer: processes - verbose: 1 - timeout: - pre_dispatch: ${hydra.sweeper.n_jobs} - batch_size: auto - temp_folder: /tmp/deckard - max_nbytes: 100000 - mmap_mode: r - model_name: gzip_logistic + params.yaml: + data: + _target_: deckard.base.data.Data + drop: + - id + name: raw_data/kdd_nsl_undersampled_5000.csv + sample: + _target_: deckard.base.data.SklearnDataSampler + random_state: 0 + stratify: true + test_size: 100 + train_size: 100 + target: label + dataset: kdd_nsl + device_id: cpu + files: + _target_: deckard.base.files.FileConfig + data_dir: data + data_type: .csv + directory: kdd_nsl + model_dir: model + name: default + params_file: params.yaml + predictions_file: predictions.json + reports: reports + score_dict_file: score_dict.json + model: + _target_: deckard.base.model.Model + data: + _target_: deckard.base.data.Data + drop: + - id + name: raw_data/kdd_nsl_undersampled_5000.csv + sample: + _target_: deckard.base.data.SklearnDataSampler + random_state: 0 + stratify: true + test_size: 100 + train_size: 100 + target: label + init: + _target_: deckard.base.model.ModelInitializer + distance_matrix: kdd_nsl/model/gzip/100-100/0.npz + k: 1 + m: -1 + metric: gzip + name: gzip_classifier.GzipKNN + symmetric: false + library: sklearn + model_name: gzip_knn + scorers: + _target_: deckard.base.scorer.ScorerDict + accuracy: + _target_: deckard.base.scorer.ScorerConfig + direction: maximize + name: sklearn.metrics.accuracy_score + log_loss: + _target_: deckard.base.scorer.ScorerConfig + direction: minimize + name: sklearn.metrics.log_loss outs: - - path: kdd_nsl/logs/gzip_logistic/100 + - path: sms_spam/logs/test_each_model/gzip_knn/gzip/20 hash: md5 - md5: d10fc206ea64ee1d63eaed14f5b60879.dir - size: 1443430 - nfiles: 514 - - path: kdd_nsl/reports/gzip_logistic/100/train/ + md5: 4eaee5c6d9a4ad7d474938026f330e8c.dir + size: 7858 + nfiles: 4 + - path: sms_spam/reports/test_each_model/gzip_knn/gzip/20/score_dict.json hash: md5 - md5: b343d0870fadbfbdecb47d5538943279.dir - size: 564631 - nfiles: 357 - grid_search@100-kdd_nsl-gzip_svc: - cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl - data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_svc_kdd_nsl hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=kdd_nsl/logs/gzip_svc/100 hydra.callbacks.study_dump.output_file=kdd_nsl/logs/gzip_svc/100/study.csv - files.directory=kdd_nsl files.reports=reports/gzip_svc/100 hydra.launcher.n_jobs=-1 - ++raise_exception=True --config-name gzip_svc --multirun + md5: 5d8bf090bc8e34df8ed01766adfca5eb + size: 26 + test_each_model@gzip-gzip_svc-truthseeker-20: + cmd: 'python -m deckard.layers.optimise stage=test_each_model files.name=gzip_svc/gzip/20 + files.directory=truthseeker data=truthseeker data.sample.train_size=20 dataset=truthseeker + model=gzip_svc model_name=gzip_knn model.init.metric=gzip model.init.m=-1 hydra.run.dir=truthseeker/logs/test_each_model/gzip_svc/gzip/20 + ++raise_exception=True ' deps: - - path: conf/gzip_svc.yaml + - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 71702231d42f4d68a2237772b3475697 - size: 2115 + md5: ee4344da4a735fb0b6e6d2cf83ddef6e + size: 484 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead size: 1469 params: - conf/gzip_svc.yaml: - hydra: - run: - dir: ${dataset}/logs/${stage}/ - sweep: - dir: ??? - subdir: ${hydra.job.id} - callbacks: - study_dump: - _target_: database.OptunaStudyDumpCallback - storage: ${hydra.sweeper.storage} - study_name: ${hydra.sweeper.study_name} - directions: - - maximize - metric_names: - - accuracy - output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv - sweeper: - sampler: - _target_: optuna.samplers.TPESampler - consider_prior: true - prior_weight: 1.0 - consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 - multivariate: true - _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name}_${stage} - storage: sqlite:///optuna.db - n_jobs: 2 - n_trials: 2 - params: - +model.init.kernel: rbf,precomputed - +model.init.C: 1e-2,1e-1,1e0,1e1,1e2 - +model.init.gamma: scale,auto - +model.init.class_weight: balanced,null - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio - model_name: ${model_name} - data.sample.random_state: int(interval(1, 10000)) - direction: ${direction} - max_failure_rate: 1.0 - launcher: - _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher - n_jobs: 8 - prefer: processes - verbose: 1 - timeout: - pre_dispatch: ${hydra.sweeper.n_jobs} - batch_size: auto - temp_folder: /tmp/deckard - max_nbytes: 100000 - mmap_mode: r - model_name: gzip_svc + params.yaml: + data: + _target_: deckard.base.data.Data + drop: + - id + name: raw_data/kdd_nsl_undersampled_5000.csv + sample: + _target_: deckard.base.data.SklearnDataSampler + random_state: 0 + stratify: true + test_size: 100 + train_size: 100 + target: label + dataset: kdd_nsl + device_id: cpu + files: + _target_: deckard.base.files.FileConfig + data_dir: data + data_type: .csv + directory: kdd_nsl + model_dir: model + name: default + params_file: params.yaml + predictions_file: predictions.json + reports: reports + score_dict_file: score_dict.json + model: + _target_: deckard.base.model.Model + data: + _target_: deckard.base.data.Data + drop: + - id + name: raw_data/kdd_nsl_undersampled_5000.csv + sample: + _target_: deckard.base.data.SklearnDataSampler + random_state: 0 + stratify: true + test_size: 100 + train_size: 100 + target: label + init: + _target_: deckard.base.model.ModelInitializer + distance_matrix: kdd_nsl/model/gzip/100-100/0.npz + k: 1 + m: -1 + metric: gzip + name: gzip_classifier.GzipKNN + symmetric: false + library: sklearn + model_name: gzip_knn + scorers: + _target_: deckard.base.scorer.ScorerDict + accuracy: + _target_: deckard.base.scorer.ScorerConfig + direction: maximize + name: sklearn.metrics.accuracy_score + log_loss: + _target_: deckard.base.scorer.ScorerConfig + direction: minimize + name: sklearn.metrics.log_loss outs: - - path: kdd_nsl/logs/gzip_svc/100 + - path: truthseeker/logs/test_each_model/gzip_svc/gzip/20 hash: md5 - md5: 1cbd3a1e7a5989ec7e6bcd4c71feb722.dir - size: 1409321 - nfiles: 514 - - path: kdd_nsl/reports/gzip_svc/100/train/ + md5: 5fb0774e1c5387d988a28d68900d7d02.dir + size: 7924 + nfiles: 4 + - path: truthseeker/reports/test_each_model/gzip_svc/gzip/20/score_dict.json hash: md5 - md5: a3702590a0e52e5bc7cf0e6cc6a551da.dir - size: 551152 - nfiles: 381 - grid_search@100-truthseeker-gzip_knn: - cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker - data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_knn_truthseeker hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=truthseeker/logs/gzip_knn/100 hydra.callbacks.study_dump.output_file=truthseeker/logs/gzip_knn/100/study.csv - files.directory=truthseeker files.reports=reports/gzip_knn/100 hydra.launcher.n_jobs=-1 - ++raise_exception=True --config-name gzip_knn --multirun + md5: 5d8bf090bc8e34df8ed01766adfca5eb + size: 26 + test_each_model@gzip-gzip_logistic-kdd_nsl-20: + cmd: 'python -m deckard.layers.optimise stage=test_each_model files.name=gzip_logistic/gzip/20 + files.directory=kdd_nsl data=kdd_nsl data.sample.train_size=20 dataset=kdd_nsl + model=gzip_logistic model_name=gzip_knn model.init.metric=gzip model.init.m=-1 + hydra.run.dir=kdd_nsl/logs/test_each_model/gzip_logistic/gzip/20 ++raise_exception=True ' deps: - - path: conf/gzip_knn.yaml + - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: ceff1a602afc3323e49200a1da539310 - size: 2046 + md5: ee4344da4a735fb0b6e6d2cf83ddef6e + size: 484 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead size: 1469 params: - conf/gzip_knn.yaml: - hydra: - run: - dir: ${dataset}/logs/${stage}/ - sweep: - dir: ??? - subdir: ${hydra.job.num} - callbacks: - study_dump: - _target_: database.OptunaStudyDumpCallback - storage: ${hydra.sweeper.storage} - study_name: ${hydra.sweeper.study_name} - directions: ${direction} - metric_names: ${optimizers} - output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv - sweeper: - sampler: - _target_: optuna.samplers.TPESampler - consider_prior: true - prior_weight: 1.0 - consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 - multivariate: true - _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - direction: ${direction} - storage: sqlite:///optuna.db - study_name: ${dataset}_${model_name}_${stage} - n_trials: 2 - n_jobs: 2 - max_failure_rate: 1.0 - params: - model.init.k: 1,3,5,7,11 - +model.init.weights: uniform,distance - +model.init.algorithm: brute - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio - model_name: ${model_name} - ++data.sample.random_state: int(interval(1, 10000)) - launcher: - _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher - n_jobs: 8 - prefer: processes - verbose: 1 - timeout: - pre_dispatch: ${hydra.sweeper.n_jobs} - batch_size: auto - temp_folder: /tmp/deckard - max_nbytes: 100000 - mmap_mode: r + params.yaml: + data: + _target_: deckard.base.data.Data + drop: + - id + name: raw_data/kdd_nsl_undersampled_5000.csv + sample: + _target_: deckard.base.data.SklearnDataSampler + random_state: 0 + stratify: true + test_size: 100 + train_size: 100 + target: label + dataset: kdd_nsl + device_id: cpu + files: + _target_: deckard.base.files.FileConfig + data_dir: data + data_type: .csv + directory: kdd_nsl + model_dir: model + name: default + params_file: params.yaml + predictions_file: predictions.json + reports: reports + score_dict_file: score_dict.json + model: + _target_: deckard.base.model.Model + data: + _target_: deckard.base.data.Data + drop: + - id + name: raw_data/kdd_nsl_undersampled_5000.csv + sample: + _target_: deckard.base.data.SklearnDataSampler + random_state: 0 + stratify: true + test_size: 100 + train_size: 100 + target: label + init: + _target_: deckard.base.model.ModelInitializer + distance_matrix: kdd_nsl/model/gzip/100-100/0.npz + k: 1 + m: -1 + metric: gzip + name: gzip_classifier.GzipKNN + symmetric: false + library: sklearn model_name: gzip_knn + scorers: + _target_: deckard.base.scorer.ScorerDict + accuracy: + _target_: deckard.base.scorer.ScorerConfig + direction: maximize + name: sklearn.metrics.accuracy_score + log_loss: + _target_: deckard.base.scorer.ScorerConfig + direction: minimize + name: sklearn.metrics.log_loss outs: - - path: truthseeker/logs/gzip_knn/100 + - path: kdd_nsl/logs/test_each_model/gzip_logistic/gzip/20 hash: md5 - md5: 04a5bc31a55d435d8e6932285fc3de4a.dir - size: 1346194 - nfiles: 514 - - path: truthseeker/reports/gzip_knn/100/train/ + md5: ec6c44a8421f7cb02994bafbb0ceb59d.dir + size: 7980 + nfiles: 4 + - path: kdd_nsl/reports/test_each_model/gzip_logistic/gzip/20/score_dict.json hash: md5 - md5: 54df7266d8f6c76d39c28839b372482a.dir - size: 363058 - nfiles: 352 - grid_search@100-truthseeker-gzip_logistic: - cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker - data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_logistic - model.init.distance_matrix=null hydra.sweeper.study_name=gzip_logistic_truthseeker - hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 hydra.sweep.dir=truthseeker/logs/gzip_logistic/100 - hydra.callbacks.study_dump.output_file=truthseeker/logs/gzip_logistic/100/study.csv - files.directory=truthseeker files.reports=reports/gzip_logistic/100 hydra.launcher.n_jobs=-1 - ++raise_exception=True --config-name gzip_logistic --multirun + md5: 5d8bf090bc8e34df8ed01766adfca5eb + size: 26 + test_each_model@gzip-gzip_logistic-truthseeker-20: + cmd: 'python -m deckard.layers.optimise stage=test_each_model files.name=gzip_logistic/gzip/20 + files.directory=truthseeker data=truthseeker data.sample.train_size=20 dataset=truthseeker + model=gzip_logistic model_name=gzip_knn model.init.metric=gzip model.init.m=-1 + hydra.run.dir=truthseeker/logs/test_each_model/gzip_logistic/gzip/20 ++raise_exception=True ' deps: - - path: conf/gzip_logistic.yaml + - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: a051c1bd6690aa80000909c49eb45023 - size: 2189 + md5: ee4344da4a735fb0b6e6d2cf83ddef6e + size: 484 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead size: 1469 params: - conf/gzip_logistic.yaml: - hydra: - run: - dir: ${dataset}/logs/${stage}/ - sweep: - dir: ??? - subdir: ${hydra.job.id} - callbacks: - study_dump: - _target_: database.OptunaStudyDumpCallback - storage: ${hydra.sweeper.storage} - study_name: ${hydra.sweeper.study_name} - directions: ${direction} - metric_names: ${optimizers} - output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv - sweeper: - sampler: - _target_: optuna.samplers.TPESampler - consider_prior: true - prior_weight: 1.0 - consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 - multivariate: true - _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name}_${stage} - storage: sqlite:///optuna.db - n_jobs: 1 - n_trials: 1 - params: - +model.init.solver: saga - +model.init.penalty: l2,l1,l2,none - +model.init.tol: 1e-4,1e-3,1e-2 - +model.init.C: 1e-2,1e-1,1e0,1e1,1e2 - +model.init.fit_intercept: True,False - +model.init.class_weight: balanced,None - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio - model_name: ${model_name} - data.sample.random_state: int(interval(1, 10000)) - direction: ${direction} - max_failure_rate: 1.0 - launcher: - _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher - n_jobs: 8 - prefer: processes - verbose: 1 - timeout: - pre_dispatch: ${hydra.sweeper.n_jobs} - batch_size: auto - temp_folder: /tmp/deckard - max_nbytes: 100000 - mmap_mode: r - model_name: gzip_logistic + params.yaml: + data: + _target_: deckard.base.data.Data + drop: + - id + name: raw_data/kdd_nsl_undersampled_5000.csv + sample: + _target_: deckard.base.data.SklearnDataSampler + random_state: 0 + stratify: true + test_size: 100 + train_size: 100 + target: label + dataset: kdd_nsl + device_id: cpu + files: + _target_: deckard.base.files.FileConfig + data_dir: data + data_type: .csv + directory: kdd_nsl + model_dir: model + name: default + params_file: params.yaml + predictions_file: predictions.json + reports: reports + score_dict_file: score_dict.json + model: + _target_: deckard.base.model.Model + data: + _target_: deckard.base.data.Data + drop: + - id + name: raw_data/kdd_nsl_undersampled_5000.csv + sample: + _target_: deckard.base.data.SklearnDataSampler + random_state: 0 + stratify: true + test_size: 100 + train_size: 100 + target: label + init: + _target_: deckard.base.model.ModelInitializer + distance_matrix: kdd_nsl/model/gzip/100-100/0.npz + k: 1 + m: -1 + metric: gzip + name: gzip_classifier.GzipKNN + symmetric: false + library: sklearn + model_name: gzip_knn + scorers: + _target_: deckard.base.scorer.ScorerDict + accuracy: + _target_: deckard.base.scorer.ScorerConfig + direction: maximize + name: sklearn.metrics.accuracy_score + log_loss: + _target_: deckard.base.scorer.ScorerConfig + direction: minimize + name: sklearn.metrics.log_loss outs: - - path: truthseeker/logs/gzip_logistic/100 + - path: truthseeker/logs/test_each_model/gzip_logistic/gzip/20 hash: md5 - md5: 8851ae1ca8a7c9fd94a42d7253eb0f14.dir - size: 1461033 - nfiles: 514 - - path: truthseeker/reports/gzip_logistic/100/train/ + md5: 2ade09315cc26a4d65dbc22a657bfdec.dir + size: 8013 + nfiles: 4 + - path: truthseeker/reports/test_each_model/gzip_logistic/gzip/20/score_dict.json hash: md5 - md5: aaf46ef58b9daf76df06fbb7c877eddc.dir - size: 555616 - nfiles: 365 - grid_search@100-truthseeker-gzip_svc: - cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker - data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_svc_truthseeker hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=truthseeker/logs/gzip_svc/100 hydra.callbacks.study_dump.output_file=truthseeker/logs/gzip_svc/100/study.csv - files.directory=truthseeker files.reports=reports/gzip_svc/100 hydra.launcher.n_jobs=-1 - ++raise_exception=True --config-name gzip_svc --multirun + md5: 5d8bf090bc8e34df8ed01766adfca5eb + size: 26 + test_each_model@gzip-gzip_svc-kdd_nsl-20: + cmd: 'python -m deckard.layers.optimise stage=test_each_model files.name=gzip_svc/gzip/20 + files.directory=kdd_nsl data=kdd_nsl data.sample.train_size=20 dataset=kdd_nsl + model=gzip_svc model_name=gzip_knn model.init.metric=gzip model.init.m=-1 hydra.run.dir=kdd_nsl/logs/test_each_model/gzip_svc/gzip/20 + ++raise_exception=True ' deps: - - path: conf/gzip_svc.yaml + - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: 71702231d42f4d68a2237772b3475697 - size: 2115 + md5: ee4344da4a735fb0b6e6d2cf83ddef6e + size: 484 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead size: 1469 params: - conf/gzip_svc.yaml: - hydra: - run: - dir: ${dataset}/logs/${stage}/ - sweep: - dir: ??? - subdir: ${hydra.job.id} - callbacks: - study_dump: - _target_: database.OptunaStudyDumpCallback - storage: ${hydra.sweeper.storage} - study_name: ${hydra.sweeper.study_name} - directions: - - maximize - metric_names: - - accuracy - output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv - sweeper: - sampler: - _target_: optuna.samplers.TPESampler - consider_prior: true - prior_weight: 1.0 - consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 - multivariate: true - _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name}_${stage} - storage: sqlite:///optuna.db - n_jobs: 2 - n_trials: 2 - params: - +model.init.kernel: rbf,precomputed - +model.init.C: 1e-2,1e-1,1e0,1e1,1e2 - +model.init.gamma: scale,auto - +model.init.class_weight: balanced,null - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio - model_name: ${model_name} - data.sample.random_state: int(interval(1, 10000)) - direction: ${direction} - max_failure_rate: 1.0 - launcher: - _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher - n_jobs: 8 - prefer: processes - verbose: 1 - timeout: - pre_dispatch: ${hydra.sweeper.n_jobs} - batch_size: auto - temp_folder: /tmp/deckard - max_nbytes: 100000 - mmap_mode: r - model_name: gzip_svc + params.yaml: + data: + _target_: deckard.base.data.Data + drop: + - id + name: raw_data/kdd_nsl_undersampled_5000.csv + sample: + _target_: deckard.base.data.SklearnDataSampler + random_state: 0 + stratify: true + test_size: 100 + train_size: 100 + target: label + dataset: kdd_nsl + device_id: cpu + files: + _target_: deckard.base.files.FileConfig + data_dir: data + data_type: .csv + directory: kdd_nsl + model_dir: model + name: default + params_file: params.yaml + predictions_file: predictions.json + reports: reports + score_dict_file: score_dict.json + model: + _target_: deckard.base.model.Model + data: + _target_: deckard.base.data.Data + drop: + - id + name: raw_data/kdd_nsl_undersampled_5000.csv + sample: + _target_: deckard.base.data.SklearnDataSampler + random_state: 0 + stratify: true + test_size: 100 + train_size: 100 + target: label + init: + _target_: deckard.base.model.ModelInitializer + distance_matrix: kdd_nsl/model/gzip/100-100/0.npz + k: 1 + m: -1 + metric: gzip + name: gzip_classifier.GzipKNN + symmetric: false + library: sklearn + model_name: gzip_knn + scorers: + _target_: deckard.base.scorer.ScorerDict + accuracy: + _target_: deckard.base.scorer.ScorerConfig + direction: maximize + name: sklearn.metrics.accuracy_score + log_loss: + _target_: deckard.base.scorer.ScorerConfig + direction: minimize + name: sklearn.metrics.log_loss outs: - - path: truthseeker/logs/gzip_svc/100 + - path: kdd_nsl/logs/test_each_model/gzip_svc/gzip/20 hash: md5 - md5: 626f846dddb8ec2a392050e2a193195d.dir - size: 1415375 - nfiles: 514 - - path: truthseeker/reports/gzip_svc/100/train/ + md5: 80e1fe29c22203d01027107088979db9.dir + size: 7891 + nfiles: 4 + - path: kdd_nsl/reports/test_each_model/gzip_svc/gzip/20/score_dict.json hash: md5 - md5: 4026ab65c9681a20924d9f39bbce753d.dir - size: 546562 - nfiles: 384 - grid_search@100-sms_spam-gzip_knn: - cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam - data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_knn_sms_spam hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=sms_spam/logs/gzip_knn/100 hydra.callbacks.study_dump.output_file=sms_spam/logs/gzip_knn/100/study.csv - files.directory=sms_spam files.reports=reports/gzip_knn/100 hydra.launcher.n_jobs=-1 - ++raise_exception=True --config-name gzip_knn --multirun + md5: 5d8bf090bc8e34df8ed01766adfca5eb + size: 26 + test_each_model@gzip-gzip_knn-truthseeker-20: + cmd: 'python -m deckard.layers.optimise stage=test_each_model files.name=gzip_knn/gzip/20 + files.directory=truthseeker data=truthseeker data.sample.train_size=20 dataset=truthseeker + model=gzip_knn model_name=gzip_knn model.init.metric=gzip model.init.m=-1 hydra.run.dir=truthseeker/logs/test_each_model/gzip_knn/gzip/20 + ++raise_exception=True ' deps: - - path: conf/gzip_knn.yaml + - path: kdd_nsl/reports/train/default/score_dict.json hash: md5 - md5: ceff1a602afc3323e49200a1da539310 - size: 2046 + md5: ee4344da4a735fb0b6e6d2cf83ddef6e + size: 484 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead size: 1469 params: - conf/gzip_knn.yaml: - hydra: - run: - dir: ${dataset}/logs/${stage}/ - sweep: - dir: ??? - subdir: ${hydra.job.num} - callbacks: - study_dump: - _target_: database.OptunaStudyDumpCallback - storage: ${hydra.sweeper.storage} - study_name: ${hydra.sweeper.study_name} - directions: ${direction} - metric_names: ${optimizers} - output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv - sweeper: - sampler: - _target_: optuna.samplers.TPESampler - consider_prior: true - prior_weight: 1.0 - consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 - multivariate: true - _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - direction: ${direction} - storage: sqlite:///optuna.db - study_name: ${dataset}_${model_name}_${stage} - n_trials: 2 - n_jobs: 2 - max_failure_rate: 1.0 - params: - model.init.k: 1,3,5,7,11 - +model.init.weights: uniform,distance - +model.init.algorithm: brute - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio - model_name: ${model_name} - ++data.sample.random_state: int(interval(1, 10000)) - launcher: - _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher - n_jobs: 8 - prefer: processes - verbose: 1 - timeout: - pre_dispatch: ${hydra.sweeper.n_jobs} - batch_size: auto - temp_folder: /tmp/deckard - max_nbytes: 100000 - mmap_mode: r + params.yaml: + data: + _target_: deckard.base.data.Data + drop: + - id + name: raw_data/kdd_nsl_undersampled_5000.csv + sample: + _target_: deckard.base.data.SklearnDataSampler + random_state: 0 + stratify: true + test_size: 100 + train_size: 100 + target: label + dataset: kdd_nsl + device_id: cpu + files: + _target_: deckard.base.files.FileConfig + data_dir: data + data_type: .csv + directory: kdd_nsl + model_dir: model + name: default + params_file: params.yaml + predictions_file: predictions.json + reports: reports + score_dict_file: score_dict.json + model: + _target_: deckard.base.model.Model + data: + _target_: deckard.base.data.Data + drop: + - id + name: raw_data/kdd_nsl_undersampled_5000.csv + sample: + _target_: deckard.base.data.SklearnDataSampler + random_state: 0 + stratify: true + test_size: 100 + train_size: 100 + target: label + init: + _target_: deckard.base.model.ModelInitializer + distance_matrix: kdd_nsl/model/gzip/100-100/0.npz + k: 1 + m: -1 + metric: gzip + name: gzip_classifier.GzipKNN + symmetric: false + library: sklearn model_name: gzip_knn + scorers: + _target_: deckard.base.scorer.ScorerDict + accuracy: + _target_: deckard.base.scorer.ScorerConfig + direction: maximize + name: sklearn.metrics.accuracy_score + log_loss: + _target_: deckard.base.scorer.ScorerConfig + direction: minimize + name: sklearn.metrics.log_loss outs: - - path: sms_spam/logs/gzip_knn/100 - hash: md5 - md5: e6b50d168b377158bf22fb8598508874.dir - size: 1342714 - nfiles: 514 - - path: sms_spam/reports/gzip_knn/100/train/ - hash: md5 - md5: e53ac2a974976f6f97794b1705182563.dir - size: 352911 - nfiles: 360 - find_best_model@ddos-gzip_knn: - cmd: python -m deckard.layers.find_best --storage sqlite:///optuna.db --study_name - gzip_knn_ddos --config_subdir model --params_file best_gzip_knn_ddos --default_config - gzip_knn - deps: - - path: ddos/logs/gzip_knn/ - hash: md5 - md5: d2c6441e85e3509b8968240a48196d07.dir - size: 4193267 - nfiles: 1542 - outs: - - path: conf/model/best_gzip_knn_ddos.yaml - hash: md5 - md5: bdea475d3a2bc59106f27dccd0fc27fc - size: 419 - find_best_model@ddos-gzip_svc: - cmd: python -m deckard.layers.find_best --storage sqlite:///optuna.db --study_name - gzip_svc_ddos --config_subdir model --params_file best_gzip_svc_ddos --default_config - gzip_svc - deps: - - path: ddos/logs/gzip_svc/ - hash: md5 - md5: 78cd23f301a93a7c9842abb061e3cc7b.dir - size: 7447727 - nfiles: 2570 - outs: - - path: conf/model/best_gzip_svc_ddos.yaml - hash: md5 - md5: 3a7f27dd470ec9e55c10403814f550f2 - size: 442 - find_best_model@ddos-gzip_logistic: - cmd: python -m deckard.layers.find_best --storage sqlite:///optuna.db --study_name - gzip_logistic_ddos --config_subdir model --params_file best_gzip_logistic_ddos - --default_config gzip_logistic - deps: - - path: ddos/logs/gzip_logistic/ + - path: truthseeker/logs/test_each_model/gzip_knn/gzip/20 hash: md5 - md5: b28cadbd10b9bbe40802e39b1beaee18.dir - size: 6561328 - nfiles: 2056 - outs: - - path: conf/model/best_gzip_logistic_ddos.yaml + md5: e1b4842686f73992f04e9104eab3e88f.dir + size: 7921 + nfiles: 4 + - path: truthseeker/reports/test_each_model/gzip_knn/gzip/20/score_dict.json hash: md5 - md5: d5e603d6386dd6cf1167088eaecbdde5 - size: 498 - condense@ddos-knn: - cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=100 - data.sample.test_size=100 model_name=condensed_knn model=gzip_knn files.directory=ddos - files.reports=reports/condense/knn/ hydra.sweeper.study_name=condense_knn_ddos - hydra.sweeper.n_trials=1024 hydra.sweeper.n_jobs=8 hydra.sweep.dir=ddos/logs/condense/knn/ - hydra.callbacks.study_dump.output_file=ddos/logs/knn/study.csv hydra.launcher.n_jobs=-1 - --config-name condense_knn --multirun + md5: 5d8bf090bc8e34df8ed01766adfca5eb + size: 26 + grid_search@20-ddos-gzip_knn-true: + cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=20 + data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null + model.init.symmetric=true hydra.sweeper.study_name=gzip_knn_ddos hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=ddos/logs/gzip_knn/20/symmetry_true hydra.callbacks.study_dump.output_file=ddos/logs/gzip_knn/20/study.csv + files.directory=ddos files.reports=reports/gzip_knn/20/symmetry_true hydra.launcher.n_jobs=-1 + ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_knn --multirun deps: - - path: conf/condense_knn.yaml + - path: conf/gzip_knn.yaml hash: md5 - md5: abd25d17a742e467d39dda34b448ba88 - size: 2181 + md5: 2d0f54d62dcdc05d21ea1730899de0bb + size: 1827 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead size: 1469 params: - conf/condense.yaml: + conf/gzip_knn.yaml: hydra: run: - dir: ${dataset}/logs/condense/ + dir: ${dataset}/logs/${stage}/ sweep: dir: ??? subdir: ${hydra.job.num} @@ -15500,103 +5610,26 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true - prior_weight: 1.0 - consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 - multivariate: true - _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name} - storage: sqlite:///optuna.db - n_jobs: 2 - n_trials: 2 - direction: ${direction} - max_failure_rate: 1.0 - params: - ++data.sample.train_size: 1000 - ++data.sample.random_state: int(interval(10000, 20000)) - model.init.m: tag(log, interval(.01, .1)) - +model.init.sampling_method: medoid,sum,svc,random,hardness,nearmiss,knn - launcher: - _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher - n_jobs: 8 - prefer: processes - verbose: 1 - timeout: - pre_dispatch: ${hydra.sweeper.n_jobs} - batch_size: auto - temp_folder: /tmp/deckard - max_nbytes: 100000 - mmap_mode: r - outs: - - path: ddos/logs/condense/knn/ - hash: md5 - md5: d83b6c64d5535fba4d371a6244c71140.dir - size: 11142600 - nfiles: 4097 - - path: ddos/reports/condense/knn/ - hash: md5 - md5: 31d7e7a0e89685ab46147b3bc1e9a57b.dir - size: 2849297 - nfiles: 3044 - condense@ddos-svc: - cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=100 - data.sample.test_size=100 model_name=condensed_svc model=gzip_svc files.directory=ddos - files.reports=reports/condense/svc/ hydra.sweeper.study_name=condense_svc_ddos - hydra.sweeper.n_trials=1024 hydra.sweeper.n_jobs=8 hydra.sweep.dir=ddos/logs/condense/svc/ - hydra.callbacks.study_dump.output_file=ddos/logs/svc/study.csv hydra.launcher.n_jobs=-1 - --config-name condense_svc --multirun - deps: - - path: conf/condense_svc.yaml - hash: md5 - md5: 7a311db45e697a23a2bed8180fd45e64 - size: 2182 - - path: params.yaml - hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 - params: - conf/condense.yaml: - hydra: - run: - dir: ${dataset}/logs/condense/ - sweep: - dir: ??? - subdir: ${hydra.job.num} - callbacks: - study_dump: - _target_: database.OptunaStudyDumpCallback - storage: ${hydra.sweeper.storage} - study_name: ${hydra.sweeper.study_name} - directions: ${direction} - metric_names: ${optimizers} - output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv - sweeper: - sampler: - _target_: optuna.samplers.TPESampler seed: 123 - consider_prior: true prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name} - storage: sqlite:///optuna.db - n_jobs: 2 - n_trials: 2 direction: ${direction} + storage: sqlite:///optuna.db + study_name: ${dataset}_${model_name}_${stage} + n_trials: 128 + n_jobs: 8 max_failure_rate: 1.0 params: - ++data.sample.train_size: 1000 - ++data.sample.random_state: int(interval(10000, 20000)) - model.init.m: tag(log, interval(.01, .1)) - +model.init.sampling_method: medoid,sum,svc,random,hardness,nearmiss,knn + model.init.k: 1,3,5,7,11 + +model.init.weights: uniform,distance + +model.init.algorithm: brute + model_name: ${model_name} launcher: _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher n_jobs: 8 @@ -15609,37 +5642,39 @@ stages: max_nbytes: 100000 mmap_mode: r outs: - - path: ddos/logs/condense/svc/ + - path: ddos/logs/gzip_knn/20/symmetry_true hash: md5 - md5: 959fc2f99c93ccc2d0e8fc00ade34ed9.dir - size: 11235717 - nfiles: 4097 - - path: ddos/reports/condense/svc/ + md5: 75a67061f3d261f90a32e2e342a26049.dir + size: 1201059 + nfiles: 513 + - path: ddos/reports/gzip_knn/20/symmetry_true/train/ hash: md5 - md5: 4cd4cd510b2d1729094f4b704d22d2f7.dir - size: 4482040 - nfiles: 3072 - condense@ddos-logistic: - cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=100 - data.sample.test_size=100 model_name=condensed_logistic model=gzip_logistic - files.directory=ddos files.reports=reports/condense/logistic/ hydra.sweeper.study_name=condense_logistic_ddos - hydra.sweeper.n_trials=1024 hydra.sweeper.n_jobs=8 hydra.sweep.dir=ddos/logs/condense/logistic/ - hydra.callbacks.study_dump.output_file=ddos/logs/logistic/study.csv hydra.launcher.n_jobs=-1 - --config-name condense_logistic --multirun + md5: 410d4dc9dc529c85056cea27da5fc34f.dir + size: 328616 + nfiles: 369 + grid_search@20-ddos-gzip_knn-false: + cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=20 + data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null + model.init.symmetric=false hydra.sweeper.study_name=gzip_knn_ddos hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=ddos/logs/gzip_knn/20/symmetry_false + hydra.callbacks.study_dump.output_file=ddos/logs/gzip_knn/20/study.csv files.directory=ddos + files.reports=reports/gzip_knn/20/symmetry_false hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_knn --multirun deps: - - path: conf/condense_logistic.yaml + - path: conf/gzip_knn.yaml hash: md5 - md5: 85b6d1d835afd7e95b5b9f804fbd7119 - size: 2326 + md5: 2d0f54d62dcdc05d21ea1730899de0bb + size: 1827 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead size: 1469 params: - conf/condense.yaml: + conf/gzip_knn.yaml: hydra: run: - dir: ${dataset}/logs/condense/ + dir: ${dataset}/logs/${stage}/ sweep: dir: ??? subdir: ${hydra.job.num} @@ -15654,26 +5689,26 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name} - storage: sqlite:///optuna.db - n_jobs: 2 - n_trials: 2 direction: ${direction} + storage: sqlite:///optuna.db + study_name: ${dataset}_${model_name}_${stage} + n_trials: 128 + n_jobs: 8 max_failure_rate: 1.0 params: - ++data.sample.train_size: 1000 - ++data.sample.random_state: int(interval(10000, 20000)) - model.init.m: tag(log, interval(.01, .1)) - +model.init.sampling_method: medoid,sum,svc,random,hardness,nearmiss,knn + model.init.k: 1,3,5,7,11 + +model.init.weights: uniform,distance + +model.init.algorithm: brute + model_name: ${model_name} launcher: _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher n_jobs: 8 @@ -15686,40 +5721,43 @@ stages: max_nbytes: 100000 mmap_mode: r outs: - - path: ddos/logs/condense/logistic/ + - path: ddos/logs/gzip_knn/20/symmetry_false hash: md5 - md5: c355ecaa55c8b6015007c7b3912b9b02.dir - size: 11953607 - nfiles: 4097 - - path: ddos/reports/condense/logistic/ + md5: 5511994182145eb3145fd3afc672d1a5.dir + size: 1200638 + nfiles: 513 + - path: ddos/reports/gzip_knn/20/symmetry_false/train/ hash: md5 - md5: 5ae0bcd484eb00652d8db28c795b72ac.dir - size: 4549745 - nfiles: 3040 - grid_search@100-ddos-gzip_knn: - cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=100 - data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_knn_ddos hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=ddos/logs/gzip_knn/100 hydra.callbacks.study_dump.output_file=ddos/logs/gzip_knn/100/study.csv - files.directory=ddos files.reports=reports/gzip_knn/100 hydra.launcher.n_jobs=-1 - ++raise_exception=True --config-name gzip_knn --multirun + md5: b507e62340bddb44dd3e66467a23444a.dir + size: 328838 + nfiles: 369 + grid_search@20-ddos-gzip_logistic-true: + cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=20 + data.sample.test_size=100 model_name=gzip_logistic model.init.distance_matrix=null + model.init.symmetric=true hydra.sweeper.study_name=gzip_logistic_ddos hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=ddos/logs/gzip_logistic/20/symmetry_true + hydra.callbacks.study_dump.output_file=ddos/logs/gzip_logistic/20/study.csv + files.directory=ddos files.reports=reports/gzip_logistic/20/symmetry_true hydra.launcher.n_jobs=-1 + ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_logistic --multirun deps: - - path: conf/gzip_knn.yaml + - path: conf/gzip_logistic.yaml hash: md5 - md5: ceff1a602afc3323e49200a1da539310 - size: 2046 + md5: da7adfd9b59783b6cd34f750dfcfb1b5 + size: 1993 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead size: 1469 params: - conf/gzip_knn.yaml: + conf/gzip_logistic.yaml: hydra: run: dir: ${dataset}/logs/${stage}/ sweep: dir: ??? - subdir: ${hydra.job.num} + subdir: ${hydra.job.id} callbacks: study_dump: _target_: database.OptunaStudyDumpCallback @@ -15732,28 +5770,28 @@ stages: sampler: _target_: optuna.samplers.TPESampler consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - direction: ${direction} - storage: sqlite:///optuna.db study_name: ${dataset}_${model_name}_${stage} - n_trials: 2 - n_jobs: 2 - max_failure_rate: 1.0 + storage: sqlite:///optuna.db + n_trials: 128 + n_jobs: 8 params: - model.init.k: 1,3,5,7,11 - +model.init.weights: uniform,distance - +model.init.algorithm: brute - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + +model.init.solver: saga + +model.init.penalty: l2,l1 + +model.init.tol: tag(log, interval(1e-5, 1e-1)) + +model.init.C: tag(log, interval(1e-3, 1e3)) + +model.init.fit_intercept: True,False + +model.init.class_weight: balanced,None model_name: ${model_name} - ++data.sample.random_state: int(interval(1, 10000)) + direction: ${direction} + max_failure_rate: 1.0 launcher: _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher n_jobs: 8 @@ -15765,30 +5803,32 @@ stages: temp_folder: /tmp/deckard max_nbytes: 100000 mmap_mode: r - model_name: gzip_knn outs: - - path: ddos/logs/gzip_knn/100 + - path: ddos/logs/gzip_logistic/20/symmetry_true hash: md5 - md5: 5118d2a533a4710bee7c9447a31878fc.dir - size: 1356595 - nfiles: 514 - - path: ddos/reports/gzip_knn/100/train/ + md5: 7411fc1827bfc3df75c9106a4288ee8d.dir + size: 1262132 + nfiles: 513 + - path: ddos/reports/gzip_logistic/20/symmetry_true/train/ hash: md5 - md5: 2033427b1f841dcb0076888e16e5baae.dir - size: 345741 - nfiles: 382 - grid_search@100-ddos-gzip_logistic: - cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=100 + md5: 72358a4a9191f8e02e2d9348e7bfa5be.dir + size: 601313 + nfiles: 356 + grid_search@20-ddos-gzip_logistic-false: + cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_logistic model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_logistic_ddos hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=ddos/logs/gzip_logistic/100 hydra.callbacks.study_dump.output_file=ddos/logs/gzip_logistic/100/study.csv - files.directory=ddos files.reports=reports/gzip_logistic/100 hydra.launcher.n_jobs=-1 + model.init.symmetric=false hydra.sweeper.study_name=gzip_logistic_ddos hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=ddos/logs/gzip_logistic/20/symmetry_false + hydra.callbacks.study_dump.output_file=ddos/logs/gzip_logistic/20/study.csv + files.directory=ddos files.reports=reports/gzip_logistic/20/symmetry_false hydra.launcher.n_jobs=-1 + ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio ++raise_exception=True --config-name gzip_logistic --multirun deps: - path: conf/gzip_logistic.yaml hash: md5 - md5: a051c1bd6690aa80000909c49eb45023 - size: 2189 + md5: da7adfd9b59783b6cd34f750dfcfb1b5 + size: 1993 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead @@ -15813,29 +5853,26 @@ stages: sampler: _target_: optuna.samplers.TPESampler consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper study_name: ${dataset}_${model_name}_${stage} storage: sqlite:///optuna.db - n_jobs: 1 - n_trials: 1 + n_trials: 128 + n_jobs: 8 params: +model.init.solver: saga - +model.init.penalty: l2,l1,l2,none - +model.init.tol: 1e-4,1e-3,1e-2 - +model.init.C: 1e-2,1e-1,1e0,1e1,1e2 + +model.init.penalty: l2,l1 + +model.init.tol: tag(log, interval(1e-5, 1e-1)) + +model.init.C: tag(log, interval(1e-3, 1e3)) +model.init.fit_intercept: True,False +model.init.class_weight: balanced,None - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio model_name: ${model_name} - data.sample.random_state: int(interval(1, 10000)) direction: ${direction} max_failure_rate: 1.0 launcher: @@ -15849,30 +5886,31 @@ stages: temp_folder: /tmp/deckard max_nbytes: 100000 mmap_mode: r - model_name: gzip_logistic outs: - - path: ddos/logs/gzip_logistic/100 + - path: ddos/logs/gzip_logistic/20/symmetry_false hash: md5 - md5: 4c1c97038945eb418ac31d94a00760aa.dir - size: 1450826 - nfiles: 514 - - path: ddos/reports/gzip_logistic/100/train/ + md5: 49dbe43b3f37ddc7ac2ae83c9022067e.dir + size: 1243003 + nfiles: 513 + - path: ddos/reports/gzip_logistic/20/symmetry_false/train/ hash: md5 - md5: 85a4ef22f2dcc23827d34ccf182bcd70.dir - size: 560355 - nfiles: 373 - grid_search@100-ddos-gzip_svc: - cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=100 + md5: 311ef4395865656e00f5428c8f98b19a.dir + size: 616599 + nfiles: 340 + grid_search@20-ddos-gzip_svc-true: + cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_svc_ddos hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=ddos/logs/gzip_svc/100 hydra.callbacks.study_dump.output_file=ddos/logs/gzip_svc/100/study.csv - files.directory=ddos files.reports=reports/gzip_svc/100 hydra.launcher.n_jobs=-1 + model.init.symmetric=true hydra.sweeper.study_name=gzip_svc_ddos hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=ddos/logs/gzip_svc/20/symmetry_true hydra.callbacks.study_dump.output_file=ddos/logs/gzip_svc/20/study.csv + files.directory=ddos files.reports=reports/gzip_svc/20/symmetry_true hydra.launcher.n_jobs=-1 + ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio ++raise_exception=True --config-name gzip_svc --multirun deps: - path: conf/gzip_svc.yaml hash: md5 - md5: 71702231d42f4d68a2237772b3475697 - size: 2115 + md5: ef6089c75166b6acb57ce97a89157ad9 + size: 1905 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead @@ -15899,27 +5937,24 @@ stages: sampler: _target_: optuna.samplers.TPESampler consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper study_name: ${dataset}_${model_name}_${stage} storage: sqlite:///optuna.db - n_jobs: 2 - n_trials: 2 + n_trials: 128 + n_jobs: 8 params: +model.init.kernel: rbf,precomputed - +model.init.C: 1e-2,1e-1,1e0,1e1,1e2 + +model.init.C: tag(log, interval(1e-3, 1e3)) +model.init.gamma: scale,auto +model.init.class_weight: balanced,null - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio model_name: ${model_name} - data.sample.random_state: int(interval(1, 10000)) direction: ${direction} max_failure_rate: 1.0 launcher: @@ -15933,163 +5968,77 @@ stages: temp_folder: /tmp/deckard max_nbytes: 100000 mmap_mode: r - model_name: gzip_svc outs: - - path: ddos/logs/gzip_svc/100 + - path: ddos/logs/gzip_svc/20/symmetry_true hash: md5 - md5: 7ad3d8a6e94e26be1554eb05596f7135.dir - size: 1396897 - nfiles: 514 - - path: ddos/reports/gzip_svc/100/train/ + md5: 51fb64b0b4069b3a551837dd9602b50c.dir + size: 1235122 + nfiles: 513 + - path: ddos/reports/gzip_svc/20/symmetry_true/train/ hash: md5 - md5: d2f54e80307679736c4af3be015a967e.dir - size: 552243 + md5: 22b4b6a8d2e3861aedf0e4f43917ba72.dir + size: 551301 nfiles: 384 - find_best_model@kdd_nsl-gzip_knn: - cmd: python -m deckard.layers.find_best --storage sqlite:///optuna.db --study_name - gzip_knn_kdd_nsl --config_subdir model --params_file best_gzip_knn_kdd_nsl --default_config - gzip_knn - deps: - - path: kdd_nsl/logs/gzip_knn/ - hash: md5 - md5: 6418750af32f15be9c6f35e0975b3276.dir - size: 4024441 - nfiles: 1542 - outs: - - path: conf/model/best_gzip_knn_kdd_nsl.yaml - hash: md5 - md5: f9ad25a19931041146b4b1eab45fda68 - size: 420 - find_best_model@kdd_nsl-gzip_svc: - cmd: python -m deckard.layers.find_best --storage sqlite:///optuna.db --study_name - gzip_svc_kdd_nsl --config_subdir model --params_file best_gzip_svc_kdd_nsl --default_config - gzip_svc - deps: - - path: kdd_nsl/logs/gzip_svc/ - hash: md5 - md5: 381879c377b6eeccbb9d1aa42f78fec2.dir - size: 4366326 - nfiles: 1542 - outs: - - path: conf/model/best_gzip_svc_kdd_nsl.yaml - hash: md5 - md5: 0542c20ce7b5a74a20d4ab1c38fdf213 - size: 434 - find_best_model@kdd_nsl-gzip_logistic: - cmd: python -m deckard.layers.find_best --storage sqlite:///optuna.db --study_name - gzip_logistic_kdd_nsl --config_subdir model --params_file best_gzip_logistic_kdd_nsl - --default_config gzip_logistic - deps: - - path: kdd_nsl/logs/gzip_logistic/ - hash: md5 - md5: 34325e24d16a4af0ec3286ec4b034e14.dir - size: 4504884 - nfiles: 1542 - outs: - - path: conf/model/best_gzip_logistic_kdd_nsl.yaml - hash: md5 - md5: e21d828b4b1ad122d7755e986de5b93d - size: 353 - find_best_model@sms_spam-gzip_knn: - cmd: python -m deckard.layers.find_best --storage sqlite:///optuna.db --study_name - gzip_knn_sms_spam --config_subdir model --params_file best_gzip_knn_sms_spam - --default_config gzip_knn - deps: - - path: sms_spam/logs/gzip_knn/ - hash: md5 - md5: 689c69db8c621101649ddef5bd0c1bb5.dir - size: 2713750 - nfiles: 1028 - outs: - - path: conf/model/best_gzip_knn_sms_spam.yaml - hash: md5 - md5: 41fad710bcb8b8b8dd548d669b2ed748 - size: 419 - find_best_model@sms_spam-gzip_svc: - cmd: python -m deckard.layers.find_best --storage sqlite:///optuna.db --study_name - gzip_svc_sms_spam --config_subdir model --params_file best_gzip_svc_sms_spam - --default_config gzip_svc - deps: - - path: sms_spam/logs/gzip_svc/ - hash: md5 - md5: b91e15f0eb5ee57aed8aeb5a5d6feeab.dir - size: 2777710 - nfiles: 1028 - outs: - - path: conf/model/best_gzip_svc_sms_spam.yaml - hash: md5 - md5: bb3008613c3311a696d32fb683732c00 - size: 442 - find_best_model@sms_spam-gzip_logistic: - cmd: python -m deckard.layers.find_best --storage sqlite:///optuna.db --study_name - gzip_logistic_sms_spam --config_subdir model --params_file best_gzip_logistic_sms_spam - --default_config gzip_logistic - deps: - - path: sms_spam/logs/gzip_logistic/ - hash: md5 - md5: 89191dbe147b40192129776ef2652900.dir - size: 1649284 - nfiles: 578 - outs: - - path: conf/model/best_gzip_logistic_sms_spam.yaml - hash: md5 - md5: fd1d0481be57844d935aea28e995a369 - size: 485 - condense@kdd_nsl-knn: - cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl - data.sample.train_size=100 data.sample.test_size=100 model_name=condensed_knn - model=gzip_knn files.directory=kdd_nsl files.reports=reports/condense/knn/ hydra.sweeper.study_name=condense_knn_kdd_nsl - hydra.sweeper.n_trials=1024 hydra.sweeper.n_jobs=8 hydra.sweep.dir=kdd_nsl/logs/condense/knn/ - hydra.callbacks.study_dump.output_file=kdd_nsl/logs/knn/study.csv hydra.launcher.n_jobs=-1 - --config-name condense_knn --multirun + grid_search@20-ddos-gzip_svc-false: + cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=20 + data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null + model.init.symmetric=false hydra.sweeper.study_name=gzip_svc_ddos hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=ddos/logs/gzip_svc/20/symmetry_false + hydra.callbacks.study_dump.output_file=ddos/logs/gzip_svc/20/study.csv files.directory=ddos + files.reports=reports/gzip_svc/20/symmetry_false hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_svc --multirun deps: - - path: conf/condense_knn.yaml + - path: conf/gzip_svc.yaml hash: md5 - md5: abd25d17a742e467d39dda34b448ba88 - size: 2181 + md5: ef6089c75166b6acb57ce97a89157ad9 + size: 1905 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead size: 1469 params: - conf/condense.yaml: + conf/gzip_svc.yaml: hydra: run: - dir: ${dataset}/logs/condense/ + dir: ${dataset}/logs/${stage}/ sweep: dir: ??? - subdir: ${hydra.job.num} + subdir: ${hydra.job.id} callbacks: study_dump: _target_: database.OptunaStudyDumpCallback storage: ${hydra.sweeper.storage} study_name: ${hydra.sweeper.study_name} - directions: ${direction} - metric_names: ${optimizers} + directions: + - maximize + metric_names: + - accuracy output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name} + study_name: ${dataset}_${model_name}_${stage} storage: sqlite:///optuna.db - n_jobs: 2 - n_trials: 2 + n_trials: 128 + n_jobs: 8 + params: + +model.init.kernel: rbf,precomputed + +model.init.C: tag(log, interval(1e-3, 1e3)) + +model.init.gamma: scale,auto + +model.init.class_weight: balanced,null + model_name: ${model_name} direction: ${direction} max_failure_rate: 1.0 - params: - ++data.sample.train_size: 1000 - ++data.sample.random_state: int(interval(10000, 20000)) - model.init.m: tag(log, interval(.01, .1)) - +model.init.sampling_method: medoid,sum,svc,random,hardness,nearmiss,knn launcher: _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher n_jobs: 8 @@ -16102,37 +6051,39 @@ stages: max_nbytes: 100000 mmap_mode: r outs: - - path: kdd_nsl/logs/condense/knn/ + - path: ddos/logs/gzip_svc/20/symmetry_false hash: md5 - md5: 378298d488efbdb9adf7ecdb9f82124c.dir - size: 10970993 - nfiles: 4097 - - path: kdd_nsl/reports/condense/knn/ + md5: 2440c70c069be012281ec7412d211422.dir + size: 1234738 + nfiles: 513 + - path: ddos/reports/gzip_svc/20/symmetry_false/train/ hash: md5 - md5: 93ada0fdd4ee34c1a90811b419492a55.dir - size: 3050193 - nfiles: 2814 - condense@kdd_nsl-svc: + md5: 83c44eacdc2b26fd6264cfb781ea7c54.dir + size: 551571 + nfiles: 384 + grid_search@20-kdd_nsl-gzip_knn-true: cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl - data.sample.train_size=100 data.sample.test_size=100 model_name=condensed_svc - model=gzip_svc files.directory=kdd_nsl files.reports=reports/condense/svc/ hydra.sweeper.study_name=condense_svc_kdd_nsl - hydra.sweeper.n_trials=1024 hydra.sweeper.n_jobs=8 hydra.sweep.dir=kdd_nsl/logs/condense/svc/ - hydra.callbacks.study_dump.output_file=kdd_nsl/logs/svc/study.csv hydra.launcher.n_jobs=-1 - --config-name condense_svc --multirun + data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null + model.init.symmetric=true hydra.sweeper.study_name=gzip_knn_kdd_nsl hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=kdd_nsl/logs/gzip_knn/20/symmetry_true + hydra.callbacks.study_dump.output_file=kdd_nsl/logs/gzip_knn/20/study.csv files.directory=kdd_nsl + files.reports=reports/gzip_knn/20/symmetry_true hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_knn --multirun deps: - - path: conf/condense_svc.yaml + - path: conf/gzip_knn.yaml hash: md5 - md5: 7a311db45e697a23a2bed8180fd45e64 - size: 2182 + md5: 2d0f54d62dcdc05d21ea1730899de0bb + size: 1827 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead size: 1469 params: - conf/condense.yaml: + conf/gzip_knn.yaml: hydra: run: - dir: ${dataset}/logs/condense/ + dir: ${dataset}/logs/${stage}/ sweep: dir: ??? subdir: ${hydra.job.num} @@ -16147,26 +6098,26 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name} - storage: sqlite:///optuna.db - n_jobs: 2 - n_trials: 2 direction: ${direction} + storage: sqlite:///optuna.db + study_name: ${dataset}_${model_name}_${stage} + n_trials: 128 + n_jobs: 8 max_failure_rate: 1.0 params: - ++data.sample.train_size: 1000 - ++data.sample.random_state: int(interval(10000, 20000)) - model.init.m: tag(log, interval(.01, .1)) - +model.init.sampling_method: medoid,sum,svc,random,hardness,nearmiss,knn + model.init.k: 1,3,5,7,11 + +model.init.weights: uniform,distance + +model.init.algorithm: brute + model_name: ${model_name} launcher: _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher n_jobs: 8 @@ -16179,37 +6130,39 @@ stages: max_nbytes: 100000 mmap_mode: r outs: - - path: kdd_nsl/logs/condense/svc/ + - path: kdd_nsl/logs/gzip_knn/20/symmetry_true hash: md5 - md5: 776eda5429781a85addde97d20c7b265.dir - size: 11185990 - nfiles: 4097 - - path: kdd_nsl/reports/condense/svc/ + md5: 677d1cdd68cb84a67d83107fc6925c3c.dir + size: 1196876 + nfiles: 513 + - path: kdd_nsl/reports/gzip_knn/20/symmetry_true/train/ hash: md5 - md5: 203675ff458bef2b81282c5bdfc2a784.dir - size: 4456054 - nfiles: 2974 - condense@kdd_nsl-logistic: + md5: bb50d06bc8b2fd621dd0a417273884cc.dir + size: 341291 + nfiles: 356 + grid_search@20-kdd_nsl-gzip_knn-false: cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl - data.sample.train_size=100 data.sample.test_size=100 model_name=condensed_logistic - model=gzip_logistic files.directory=kdd_nsl files.reports=reports/condense/logistic/ - hydra.sweeper.study_name=condense_logistic_kdd_nsl hydra.sweeper.n_trials=1024 - hydra.sweeper.n_jobs=8 hydra.sweep.dir=kdd_nsl/logs/condense/logistic/ hydra.callbacks.study_dump.output_file=kdd_nsl/logs/logistic/study.csv - hydra.launcher.n_jobs=-1 --config-name condense_logistic --multirun + data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null + model.init.symmetric=false hydra.sweeper.study_name=gzip_knn_kdd_nsl hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=kdd_nsl/logs/gzip_knn/20/symmetry_false + hydra.callbacks.study_dump.output_file=kdd_nsl/logs/gzip_knn/20/study.csv files.directory=kdd_nsl + files.reports=reports/gzip_knn/20/symmetry_false hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_knn --multirun deps: - - path: conf/condense_logistic.yaml + - path: conf/gzip_knn.yaml hash: md5 - md5: 85b6d1d835afd7e95b5b9f804fbd7119 - size: 2326 + md5: 2d0f54d62dcdc05d21ea1730899de0bb + size: 1827 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead size: 1469 params: - conf/condense.yaml: + conf/gzip_knn.yaml: hydra: run: - dir: ${dataset}/logs/condense/ + dir: ${dataset}/logs/${stage}/ sweep: dir: ??? subdir: ${hydra.job.num} @@ -16224,26 +6177,26 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name} - storage: sqlite:///optuna.db - n_jobs: 2 - n_trials: 2 direction: ${direction} + storage: sqlite:///optuna.db + study_name: ${dataset}_${model_name}_${stage} + n_trials: 128 + n_jobs: 8 max_failure_rate: 1.0 params: - ++data.sample.train_size: 1000 - ++data.sample.random_state: int(interval(10000, 20000)) - model.init.m: tag(log, interval(.01, .1)) - +model.init.sampling_method: medoid,sum,svc,random,hardness,nearmiss,knn + model.init.k: 1,3,5,7,11 + +model.init.weights: uniform,distance + +model.init.algorithm: brute + model_name: ${model_name} launcher: _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher n_jobs: 8 @@ -16256,40 +6209,43 @@ stages: max_nbytes: 100000 mmap_mode: r outs: - - path: kdd_nsl/logs/condense/logistic/ + - path: kdd_nsl/logs/gzip_knn/20/symmetry_false hash: md5 - md5: 1dc74c36e9ba875544f225b89a6da453.dir - size: 11922297 - nfiles: 4097 - - path: kdd_nsl/reports/condense/logistic/ + md5: 8876b4cdea08cacd9fabea8b7c7e339b.dir + size: 1180969 + nfiles: 513 + - path: kdd_nsl/reports/gzip_knn/20/symmetry_false/train/ hash: md5 - md5: ea7bb298a46f2f3f6cbbd56cae254637.dir - size: 4572006 - nfiles: 2967 - condense@truthseeker-knn: - cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker - data.sample.train_size=100 data.sample.test_size=100 model_name=condensed_knn - model=gzip_knn files.directory=truthseeker files.reports=reports/condense/knn/ - hydra.sweeper.study_name=condense_knn_truthseeker hydra.sweeper.n_trials=1024 - hydra.sweeper.n_jobs=8 hydra.sweep.dir=truthseeker/logs/condense/knn/ hydra.callbacks.study_dump.output_file=truthseeker/logs/knn/study.csv - hydra.launcher.n_jobs=-1 --config-name condense_knn --multirun + md5: 8635540eb47bb367dbac1b7d6d83afde.dir + size: 371913 + nfiles: 345 + grid_search@20-kdd_nsl-gzip_logistic-true: + cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl + data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_logistic + model.init.distance_matrix=null model.init.symmetric=true hydra.sweeper.study_name=gzip_logistic_kdd_nsl + hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 hydra.sweep.dir=kdd_nsl/logs/gzip_logistic/20/symmetry_true + hydra.callbacks.study_dump.output_file=kdd_nsl/logs/gzip_logistic/20/study.csv + files.directory=kdd_nsl files.reports=reports/gzip_logistic/20/symmetry_true + hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_logistic --multirun deps: - - path: conf/condense_knn.yaml + - path: conf/gzip_logistic.yaml hash: md5 - md5: abd25d17a742e467d39dda34b448ba88 - size: 2181 + md5: da7adfd9b59783b6cd34f750dfcfb1b5 + size: 1993 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead size: 1469 params: - conf/condense.yaml: + conf/gzip_logistic.yaml: hydra: run: - dir: ${dataset}/logs/condense/ + dir: ${dataset}/logs/${stage}/ sweep: dir: ??? - subdir: ${hydra.job.num} + subdir: ${hydra.job.id} callbacks: study_dump: _target_: database.OptunaStudyDumpCallback @@ -16301,26 +6257,29 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name} + study_name: ${dataset}_${model_name}_${stage} storage: sqlite:///optuna.db - n_jobs: 2 - n_trials: 2 + n_trials: 128 + n_jobs: 8 + params: + +model.init.solver: saga + +model.init.penalty: l2,l1 + +model.init.tol: tag(log, interval(1e-5, 1e-1)) + +model.init.C: tag(log, interval(1e-3, 1e3)) + +model.init.fit_intercept: True,False + +model.init.class_weight: balanced,None + model_name: ${model_name} direction: ${direction} max_failure_rate: 1.0 - params: - ++data.sample.train_size: 1000 - ++data.sample.random_state: int(interval(10000, 20000)) - model.init.m: tag(log, interval(.01, .1)) - +model.init.sampling_method: medoid,sum,svc,random,hardness,nearmiss,knn launcher: _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher n_jobs: 8 @@ -16333,36 +6292,43 @@ stages: max_nbytes: 100000 mmap_mode: r outs: - - path: truthseeker/logs/condense/knn/ + - path: kdd_nsl/logs/gzip_logistic/20/symmetry_true hash: md5 - md5: e3674e8225bdf6253493734e4aaeae1b.dir - size: 10942128 - nfiles: 4097 - - path: truthseeker/reports/condense/knn/ + md5: 4752da5c6f9e5b19ffa7b85fedaa864d.dir + size: 1271405 + nfiles: 513 + - path: kdd_nsl/reports/gzip_logistic/20/symmetry_true/train/ hash: md5 - md5: 1324be810ca9c33934d2d66d4dee0f24.dir - size: 3043315 - nfiles: 2762 - condense@truthseeker-svc: - cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker - data.sample.train_size=100 data.sample.test_size=100 model_name=condensed_svc - model=gzip_svc files.directory=truthseeker files.reports=reports/condense/svc/ - hydra.sweeper.study_name=condense_svc_truthseeker hydra.sweeper.n_trials=1024 - hydra.sweeper.n_jobs=8 hydra.sweep.dir=truthseeker/logs/condense/svc/ hydra.callbacks.study_dump.output_file=truthseeker/logs/svc/study.csv - hydra.launcher.n_jobs=-1 --config-name condense_svc --multirun + md5: b2fc29717a0256771a595e81e77363c9.dir + size: 604610 + nfiles: 356 + grid_search@20-kdd_nsl-gzip_logistic-false: + cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl + data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_logistic + model.init.distance_matrix=null model.init.symmetric=false hydra.sweeper.study_name=gzip_logistic_kdd_nsl + hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 hydra.sweep.dir=kdd_nsl/logs/gzip_logistic/20/symmetry_false + hydra.callbacks.study_dump.output_file=kdd_nsl/logs/gzip_logistic/20/study.csv + files.directory=kdd_nsl files.reports=reports/gzip_logistic/20/symmetry_false + hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_logistic --multirun deps: - - path: conf/model/best_gzip_svc_truthseeker.yaml + - path: conf/gzip_logistic.yaml + hash: md5 + md5: da7adfd9b59783b6cd34f750dfcfb1b5 + size: 1993 + - path: params.yaml hash: md5 - md5: 97d9d5857744b1cc077513ac5a659f62 - size: 302 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: - conf/condense.yaml: + conf/gzip_logistic.yaml: hydra: run: - dir: ${dataset}/logs/condense/ + dir: ${dataset}/logs/${stage}/ sweep: dir: ??? - subdir: ${hydra.job.num} + subdir: ${hydra.job.id} callbacks: study_dump: _target_: database.OptunaStudyDumpCallback @@ -16374,26 +6340,29 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name} + study_name: ${dataset}_${model_name}_${stage} storage: sqlite:///optuna.db - n_jobs: 2 - n_trials: 2 + n_trials: 128 + n_jobs: 8 + params: + +model.init.solver: saga + +model.init.penalty: l2,l1 + +model.init.tol: tag(log, interval(1e-5, 1e-1)) + +model.init.C: tag(log, interval(1e-3, 1e3)) + +model.init.fit_intercept: True,False + +model.init.class_weight: balanced,None + model_name: ${model_name} direction: ${direction} max_failure_rate: 1.0 - params: - ++data.sample.train_size: 1000 - ++data.sample.random_state: int(interval(10000, 20000)) - model.init.m: tag(log, interval(.01, .1)) - +model.init.sampling_method: medoid,sum,svc,random,hardness,nearmiss,knn launcher: _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher n_jobs: 8 @@ -16406,67 +6375,76 @@ stages: max_nbytes: 100000 mmap_mode: r outs: - - path: truthseeker/logs/condense/svc/ + - path: kdd_nsl/logs/gzip_logistic/20/symmetry_false hash: md5 - md5: 845724e35dc3a54bea549410a35d6afd.dir - size: 11192018 - nfiles: 4097 - - path: truthseeker/reports/condense/svc/ + md5: 24f796fd29b950df2c9d7eb53db47cd2.dir + size: 1260414 + nfiles: 513 + - path: kdd_nsl/reports/gzip_logistic/20/symmetry_false/train/ hash: md5 - md5: 6cbdc47d51df656dcf7e8ae6221795b3.dir - size: 2825163 - nfiles: 3064 - condense@truthseeker-logistic: - cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker - data.sample.train_size=100 data.sample.test_size=100 model_name=condensed_logistic - model=gzip_logistic files.directory=truthseeker files.reports=reports/condense/logistic/ - hydra.sweeper.study_name=condense_logistic_truthseeker hydra.sweeper.n_trials=1024 - hydra.sweeper.n_jobs=8 hydra.sweep.dir=truthseeker/logs/condense/logistic/ hydra.callbacks.study_dump.output_file=truthseeker/logs/logistic/study.csv - hydra.launcher.n_jobs=-1 --config-name condense_logistic --multirun + md5: 6f0315fbb05852baa48643f06ed318ad.dir + size: 611076 + nfiles: 347 + grid_search@20-kdd_nsl-gzip_svc-true: + cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl + data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null + model.init.symmetric=true hydra.sweeper.study_name=gzip_svc_kdd_nsl hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=kdd_nsl/logs/gzip_svc/20/symmetry_true + hydra.callbacks.study_dump.output_file=kdd_nsl/logs/gzip_svc/20/study.csv files.directory=kdd_nsl + files.reports=reports/gzip_svc/20/symmetry_true hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_svc --multirun deps: - - path: conf/model/best_gzip_logistic_truthseeker.yaml + - path: conf/gzip_svc.yaml + hash: md5 + md5: ef6089c75166b6acb57ce97a89157ad9 + size: 1905 + - path: params.yaml hash: md5 - md5: 448e12c542f48c074057e9374743d61e - size: 326 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: - conf/condense.yaml: + conf/gzip_svc.yaml: hydra: run: - dir: ${dataset}/logs/condense/ + dir: ${dataset}/logs/${stage}/ sweep: dir: ??? - subdir: ${hydra.job.num} + subdir: ${hydra.job.id} callbacks: study_dump: _target_: database.OptunaStudyDumpCallback storage: ${hydra.sweeper.storage} study_name: ${hydra.sweeper.study_name} - directions: ${direction} - metric_names: ${optimizers} + directions: + - maximize + metric_names: + - accuracy output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name} + study_name: ${dataset}_${model_name}_${stage} storage: sqlite:///optuna.db - n_jobs: 2 - n_trials: 2 + n_trials: 128 + n_jobs: 8 + params: + +model.init.kernel: rbf,precomputed + +model.init.C: tag(log, interval(1e-3, 1e3)) + +model.init.gamma: scale,auto + +model.init.class_weight: balanced,null + model_name: ${model_name} direction: ${direction} max_failure_rate: 1.0 - params: - ++data.sample.train_size: 1000 - ++data.sample.random_state: int(interval(10000, 20000)) - model.init.m: tag(log, interval(.01, .1)) - +model.init.sampling_method: medoid,sum,svc,random,hardness,nearmiss,knn launcher: _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher n_jobs: 8 @@ -16479,71 +6457,76 @@ stages: max_nbytes: 100000 mmap_mode: r outs: - - path: truthseeker/logs/condense/logistic/ + - path: kdd_nsl/logs/gzip_svc/20/symmetry_true hash: md5 - md5: f7e754346e500d1b007b519d86f4c608.dir - size: 11847643 - nfiles: 4097 - - path: truthseeker/reports/condense/logistic/ + md5: 0cbe34f36b1aacc6101ec1d3d6d878eb.dir + size: 1244608 + nfiles: 513 + - path: kdd_nsl/reports/gzip_svc/20/symmetry_true/train/ hash: md5 - md5: 8bd6876fc856ea5bd1e95b54093aedb8.dir - size: 2976098 - nfiles: 3011 - condense@sms_spam-knn: - cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam - data.sample.train_size=100 data.sample.test_size=100 model_name=condensed_knn - model=gzip_knn files.directory=sms_spam files.reports=reports/condense/knn/ - hydra.sweeper.study_name=condense_knn_sms_spam hydra.sweeper.n_trials=1024 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=sms_spam/logs/condense/knn/ hydra.callbacks.study_dump.output_file=sms_spam/logs/knn/study.csv - hydra.launcher.n_jobs=-1 --config-name condense_knn --multirun + md5: 0ea5d4be51518781035dd7e85b700732.dir + size: 554635 + nfiles: 384 + grid_search@20-kdd_nsl-gzip_svc-false: + cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl + data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null + model.init.symmetric=false hydra.sweeper.study_name=gzip_svc_kdd_nsl hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=kdd_nsl/logs/gzip_svc/20/symmetry_false + hydra.callbacks.study_dump.output_file=kdd_nsl/logs/gzip_svc/20/study.csv files.directory=kdd_nsl + files.reports=reports/gzip_svc/20/symmetry_false hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_svc --multirun deps: - - path: conf/condense_knn.yaml + - path: conf/gzip_svc.yaml hash: md5 - md5: abd25d17a742e467d39dda34b448ba88 - size: 2181 + md5: ef6089c75166b6acb57ce97a89157ad9 + size: 1905 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: - conf/condense.yaml: + conf/gzip_svc.yaml: hydra: run: - dir: ${dataset}/logs/condense/ + dir: ${dataset}/logs/${stage}/ sweep: dir: ??? - subdir: ${hydra.job.num} + subdir: ${hydra.job.id} callbacks: study_dump: _target_: database.OptunaStudyDumpCallback storage: ${hydra.sweeper.storage} study_name: ${hydra.sweeper.study_name} - directions: ${direction} - metric_names: ${optimizers} + directions: + - maximize + metric_names: + - accuracy output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name} + study_name: ${dataset}_${model_name}_${stage} storage: sqlite:///optuna.db - n_jobs: 2 - n_trials: 2 + n_trials: 128 + n_jobs: 8 + params: + +model.init.kernel: rbf,precomputed + +model.init.C: tag(log, interval(1e-3, 1e3)) + +model.init.gamma: scale,auto + +model.init.class_weight: balanced,null + model_name: ${model_name} direction: ${direction} max_failure_rate: 1.0 - params: - ++data.sample.train_size: 1000 - ++data.sample.random_state: int(interval(10000, 20000)) - model.init.m: tag(log, interval(.01, .1)) - +model.init.sampling_method: medoid,sum,svc,random,hardness,nearmiss,knn launcher: _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher n_jobs: 8 @@ -16556,37 +6539,39 @@ stages: max_nbytes: 100000 mmap_mode: r outs: - - path: sms_spam/logs/condense/knn/ + - path: kdd_nsl/logs/gzip_svc/20/symmetry_false hash: md5 - md5: ee1eda16b8989f2a23a7dfeba27b4437.dir - size: 10519093 - nfiles: 4097 - - path: sms_spam/reports/condense/knn/ + md5: 9eba5cbbd68553f794dec337e9606f52.dir + size: 1244184 + nfiles: 513 + - path: kdd_nsl/reports/gzip_svc/20/symmetry_false/train/ hash: md5 - md5: 84b8fcb1e78a8685141409736c6d6afa.dir - size: 4713599 - nfiles: 4258 - condense@sms_spam-svc: + md5: dc18ba1e036d9b6678d4b97070d84c3c.dir + size: 554884 + nfiles: 384 + grid_search@20-sms_spam-gzip_knn-true: cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam - data.sample.train_size=100 data.sample.test_size=100 model_name=condensed_svc - model=gzip_svc files.directory=sms_spam files.reports=reports/condense/svc/ - hydra.sweeper.study_name=condense_svc_sms_spam hydra.sweeper.n_trials=1024 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=sms_spam/logs/condense/svc/ hydra.callbacks.study_dump.output_file=sms_spam/logs/svc/study.csv - hydra.launcher.n_jobs=-1 --config-name condense_svc --multirun + data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null + model.init.symmetric=true hydra.sweeper.study_name=gzip_knn_sms_spam hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=sms_spam/logs/gzip_knn/20/symmetry_true + hydra.callbacks.study_dump.output_file=sms_spam/logs/gzip_knn/20/study.csv files.directory=sms_spam + files.reports=reports/gzip_knn/20/symmetry_true hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_knn --multirun deps: - - path: conf/condense_svc.yaml + - path: conf/gzip_knn.yaml hash: md5 - md5: 7a311db45e697a23a2bed8180fd45e64 - size: 2182 + md5: 2d0f54d62dcdc05d21ea1730899de0bb + size: 1827 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: - conf/condense.yaml: + conf/gzip_knn.yaml: hydra: run: - dir: ${dataset}/logs/condense/ + dir: ${dataset}/logs/${stage}/ sweep: dir: ??? subdir: ${hydra.job.num} @@ -16601,26 +6586,26 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name} - storage: sqlite:///optuna.db - n_jobs: 2 - n_trials: 2 direction: ${direction} + storage: sqlite:///optuna.db + study_name: ${dataset}_${model_name}_${stage} + n_trials: 128 + n_jobs: 8 max_failure_rate: 1.0 params: - ++data.sample.train_size: 1000 - ++data.sample.random_state: int(interval(10000, 20000)) - model.init.m: tag(log, interval(.01, .1)) - +model.init.sampling_method: medoid,sum,svc,random,hardness,nearmiss,knn + model.init.k: 1,3,5,7,11 + +model.init.weights: uniform,distance + +model.init.algorithm: brute + model_name: ${model_name} launcher: _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher n_jobs: 8 @@ -16633,37 +6618,39 @@ stages: max_nbytes: 100000 mmap_mode: r outs: - - path: sms_spam/logs/condense/svc/ + - path: sms_spam/logs/gzip_knn/20/symmetry_true hash: md5 - md5: 9d28ee3f4494d207369bd35c2f5d2164.dir - size: 11082621 - nfiles: 4097 - - path: sms_spam/reports/condense/svc/ + md5: b900fa95011e3c9620f9a7103baa47a1.dir + size: 1193555 + nfiles: 513 + - path: sms_spam/reports/gzip_knn/20/symmetry_true/train/ hash: md5 - md5: 200cad31398ec4545e7a490011218c47.dir - size: 4416840 - nfiles: 3068 - condense@sms_spam-logistic: + md5: 0c2256ed804059b75873b27f8963204e.dir + size: 329514 + nfiles: 356 + grid_search@20-sms_spam-gzip_knn-false: cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam - data.sample.train_size=100 data.sample.test_size=100 model_name=condensed_logistic - model=gzip_logistic files.directory=sms_spam files.reports=reports/condense/logistic/ - hydra.sweeper.study_name=condense_logistic_sms_spam hydra.sweeper.n_trials=1024 - hydra.sweeper.n_jobs=8 hydra.sweep.dir=sms_spam/logs/condense/logistic/ hydra.callbacks.study_dump.output_file=sms_spam/logs/logistic/study.csv - hydra.launcher.n_jobs=-1 --config-name condense_logistic --multirun + data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null + model.init.symmetric=false hydra.sweeper.study_name=gzip_knn_sms_spam hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=sms_spam/logs/gzip_knn/20/symmetry_false + hydra.callbacks.study_dump.output_file=sms_spam/logs/gzip_knn/20/study.csv files.directory=sms_spam + files.reports=reports/gzip_knn/20/symmetry_false hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_knn --multirun deps: - - path: conf/condense_logistic.yaml + - path: conf/gzip_knn.yaml hash: md5 - md5: 85b6d1d835afd7e95b5b9f804fbd7119 - size: 2326 + md5: 2d0f54d62dcdc05d21ea1730899de0bb + size: 1827 - path: params.yaml hash: md5 - md5: 8be0cf0b5f453ffb12b19a1bf1af6468 - size: 1435 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: - conf/condense.yaml: + conf/gzip_knn.yaml: hydra: run: - dir: ${dataset}/logs/condense/ + dir: ${dataset}/logs/${stage}/ sweep: dir: ??? subdir: ${hydra.job.num} @@ -16678,748 +6665,884 @@ stages: sweeper: sampler: _target_: optuna.samplers.TPESampler - seed: 123 consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name} - storage: sqlite:///optuna.db - n_jobs: 2 - n_trials: 2 direction: ${direction} + storage: sqlite:///optuna.db + study_name: ${dataset}_${model_name}_${stage} + n_trials: 128 + n_jobs: 8 max_failure_rate: 1.0 params: - ++data.sample.train_size: 1000 - ++data.sample.random_state: int(interval(10000, 20000)) - model.init.m: tag(log, interval(.01, .1)) - +model.init.sampling_method: medoid,sum,svc,random,hardness,nearmiss,knn + model.init.k: 1,3,5,7,11 + +model.init.weights: uniform,distance + +model.init.algorithm: brute + model_name: ${model_name} launcher: _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher n_jobs: 8 prefer: processes verbose: 1 - timeout: - pre_dispatch: ${hydra.sweeper.n_jobs} - batch_size: auto - temp_folder: /tmp/deckard - max_nbytes: 100000 - mmap_mode: r - outs: - - path: sms_spam/logs/condense/logistic/ - hash: md5 - md5: 3846050e3a2341b246c2c3366debe0dc.dir - size: 11620551 - nfiles: 4097 - - path: sms_spam/reports/condense/logistic/ - hash: md5 - md5: 05562ae582796b70d35ae7062a5030d7.dir - size: 9597627 - nfiles: 6388 - compile@sms_spam-condense/logistic: - cmd: python -m deckard.layers.compile --report_folder sms_spam/reports/condense/logistic --results_file - sms_spam/reports/condense/logistic.csv - deps: - - path: sms_spam/reports/condense/logistic/ - hash: md5 - md5: 05562ae582796b70d35ae7062a5030d7.dir - size: 9597627 - nfiles: 6388 - outs: - - path: sms_spam/reports/condense/logistic.csv - hash: md5 - md5: 7094b26a582820cc1f88512573ce8c25 - size: 3430438 - compile@kdd_nsl-condense/svc: - cmd: python -m deckard.layers.compile --report_folder kdd_nsl/reports/condense/svc --results_file - kdd_nsl/reports/condense/svc.csv - deps: - - path: kdd_nsl/reports/condense/svc/ - hash: md5 - md5: 203675ff458bef2b81282c5bdfc2a784.dir - size: 4456054 - nfiles: 2974 - outs: - - path: kdd_nsl/reports/condense/svc.csv - hash: md5 - md5: ab6577b1dc3e0043e39abbe6d3e08572 - size: 1430670 - compile@kdd_nsl-condense/logistic: - cmd: python -m deckard.layers.compile --report_folder kdd_nsl/reports/condense/logistic --results_file - kdd_nsl/reports/condense/logistic.csv - deps: - - path: kdd_nsl/reports/condense/logistic/ - hash: md5 - md5: ea7bb298a46f2f3f6cbbd56cae254637.dir - size: 4572006 - nfiles: 2967 - outs: - - path: kdd_nsl/reports/condense/logistic.csv - hash: md5 - md5: ca33966ea5c59774aada0a45e7989bf4 - size: 1469929 - compile@ddos-condense/svc: - cmd: python -m deckard.layers.compile --report_folder ddos/reports/condense/svc --results_file - ddos/reports/condense/svc.csv - deps: - - path: ddos/reports/condense/svc/ - hash: md5 - md5: 4cd4cd510b2d1729094f4b704d22d2f7.dir - size: 4482040 - nfiles: 3072 - outs: - - path: ddos/reports/condense/svc.csv - hash: md5 - md5: aa784bb40bb07d842dc0a91a4db363de - size: 1427146 - compile@truthseeker-condense/knn: - cmd: python -m deckard.layers.compile --report_folder truthseeker/reports/condense/knn --results_file - truthseeker/reports/condense/knn.csv - deps: - - path: truthseeker/reports/condense/knn/ - hash: md5 - md5: 1565eb2348976cc6ac9108396141080b.dir - size: 2831604 - nfiles: 3016 - outs: - - path: truthseeker/reports/condense/knn.csv - hash: md5 - md5: b4ec50d98f613984be6261a059120255 - size: 1595839 - compile@truthseeker-condense/svc: - cmd: python -m deckard.layers.compile --report_folder truthseeker/reports/condense/svc --results_file - truthseeker/reports/condense/svc.csv - deps: - - path: truthseeker/reports/condense/svc/ - hash: md5 - md5: 6cbdc47d51df656dcf7e8ae6221795b3.dir - size: 2825163 - nfiles: 3064 - outs: - - path: truthseeker/reports/condense/svc.csv - hash: md5 - md5: 4cdede4407c88bcda2afc8bbeae91ace - size: 1617655 - compile@ddos-condense/knn: - cmd: python -m deckard.layers.compile --report_folder ddos/reports/condense/knn --results_file - ddos/reports/condense/knn.csv - deps: - - path: ddos/reports/condense/knn/ - hash: md5 - md5: 31d7e7a0e89685ab46147b3bc1e9a57b.dir - size: 2849297 - nfiles: 3044 - outs: - - path: ddos/reports/condense/knn.csv - hash: md5 - md5: 755a891a9010614c0320ba6957a08de7 - size: 1418049 - compile@sms_spam-condense/svc: - cmd: python -m deckard.layers.compile --report_folder sms_spam/reports/condense/svc --results_file - sms_spam/reports/condense/svc.csv - deps: - - path: sms_spam/reports/condense/svc/ - hash: md5 - md5: 200cad31398ec4545e7a490011218c47.dir - size: 4416840 - nfiles: 3068 - outs: - - path: sms_spam/reports/condense/svc.csv - hash: md5 - md5: 32f06cbea623f845dcfa7400d707abad - size: 1573621 - compile@kdd_nsl-condense/knn: - cmd: python -m deckard.layers.compile --report_folder kdd_nsl/reports/condense/knn --results_file - kdd_nsl/reports/condense/knn.csv - deps: - - path: kdd_nsl/reports/condense/knn/ - hash: md5 - md5: 93ada0fdd4ee34c1a90811b419492a55.dir - size: 3050193 - nfiles: 2814 - outs: - - path: kdd_nsl/reports/condense/knn.csv - hash: md5 - md5: 5718185a5ba5dfa47d3a807a7860c79d - size: 1383948 - compile@truthseeker-condense/logistic: - cmd: python -m deckard.layers.compile --report_folder truthseeker/reports/condense/logistic --results_file - truthseeker/reports/condense/logistic.csv - deps: - - path: truthseeker/reports/condense/logistic/ - hash: md5 - md5: 8bd6876fc856ea5bd1e95b54093aedb8.dir - size: 2976098 - nfiles: 3011 - outs: - - path: truthseeker/reports/condense/logistic.csv - hash: md5 - md5: 5c01852f352ac96150fb36c2df9bcbbf - size: 1648856 - compile@sms_spam-condense/knn: - cmd: python -m deckard.layers.compile --report_folder sms_spam/reports/condense/knn --results_file - sms_spam/reports/condense/knn.csv - deps: - - path: sms_spam/reports/condense/knn/ - hash: md5 - md5: 84b8fcb1e78a8685141409736c6d6afa.dir - size: 4713599 - nfiles: 4258 - outs: - - path: sms_spam/reports/condense/knn.csv - hash: md5 - md5: c8d4f7036e0c3e1cf8fa5a0b922c6ecc - size: 2287605 - compile@ddos-condense/logistic: - cmd: python -m deckard.layers.compile --report_folder ddos/reports/condense/logistic --results_file - ddos/reports/condense/logistic.csv - deps: - - path: ddos/reports/condense/logistic/ - hash: md5 - md5: 5ae0bcd484eb00652d8db28c795b72ac.dir - size: 4549745 - nfiles: 3040 - outs: - - path: ddos/reports/condense/logistic.csv - hash: md5 - md5: 43603ccd44d31553618819d6d8a21b26 - size: 1459732 - clean@sms_spam-condense/svc: - cmd: python -m deckard.layers.clean_data -i sms_spam/reports/condense/svc.csv - -o sms_spam/plots/clean/condense/svc.csv -c conf/clean.yaml - deps: - - path: sms_spam/reports/condense/svc.csv - hash: md5 - md5: 32f06cbea623f845dcfa7400d707abad - size: 1573621 - params: - conf/clean.yaml: - replace: - model.init.metric: - jaro: Jaro - _winkler: -Winkler - levenshtein: Levenshtein - ncd: NCD - ratio: Ratio - seqRatio: SeqRatio - hamming: Hamming - gzip: Gzip - pkl: Pickle - bz2: BZ2 - zstd: Zstd - lzma: Lzma - model_name: - GzipSVC: k-SVC - GzipLogisticRegressor: k-Logistic - GzipKNN: k-KNN - model.init.symmetric: - true: Symmetric - false: Asymmetric - outs: - - path: sms_spam/plots/clean/condense/svc.csv - hash: md5 - md5: 92b8648f6759e0a56c65aeec4a15aa92 - size: 1223675 - clean@ddos-condense/knn: - cmd: python -m deckard.layers.clean_data -i ddos/reports/condense/knn.csv -o - ddos/plots/clean/condense/knn.csv -c conf/clean.yaml - deps: - - path: ddos/reports/condense/knn.csv - hash: md5 - md5: 755a891a9010614c0320ba6957a08de7 - size: 1418049 - params: - conf/clean.yaml: - replace: - model.init.metric: - jaro: Jaro - _winkler: -Winkler - levenshtein: Levenshtein - ncd: NCD - ratio: Ratio - seqRatio: SeqRatio - hamming: Hamming - gzip: Gzip - pkl: Pickle - bz2: BZ2 - zstd: Zstd - lzma: Lzma - model_name: - GzipSVC: k-SVC - GzipLogisticRegressor: k-Logistic - GzipKNN: k-KNN - model.init.symmetric: - true: Symmetric - false: Asymmetric + timeout: + pre_dispatch: ${hydra.sweeper.n_jobs} + batch_size: auto + temp_folder: /tmp/deckard + max_nbytes: 100000 + mmap_mode: r outs: - - path: ddos/plots/clean/condense/knn.csv - hash: md5 - md5: be16b853ccb87973e0e61b37b3d79cc9 - size: 1144970 - clean@truthseeker-condense/svc: - cmd: python -m deckard.layers.clean_data -i truthseeker/reports/condense/svc.csv - -o truthseeker/plots/clean/condense/svc.csv -c conf/clean.yaml - deps: - - path: truthseeker/reports/condense/svc.csv + - path: sms_spam/logs/gzip_knn/20/symmetry_false hash: md5 - md5: 4cdede4407c88bcda2afc8bbeae91ace - size: 1617655 - params: - conf/clean.yaml: - replace: - model.init.metric: - jaro: Jaro - _winkler: -Winkler - levenshtein: Levenshtein - ncd: NCD - ratio: Ratio - seqRatio: SeqRatio - hamming: Hamming - gzip: Gzip - pkl: Pickle - bz2: BZ2 - zstd: Zstd - lzma: Lzma - model_name: - GzipSVC: k-SVC - GzipLogisticRegressor: k-Logistic - GzipKNN: k-KNN - model.init.symmetric: - true: Symmetric - false: Asymmetric - outs: - - path: truthseeker/plots/clean/condense/svc.csv + md5: 0554269057beb85cd3746813652ba9d5.dir + size: 1191491 + nfiles: 513 + - path: sms_spam/reports/gzip_knn/20/symmetry_false/train/ hash: md5 - md5: a17c0cdb6a3fbfae5bd4fcfca1938a96 - size: 1257671 - clean@kdd_nsl-condense/knn: - cmd: python -m deckard.layers.clean_data -i kdd_nsl/reports/condense/knn.csv - -o kdd_nsl/plots/clean/condense/knn.csv -c conf/clean.yaml + md5: e25f72d029f72432d5c9a5ffacec0208.dir + size: 341814 + nfiles: 356 + grid_search@20-sms_spam-gzip_logistic-true: + cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam + data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_logistic + model.init.distance_matrix=null model.init.symmetric=true hydra.sweeper.study_name=gzip_logistic_sms_spam + hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 hydra.sweep.dir=sms_spam/logs/gzip_logistic/20/symmetry_true + hydra.callbacks.study_dump.output_file=sms_spam/logs/gzip_logistic/20/study.csv + files.directory=sms_spam files.reports=reports/gzip_logistic/20/symmetry_true + hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_logistic --multirun deps: - - path: kdd_nsl/reports/condense/knn.csv + - path: conf/gzip_logistic.yaml + hash: md5 + md5: da7adfd9b59783b6cd34f750dfcfb1b5 + size: 1993 + - path: params.yaml hash: md5 - md5: 5718185a5ba5dfa47d3a807a7860c79d - size: 1383948 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: - conf/clean.yaml: - replace: - model.init.metric: - jaro: Jaro - _winkler: -Winkler - levenshtein: Levenshtein - ncd: NCD - ratio: Ratio - seqRatio: SeqRatio - hamming: Hamming - gzip: Gzip - pkl: Pickle - bz2: BZ2 - zstd: Zstd - lzma: Lzma - model_name: - GzipSVC: k-SVC - GzipLogisticRegressor: k-Logistic - GzipKNN: k-KNN - model.init.symmetric: - true: Symmetric - false: Asymmetric + conf/gzip_logistic.yaml: + hydra: + run: + dir: ${dataset}/logs/${stage}/ + sweep: + dir: ??? + subdir: ${hydra.job.id} + callbacks: + study_dump: + _target_: database.OptunaStudyDumpCallback + storage: ${hydra.sweeper.storage} + study_name: ${hydra.sweeper.study_name} + directions: ${direction} + metric_names: ${optimizers} + output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv + sweeper: + sampler: + _target_: optuna.samplers.TPESampler + consider_prior: true + seed: 123 + prior_weight: 1.0 + consider_magic_clip: true + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 + multivariate: true + _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper + study_name: ${dataset}_${model_name}_${stage} + storage: sqlite:///optuna.db + n_trials: 128 + n_jobs: 8 + params: + +model.init.solver: saga + +model.init.penalty: l2,l1 + +model.init.tol: tag(log, interval(1e-5, 1e-1)) + +model.init.C: tag(log, interval(1e-3, 1e3)) + +model.init.fit_intercept: True,False + +model.init.class_weight: balanced,None + model_name: ${model_name} + direction: ${direction} + max_failure_rate: 1.0 + launcher: + _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher + n_jobs: 8 + prefer: processes + verbose: 1 + timeout: + pre_dispatch: ${hydra.sweeper.n_jobs} + batch_size: auto + temp_folder: /tmp/deckard + max_nbytes: 100000 + mmap_mode: r outs: - - path: kdd_nsl/plots/clean/condense/knn.csv + - path: sms_spam/logs/gzip_logistic/20/symmetry_true hash: md5 - md5: d8857cdd7c5cddaeb94e66c665635e99 - size: 902457 - clean@kdd_nsl-condense/svc: - cmd: python -m deckard.layers.clean_data -i kdd_nsl/reports/condense/svc.csv - -o kdd_nsl/plots/clean/condense/svc.csv -c conf/clean.yaml + md5: b95404e2e4b0a957a788e82f65a49a10.dir + size: 1268014 + nfiles: 513 + - path: sms_spam/reports/gzip_logistic/20/symmetry_true/train/ + hash: md5 + md5: b2333589409b837e4233aa2fb7cded97.dir + size: 592315 + nfiles: 356 + grid_search@20-sms_spam-gzip_logistic-false: + cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam + data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_logistic + model.init.distance_matrix=null model.init.symmetric=false hydra.sweeper.study_name=gzip_logistic_sms_spam + hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 hydra.sweep.dir=sms_spam/logs/gzip_logistic/20/symmetry_false + hydra.callbacks.study_dump.output_file=sms_spam/logs/gzip_logistic/20/study.csv + files.directory=sms_spam files.reports=reports/gzip_logistic/20/symmetry_false + hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_logistic --multirun deps: - - path: kdd_nsl/reports/condense/svc.csv + - path: conf/gzip_logistic.yaml + hash: md5 + md5: da7adfd9b59783b6cd34f750dfcfb1b5 + size: 1993 + - path: params.yaml hash: md5 - md5: 643a67cb6d5974a787efa6339e3af058 - size: 3003804 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: - conf/clean.yaml: - replace: - model.init.metric: - jaro: Jaro - _winkler: -Winkler - levenshtein: Levenshtein - ncd: NCD - ratio: Ratio - seqRatio: SeqRatio - hamming: Hamming - gzip: Gzip - pkl: Pickle - bz2: BZ2 - zstd: Zstd - lzma: Lzma - model_name: - GzipSVC: k-SVC - GzipLogisticRegressor: k-Logistic - GzipKNN: k-KNN - model.init.symmetric: - true: Symmetric - false: Asymmetric + conf/gzip_logistic.yaml: + hydra: + run: + dir: ${dataset}/logs/${stage}/ + sweep: + dir: ??? + subdir: ${hydra.job.id} + callbacks: + study_dump: + _target_: database.OptunaStudyDumpCallback + storage: ${hydra.sweeper.storage} + study_name: ${hydra.sweeper.study_name} + directions: ${direction} + metric_names: ${optimizers} + output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv + sweeper: + sampler: + _target_: optuna.samplers.TPESampler + consider_prior: true + seed: 123 + prior_weight: 1.0 + consider_magic_clip: true + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 + multivariate: true + _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper + study_name: ${dataset}_${model_name}_${stage} + storage: sqlite:///optuna.db + n_trials: 128 + n_jobs: 8 + params: + +model.init.solver: saga + +model.init.penalty: l2,l1 + +model.init.tol: tag(log, interval(1e-5, 1e-1)) + +model.init.C: tag(log, interval(1e-3, 1e3)) + +model.init.fit_intercept: True,False + +model.init.class_weight: balanced,None + model_name: ${model_name} + direction: ${direction} + max_failure_rate: 1.0 + launcher: + _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher + n_jobs: 8 + prefer: processes + verbose: 1 + timeout: + pre_dispatch: ${hydra.sweeper.n_jobs} + batch_size: auto + temp_folder: /tmp/deckard + max_nbytes: 100000 + mmap_mode: r outs: - - path: kdd_nsl/plots/clean/condense/svc.csv + - path: sms_spam/logs/gzip_logistic/20/symmetry_false hash: md5 - md5: c9b2ff8546f531fa439c664c63fc06fd - size: 2021393 - clean@kdd_nsl-condense/logistic: - cmd: python -m deckard.layers.clean_data -i kdd_nsl/reports/condense/logistic.csv - -o kdd_nsl/plots/clean/condense/logistic.csv -c conf/clean.yaml + md5: 9d4569ebac94dccb57a6d50c04fd2b1c.dir + size: 1252292 + nfiles: 513 + - path: sms_spam/reports/gzip_logistic/20/symmetry_false/train/ + hash: md5 + md5: a4a3af08dfca0a0ba5b94bb0a9ea735a.dir + size: 603823 + nfiles: 343 + grid_search@20-sms_spam-gzip_svc-true: + cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam + data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null + model.init.symmetric=true hydra.sweeper.study_name=gzip_svc_sms_spam hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=sms_spam/logs/gzip_svc/20/symmetry_true + hydra.callbacks.study_dump.output_file=sms_spam/logs/gzip_svc/20/study.csv files.directory=sms_spam + files.reports=reports/gzip_svc/20/symmetry_true hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_svc --multirun deps: - - path: kdd_nsl/reports/condense/logistic.csv + - path: conf/gzip_svc.yaml + hash: md5 + md5: ef6089c75166b6acb57ce97a89157ad9 + size: 1905 + - path: params.yaml hash: md5 - md5: ca33966ea5c59774aada0a45e7989bf4 - size: 1469929 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: - conf/clean.yaml: - replace: - model.init.metric: - jaro: Jaro - _winkler: -Winkler - levenshtein: Levenshtein - ncd: NCD - ratio: Ratio - seqRatio: SeqRatio - hamming: Hamming - gzip: Gzip - pkl: Pickle - bz2: BZ2 - zstd: Zstd - lzma: Lzma - model_name: - GzipSVC: k-SVC - GzipLogisticRegressor: k-Logistic - GzipKNN: k-KNN - model.init.symmetric: - true: Symmetric - false: Asymmetric + conf/gzip_svc.yaml: + hydra: + run: + dir: ${dataset}/logs/${stage}/ + sweep: + dir: ??? + subdir: ${hydra.job.id} + callbacks: + study_dump: + _target_: database.OptunaStudyDumpCallback + storage: ${hydra.sweeper.storage} + study_name: ${hydra.sweeper.study_name} + directions: + - maximize + metric_names: + - accuracy + output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv + sweeper: + sampler: + _target_: optuna.samplers.TPESampler + consider_prior: true + seed: 123 + prior_weight: 1.0 + consider_magic_clip: true + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 + multivariate: true + _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper + study_name: ${dataset}_${model_name}_${stage} + storage: sqlite:///optuna.db + n_trials: 128 + n_jobs: 8 + params: + +model.init.kernel: rbf,precomputed + +model.init.C: tag(log, interval(1e-3, 1e3)) + +model.init.gamma: scale,auto + +model.init.class_weight: balanced,null + model_name: ${model_name} + direction: ${direction} + max_failure_rate: 1.0 + launcher: + _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher + n_jobs: 8 + prefer: processes + verbose: 1 + timeout: + pre_dispatch: ${hydra.sweeper.n_jobs} + batch_size: auto + temp_folder: /tmp/deckard + max_nbytes: 100000 + mmap_mode: r outs: - - path: kdd_nsl/plots/clean/condense/logistic.csv + - path: sms_spam/logs/gzip_svc/20/symmetry_true hash: md5 - md5: 13df9ba9765236429909d36811493425 - size: 1127465 - clean@sms_spam-condense/knn: - cmd: python -m deckard.layers.clean_data -i sms_spam/reports/condense/knn.csv - -o sms_spam/plots/clean/condense/knn.csv -c conf/clean.yaml + md5: 97f387456af594e96fe70ae39cfe8018.dir + size: 1241267 + nfiles: 513 + - path: sms_spam/reports/gzip_svc/20/symmetry_true/train/ + hash: md5 + md5: aa3a7443b115c46ce08aa7a70a7fb77c.dir + size: 542327 + nfiles: 384 + grid_search@20-sms_spam-gzip_svc-false: + cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam + data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null + model.init.symmetric=false hydra.sweeper.study_name=gzip_svc_sms_spam hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=sms_spam/logs/gzip_svc/20/symmetry_false + hydra.callbacks.study_dump.output_file=sms_spam/logs/gzip_svc/20/study.csv files.directory=sms_spam + files.reports=reports/gzip_svc/20/symmetry_false hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_svc --multirun deps: - - path: sms_spam/reports/condense/knn.csv + - path: conf/gzip_svc.yaml + hash: md5 + md5: ef6089c75166b6acb57ce97a89157ad9 + size: 1905 + - path: params.yaml hash: md5 - md5: c8d4f7036e0c3e1cf8fa5a0b922c6ecc - size: 2287605 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: - conf/clean.yaml: - replace: - model.init.metric: - jaro: Jaro - _winkler: -Winkler - levenshtein: Levenshtein - ncd: NCD - ratio: Ratio - seqRatio: SeqRatio - hamming: Hamming - gzip: Gzip - pkl: Pickle - bz2: BZ2 - zstd: Zstd - lzma: Lzma - model_name: - GzipSVC: k-SVC - GzipLogisticRegressor: k-Logistic - GzipKNN: k-KNN - model.init.symmetric: - true: Symmetric - false: Asymmetric + conf/gzip_svc.yaml: + hydra: + run: + dir: ${dataset}/logs/${stage}/ + sweep: + dir: ??? + subdir: ${hydra.job.id} + callbacks: + study_dump: + _target_: database.OptunaStudyDumpCallback + storage: ${hydra.sweeper.storage} + study_name: ${hydra.sweeper.study_name} + directions: + - maximize + metric_names: + - accuracy + output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv + sweeper: + sampler: + _target_: optuna.samplers.TPESampler + consider_prior: true + seed: 123 + prior_weight: 1.0 + consider_magic_clip: true + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 + multivariate: true + _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper + study_name: ${dataset}_${model_name}_${stage} + storage: sqlite:///optuna.db + n_trials: 128 + n_jobs: 8 + params: + +model.init.kernel: rbf,precomputed + +model.init.C: tag(log, interval(1e-3, 1e3)) + +model.init.gamma: scale,auto + +model.init.class_weight: balanced,null + model_name: ${model_name} + direction: ${direction} + max_failure_rate: 1.0 + launcher: + _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher + n_jobs: 8 + prefer: processes + verbose: 1 + timeout: + pre_dispatch: ${hydra.sweeper.n_jobs} + batch_size: auto + temp_folder: /tmp/deckard + max_nbytes: 100000 + mmap_mode: r outs: - - path: sms_spam/plots/clean/condense/knn.csv + - path: sms_spam/logs/gzip_svc/20/symmetry_false hash: md5 - md5: 7dda620e8ae59aab14ac83c0071a8b96 - size: 1268504 - clean@sms_spam-condense/logistic: - cmd: python -m deckard.layers.clean_data -i sms_spam/reports/condense/logistic.csv - -o sms_spam/plots/clean/condense/logistic.csv -c conf/clean.yaml + md5: dccf212ddba8d745daa30ce1c9efd0b1.dir + size: 1240872 + nfiles: 513 + - path: sms_spam/reports/gzip_svc/20/symmetry_false/train/ + hash: md5 + md5: 923ea8186f9d9630e26fa0da18e03508.dir + size: 542578 + nfiles: 384 + grid_search@20-truthseeker-gzip_knn-true: + cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker + data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null + model.init.symmetric=true hydra.sweeper.study_name=gzip_knn_truthseeker hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=truthseeker/logs/gzip_knn/20/symmetry_true + hydra.callbacks.study_dump.output_file=truthseeker/logs/gzip_knn/20/study.csv + files.directory=truthseeker files.reports=reports/gzip_knn/20/symmetry_true + hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_knn --multirun deps: - - path: sms_spam/reports/condense/logistic.csv + - path: conf/gzip_knn.yaml + hash: md5 + md5: 2d0f54d62dcdc05d21ea1730899de0bb + size: 1827 + - path: params.yaml hash: md5 - md5: 7094b26a582820cc1f88512573ce8c25 - size: 3430438 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: - conf/clean.yaml: - replace: - model.init.metric: - jaro: Jaro - _winkler: -Winkler - levenshtein: Levenshtein - ncd: NCD - ratio: Ratio - seqRatio: SeqRatio - hamming: Hamming - gzip: Gzip - pkl: Pickle - bz2: BZ2 - zstd: Zstd - lzma: Lzma - model_name: - GzipSVC: k-SVC - GzipLogisticRegressor: k-Logistic - GzipKNN: k-KNN - model.init.symmetric: - true: Symmetric - false: Asymmetric + conf/gzip_knn.yaml: + hydra: + run: + dir: ${dataset}/logs/${stage}/ + sweep: + dir: ??? + subdir: ${hydra.job.num} + callbacks: + study_dump: + _target_: database.OptunaStudyDumpCallback + storage: ${hydra.sweeper.storage} + study_name: ${hydra.sweeper.study_name} + directions: ${direction} + metric_names: ${optimizers} + output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv + sweeper: + sampler: + _target_: optuna.samplers.TPESampler + consider_prior: true + seed: 123 + prior_weight: 1.0 + consider_magic_clip: true + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 + multivariate: true + _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper + direction: ${direction} + storage: sqlite:///optuna.db + study_name: ${dataset}_${model_name}_${stage} + n_trials: 128 + n_jobs: 8 + max_failure_rate: 1.0 + params: + model.init.k: 1,3,5,7,11 + +model.init.weights: uniform,distance + +model.init.algorithm: brute + model_name: ${model_name} + launcher: + _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher + n_jobs: 8 + prefer: processes + verbose: 1 + timeout: + pre_dispatch: ${hydra.sweeper.n_jobs} + batch_size: auto + temp_folder: /tmp/deckard + max_nbytes: 100000 + mmap_mode: r outs: - - path: sms_spam/plots/clean/condense/logistic.csv + - path: truthseeker/logs/gzip_knn/20/symmetry_true hash: md5 - md5: 1f89cfa87c87f195079e49eb5d6e7ce5 - size: 2461824 - clean@truthseeker-condense/logistic: - cmd: python -m deckard.layers.clean_data -i truthseeker/reports/condense/logistic.csv - -o truthseeker/plots/clean/condense/logistic.csv -c conf/clean.yaml + md5: a98ed7354eb47190c6301eb889704388.dir + size: 1206224 + nfiles: 513 + - path: truthseeker/reports/gzip_knn/20/symmetry_true/train/ + hash: md5 + md5: ad20e69c6454627f1483726b0cc91365.dir + size: 331035 + nfiles: 359 + grid_search@20-truthseeker-gzip_knn-false: + cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker + data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null + model.init.symmetric=false hydra.sweeper.study_name=gzip_knn_truthseeker hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=truthseeker/logs/gzip_knn/20/symmetry_false + hydra.callbacks.study_dump.output_file=truthseeker/logs/gzip_knn/20/study.csv + files.directory=truthseeker files.reports=reports/gzip_knn/20/symmetry_false + hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_knn --multirun deps: - - path: truthseeker/reports/condense/logistic.csv + - path: conf/gzip_knn.yaml + hash: md5 + md5: 2d0f54d62dcdc05d21ea1730899de0bb + size: 1827 + - path: params.yaml hash: md5 - md5: 5c01852f352ac96150fb36c2df9bcbbf - size: 1648856 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: - conf/clean.yaml: - replace: - model.init.metric: - jaro: Jaro - _winkler: -Winkler - levenshtein: Levenshtein - ncd: NCD - ratio: Ratio - seqRatio: SeqRatio - hamming: Hamming - gzip: Gzip - pkl: Pickle - bz2: BZ2 - zstd: Zstd - lzma: Lzma - model_name: - GzipSVC: k-SVC - GzipLogisticRegressor: k-Logistic - GzipKNN: k-KNN - model.init.symmetric: - true: Symmetric - false: Asymmetric + conf/gzip_knn.yaml: + hydra: + run: + dir: ${dataset}/logs/${stage}/ + sweep: + dir: ??? + subdir: ${hydra.job.num} + callbacks: + study_dump: + _target_: database.OptunaStudyDumpCallback + storage: ${hydra.sweeper.storage} + study_name: ${hydra.sweeper.study_name} + directions: ${direction} + metric_names: ${optimizers} + output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv + sweeper: + sampler: + _target_: optuna.samplers.TPESampler + consider_prior: true + seed: 123 + prior_weight: 1.0 + consider_magic_clip: true + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 + multivariate: true + _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper + direction: ${direction} + storage: sqlite:///optuna.db + study_name: ${dataset}_${model_name}_${stage} + n_trials: 128 + n_jobs: 8 + max_failure_rate: 1.0 + params: + model.init.k: 1,3,5,7,11 + +model.init.weights: uniform,distance + +model.init.algorithm: brute + model_name: ${model_name} + launcher: + _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher + n_jobs: 8 + prefer: processes + verbose: 1 + timeout: + pre_dispatch: ${hydra.sweeper.n_jobs} + batch_size: auto + temp_folder: /tmp/deckard + max_nbytes: 100000 + mmap_mode: r outs: - - path: truthseeker/plots/clean/condense/logistic.csv - hash: md5 - md5: 9710addb440069a5ea884d90ed4c394a - size: 1237939 - clean@truthseeker-condense/knn: - cmd: python -m deckard.layers.clean_data -i truthseeker/reports/condense/knn.csv - -o truthseeker/plots/clean/condense/knn.csv -c conf/clean.yaml - deps: - - path: truthseeker/reports/condense/knn.csv + - path: truthseeker/logs/gzip_knn/20/symmetry_false hash: md5 - md5: b4ec50d98f613984be6261a059120255 - size: 1595839 - params: - conf/clean.yaml: - replace: - model.init.metric: - jaro: Jaro - _winkler: -Winkler - levenshtein: Levenshtein - ncd: NCD - ratio: Ratio - seqRatio: SeqRatio - hamming: Hamming - gzip: Gzip - pkl: Pickle - bz2: BZ2 - zstd: Zstd - lzma: Lzma - model_name: - GzipSVC: k-SVC - GzipLogisticRegressor: k-Logistic - GzipKNN: k-KNN - model.init.symmetric: - true: Symmetric - false: Asymmetric - outs: - - path: truthseeker/plots/clean/condense/knn.csv + md5: 2617ca5cb1d8ff3905d50915269c6e9f.dir + size: 1203425 + nfiles: 513 + - path: truthseeker/reports/gzip_knn/20/symmetry_false/train/ hash: md5 - md5: a0c8deb8fe7617477ec43fae2a851b4d - size: 1191230 - clean@ddos-condense/svc: - cmd: python -m deckard.layers.clean_data -i ddos/reports/condense/svc.csv -o - ddos/plots/clean/condense/svc.csv -c conf/clean.yaml + md5: 4a06f23a3f742c65df6594ee04759bf8.dir + size: 342243 + nfiles: 358 + grid_search@20-truthseeker-gzip_logistic-true: + cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker + data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_logistic + model.init.distance_matrix=null model.init.symmetric=true hydra.sweeper.study_name=gzip_logistic_truthseeker + hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 hydra.sweep.dir=truthseeker/logs/gzip_logistic/20/symmetry_true + hydra.callbacks.study_dump.output_file=truthseeker/logs/gzip_logistic/20/study.csv + files.directory=truthseeker files.reports=reports/gzip_logistic/20/symmetry_true + hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_logistic --multirun deps: - - path: ddos/reports/condense/svc.csv + - path: conf/gzip_logistic.yaml + hash: md5 + md5: da7adfd9b59783b6cd34f750dfcfb1b5 + size: 1993 + - path: params.yaml hash: md5 - md5: aa784bb40bb07d842dc0a91a4db363de - size: 1427146 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: - conf/clean.yaml: - replace: - model.init.metric: - jaro: Jaro - _winkler: -Winkler - levenshtein: Levenshtein - ncd: NCD - ratio: Ratio - seqRatio: SeqRatio - hamming: Hamming - gzip: Gzip - pkl: Pickle - bz2: BZ2 - zstd: Zstd - lzma: Lzma - model_name: - GzipSVC: k-SVC - GzipLogisticRegressor: k-Logistic - GzipKNN: k-KNN - model.init.symmetric: - true: Symmetric - false: Asymmetric + conf/gzip_logistic.yaml: + hydra: + run: + dir: ${dataset}/logs/${stage}/ + sweep: + dir: ??? + subdir: ${hydra.job.id} + callbacks: + study_dump: + _target_: database.OptunaStudyDumpCallback + storage: ${hydra.sweeper.storage} + study_name: ${hydra.sweeper.study_name} + directions: ${direction} + metric_names: ${optimizers} + output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv + sweeper: + sampler: + _target_: optuna.samplers.TPESampler + consider_prior: true + seed: 123 + prior_weight: 1.0 + consider_magic_clip: true + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 + multivariate: true + _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper + study_name: ${dataset}_${model_name}_${stage} + storage: sqlite:///optuna.db + n_trials: 128 + n_jobs: 8 + params: + +model.init.solver: saga + +model.init.penalty: l2,l1 + +model.init.tol: tag(log, interval(1e-5, 1e-1)) + +model.init.C: tag(log, interval(1e-3, 1e3)) + +model.init.fit_intercept: True,False + +model.init.class_weight: balanced,None + model_name: ${model_name} + direction: ${direction} + max_failure_rate: 1.0 + launcher: + _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher + n_jobs: 8 + prefer: processes + verbose: 1 + timeout: + pre_dispatch: ${hydra.sweeper.n_jobs} + batch_size: auto + temp_folder: /tmp/deckard + max_nbytes: 100000 + mmap_mode: r outs: - - path: ddos/plots/clean/condense/svc.csv + - path: truthseeker/logs/gzip_logistic/20/symmetry_true hash: md5 - md5: e8672b519a9feabd7a83f366684ae65f - size: 1172482 - clean@ddos-condense/logistic: - cmd: python -m deckard.layers.clean_data -i ddos/reports/condense/logistic.csv - -o ddos/plots/clean/condense/logistic.csv -c conf/clean.yaml + md5: ff829c546214f8c48b65d65886826fa3.dir + size: 1277433 + nfiles: 513 + - path: truthseeker/reports/gzip_logistic/20/symmetry_true/train/ + hash: md5 + md5: 9fa0a99c495e46db650c6a7a5b520119.dir + size: 596142 + nfiles: 356 + grid_search@20-truthseeker-gzip_logistic-false: + cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker + data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_logistic + model.init.distance_matrix=null model.init.symmetric=false hydra.sweeper.study_name=gzip_logistic_truthseeker + hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 hydra.sweep.dir=truthseeker/logs/gzip_logistic/20/symmetry_false + hydra.callbacks.study_dump.output_file=truthseeker/logs/gzip_logistic/20/study.csv + files.directory=truthseeker files.reports=reports/gzip_logistic/20/symmetry_false + hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_logistic --multirun deps: - - path: ddos/reports/condense/logistic.csv + - path: conf/gzip_logistic.yaml + hash: md5 + md5: da7adfd9b59783b6cd34f750dfcfb1b5 + size: 1993 + - path: params.yaml hash: md5 - md5: 43603ccd44d31553618819d6d8a21b26 - size: 1459732 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: - conf/clean.yaml: - replace: - model.init.metric: - jaro: Jaro - _winkler: -Winkler - levenshtein: Levenshtein - ncd: NCD - ratio: Ratio - seqRatio: SeqRatio - hamming: Hamming - gzip: Gzip - pkl: Pickle - bz2: BZ2 - zstd: Zstd - lzma: Lzma - model_name: - GzipSVC: k-SVC - GzipLogisticRegressor: k-Logistic - GzipKNN: k-KNN - model.init.symmetric: - true: Symmetric - false: Asymmetric + conf/gzip_logistic.yaml: + hydra: + run: + dir: ${dataset}/logs/${stage}/ + sweep: + dir: ??? + subdir: ${hydra.job.id} + callbacks: + study_dump: + _target_: database.OptunaStudyDumpCallback + storage: ${hydra.sweeper.storage} + study_name: ${hydra.sweeper.study_name} + directions: ${direction} + metric_names: ${optimizers} + output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv + sweeper: + sampler: + _target_: optuna.samplers.TPESampler + consider_prior: true + seed: 123 + prior_weight: 1.0 + consider_magic_clip: true + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 + multivariate: true + _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper + study_name: ${dataset}_${model_name}_${stage} + storage: sqlite:///optuna.db + n_trials: 128 + n_jobs: 8 + params: + +model.init.solver: saga + +model.init.penalty: l2,l1 + +model.init.tol: tag(log, interval(1e-5, 1e-1)) + +model.init.C: tag(log, interval(1e-3, 1e3)) + +model.init.fit_intercept: True,False + +model.init.class_weight: balanced,None + model_name: ${model_name} + direction: ${direction} + max_failure_rate: 1.0 + launcher: + _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher + n_jobs: 8 + prefer: processes + verbose: 1 + timeout: + pre_dispatch: ${hydra.sweeper.n_jobs} + batch_size: auto + temp_folder: /tmp/deckard + max_nbytes: 100000 + mmap_mode: r outs: - - path: ddos/plots/clean/condense/logistic.csv + - path: truthseeker/logs/gzip_logistic/20/symmetry_false hash: md5 - md5: d4141b866045a61b758909b680459363 - size: 1190145 - merge_condense@ddos: - cmd: python merge.py --big_dir ddos/plots/ --data_file clean/condense/knn.csv - --little_dir_data_file clean/condense/logistic.csv clean/condense/svc.csv --output_folder - ddos/plots/ --output_file condensed_merged.csv - deps: - - path: ddos/plots/clean/condense/knn.csv + md5: 3236c08228d49f414fb9276f63fd854e.dir + size: 1265237 + nfiles: 513 + - path: truthseeker/reports/gzip_logistic/20/symmetry_false/train/ hash: md5 - md5: be16b853ccb87973e0e61b37b3d79cc9 - size: 1144970 - - path: ddos/plots/clean/condense/logistic.csv + md5: 61c25a8988641a6780633c71c79af7b1.dir + size: 603920 + nfiles: 346 + grid_search@20-truthseeker-gzip_svc-true: + cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker + data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null + model.init.symmetric=true hydra.sweeper.study_name=gzip_svc_truthseeker hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=truthseeker/logs/gzip_svc/20/symmetry_true + hydra.callbacks.study_dump.output_file=truthseeker/logs/gzip_svc/20/study.csv + files.directory=truthseeker files.reports=reports/gzip_svc/20/symmetry_true + hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_svc --multirun + deps: + - path: conf/gzip_svc.yaml hash: md5 - md5: d4141b866045a61b758909b680459363 - size: 1190145 - - path: ddos/plots/clean/condense/svc.csv + md5: ef6089c75166b6acb57ce97a89157ad9 + size: 1905 + - path: params.yaml hash: md5 - md5: e8672b519a9feabd7a83f366684ae65f - size: 1172482 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 + params: + conf/gzip_svc.yaml: + hydra: + run: + dir: ${dataset}/logs/${stage}/ + sweep: + dir: ??? + subdir: ${hydra.job.id} + callbacks: + study_dump: + _target_: database.OptunaStudyDumpCallback + storage: ${hydra.sweeper.storage} + study_name: ${hydra.sweeper.study_name} + directions: + - maximize + metric_names: + - accuracy + output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv + sweeper: + sampler: + _target_: optuna.samplers.TPESampler + consider_prior: true + seed: 123 + prior_weight: 1.0 + consider_magic_clip: true + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 + multivariate: true + _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper + study_name: ${dataset}_${model_name}_${stage} + storage: sqlite:///optuna.db + n_trials: 128 + n_jobs: 8 + params: + +model.init.kernel: rbf,precomputed + +model.init.C: tag(log, interval(1e-3, 1e3)) + +model.init.gamma: scale,auto + +model.init.class_weight: balanced,null + model_name: ${model_name} + direction: ${direction} + max_failure_rate: 1.0 + launcher: + _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher + n_jobs: 8 + prefer: processes + verbose: 1 + timeout: + pre_dispatch: ${hydra.sweeper.n_jobs} + batch_size: auto + temp_folder: /tmp/deckard + max_nbytes: 100000 + mmap_mode: r outs: - - path: ddos/plots/condensed_merged.csv - hash: md5 - md5: bf84ec4bd2b08cc23e35154584619a51 - size: 3628680 - merge_condense@kdd_nsl: - cmd: python merge.py --big_dir kdd_nsl/plots/ --data_file clean/condense/knn.csv - --little_dir_data_file clean/condense/logistic.csv clean/condense/svc.csv --output_folder - kdd_nsl/plots/ --output_file condensed_merged.csv - deps: - - path: kdd_nsl/plots/clean/condense/knn.csv - hash: md5 - md5: 23789b08b0fd1616555611d0e7971db9 - size: 1204868 - - path: kdd_nsl/plots/clean/condense/logistic.csv - hash: md5 - md5: 55a0ac50149a3e3d93b69c63ccd0d7a3 - size: 1174964 - - path: kdd_nsl/plots/clean/condense/svc.csv + - path: truthseeker/logs/gzip_svc/20/symmetry_true hash: md5 - md5: c9b2ff8546f531fa439c664c63fc06fd - size: 2021393 - outs: - - path: kdd_nsl/plots/condensed_merged.csv + md5: 80d0c1ade291bb4dbc9af47eddab6d27.dir + size: 1250879 + nfiles: 513 + - path: truthseeker/reports/gzip_svc/20/symmetry_true/train/ hash: md5 - md5: 1ddcee7de7db0c1a7d4898de4a03d7b7 - size: 4543759 - merge_condense@sms_spam: - cmd: python merge.py --big_dir sms_spam/plots/ --data_file clean/condense/knn.csv - --little_dir_data_file clean/condense/logistic.csv clean/condense/svc.csv --output_folder - sms_spam/plots/ --output_file condensed_merged.csv + md5: 913d1664491e029cb3e45e5fa1d9c2b1.dir + size: 546189 + nfiles: 384 + grid_search@20-truthseeker-gzip_svc-false: + cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker + data.sample.train_size=20 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null + model.init.symmetric=false hydra.sweeper.study_name=gzip_svc_truthseeker hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=truthseeker/logs/gzip_svc/20/symmetry_false + hydra.callbacks.study_dump.output_file=truthseeker/logs/gzip_svc/20/study.csv + files.directory=truthseeker files.reports=reports/gzip_svc/20/symmetry_false + hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_svc --multirun deps: - - path: sms_spam/plots/clean/condense/knn.csv - hash: md5 - md5: 7dda620e8ae59aab14ac83c0071a8b96 - size: 1268504 - - path: sms_spam/plots/clean/condense/logistic.csv + - path: conf/gzip_svc.yaml hash: md5 - md5: 1f89cfa87c87f195079e49eb5d6e7ce5 - size: 2461824 - - path: sms_spam/plots/clean/condense/svc.csv + md5: ef6089c75166b6acb57ce97a89157ad9 + size: 1905 + - path: params.yaml hash: md5 - md5: 92b8648f6759e0a56c65aeec4a15aa92 - size: 1223675 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 + params: + conf/gzip_svc.yaml: + hydra: + run: + dir: ${dataset}/logs/${stage}/ + sweep: + dir: ??? + subdir: ${hydra.job.id} + callbacks: + study_dump: + _target_: database.OptunaStudyDumpCallback + storage: ${hydra.sweeper.storage} + study_name: ${hydra.sweeper.study_name} + directions: + - maximize + metric_names: + - accuracy + output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv + sweeper: + sampler: + _target_: optuna.samplers.TPESampler + consider_prior: true + seed: 123 + prior_weight: 1.0 + consider_magic_clip: true + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 + multivariate: true + _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper + study_name: ${dataset}_${model_name}_${stage} + storage: sqlite:///optuna.db + n_trials: 128 + n_jobs: 8 + params: + +model.init.kernel: rbf,precomputed + +model.init.C: tag(log, interval(1e-3, 1e3)) + +model.init.gamma: scale,auto + +model.init.class_weight: balanced,null + model_name: ${model_name} + direction: ${direction} + max_failure_rate: 1.0 + launcher: + _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher + n_jobs: 8 + prefer: processes + verbose: 1 + timeout: + pre_dispatch: ${hydra.sweeper.n_jobs} + batch_size: auto + temp_folder: /tmp/deckard + max_nbytes: 100000 + mmap_mode: r outs: - - path: sms_spam/plots/condensed_merged.csv - hash: md5 - md5: 8f549743001ca622a6c7c8cbb2b3d17d - size: 5114716 - merge_condense@truthseeker: - cmd: python merge.py --big_dir truthseeker/plots/ --data_file clean/condense/knn.csv - --little_dir_data_file clean/condense/logistic.csv clean/condense/svc.csv --output_folder - truthseeker/plots/ --output_file condensed_merged.csv - deps: - - path: truthseeker/plots/clean/condense/knn.csv - hash: md5 - md5: a0c8deb8fe7617477ec43fae2a851b4d - size: 1191230 - - path: truthseeker/plots/clean/condense/logistic.csv - hash: md5 - md5: 9710addb440069a5ea884d90ed4c394a - size: 1237939 - - path: truthseeker/plots/clean/condense/svc.csv + - path: truthseeker/logs/gzip_svc/20/symmetry_false hash: md5 - md5: a17c0cdb6a3fbfae5bd4fcfca1938a96 - size: 1257671 - outs: - - path: truthseeker/plots/condensed_merged.csv + md5: cd321e0e8ed96e2dc914d3f061139e1b.dir + size: 1250531 + nfiles: 513 + - path: truthseeker/reports/gzip_svc/20/symmetry_false/train/ hash: md5 - md5: 738dc93bfff1b9c167949e722ee79665 - size: 3805499 - grid_search@300-ddos-gzip_knn: - cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=300 + md5: 7fd5bb25a3688c3470e30aeee85674ff.dir + size: 546474 + nfiles: 384 + grid_search@100-ddos-gzip_knn-true: + cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_knn_ddos hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=ddos/logs/gzip_knn/300 hydra.callbacks.study_dump.output_file=ddos/logs/gzip_knn/300/study.csv - files.directory=ddos files.reports=reports/gzip_knn/300 hydra.launcher.n_jobs=-1 + model.init.symmetric=true hydra.sweeper.study_name=gzip_knn_ddos hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=ddos/logs/gzip_knn/100/symmetry_true + hydra.callbacks.study_dump.output_file=ddos/logs/gzip_knn/100/study.csv files.directory=ddos + files.reports=reports/gzip_knn/100/symmetry_true hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio ++raise_exception=True --config-name gzip_knn --multirun deps: - path: conf/gzip_knn.yaml hash: md5 - md5: ceff1a602afc3323e49200a1da539310 - size: 2046 + md5: 2d0f54d62dcdc05d21ea1730899de0bb + size: 1827 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead @@ -17444,28 +7567,25 @@ stages: sampler: _target_: optuna.samplers.TPESampler consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper direction: ${direction} storage: sqlite:///optuna.db study_name: ${dataset}_${model_name}_${stage} - n_trials: 2 - n_jobs: 2 + n_trials: 128 + n_jobs: 8 max_failure_rate: 1.0 params: model.init.k: 1,3,5,7,11 +model.init.weights: uniform,distance +model.init.algorithm: brute - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio model_name: ${model_name} - ++data.sample.random_state: int(interval(1, 10000)) launcher: _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher n_jobs: 8 @@ -17477,363 +7597,194 @@ stages: temp_folder: /tmp/deckard max_nbytes: 100000 mmap_mode: r - model_name: gzip_knn outs: - - path: ddos/logs/gzip_knn/300 + - path: ddos/logs/gzip_knn/100/symmetry_true hash: md5 - md5: c47afee2ee6085e856fe4e32b58b3f6b.dir - size: 1379773 - nfiles: 514 - - path: ddos/reports/gzip_knn/300/train/ + md5: ce684eab73c010891cc6eb844e066134.dir + size: 1190708 + nfiles: 513 + - path: ddos/reports/gzip_knn/100/symmetry_true/train/ hash: md5 - md5: 25965cb19ec15de45784c43768bd2bdd.dir - size: 350250 - nfiles: 378 - plot_condense@sms_spam: - cmd: python -m deckard.layers.plots --path sms_spam/plots/ --file sms_spam/plots/condensed_merged.csv -c - conf/condensed_plots.yaml + md5: 60e9b4f5171f22fb8144383380218108.dir + size: 81468 + nfiles: 91 + grid_search@100-ddos-gzip_knn-false: + cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=100 + data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null + model.init.symmetric=false hydra.sweeper.study_name=gzip_knn_ddos hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=ddos/logs/gzip_knn/100/symmetry_false + hydra.callbacks.study_dump.output_file=ddos/logs/gzip_knn/100/study.csv files.directory=ddos + files.reports=reports/gzip_knn/100/symmetry_false hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_knn --multirun deps: - - path: sms_spam/plots/condensed_merged.csv - hash: md5 - md5: 8f549743001ca622a6c7c8cbb2b3d17d - size: 5114716 - params: - conf/condensed_plots.yaml: - line_plot: - - file: sampling_method_vs_accuracy.pdf - hue: model.init.sampling_method - title: - x: model.init.m - xlabel: Percentage of Samples per Class - y: accuracy - ylabel: Accuracy - hue_order: - - random - - svc - - knn - - sum - - medoid - - nearmiss - - hardness - errorbar: se - err_style: bars - xlim: - - 0 - - 1 - y_scale: linear - legend: - title: Sampling Method - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - - file: sampling_method_vs_train_time.pdf - hue: model.init.sampling_method - title: - x: model.init.m - xlabel: Percentage of Samples per Class - y: train_time - ylabel: Training Time (s) - y_scale: linear - hue_order: - - random - - svc - - knn - - sum - - medoid - - nearmiss - - hardness - errorbar: se - err_style: bars - xlim: - - 0 - - 1 - legend: - title: Sampling Method - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - - file: sampling_method_vs_predict_time.pdf - hue: model.init.sampling_method - title: - x: model.init.m - xlabel: Percentage of Samples per Class - y: predict_time - ylabel: Prediction Time (s) - y_scale: log - hue_order: - - random - - svc - - knn - - sum - - medoid - - nearmiss - - hardness - errorbar: se - err_style: bars - xlim: - - 0 - - 1 - legend: - title: Sampling Method - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - outs: - - path: sms_spam/plots/sampling_method_vs_accuracy.pdf - hash: md5 - md5: 8d3c7b03379f2f16bdb6de450083608b - size: 40643 - - path: sms_spam/plots/sampling_method_vs_predict_time.pdf - hash: md5 - md5: 095622e64533aedee66d72079f141c0d - size: 53902 - - path: sms_spam/plots/sampling_method_vs_train_time.pdf + - path: conf/gzip_knn.yaml hash: md5 - md5: da26bd3fc967c9925975f6c8ad189a88 - size: 50367 - plot_condense@ddos: - cmd: python -m deckard.layers.plots --path ddos/plots/ --file ddos/plots/condensed_merged.csv -c - conf/condensed_plots.yaml - deps: - - path: ddos/plots/condensed_merged.csv + md5: 2d0f54d62dcdc05d21ea1730899de0bb + size: 1827 + - path: params.yaml hash: md5 - md5: dc147a2e9c585b39c5e212a46ade70ac - size: 9306964 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: - conf/condensed_plots.yaml: - line_plot: - - file: sampling_method_vs_accuracy.pdf - hue: model.init.sampling_method - title: - x: model.init.m - xlabel: Percentage of Samples per Class - y: accuracy - ylabel: Accuracy - hue_order: - - random - - svc - - knn - - sum - - medoid - - nearmiss - - hardness - errorbar: se - err_style: bars - xlim: - - 0 - - 1 - y_scale: linear - legend: - title: Sampling Method - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - - file: sampling_method_vs_train_time.pdf - hue: model.init.sampling_method - title: - x: model.init.m - xlabel: Percentage of Samples per Class - y: train_time - ylabel: Training Time (s) - y_scale: linear - hue_order: - - random - - svc - - knn - - sum - - medoid - - nearmiss - - hardness - errorbar: se - err_style: bars - xlim: - - 0 - - 1 - legend: - title: Sampling Method - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - - file: sampling_method_vs_predict_time.pdf - hue: model.init.sampling_method - title: - x: model.init.m - xlabel: Percentage of Samples per Class - y: predict_time - ylabel: Prediction Time (s) - y_scale: log - hue_order: - - random - - svc - - knn - - sum - - medoid - - nearmiss - - hardness - errorbar: se - err_style: bars - xlim: - - 0 - - 1 - legend: - title: Sampling Method - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 + conf/gzip_knn.yaml: + hydra: + run: + dir: ${dataset}/logs/${stage}/ + sweep: + dir: ??? + subdir: ${hydra.job.num} + callbacks: + study_dump: + _target_: database.OptunaStudyDumpCallback + storage: ${hydra.sweeper.storage} + study_name: ${hydra.sweeper.study_name} + directions: ${direction} + metric_names: ${optimizers} + output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv + sweeper: + sampler: + _target_: optuna.samplers.TPESampler + consider_prior: true + seed: 123 + prior_weight: 1.0 + consider_magic_clip: true + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 + multivariate: true + _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper + direction: ${direction} + storage: sqlite:///optuna.db + study_name: ${dataset}_${model_name}_${stage} + n_trials: 128 + n_jobs: 8 + max_failure_rate: 1.0 + params: + model.init.k: 1,3,5,7,11 + +model.init.weights: uniform,distance + +model.init.algorithm: brute + model_name: ${model_name} + launcher: + _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher + n_jobs: 8 + prefer: processes + verbose: 1 + timeout: + pre_dispatch: ${hydra.sweeper.n_jobs} + batch_size: auto + temp_folder: /tmp/deckard + max_nbytes: 100000 + mmap_mode: r outs: - - path: ddos/plots/sampling_method_vs_accuracy.pdf - hash: md5 - md5: 09737e6b272979bf7fc879ece10d25e5 - size: 57907 - - path: ddos/plots/sampling_method_vs_predict_time.pdf + - path: ddos/logs/gzip_knn/100/symmetry_false hash: md5 - md5: 78e2e0111219f86d189dfb952d81cdba - size: 78230 - - path: ddos/plots/sampling_method_vs_train_time.pdf + md5: 307edd5cacb6d130cdca319d74e42152.dir + size: 1200449 + nfiles: 513 + - path: ddos/reports/gzip_knn/100/symmetry_false/train/ hash: md5 - md5: ab34ce0b71b6c0153525b0194178ecaf - size: 64512 - plot_condense@kdd_nsl: - cmd: python -m deckard.layers.plots --path kdd_nsl/plots/ --file kdd_nsl/plots/condensed_merged.csv -c - conf/condensed_plots.yaml + md5: 9eb4c5ed862761d977cbec997e27a109.dir + size: 286576 + nfiles: 321 + grid_search@100-ddos-gzip_logistic-true: + cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=100 + data.sample.test_size=100 model_name=gzip_logistic model.init.distance_matrix=null + model.init.symmetric=true hydra.sweeper.study_name=gzip_logistic_ddos hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=ddos/logs/gzip_logistic/100/symmetry_true + hydra.callbacks.study_dump.output_file=ddos/logs/gzip_logistic/100/study.csv + files.directory=ddos files.reports=reports/gzip_logistic/100/symmetry_true hydra.launcher.n_jobs=-1 + ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_logistic --multirun deps: - - path: kdd_nsl/plots/condensed_merged.csv + - path: conf/gzip_logistic.yaml + hash: md5 + md5: da7adfd9b59783b6cd34f750dfcfb1b5 + size: 1993 + - path: params.yaml hash: md5 - md5: 1ddcee7de7db0c1a7d4898de4a03d7b7 - size: 4543759 + md5: 486532089f9aed37612260a1f0a2bead + size: 1469 params: - conf/condensed_plots.yaml: - line_plot: - - file: sampling_method_vs_accuracy.pdf - hue: model.init.sampling_method - title: - x: model.init.m - xlabel: Percentage of Samples per Class - y: accuracy - ylabel: Accuracy - hue_order: - - random - - svc - - knn - - sum - - medoid - - nearmiss - - hardness - errorbar: se - err_style: bars - xlim: - - 0 - - 1 - y_scale: linear - legend: - title: Sampling Method - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - - file: sampling_method_vs_train_time.pdf - hue: model.init.sampling_method - title: - x: model.init.m - xlabel: Percentage of Samples per Class - y: train_time - ylabel: Training Time (s) - y_scale: linear - hue_order: - - random - - svc - - knn - - sum - - medoid - - nearmiss - - hardness - errorbar: se - err_style: bars - xlim: - - 0 - - 1 - legend: - title: Sampling Method - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - - file: sampling_method_vs_predict_time.pdf - hue: model.init.sampling_method - title: - x: model.init.m - xlabel: Percentage of Samples per Class - y: predict_time - ylabel: Prediction Time (s) - y_scale: log - hue_order: - - random - - svc - - knn - - sum - - medoid - - nearmiss - - hardness - errorbar: se - err_style: bars - xlim: - - 0 - - 1 - legend: - title: Sampling Method - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 + conf/gzip_logistic.yaml: + hydra: + run: + dir: ${dataset}/logs/${stage}/ + sweep: + dir: ??? + subdir: ${hydra.job.id} + callbacks: + study_dump: + _target_: database.OptunaStudyDumpCallback + storage: ${hydra.sweeper.storage} + study_name: ${hydra.sweeper.study_name} + directions: ${direction} + metric_names: ${optimizers} + output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv + sweeper: + sampler: + _target_: optuna.samplers.TPESampler + consider_prior: true + seed: 123 + prior_weight: 1.0 + consider_magic_clip: true + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 + multivariate: true + _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper + study_name: ${dataset}_${model_name}_${stage} + storage: sqlite:///optuna.db + n_trials: 128 + n_jobs: 8 + params: + +model.init.solver: saga + +model.init.penalty: l2,l1 + +model.init.tol: tag(log, interval(1e-5, 1e-1)) + +model.init.C: tag(log, interval(1e-3, 1e3)) + +model.init.fit_intercept: True,False + +model.init.class_weight: balanced,None + model_name: ${model_name} + direction: ${direction} + max_failure_rate: 1.0 + launcher: + _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher + n_jobs: 8 + prefer: processes + verbose: 1 + timeout: + pre_dispatch: ${hydra.sweeper.n_jobs} + batch_size: auto + temp_folder: /tmp/deckard + max_nbytes: 100000 + mmap_mode: r outs: - - path: kdd_nsl/plots/sampling_method_vs_accuracy.pdf - hash: md5 - md5: 1c673220cd32e3f9bd2aa92516d0b20e - size: 38546 - - path: kdd_nsl/plots/sampling_method_vs_predict_time.pdf + - path: ddos/logs/gzip_logistic/100/symmetry_true hash: md5 - md5: 4bcb086fcd47e05d2b79e30a12d15869 - size: 50187 - - path: kdd_nsl/plots/sampling_method_vs_train_time.pdf + md5: d0b4bd67c2297fcf7cd87b5bb49830ce.dir + size: 1236038 + nfiles: 513 + - path: ddos/reports/gzip_logistic/100/symmetry_true/train/ hash: md5 - md5: 2b3e91d9b656ba35d06f8e97d1e8359d - size: 45992 - grid_search@300-ddos-gzip_logistic: - cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=300 + md5: 3f4bc5d4c66937cccc23ae865cd69762.dir + size: 636279 + nfiles: 332 + grid_search@100-ddos-gzip_logistic-false: + cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_logistic model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_logistic_ddos hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=ddos/logs/gzip_logistic/300 hydra.callbacks.study_dump.output_file=ddos/logs/gzip_logistic/300/study.csv - files.directory=ddos files.reports=reports/gzip_logistic/300 hydra.launcher.n_jobs=-1 + model.init.symmetric=false hydra.sweeper.study_name=gzip_logistic_ddos hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=ddos/logs/gzip_logistic/100/symmetry_false + hydra.callbacks.study_dump.output_file=ddos/logs/gzip_logistic/100/study.csv + files.directory=ddos files.reports=reports/gzip_logistic/100/symmetry_false + hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio ++raise_exception=True --config-name gzip_logistic --multirun deps: - path: conf/gzip_logistic.yaml hash: md5 - md5: a051c1bd6690aa80000909c49eb45023 - size: 2189 + md5: da7adfd9b59783b6cd34f750dfcfb1b5 + size: 1993 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead @@ -17858,29 +7809,26 @@ stages: sampler: _target_: optuna.samplers.TPESampler consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper study_name: ${dataset}_${model_name}_${stage} storage: sqlite:///optuna.db - n_jobs: 1 - n_trials: 1 + n_trials: 128 + n_jobs: 8 params: +model.init.solver: saga - +model.init.penalty: l2,l1,l2,none - +model.init.tol: 1e-4,1e-3,1e-2 - +model.init.C: 1e-2,1e-1,1e0,1e1,1e2 + +model.init.penalty: l2,l1 + +model.init.tol: tag(log, interval(1e-5, 1e-1)) + +model.init.C: tag(log, interval(1e-3, 1e3)) +model.init.fit_intercept: True,False +model.init.class_weight: balanced,None - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio model_name: ${model_name} - data.sample.random_state: int(interval(1, 10000)) direction: ${direction} max_failure_rate: 1.0 launcher: @@ -17894,30 +7842,31 @@ stages: temp_folder: /tmp/deckard max_nbytes: 100000 mmap_mode: r - model_name: gzip_logistic outs: - - path: ddos/logs/gzip_logistic/300 + - path: ddos/logs/gzip_logistic/100/symmetry_false hash: md5 - md5: 6bc5b9e70b4f6cc47a8837d6d25690ac.dir - size: 1466899 - nfiles: 514 - - path: ddos/reports/gzip_logistic/300/train/ + md5: 54987f50efd1f9833711c4bce8ad266b.dir + size: 1204334 + nfiles: 513 + - path: ddos/reports/gzip_logistic/100/symmetry_false/train/ hash: md5 - md5: df4930132e36fd4e726c5e00751d721b.dir - size: 561713 - nfiles: 362 - grid_search@300-ddos-gzip_svc: - cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=300 + md5: 4237b3f9a08decdbf109a54fce741a4e.dir + size: 659696 + nfiles: 306 + grid_search@100-ddos-gzip_svc-true: + cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_svc_ddos hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=ddos/logs/gzip_svc/300 hydra.callbacks.study_dump.output_file=ddos/logs/gzip_svc/300/study.csv - files.directory=ddos files.reports=reports/gzip_svc/300 hydra.launcher.n_jobs=-1 + model.init.symmetric=true hydra.sweeper.study_name=gzip_svc_ddos hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=ddos/logs/gzip_svc/100/symmetry_true + hydra.callbacks.study_dump.output_file=ddos/logs/gzip_svc/100/study.csv files.directory=ddos + files.reports=reports/gzip_svc/100/symmetry_true hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio ++raise_exception=True --config-name gzip_svc --multirun deps: - path: conf/gzip_svc.yaml hash: md5 - md5: 71702231d42f4d68a2237772b3475697 - size: 2115 + md5: ef6089c75166b6acb57ce97a89157ad9 + size: 1905 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead @@ -17944,27 +7893,24 @@ stages: sampler: _target_: optuna.samplers.TPESampler consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper study_name: ${dataset}_${model_name}_${stage} storage: sqlite:///optuna.db - n_jobs: 2 - n_trials: 2 + n_trials: 128 + n_jobs: 8 params: +model.init.kernel: rbf,precomputed - +model.init.C: 1e-2,1e-1,1e0,1e1,1e2 + +model.init.C: tag(log, interval(1e-3, 1e3)) +model.init.gamma: scale,auto +model.init.class_weight: balanced,null - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio model_name: ${model_name} - data.sample.random_state: int(interval(1, 10000)) direction: ${direction} max_failure_rate: 1.0 launcher: @@ -17978,147 +7924,37 @@ stages: temp_folder: /tmp/deckard max_nbytes: 100000 mmap_mode: r - model_name: gzip_svc outs: - - path: ddos/logs/gzip_svc/300 + - path: ddos/logs/gzip_svc/100/symmetry_true hash: md5 - md5: 13800a1369da0609d0ec9837b11356a1.dir - size: 1424704 - nfiles: 514 - - path: ddos/reports/gzip_svc/300/train/ + md5: 8f54e554e59aa39da2cc6a545a2b2a84.dir + size: 1238692 + nfiles: 513 + - path: ddos/reports/gzip_svc/100/symmetry_true/train/ hash: md5 - md5: c101119b56b4799eb8f9ba8557c12c12.dir - size: 552863 + md5: 1d55a1ad04addb2611ea268d0d5c037c.dir + size: 552051 nfiles: 384 - plot_condense@truthseeker: - cmd: python -m deckard.layers.plots --path truthseeker/plots/ --file truthseeker/plots/condensed_merged.csv -c - conf/condensed_plots.yaml - deps: - - path: truthseeker/plots/condensed_merged.csv - hash: md5 - md5: 738dc93bfff1b9c167949e722ee79665 - size: 3805499 - params: - conf/condensed_plots.yaml: - line_plot: - - file: sampling_method_vs_accuracy.pdf - hue: model.init.sampling_method - title: - x: model.init.m - xlabel: Percentage of Samples per Class - y: accuracy - ylabel: Accuracy - hue_order: - - random - - svc - - knn - - sum - - medoid - - nearmiss - - hardness - errorbar: se - err_style: bars - xlim: - - 0 - - 1 - y_scale: linear - legend: - title: Sampling Method - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - - file: sampling_method_vs_train_time.pdf - hue: model.init.sampling_method - title: - x: model.init.m - xlabel: Percentage of Samples per Class - y: train_time - ylabel: Training Time (s) - y_scale: linear - hue_order: - - random - - svc - - knn - - sum - - medoid - - nearmiss - - hardness - errorbar: se - err_style: bars - xlim: - - 0 - - 1 - legend: - title: Sampling Method - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - - file: sampling_method_vs_predict_time.pdf - hue: model.init.sampling_method - title: - x: model.init.m - xlabel: Percentage of Samples per Class - y: predict_time - ylabel: Prediction Time (s) - y_scale: log - hue_order: - - random - - svc - - knn - - sum - - medoid - - nearmiss - - hardness - errorbar: se - err_style: bars - xlim: - - 0 - - 1 - legend: - title: Sampling Method - bbox_to_anchor: - - 1.05 - - 0.5 - loc: center left - prop: - size: 14 - outs: - - path: truthseeker/plots/sampling_method_vs_accuracy.pdf - hash: md5 - md5: 0d293f64173585cb19c88218a7327f83 - size: 18158 - - path: truthseeker/plots/sampling_method_vs_predict_time.pdf - hash: md5 - md5: bb494d7b950451096bb639f3a9f1b4cb - size: 45092 - - path: truthseeker/plots/sampling_method_vs_train_time.pdf - hash: md5 - md5: 85a9eeb8f5aecc63f5634b12483941cf - size: 39796 - grid_search@500-ddos-gzip_logistic: - cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=500 - data.sample.test_size=100 model_name=gzip_logistic model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_logistic_ddos hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=ddos/logs/gzip_logistic/500 hydra.callbacks.study_dump.output_file=ddos/logs/gzip_logistic/500/study.csv - files.directory=ddos files.reports=reports/gzip_logistic/500 hydra.launcher.n_jobs=-1 - ++raise_exception=True --config-name gzip_logistic --multirun + grid_search@100-ddos-gzip_svc-false: + cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=100 + data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null + model.init.symmetric=false hydra.sweeper.study_name=gzip_svc_ddos hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=ddos/logs/gzip_svc/100/symmetry_false + hydra.callbacks.study_dump.output_file=ddos/logs/gzip_svc/100/study.csv files.directory=ddos + files.reports=reports/gzip_svc/100/symmetry_false hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_svc --multirun deps: - - path: conf/gzip_logistic.yaml + - path: conf/gzip_svc.yaml hash: md5 - md5: a051c1bd6690aa80000909c49eb45023 - size: 2189 + md5: ef6089c75166b6acb57ce97a89157ad9 + size: 1905 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead size: 1469 params: - conf/gzip_logistic.yaml: + conf/gzip_svc.yaml: hydra: run: dir: ${dataset}/logs/${stage}/ @@ -18130,36 +7966,33 @@ stages: _target_: database.OptunaStudyDumpCallback storage: ${hydra.sweeper.storage} study_name: ${hydra.sweeper.study_name} - directions: ${direction} - metric_names: ${optimizers} + directions: + - maximize + metric_names: + - accuracy output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv sweeper: sampler: _target_: optuna.samplers.TPESampler consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper study_name: ${dataset}_${model_name}_${stage} storage: sqlite:///optuna.db - n_jobs: 1 - n_trials: 1 + n_trials: 128 + n_jobs: 8 params: - +model.init.solver: saga - +model.init.penalty: l2,l1,l2,none - +model.init.tol: 1e-4,1e-3,1e-2 - +model.init.C: 1e-2,1e-1,1e0,1e1,1e2 - +model.init.fit_intercept: True,False - +model.init.class_weight: balanced,None - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + +model.init.kernel: rbf,precomputed + +model.init.C: tag(log, interval(1e-3, 1e3)) + +model.init.gamma: scale,auto + +model.init.class_weight: balanced,null model_name: ${model_name} - data.sample.random_state: int(interval(1, 10000)) direction: ${direction} max_failure_rate: 1.0 launcher: @@ -18173,79 +8006,74 @@ stages: temp_folder: /tmp/deckard max_nbytes: 100000 mmap_mode: r - model_name: gzip_logistic outs: - - path: ddos/logs/gzip_logistic/500 - hash: md5 - md5: 42d78356c1051b3e6e5abdc29213c86d.dir - size: 1478191 - nfiles: 514 - - path: ddos/reports/gzip_logistic/500/train/ - hash: md5 - md5: ffef0f292ad2278bc05a9c793d5e3a2b.dir - size: 562303 - nfiles: 348 - grid_search@500-ddos-gzip_svc: - cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=500 - data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_svc_ddos hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=ddos/logs/gzip_svc/500 hydra.callbacks.study_dump.output_file=ddos/logs/gzip_svc/500/study.csv - files.directory=ddos files.reports=reports/gzip_svc/500 hydra.launcher.n_jobs=-1 - ++raise_exception=True --config-name gzip_svc --multirun + - path: ddos/logs/gzip_svc/100/symmetry_false + hash: md5 + md5: 20385e7fa159098729a46a9ec8ad3e2f.dir + size: 1240441 + nfiles: 513 + - path: ddos/reports/gzip_svc/100/symmetry_false/train/ + hash: md5 + md5: 006736d48dc878223021e6c5cc721e21.dir + size: 552730 + nfiles: 384 + grid_search@100-kdd_nsl-gzip_knn-true: + cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl + data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null + model.init.symmetric=true hydra.sweeper.study_name=gzip_knn_kdd_nsl hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=kdd_nsl/logs/gzip_knn/100/symmetry_true + hydra.callbacks.study_dump.output_file=kdd_nsl/logs/gzip_knn/100/study.csv files.directory=kdd_nsl + files.reports=reports/gzip_knn/100/symmetry_true hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_knn --multirun deps: - - path: conf/gzip_svc.yaml + - path: conf/gzip_knn.yaml hash: md5 - md5: 71702231d42f4d68a2237772b3475697 - size: 2115 + md5: 2d0f54d62dcdc05d21ea1730899de0bb + size: 1827 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead size: 1469 params: - conf/gzip_svc.yaml: + conf/gzip_knn.yaml: hydra: run: dir: ${dataset}/logs/${stage}/ sweep: dir: ??? - subdir: ${hydra.job.id} + subdir: ${hydra.job.num} callbacks: study_dump: _target_: database.OptunaStudyDumpCallback storage: ${hydra.sweeper.storage} study_name: ${hydra.sweeper.study_name} - directions: - - maximize - metric_names: - - accuracy + directions: ${direction} + metric_names: ${optimizers} output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv sweeper: sampler: _target_: optuna.samplers.TPESampler consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name}_${stage} - storage: sqlite:///optuna.db - n_jobs: 2 - n_trials: 2 - params: - +model.init.kernel: rbf,precomputed - +model.init.C: 1e-2,1e-1,1e0,1e1,1e2 - +model.init.gamma: scale,auto - +model.init.class_weight: balanced,null - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio - model_name: ${model_name} - data.sample.random_state: int(interval(1, 10000)) direction: ${direction} + storage: sqlite:///optuna.db + study_name: ${dataset}_${model_name}_${stage} + n_trials: 128 + n_jobs: 8 max_failure_rate: 1.0 + params: + model.init.k: 1,3,5,7,11 + +model.init.weights: uniform,distance + +model.init.algorithm: brute + model_name: ${model_name} launcher: _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher n_jobs: 8 @@ -18257,43 +8085,43 @@ stages: temp_folder: /tmp/deckard max_nbytes: 100000 mmap_mode: r - model_name: gzip_svc outs: - - path: ddos/logs/gzip_svc/500 + - path: kdd_nsl/logs/gzip_knn/100/symmetry_true hash: md5 - md5: 1cc5d8464699536811534a66f6b03832.dir - size: 1450430 - nfiles: 514 - - path: ddos/reports/gzip_svc/500/train/ + md5: 549fe2e753e0bcf601fd788dec7aeb1e.dir + size: 1188776 + nfiles: 513 + - path: kdd_nsl/reports/gzip_knn/100/symmetry_true/train/ hash: md5 - md5: 071cf73270503508839388cff5402e51.dir - size: 552304 - nfiles: 384 - grid_search@100-sms_spam-gzip_logistic: - cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam - data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_logistic - model.init.distance_matrix=null hydra.sweeper.study_name=gzip_logistic_sms_spam - hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 hydra.sweep.dir=sms_spam/logs/gzip_logistic/100 - hydra.callbacks.study_dump.output_file=sms_spam/logs/gzip_logistic/100/study.csv - files.directory=sms_spam files.reports=reports/gzip_logistic/100 hydra.launcher.n_jobs=-1 - ++raise_exception=True --config-name gzip_logistic --multirun + md5: c98bd9dce2feec89f7aec764a2c6d1e7.dir + size: 179210 + nfiles: 190 + grid_search@100-kdd_nsl-gzip_knn-false: + cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl + data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null + model.init.symmetric=false hydra.sweeper.study_name=gzip_knn_kdd_nsl hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=kdd_nsl/logs/gzip_knn/100/symmetry_false + hydra.callbacks.study_dump.output_file=kdd_nsl/logs/gzip_knn/100/study.csv files.directory=kdd_nsl + files.reports=reports/gzip_knn/100/symmetry_false hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_knn --multirun deps: - - path: conf/gzip_logistic.yaml + - path: conf/gzip_knn.yaml hash: md5 - md5: a051c1bd6690aa80000909c49eb45023 - size: 2189 + md5: 2d0f54d62dcdc05d21ea1730899de0bb + size: 1827 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead size: 1469 params: - conf/gzip_logistic.yaml: + conf/gzip_knn.yaml: hydra: run: dir: ${dataset}/logs/${stage}/ sweep: dir: ??? - subdir: ${hydra.job.id} + subdir: ${hydra.job.num} callbacks: study_dump: _target_: database.OptunaStudyDumpCallback @@ -18306,31 +8134,25 @@ stages: sampler: _target_: optuna.samplers.TPESampler consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name}_${stage} + direction: ${direction} storage: sqlite:///optuna.db - n_jobs: 1 - n_trials: 1 + study_name: ${dataset}_${model_name}_${stage} + n_trials: 128 + n_jobs: 8 + max_failure_rate: 1.0 params: - +model.init.solver: saga - +model.init.penalty: l2,l1,l2,none - +model.init.tol: 1e-4,1e-3,1e-2 - +model.init.C: 1e-2,1e-1,1e0,1e1,1e2 - +model.init.fit_intercept: True,False - +model.init.class_weight: balanced,None - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + model.init.k: 1,3,5,7,11 + +model.init.weights: uniform,distance + +model.init.algorithm: brute model_name: ${model_name} - data.sample.random_state: int(interval(1, 10000)) - direction: ${direction} - max_failure_rate: 1.0 launcher: _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher n_jobs: 8 @@ -18342,36 +8164,38 @@ stages: temp_folder: /tmp/deckard max_nbytes: 100000 mmap_mode: r - model_name: gzip_logistic outs: - - path: sms_spam/logs/gzip_logistic/100 + - path: kdd_nsl/logs/gzip_knn/100/symmetry_false hash: md5 - md5: d1fc93e695de0fb34abc1f3e4db475b6.dir - size: 1457735 - nfiles: 514 - - path: sms_spam/reports/gzip_logistic/100/train/ + md5: 0a1d8131642b28351971a5294828d0d7.dir + size: 1127001 + nfiles: 513 + - path: kdd_nsl/reports/gzip_knn/100/symmetry_false/train/ hash: md5 - md5: 0e43a98c22a07ff0db5a21c8a1b29f02.dir - size: 551398 - nfiles: 371 - grid_search@100-sms_spam-gzip_svc: - cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam - data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_svc_sms_spam hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=sms_spam/logs/gzip_svc/100 hydra.callbacks.study_dump.output_file=sms_spam/logs/gzip_svc/100/study.csv - files.directory=sms_spam files.reports=reports/gzip_svc/100 hydra.launcher.n_jobs=-1 - ++raise_exception=True --config-name gzip_svc --multirun + md5: abf88a5a4a306ec284320cf3aa409135.dir + size: 155023 + nfiles: 138 + grid_search@100-kdd_nsl-gzip_logistic-true: + cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl + data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_logistic + model.init.distance_matrix=null model.init.symmetric=true hydra.sweeper.study_name=gzip_logistic_kdd_nsl + hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 hydra.sweep.dir=kdd_nsl/logs/gzip_logistic/100/symmetry_true + hydra.callbacks.study_dump.output_file=kdd_nsl/logs/gzip_logistic/100/study.csv + files.directory=kdd_nsl files.reports=reports/gzip_logistic/100/symmetry_true + hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_logistic --multirun deps: - - path: conf/gzip_svc.yaml + - path: conf/gzip_logistic.yaml hash: md5 - md5: 71702231d42f4d68a2237772b3475697 - size: 2115 + md5: da7adfd9b59783b6cd34f750dfcfb1b5 + size: 1993 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead size: 1469 params: - conf/gzip_svc.yaml: + conf/gzip_logistic.yaml: hydra: run: dir: ${dataset}/logs/${stage}/ @@ -18383,36 +8207,33 @@ stages: _target_: database.OptunaStudyDumpCallback storage: ${hydra.sweeper.storage} study_name: ${hydra.sweeper.study_name} - directions: - - maximize - metric_names: - - accuracy + directions: ${direction} + metric_names: ${optimizers} output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv sweeper: sampler: _target_: optuna.samplers.TPESampler consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper study_name: ${dataset}_${model_name}_${stage} storage: sqlite:///optuna.db - n_jobs: 2 - n_trials: 2 + n_trials: 128 + n_jobs: 8 params: - +model.init.kernel: rbf,precomputed - +model.init.C: 1e-2,1e-1,1e0,1e1,1e2 - +model.init.gamma: scale,auto - +model.init.class_weight: balanced,null - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + +model.init.solver: saga + +model.init.penalty: l2,l1 + +model.init.tol: tag(log, interval(1e-5, 1e-1)) + +model.init.C: tag(log, interval(1e-3, 1e3)) + +model.init.fit_intercept: True,False + +model.init.class_weight: balanced,None model_name: ${model_name} - data.sample.random_state: int(interval(1, 10000)) direction: ${direction} max_failure_rate: 1.0 launcher: @@ -18426,42 +8247,44 @@ stages: temp_folder: /tmp/deckard max_nbytes: 100000 mmap_mode: r - model_name: gzip_svc outs: - - path: sms_spam/logs/gzip_svc/100 + - path: kdd_nsl/logs/gzip_logistic/100/symmetry_true hash: md5 - md5: 70b8aaf7b9f4131c24a190371f3bb84d.dir - size: 1396460 - nfiles: 514 - - path: sms_spam/reports/gzip_svc/100/train/ + md5: e57d0862551308c0ec0cabd6542a55e5.dir + size: 1239394 + nfiles: 513 + - path: kdd_nsl/reports/gzip_logistic/100/symmetry_true/train/ hash: md5 - md5: b42fb7cda94841da420570f78c0360ab.dir - size: 542097 - nfiles: 384 - grid_search@300-kdd_nsl-gzip_knn: + md5: af7ccccb3c94a39edbbd239e9cc2a6ae.dir + size: 646824 + nfiles: 327 + grid_search@100-kdd_nsl-gzip_logistic-false: cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl - data.sample.train_size=300 data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_knn_kdd_nsl hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=kdd_nsl/logs/gzip_knn/300 hydra.callbacks.study_dump.output_file=kdd_nsl/logs/gzip_knn/300/study.csv - files.directory=kdd_nsl files.reports=reports/gzip_knn/300 hydra.launcher.n_jobs=-1 - ++raise_exception=True --config-name gzip_knn --multirun + data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_logistic + model.init.distance_matrix=null model.init.symmetric=false hydra.sweeper.study_name=gzip_logistic_kdd_nsl + hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 hydra.sweep.dir=kdd_nsl/logs/gzip_logistic/100/symmetry_false + hydra.callbacks.study_dump.output_file=kdd_nsl/logs/gzip_logistic/100/study.csv + files.directory=kdd_nsl files.reports=reports/gzip_logistic/100/symmetry_false + hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_logistic --multirun deps: - - path: conf/gzip_knn.yaml + - path: conf/gzip_logistic.yaml hash: md5 - md5: ceff1a602afc3323e49200a1da539310 - size: 2046 + md5: da7adfd9b59783b6cd34f750dfcfb1b5 + size: 1993 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead size: 1469 params: - conf/gzip_knn.yaml: + conf/gzip_logistic.yaml: hydra: run: dir: ${dataset}/logs/${stage}/ sweep: dir: ??? - subdir: ${hydra.job.num} + subdir: ${hydra.job.id} callbacks: study_dump: _target_: database.OptunaStudyDumpCallback @@ -18474,28 +8297,28 @@ stages: sampler: _target_: optuna.samplers.TPESampler consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - direction: ${direction} - storage: sqlite:///optuna.db study_name: ${dataset}_${model_name}_${stage} - n_trials: 2 - n_jobs: 2 - max_failure_rate: 1.0 + storage: sqlite:///optuna.db + n_trials: 128 + n_jobs: 8 params: - model.init.k: 1,3,5,7,11 - +model.init.weights: uniform,distance - +model.init.algorithm: brute - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + +model.init.solver: saga + +model.init.penalty: l2,l1 + +model.init.tol: tag(log, interval(1e-5, 1e-1)) + +model.init.C: tag(log, interval(1e-3, 1e3)) + +model.init.fit_intercept: True,False + +model.init.class_weight: balanced,None model_name: ${model_name} - ++data.sample.random_state: int(interval(1, 10000)) + direction: ${direction} + max_failure_rate: 1.0 launcher: _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher n_jobs: 8 @@ -18507,37 +8330,37 @@ stages: temp_folder: /tmp/deckard max_nbytes: 100000 mmap_mode: r - model_name: gzip_knn outs: - - path: kdd_nsl/logs/gzip_knn/300 + - path: kdd_nsl/logs/gzip_logistic/100/symmetry_false hash: md5 - md5: ba73756b84e38a9124b6404330eeb6f6.dir - size: 1356596 - nfiles: 514 - - path: kdd_nsl/reports/gzip_knn/300/train/ + md5: 3ee2c47866f4ce98afa41e1d10dc99c8.dir + size: 1285300 + nfiles: 513 + - path: kdd_nsl/reports/gzip_logistic/100/symmetry_false/train/ hash: md5 - md5: ab75c77771b3c94585d64d8e5e446390.dir - size: 377430 - nfiles: 349 - grid_search@300-kdd_nsl-gzip_logistic: + md5: c7034228ec933542633506b363bdd18a.dir + size: 586323 + nfiles: 367 + grid_search@100-kdd_nsl-gzip_svc-true: cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl - data.sample.train_size=300 data.sample.test_size=100 model_name=gzip_logistic - model.init.distance_matrix=null hydra.sweeper.study_name=gzip_logistic_kdd_nsl - hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 hydra.sweep.dir=kdd_nsl/logs/gzip_logistic/300 - hydra.callbacks.study_dump.output_file=kdd_nsl/logs/gzip_logistic/300/study.csv - files.directory=kdd_nsl files.reports=reports/gzip_logistic/300 hydra.launcher.n_jobs=-1 - ++raise_exception=True --config-name gzip_logistic --multirun + data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null + model.init.symmetric=true hydra.sweeper.study_name=gzip_svc_kdd_nsl hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=kdd_nsl/logs/gzip_svc/100/symmetry_true + hydra.callbacks.study_dump.output_file=kdd_nsl/logs/gzip_svc/100/study.csv files.directory=kdd_nsl + files.reports=reports/gzip_svc/100/symmetry_true hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_svc --multirun deps: - - path: conf/gzip_logistic.yaml + - path: conf/gzip_svc.yaml hash: md5 - md5: a051c1bd6690aa80000909c49eb45023 - size: 2189 + md5: ef6089c75166b6acb57ce97a89157ad9 + size: 1905 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead size: 1469 params: - conf/gzip_logistic.yaml: + conf/gzip_svc.yaml: hydra: run: dir: ${dataset}/logs/${stage}/ @@ -18549,36 +8372,33 @@ stages: _target_: database.OptunaStudyDumpCallback storage: ${hydra.sweeper.storage} study_name: ${hydra.sweeper.study_name} - directions: ${direction} - metric_names: ${optimizers} + directions: + - maximize + metric_names: + - accuracy output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv sweeper: sampler: _target_: optuna.samplers.TPESampler consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper study_name: ${dataset}_${model_name}_${stage} storage: sqlite:///optuna.db - n_jobs: 1 - n_trials: 1 + n_trials: 128 + n_jobs: 8 params: - +model.init.solver: saga - +model.init.penalty: l2,l1,l2,none - +model.init.tol: 1e-4,1e-3,1e-2 - +model.init.C: 1e-2,1e-1,1e0,1e1,1e2 - +model.init.fit_intercept: True,False - +model.init.class_weight: balanced,None - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + +model.init.kernel: rbf,precomputed + +model.init.C: tag(log, interval(1e-3, 1e3)) + +model.init.gamma: scale,auto + +model.init.class_weight: balanced,null model_name: ${model_name} - data.sample.random_state: int(interval(1, 10000)) direction: ${direction} max_failure_rate: 1.0 launcher: @@ -18592,30 +8412,31 @@ stages: temp_folder: /tmp/deckard max_nbytes: 100000 mmap_mode: r - model_name: gzip_logistic outs: - - path: kdd_nsl/logs/gzip_logistic/300 + - path: kdd_nsl/logs/gzip_svc/100/symmetry_true hash: md5 - md5: a82fb69301d5b4c25a98b08e9c51a03d.dir - size: 1473960 - nfiles: 514 - - path: kdd_nsl/reports/gzip_logistic/300/train/ + md5: 66d83844ef05adb0a121fce7b252b683.dir + size: 1250230 + nfiles: 513 + - path: kdd_nsl/reports/gzip_svc/100/symmetry_true/train/ hash: md5 - md5: f8ead22c1c2154ea1b5fc4271e76a807.dir - size: 565055 - nfiles: 358 - grid_search@300-kdd_nsl-gzip_svc: + md5: 9de34dd6d2fb5ad4ebb92c7dfcf05629.dir + size: 555703 + nfiles: 384 + grid_search@100-kdd_nsl-gzip_svc-false: cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl - data.sample.train_size=300 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_svc_kdd_nsl hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=kdd_nsl/logs/gzip_svc/300 hydra.callbacks.study_dump.output_file=kdd_nsl/logs/gzip_svc/300/study.csv - files.directory=kdd_nsl files.reports=reports/gzip_svc/300 hydra.launcher.n_jobs=-1 + data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null + model.init.symmetric=false hydra.sweeper.study_name=gzip_svc_kdd_nsl hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=kdd_nsl/logs/gzip_svc/100/symmetry_false + hydra.callbacks.study_dump.output_file=kdd_nsl/logs/gzip_svc/100/study.csv files.directory=kdd_nsl + files.reports=reports/gzip_svc/100/symmetry_false hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio ++raise_exception=True --config-name gzip_svc --multirun deps: - path: conf/gzip_svc.yaml hash: md5 - md5: 71702231d42f4d68a2237772b3475697 - size: 2115 + md5: ef6089c75166b6acb57ce97a89157ad9 + size: 1905 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead @@ -18642,27 +8463,24 @@ stages: sampler: _target_: optuna.samplers.TPESampler consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper study_name: ${dataset}_${model_name}_${stage} storage: sqlite:///optuna.db - n_jobs: 2 - n_trials: 2 + n_trials: 128 + n_jobs: 8 params: +model.init.kernel: rbf,precomputed - +model.init.C: 1e-2,1e-1,1e0,1e1,1e2 + +model.init.C: tag(log, interval(1e-3, 1e3)) +model.init.gamma: scale,auto +model.init.class_weight: balanced,null - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio model_name: ${model_name} - data.sample.random_state: int(interval(1, 10000)) direction: ${direction} max_failure_rate: 1.0 launcher: @@ -18676,30 +8494,32 @@ stages: temp_folder: /tmp/deckard max_nbytes: 100000 mmap_mode: r - model_name: gzip_svc outs: - - path: kdd_nsl/logs/gzip_svc/300 + - path: kdd_nsl/logs/gzip_svc/100/symmetry_false hash: md5 - md5: b9967495b4a69d493478d118c005bcb0.dir - size: 1439921 - nfiles: 514 - - path: kdd_nsl/reports/gzip_svc/300/train/ + md5: 977a69c4aa921c8559e687b1ca7fb3b6.dir + size: 1244242 + nfiles: 513 + - path: kdd_nsl/reports/gzip_svc/100/symmetry_false/train/ hash: md5 - md5: 483c44c484684bfa4be6afbe8785d19e.dir - size: 556311 + md5: 4dafa970272be8aa5c954ef2c8883ce1.dir + size: 555022 nfiles: 384 - grid_search@300-sms_spam-gzip_knn: + grid_search@100-sms_spam-gzip_knn-true: cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam - data.sample.train_size=300 data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_knn_sms_spam hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=sms_spam/logs/gzip_knn/300 hydra.callbacks.study_dump.output_file=sms_spam/logs/gzip_knn/300/study.csv - files.directory=sms_spam files.reports=reports/gzip_knn/300 hydra.launcher.n_jobs=-1 + data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null + model.init.symmetric=true hydra.sweeper.study_name=gzip_knn_sms_spam hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=sms_spam/logs/gzip_knn/100/symmetry_true + hydra.callbacks.study_dump.output_file=sms_spam/logs/gzip_knn/100/study.csv + files.directory=sms_spam files.reports=reports/gzip_knn/100/symmetry_true hydra.launcher.n_jobs=-1 + ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio ++raise_exception=True --config-name gzip_knn --multirun deps: - path: conf/gzip_knn.yaml hash: md5 - md5: ceff1a602afc3323e49200a1da539310 - size: 2046 + md5: 2d0f54d62dcdc05d21ea1730899de0bb + size: 1827 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead @@ -18724,28 +8544,25 @@ stages: sampler: _target_: optuna.samplers.TPESampler consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper direction: ${direction} storage: sqlite:///optuna.db study_name: ${dataset}_${model_name}_${stage} - n_trials: 2 - n_jobs: 2 + n_trials: 128 + n_jobs: 8 max_failure_rate: 1.0 params: model.init.k: 1,3,5,7,11 +model.init.weights: uniform,distance +model.init.algorithm: brute - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio model_name: ${model_name} - ++data.sample.random_state: int(interval(1, 10000)) launcher: _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher n_jobs: 8 @@ -18757,43 +8574,44 @@ stages: temp_folder: /tmp/deckard max_nbytes: 100000 mmap_mode: r - model_name: gzip_knn outs: - - path: sms_spam/logs/gzip_knn/300 + - path: sms_spam/logs/gzip_knn/100/symmetry_true hash: md5 - md5: 37a32ed4e0e8746093c0cc9773c20428.dir - size: 1360206 - nfiles: 514 - - path: sms_spam/reports/gzip_knn/300/train/ + md5: 78ca4529619f53661b14a5d0c4cb99bd.dir + size: 1086010 + nfiles: 513 + - path: sms_spam/reports/gzip_knn/100/symmetry_true/train/ hash: md5 - md5: b562ce528647cbc5691881eca20d14c3.dir - size: 360305 - nfiles: 354 - grid_search@300-sms_spam-gzip_logistic: + md5: 688b101d8f5ff7b2e466c0e9492e3d6a.dir + size: 107355 + nfiles: 118 + grid_search@100-sms_spam-gzip_knn-false: cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam - data.sample.train_size=300 data.sample.test_size=100 model_name=gzip_logistic - model.init.distance_matrix=null hydra.sweeper.study_name=gzip_logistic_sms_spam - hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 hydra.sweep.dir=sms_spam/logs/gzip_logistic/300 - hydra.callbacks.study_dump.output_file=sms_spam/logs/gzip_logistic/300/study.csv - files.directory=sms_spam files.reports=reports/gzip_logistic/300 hydra.launcher.n_jobs=-1 - ++raise_exception=True --config-name gzip_logistic --multirun + data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null + model.init.symmetric=false hydra.sweeper.study_name=gzip_knn_sms_spam hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=sms_spam/logs/gzip_knn/100/symmetry_false + hydra.callbacks.study_dump.output_file=sms_spam/logs/gzip_knn/100/study.csv + files.directory=sms_spam files.reports=reports/gzip_knn/100/symmetry_false hydra.launcher.n_jobs=-1 + ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_knn --multirun deps: - - path: conf/gzip_logistic.yaml + - path: conf/gzip_knn.yaml hash: md5 - md5: a051c1bd6690aa80000909c49eb45023 - size: 2189 + md5: 2d0f54d62dcdc05d21ea1730899de0bb + size: 1827 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead size: 1469 params: - conf/gzip_logistic.yaml: + conf/gzip_knn.yaml: hydra: run: dir: ${dataset}/logs/${stage}/ sweep: dir: ??? - subdir: ${hydra.job.id} + subdir: ${hydra.job.num} callbacks: study_dump: _target_: database.OptunaStudyDumpCallback @@ -18806,31 +8624,25 @@ stages: sampler: _target_: optuna.samplers.TPESampler consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name}_${stage} + direction: ${direction} storage: sqlite:///optuna.db - n_jobs: 1 - n_trials: 1 + study_name: ${dataset}_${model_name}_${stage} + n_trials: 128 + n_jobs: 8 + max_failure_rate: 1.0 params: - +model.init.solver: saga - +model.init.penalty: l2,l1,l2,none - +model.init.tol: 1e-4,1e-3,1e-2 - +model.init.C: 1e-2,1e-1,1e0,1e1,1e2 - +model.init.fit_intercept: True,False - +model.init.class_weight: balanced,None - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + model.init.k: 1,3,5,7,11 + +model.init.weights: uniform,distance + +model.init.algorithm: brute model_name: ${model_name} - data.sample.random_state: int(interval(1, 10000)) - direction: ${direction} - max_failure_rate: 1.0 launcher: _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher n_jobs: 8 @@ -18842,36 +8654,38 @@ stages: temp_folder: /tmp/deckard max_nbytes: 100000 mmap_mode: r - model_name: gzip_logistic outs: - - path: sms_spam/logs/gzip_logistic/300 + - path: sms_spam/logs/gzip_knn/100/symmetry_false hash: md5 - md5: c4a6659a9a42438e4cda46204110f152.dir - size: 1492305 - nfiles: 514 - - path: sms_spam/reports/gzip_logistic/300/train/ + md5: b77d9d0576d484d42fa24401a1d81509.dir + size: 1142222 + nfiles: 513 + - path: sms_spam/reports/gzip_knn/100/symmetry_false/train/ hash: md5 - md5: c390bf9ff240c2b33fb66a43bc5e49b5.dir - size: 552096 - nfiles: 373 - grid_search@300-sms_spam-gzip_svc: + md5: 663f10d7b2a3647caecaa978b7b7d983.dir + size: 119667 + nfiles: 117 + grid_search@100-sms_spam-gzip_logistic-true: cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam - data.sample.train_size=300 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_svc_sms_spam hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=sms_spam/logs/gzip_svc/300 hydra.callbacks.study_dump.output_file=sms_spam/logs/gzip_svc/300/study.csv - files.directory=sms_spam files.reports=reports/gzip_svc/300 hydra.launcher.n_jobs=-1 - ++raise_exception=True --config-name gzip_svc --multirun + data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_logistic + model.init.distance_matrix=null model.init.symmetric=true hydra.sweeper.study_name=gzip_logistic_sms_spam + hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 hydra.sweep.dir=sms_spam/logs/gzip_logistic/100/symmetry_true + hydra.callbacks.study_dump.output_file=sms_spam/logs/gzip_logistic/100/study.csv + files.directory=sms_spam files.reports=reports/gzip_logistic/100/symmetry_true + hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_logistic --multirun deps: - - path: conf/gzip_svc.yaml + - path: conf/gzip_logistic.yaml hash: md5 - md5: 71702231d42f4d68a2237772b3475697 - size: 2115 + md5: da7adfd9b59783b6cd34f750dfcfb1b5 + size: 1993 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead size: 1469 params: - conf/gzip_svc.yaml: + conf/gzip_logistic.yaml: hydra: run: dir: ${dataset}/logs/${stage}/ @@ -18883,36 +8697,33 @@ stages: _target_: database.OptunaStudyDumpCallback storage: ${hydra.sweeper.storage} study_name: ${hydra.sweeper.study_name} - directions: - - maximize - metric_names: - - accuracy + directions: ${direction} + metric_names: ${optimizers} output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv sweeper: sampler: _target_: optuna.samplers.TPESampler consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper study_name: ${dataset}_${model_name}_${stage} storage: sqlite:///optuna.db - n_jobs: 2 - n_trials: 2 + n_trials: 128 + n_jobs: 8 params: - +model.init.kernel: rbf,precomputed - +model.init.C: 1e-2,1e-1,1e0,1e1,1e2 - +model.init.gamma: scale,auto - +model.init.class_weight: balanced,null - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + +model.init.solver: saga + +model.init.penalty: l2,l1 + +model.init.tol: tag(log, interval(1e-5, 1e-1)) + +model.init.C: tag(log, interval(1e-3, 1e3)) + +model.init.fit_intercept: True,False + +model.init.class_weight: balanced,None model_name: ${model_name} - data.sample.random_state: int(interval(1, 10000)) direction: ${direction} max_failure_rate: 1.0 launcher: @@ -18926,42 +8737,44 @@ stages: temp_folder: /tmp/deckard max_nbytes: 100000 mmap_mode: r - model_name: gzip_svc outs: - - path: sms_spam/logs/gzip_svc/300 + - path: sms_spam/logs/gzip_logistic/100/symmetry_true hash: md5 - md5: faef37bd655980292a1cba1eb6019e02.dir - size: 1432029 - nfiles: 514 - - path: sms_spam/reports/gzip_svc/300/train/ + md5: 517eb16a845fa795e775ef9a68e0a0c6.dir + size: 1234485 + nfiles: 513 + - path: sms_spam/reports/gzip_logistic/100/symmetry_true/train/ hash: md5 - md5: 6e8a5812a59700fdfac04e31e4f91c15.dir - size: 543601 - nfiles: 384 - grid_search@300-truthseeker-gzip_knn: - cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker - data.sample.train_size=300 data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_knn_truthseeker hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=truthseeker/logs/gzip_knn/300 hydra.callbacks.study_dump.output_file=truthseeker/logs/gzip_knn/300/study.csv - files.directory=truthseeker files.reports=reports/gzip_knn/300 hydra.launcher.n_jobs=-1 - ++raise_exception=True --config-name gzip_knn --multirun + md5: 80878d8c169e37e8110005c63a1ee5d0.dir + size: 635861 + nfiles: 326 + grid_search@100-sms_spam-gzip_logistic-false: + cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam + data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_logistic + model.init.distance_matrix=null model.init.symmetric=false hydra.sweeper.study_name=gzip_logistic_sms_spam + hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 hydra.sweep.dir=sms_spam/logs/gzip_logistic/100/symmetry_false + hydra.callbacks.study_dump.output_file=sms_spam/logs/gzip_logistic/100/study.csv + files.directory=sms_spam files.reports=reports/gzip_logistic/100/symmetry_false + hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_logistic --multirun deps: - - path: conf/gzip_knn.yaml + - path: conf/gzip_logistic.yaml hash: md5 - md5: ceff1a602afc3323e49200a1da539310 - size: 2046 + md5: da7adfd9b59783b6cd34f750dfcfb1b5 + size: 1993 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead size: 1469 params: - conf/gzip_knn.yaml: + conf/gzip_logistic.yaml: hydra: run: dir: ${dataset}/logs/${stage}/ sweep: dir: ??? - subdir: ${hydra.job.num} + subdir: ${hydra.job.id} callbacks: study_dump: _target_: database.OptunaStudyDumpCallback @@ -18974,28 +8787,28 @@ stages: sampler: _target_: optuna.samplers.TPESampler consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - direction: ${direction} - storage: sqlite:///optuna.db study_name: ${dataset}_${model_name}_${stage} - n_trials: 2 - n_jobs: 2 - max_failure_rate: 1.0 + storage: sqlite:///optuna.db + n_trials: 128 + n_jobs: 8 params: - model.init.k: 1,3,5,7,11 - +model.init.weights: uniform,distance - +model.init.algorithm: brute - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + +model.init.solver: saga + +model.init.penalty: l2,l1 + +model.init.tol: tag(log, interval(1e-5, 1e-1)) + +model.init.C: tag(log, interval(1e-3, 1e3)) + +model.init.fit_intercept: True,False + +model.init.class_weight: balanced,None model_name: ${model_name} - ++data.sample.random_state: int(interval(1, 10000)) + direction: ${direction} + max_failure_rate: 1.0 launcher: _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher n_jobs: 8 @@ -19007,37 +8820,38 @@ stages: temp_folder: /tmp/deckard max_nbytes: 100000 mmap_mode: r - model_name: gzip_knn outs: - - path: truthseeker/logs/gzip_knn/300 + - path: sms_spam/logs/gzip_logistic/100/symmetry_false hash: md5 - md5: fe0d8d1efc5205e73c00a325158a32d0.dir - size: 1379955 - nfiles: 514 - - path: truthseeker/reports/gzip_knn/300/train/ + md5: 394ed9398208455dae29046d35774913.dir + size: 1229002 + nfiles: 513 + - path: sms_spam/reports/gzip_logistic/100/symmetry_false/train/ hash: md5 - md5: 6cf4811545ac6bbcb931dec166f94146.dir - size: 361320 - nfiles: 356 - grid_search@300-truthseeker-gzip_logistic: - cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker - data.sample.train_size=300 data.sample.test_size=100 model_name=gzip_logistic - model.init.distance_matrix=null hydra.sweeper.study_name=gzip_logistic_truthseeker - hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 hydra.sweep.dir=truthseeker/logs/gzip_logistic/300 - hydra.callbacks.study_dump.output_file=truthseeker/logs/gzip_logistic/300/study.csv - files.directory=truthseeker files.reports=reports/gzip_logistic/300 hydra.launcher.n_jobs=-1 - ++raise_exception=True --config-name gzip_logistic --multirun + md5: 1bd2509e914115c6a834f630872fe406.dir + size: 628941 + nfiles: 323 + grid_search@100-sms_spam-gzip_svc-true: + cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam + data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null + model.init.symmetric=true hydra.sweeper.study_name=gzip_svc_sms_spam hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=sms_spam/logs/gzip_svc/100/symmetry_true + hydra.callbacks.study_dump.output_file=sms_spam/logs/gzip_svc/100/study.csv + files.directory=sms_spam files.reports=reports/gzip_svc/100/symmetry_true hydra.launcher.n_jobs=-1 + ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_svc --multirun deps: - - path: conf/gzip_logistic.yaml + - path: conf/gzip_svc.yaml hash: md5 - md5: a051c1bd6690aa80000909c49eb45023 - size: 2189 + md5: ef6089c75166b6acb57ce97a89157ad9 + size: 1905 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead size: 1469 params: - conf/gzip_logistic.yaml: + conf/gzip_svc.yaml: hydra: run: dir: ${dataset}/logs/${stage}/ @@ -19049,36 +8863,33 @@ stages: _target_: database.OptunaStudyDumpCallback storage: ${hydra.sweeper.storage} study_name: ${hydra.sweeper.study_name} - directions: ${direction} - metric_names: ${optimizers} + directions: + - maximize + metric_names: + - accuracy output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv sweeper: sampler: _target_: optuna.samplers.TPESampler consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper study_name: ${dataset}_${model_name}_${stage} storage: sqlite:///optuna.db - n_jobs: 1 - n_trials: 1 + n_trials: 128 + n_jobs: 8 params: - +model.init.solver: saga - +model.init.penalty: l2,l1,l2,none - +model.init.tol: 1e-4,1e-3,1e-2 - +model.init.C: 1e-2,1e-1,1e0,1e1,1e2 - +model.init.fit_intercept: True,False - +model.init.class_weight: balanced,None - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + +model.init.kernel: rbf,precomputed + +model.init.C: tag(log, interval(1e-3, 1e3)) + +model.init.gamma: scale,auto + +model.init.class_weight: balanced,null model_name: ${model_name} - data.sample.random_state: int(interval(1, 10000)) direction: ${direction} max_failure_rate: 1.0 launcher: @@ -19092,30 +8903,32 @@ stages: temp_folder: /tmp/deckard max_nbytes: 100000 mmap_mode: r - model_name: gzip_logistic outs: - - path: truthseeker/logs/gzip_logistic/300 + - path: sms_spam/logs/gzip_svc/100/symmetry_true hash: md5 - md5: 3646366e6e334601019e84ac4afaba0a.dir - size: 1505405 - nfiles: 514 - - path: truthseeker/reports/gzip_logistic/300/train/ + md5: c0931c4a2af0f0b39b4fb699e5ff8850.dir + size: 1246641 + nfiles: 513 + - path: sms_spam/reports/gzip_svc/100/symmetry_true/train/ hash: md5 - md5: 08a33f0c2516868b6f96d07144938775.dir - size: 555605 - nfiles: 375 - grid_search@300-truthseeker-gzip_svc: - cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker - data.sample.train_size=300 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_svc_truthseeker hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=truthseeker/logs/gzip_svc/300 hydra.callbacks.study_dump.output_file=truthseeker/logs/gzip_svc/300/study.csv - files.directory=truthseeker files.reports=reports/gzip_svc/300 hydra.launcher.n_jobs=-1 + md5: 903ac9307687b483ee7f60f5c5a9e068.dir + size: 543384 + nfiles: 384 + grid_search@100-sms_spam-gzip_svc-false: + cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam + data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null + model.init.symmetric=false hydra.sweeper.study_name=gzip_svc_sms_spam hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=sms_spam/logs/gzip_svc/100/symmetry_false + hydra.callbacks.study_dump.output_file=sms_spam/logs/gzip_svc/100/study.csv + files.directory=sms_spam files.reports=reports/gzip_svc/100/symmetry_false hydra.launcher.n_jobs=-1 + ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio ++raise_exception=True --config-name gzip_svc --multirun deps: - path: conf/gzip_svc.yaml hash: md5 - md5: 71702231d42f4d68a2237772b3475697 - size: 2115 + md5: ef6089c75166b6acb57ce97a89157ad9 + size: 1905 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead @@ -19142,27 +8955,24 @@ stages: sampler: _target_: optuna.samplers.TPESampler consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper study_name: ${dataset}_${model_name}_${stage} storage: sqlite:///optuna.db - n_jobs: 2 - n_trials: 2 + n_trials: 128 + n_jobs: 8 params: +model.init.kernel: rbf,precomputed - +model.init.C: 1e-2,1e-1,1e0,1e1,1e2 + +model.init.C: tag(log, interval(1e-3, 1e3)) +model.init.gamma: scale,auto +model.init.class_weight: balanced,null - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio model_name: ${model_name} - data.sample.random_state: int(interval(1, 10000)) direction: ${direction} max_failure_rate: 1.0 launcher: @@ -19176,30 +8986,32 @@ stages: temp_folder: /tmp/deckard max_nbytes: 100000 mmap_mode: r - model_name: gzip_svc outs: - - path: truthseeker/logs/gzip_svc/300 + - path: sms_spam/logs/gzip_svc/100/symmetry_false hash: md5 - md5: 03113827d2b60e43967131d724c3d9b3.dir - size: 1447847 - nfiles: 514 - - path: truthseeker/reports/gzip_svc/300/train/ + md5: f37630902004d80cb73ff229905ca426.dir + size: 1247648 + nfiles: 513 + - path: sms_spam/reports/gzip_svc/100/symmetry_false/train/ hash: md5 - md5: 269b7351222860a080573a1460cdc1b4.dir - size: 547528 + md5: 58dc217409a236b747a999da2ef4cee1.dir + size: 543731 nfiles: 384 - grid_search@500-ddos-gzip_knn: - cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=500 - data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_knn_ddos hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=ddos/logs/gzip_knn/500 hydra.callbacks.study_dump.output_file=ddos/logs/gzip_knn/500/study.csv - files.directory=ddos files.reports=reports/gzip_knn/500 hydra.launcher.n_jobs=-1 + grid_search@100-truthseeker-gzip_knn-true: + cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker + data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null + model.init.symmetric=true hydra.sweeper.study_name=gzip_knn_truthseeker hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=truthseeker/logs/gzip_knn/100/symmetry_true + hydra.callbacks.study_dump.output_file=truthseeker/logs/gzip_knn/100/study.csv + files.directory=truthseeker files.reports=reports/gzip_knn/100/symmetry_true + hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio ++raise_exception=True --config-name gzip_knn --multirun deps: - path: conf/gzip_knn.yaml hash: md5 - md5: ceff1a602afc3323e49200a1da539310 - size: 2046 + md5: 2d0f54d62dcdc05d21ea1730899de0bb + size: 1827 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead @@ -19224,28 +9036,25 @@ stages: sampler: _target_: optuna.samplers.TPESampler consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper direction: ${direction} storage: sqlite:///optuna.db study_name: ${dataset}_${model_name}_${stage} - n_trials: 2 - n_jobs: 2 + n_trials: 128 + n_jobs: 8 max_failure_rate: 1.0 params: model.init.k: 1,3,5,7,11 +model.init.weights: uniform,distance +model.init.algorithm: brute - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio model_name: ${model_name} - ++data.sample.random_state: int(interval(1, 10000)) launcher: _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher n_jobs: 8 @@ -19257,30 +9066,32 @@ stages: temp_folder: /tmp/deckard max_nbytes: 100000 mmap_mode: r - model_name: gzip_knn outs: - - path: ddos/logs/gzip_knn/500 + - path: truthseeker/logs/gzip_knn/100/symmetry_true hash: md5 - md5: fe25eeb3a1a7651381057f046b09750b.dir - size: 1400909 - nfiles: 514 - - path: ddos/reports/gzip_knn/500/train/ + md5: 3bb5017fdd0b61fd7b5be594c4dd0b9c.dir + size: 1193938 + nfiles: 513 + - path: truthseeker/reports/gzip_knn/100/symmetry_true/train/ hash: md5 - md5: 04c061f1c2bf5fcebf3e65ae1df23961.dir - size: 352339 - nfiles: 375 - grid_search@500-kdd_nsl-gzip_knn: - cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl - data.sample.train_size=500 data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_knn_kdd_nsl hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=kdd_nsl/logs/gzip_knn/500 hydra.callbacks.study_dump.output_file=kdd_nsl/logs/gzip_knn/500/study.csv - files.directory=kdd_nsl files.reports=reports/gzip_knn/500 hydra.launcher.n_jobs=-1 + md5: c0ef5fa56bc9c65e6b6abe943f424be6.dir + size: 227250 + nfiles: 244 + grid_search@100-truthseeker-gzip_knn-false: + cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker + data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null + model.init.symmetric=false hydra.sweeper.study_name=gzip_knn_truthseeker hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=truthseeker/logs/gzip_knn/100/symmetry_false + hydra.callbacks.study_dump.output_file=truthseeker/logs/gzip_knn/100/study.csv + files.directory=truthseeker files.reports=reports/gzip_knn/100/symmetry_false + hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio ++raise_exception=True --config-name gzip_knn --multirun deps: - path: conf/gzip_knn.yaml hash: md5 - md5: ceff1a602afc3323e49200a1da539310 - size: 2046 + md5: 2d0f54d62dcdc05d21ea1730899de0bb + size: 1827 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead @@ -19305,28 +9116,25 @@ stages: sampler: _target_: optuna.samplers.TPESampler consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper direction: ${direction} storage: sqlite:///optuna.db study_name: ${dataset}_${model_name}_${stage} - n_trials: 2 - n_jobs: 2 + n_trials: 128 + n_jobs: 8 max_failure_rate: 1.0 params: model.init.k: 1,3,5,7,11 +model.init.weights: uniform,distance +model.init.algorithm: brute - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio model_name: ${model_name} - ++data.sample.random_state: int(interval(1, 10000)) launcher: _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher n_jobs: 8 @@ -19338,31 +9146,32 @@ stages: temp_folder: /tmp/deckard max_nbytes: 100000 mmap_mode: r - model_name: gzip_knn outs: - - path: kdd_nsl/logs/gzip_knn/500 + - path: truthseeker/logs/gzip_knn/100/symmetry_false hash: md5 - md5: f549b868c9b1d774b5aa5333d8abe45e.dir - size: 1376339 - nfiles: 514 - - path: kdd_nsl/reports/gzip_knn/500/train/ + md5: 77709b1d2f5973a004742328fa7ccf46.dir + size: 1173316 + nfiles: 513 + - path: truthseeker/reports/gzip_knn/100/symmetry_false/train/ hash: md5 - md5: 094b000f73371e65f91890452d9d69f3.dir - size: 381867 - nfiles: 342 - grid_search@500-kdd_nsl-gzip_logistic: - cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl - data.sample.train_size=500 data.sample.test_size=100 model_name=gzip_logistic - model.init.distance_matrix=null hydra.sweeper.study_name=gzip_logistic_kdd_nsl - hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 hydra.sweep.dir=kdd_nsl/logs/gzip_logistic/500 - hydra.callbacks.study_dump.output_file=kdd_nsl/logs/gzip_logistic/500/study.csv - files.directory=kdd_nsl files.reports=reports/gzip_logistic/500 hydra.launcher.n_jobs=-1 + md5: 0a3609651300c7e4d773fdce2af08984.dir + size: 171434 + nfiles: 160 + grid_search@100-truthseeker-gzip_logistic-true: + cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker + data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_logistic + model.init.distance_matrix=null model.init.symmetric=true hydra.sweeper.study_name=gzip_logistic_truthseeker + hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 hydra.sweep.dir=truthseeker/logs/gzip_logistic/100/symmetry_true + hydra.callbacks.study_dump.output_file=truthseeker/logs/gzip_logistic/100/study.csv + files.directory=truthseeker files.reports=reports/gzip_logistic/100/symmetry_true + hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio ++raise_exception=True --config-name gzip_logistic --multirun deps: - path: conf/gzip_logistic.yaml hash: md5 - md5: a051c1bd6690aa80000909c49eb45023 - size: 2189 + md5: da7adfd9b59783b6cd34f750dfcfb1b5 + size: 1993 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead @@ -19387,29 +9196,26 @@ stages: sampler: _target_: optuna.samplers.TPESampler consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper study_name: ${dataset}_${model_name}_${stage} storage: sqlite:///optuna.db - n_jobs: 1 - n_trials: 1 + n_trials: 128 + n_jobs: 8 params: +model.init.solver: saga - +model.init.penalty: l2,l1,l2,none - +model.init.tol: 1e-4,1e-3,1e-2 - +model.init.C: 1e-2,1e-1,1e0,1e1,1e2 + +model.init.penalty: l2,l1 + +model.init.tol: tag(log, interval(1e-5, 1e-1)) + +model.init.C: tag(log, interval(1e-3, 1e3)) +model.init.fit_intercept: True,False +model.init.class_weight: balanced,None - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio model_name: ${model_name} - data.sample.random_state: int(interval(1, 10000)) direction: ${direction} max_failure_rate: 1.0 launcher: @@ -19423,36 +9229,38 @@ stages: temp_folder: /tmp/deckard max_nbytes: 100000 mmap_mode: r - model_name: gzip_logistic outs: - - path: kdd_nsl/logs/gzip_logistic/500 + - path: truthseeker/logs/gzip_logistic/100/symmetry_true hash: md5 - md5: 6b01fe4a99e91bc633976aa3c798ec5d.dir - size: 1521620 - nfiles: 514 - - path: kdd_nsl/reports/gzip_logistic/500/train/ + md5: d6d4b0b157b08346ad1b518d2edfe1f8.dir + size: 1243931 + nfiles: 513 + - path: truthseeker/reports/gzip_logistic/100/symmetry_true/train/ hash: md5 - md5: 1730d6ac6bc42b13b1b4ef64a3812598.dir - size: 563747 - nfiles: 373 - grid_search@500-kdd_nsl-gzip_svc: - cmd: python -m deckard.layers.optimise stage=train data=kdd_nsl dataset=kdd_nsl - data.sample.train_size=500 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_svc_kdd_nsl hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=kdd_nsl/logs/gzip_svc/500 hydra.callbacks.study_dump.output_file=kdd_nsl/logs/gzip_svc/500/study.csv - files.directory=kdd_nsl files.reports=reports/gzip_svc/500 hydra.launcher.n_jobs=-1 - ++raise_exception=True --config-name gzip_svc --multirun + md5: 8f94e7db8385fb9f3973eb19b328397a.dir + size: 639777 + nfiles: 326 + grid_search@100-truthseeker-gzip_logistic-false: + cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker + data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_logistic + model.init.distance_matrix=null model.init.symmetric=false hydra.sweeper.study_name=gzip_logistic_truthseeker + hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 hydra.sweep.dir=truthseeker/logs/gzip_logistic/100/symmetry_false + hydra.callbacks.study_dump.output_file=truthseeker/logs/gzip_logistic/100/study.csv + files.directory=truthseeker files.reports=reports/gzip_logistic/100/symmetry_false + hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_logistic --multirun deps: - - path: conf/gzip_svc.yaml + - path: conf/gzip_logistic.yaml hash: md5 - md5: 71702231d42f4d68a2237772b3475697 - size: 2115 + md5: da7adfd9b59783b6cd34f750dfcfb1b5 + size: 1993 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead size: 1469 params: - conf/gzip_svc.yaml: + conf/gzip_logistic.yaml: hydra: run: dir: ${dataset}/logs/${stage}/ @@ -19464,119 +9272,35 @@ stages: _target_: database.OptunaStudyDumpCallback storage: ${hydra.sweeper.storage} study_name: ${hydra.sweeper.study_name} - directions: - - maximize - metric_names: - - accuracy + directions: ${direction} + metric_names: ${optimizers} output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv sweeper: sampler: _target_: optuna.samplers.TPESampler consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper study_name: ${dataset}_${model_name}_${stage} storage: sqlite:///optuna.db - n_jobs: 2 - n_trials: 2 + n_trials: 128 + n_jobs: 8 params: - +model.init.kernel: rbf,precomputed - +model.init.C: 1e-2,1e-1,1e0,1e1,1e2 - +model.init.gamma: scale,auto - +model.init.class_weight: balanced,null - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + +model.init.solver: saga + +model.init.penalty: l2,l1 + +model.init.tol: tag(log, interval(1e-5, 1e-1)) + +model.init.C: tag(log, interval(1e-3, 1e3)) + +model.init.fit_intercept: True,False + +model.init.class_weight: balanced,None model_name: ${model_name} - data.sample.random_state: int(interval(1, 10000)) - direction: ${direction} - max_failure_rate: 1.0 - launcher: - _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher - n_jobs: 8 - prefer: processes - verbose: 1 - timeout: - pre_dispatch: ${hydra.sweeper.n_jobs} - batch_size: auto - temp_folder: /tmp/deckard - max_nbytes: 100000 - mmap_mode: r - model_name: gzip_svc - outs: - - path: kdd_nsl/logs/gzip_svc/500 - hash: md5 - md5: 8147396e4c263c06694eaf9acc5fda79.dir - size: 1465954 - nfiles: 514 - - path: kdd_nsl/reports/gzip_svc/500/train/ - hash: md5 - md5: 452d9298ae9b99f1da7f423b7e13949d.dir - size: 555623 - nfiles: 384 - grid_search@500-sms_spam-gzip_knn: - cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam - data.sample.train_size=500 data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_knn_sms_spam hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=sms_spam/logs/gzip_knn/500 hydra.callbacks.study_dump.output_file=sms_spam/logs/gzip_knn/500/study.csv - files.directory=sms_spam files.reports=reports/gzip_knn/500 hydra.launcher.n_jobs=-1 - ++raise_exception=True --config-name gzip_knn --multirun - deps: - - path: conf/gzip_knn.yaml - hash: md5 - md5: ceff1a602afc3323e49200a1da539310 - size: 2046 - - path: params.yaml - hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 - params: - conf/gzip_knn.yaml: - hydra: - run: - dir: ${dataset}/logs/${stage}/ - sweep: - dir: ??? - subdir: ${hydra.job.num} - callbacks: - study_dump: - _target_: database.OptunaStudyDumpCallback - storage: ${hydra.sweeper.storage} - study_name: ${hydra.sweeper.study_name} - directions: ${direction} - metric_names: ${optimizers} - output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv - sweeper: - sampler: - _target_: optuna.samplers.TPESampler - consider_prior: true - prior_weight: 1.0 - consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 - multivariate: true - _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper direction: ${direction} - storage: sqlite:///optuna.db - study_name: ${dataset}_${model_name}_${stage} - n_trials: 2 - n_jobs: 2 max_failure_rate: 1.0 - params: - model.init.k: 1,3,5,7,11 - +model.init.weights: uniform,distance - +model.init.algorithm: brute - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio - model_name: ${model_name} - ++data.sample.random_state: int(interval(1, 10000)) launcher: _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher n_jobs: 8 @@ -19588,37 +9312,38 @@ stages: temp_folder: /tmp/deckard max_nbytes: 100000 mmap_mode: r - model_name: gzip_knn outs: - - path: sms_spam/logs/gzip_knn/500 + - path: truthseeker/logs/gzip_logistic/100/symmetry_false hash: md5 - md5: 6a032a4fa187f7444d1a6dcef094e3f1.dir - size: 1365875 - nfiles: 514 - - path: sms_spam/reports/gzip_knn/500/train/ + md5: e00ee47514e58ea5f4d39063d194ca52.dir + size: 1288351 + nfiles: 513 + - path: truthseeker/reports/gzip_logistic/100/symmetry_false/train/ hash: md5 - md5: 4b62eb85519a3c3b7faf6b00b673b94d.dir - size: 372575 - nfiles: 331 - grid_search@500-sms_spam-gzip_logistic: - cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam - data.sample.train_size=500 data.sample.test_size=100 model_name=gzip_logistic - model.init.distance_matrix=null hydra.sweeper.study_name=gzip_logistic_sms_spam - hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 hydra.sweep.dir=sms_spam/logs/gzip_logistic/500 - hydra.callbacks.study_dump.output_file=sms_spam/logs/gzip_logistic/500/study.csv - files.directory=sms_spam files.reports=reports/gzip_logistic/500 hydra.launcher.n_jobs=-1 - ++raise_exception=True --config-name gzip_logistic --multirun + md5: 6eaa1b0799b99345f36c3649419ed12f.dir + size: 581607 + nfiles: 364 + grid_search@100-truthseeker-gzip_svc-true: + cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker + data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null + model.init.symmetric=true hydra.sweeper.study_name=gzip_svc_truthseeker hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=truthseeker/logs/gzip_svc/100/symmetry_true + hydra.callbacks.study_dump.output_file=truthseeker/logs/gzip_svc/100/study.csv + files.directory=truthseeker files.reports=reports/gzip_svc/100/symmetry_true + hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + ++raise_exception=True --config-name gzip_svc --multirun deps: - - path: conf/gzip_logistic.yaml + - path: conf/gzip_svc.yaml hash: md5 - md5: a051c1bd6690aa80000909c49eb45023 - size: 2189 + md5: ef6089c75166b6acb57ce97a89157ad9 + size: 1905 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead size: 1469 params: - conf/gzip_logistic.yaml: + conf/gzip_svc.yaml: hydra: run: dir: ${dataset}/logs/${stage}/ @@ -19630,36 +9355,33 @@ stages: _target_: database.OptunaStudyDumpCallback storage: ${hydra.sweeper.storage} study_name: ${hydra.sweeper.study_name} - directions: ${direction} - metric_names: ${optimizers} + directions: + - maximize + metric_names: + - accuracy output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv sweeper: sampler: _target_: optuna.samplers.TPESampler consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper study_name: ${dataset}_${model_name}_${stage} storage: sqlite:///optuna.db - n_jobs: 1 - n_trials: 1 + n_trials: 128 + n_jobs: 8 params: - +model.init.solver: saga - +model.init.penalty: l2,l1,l2,none - +model.init.tol: 1e-4,1e-3,1e-2 - +model.init.C: 1e-2,1e-1,1e0,1e1,1e2 - +model.init.fit_intercept: True,False - +model.init.class_weight: balanced,None - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio + +model.init.kernel: rbf,precomputed + +model.init.C: tag(log, interval(1e-3, 1e3)) + +model.init.gamma: scale,auto + +model.init.class_weight: balanced,null model_name: ${model_name} - data.sample.random_state: int(interval(1, 10000)) direction: ${direction} max_failure_rate: 1.0 launcher: @@ -19673,30 +9395,32 @@ stages: temp_folder: /tmp/deckard max_nbytes: 100000 mmap_mode: r - model_name: gzip_logistic outs: - - path: sms_spam/logs/gzip_logistic/500 + - path: truthseeker/logs/gzip_svc/100/symmetry_true hash: md5 - md5: 270344776fa2cc88fce23f89b15a0882.dir - size: 1517330 - nfiles: 514 - - path: sms_spam/reports/gzip_logistic/500/train/ + md5: 4d85a297bae6c4437d8775268b8f09aa.dir + size: 1252991 + nfiles: 513 + - path: truthseeker/reports/gzip_svc/100/symmetry_true/train/ hash: md5 - md5: 72776456839e39a213bf000db2ca2c44.dir - size: 551977 - nfiles: 369 - grid_search@500-sms_spam-gzip_svc: - cmd: python -m deckard.layers.optimise stage=train data=sms_spam dataset=sms_spam - data.sample.train_size=500 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_svc_sms_spam hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=sms_spam/logs/gzip_svc/500 hydra.callbacks.study_dump.output_file=sms_spam/logs/gzip_svc/500/study.csv - files.directory=sms_spam files.reports=reports/gzip_svc/500 hydra.launcher.n_jobs=-1 + md5: e5dbcf02229d9973d0d948ab7291138c.dir + size: 546664 + nfiles: 384 + grid_search@100-truthseeker-gzip_svc-false: + cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker + data.sample.train_size=100 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null + model.init.symmetric=false hydra.sweeper.study_name=gzip_svc_truthseeker hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=truthseeker/logs/gzip_svc/100/symmetry_false + hydra.callbacks.study_dump.output_file=truthseeker/logs/gzip_svc/100/study.csv + files.directory=truthseeker files.reports=reports/gzip_svc/100/symmetry_false + hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio ++raise_exception=True --config-name gzip_svc --multirun deps: - path: conf/gzip_svc.yaml hash: md5 - md5: 71702231d42f4d68a2237772b3475697 - size: 2115 + md5: ef6089c75166b6acb57ce97a89157ad9 + size: 1905 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead @@ -19723,27 +9447,24 @@ stages: sampler: _target_: optuna.samplers.TPESampler consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 + consider_endpoints: true + n_startup_trials: 256 + n_ei_candidates: 32 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper study_name: ${dataset}_${model_name}_${stage} storage: sqlite:///optuna.db - n_jobs: 2 - n_trials: 2 + n_trials: 128 + n_jobs: 8 params: +model.init.kernel: rbf,precomputed - +model.init.C: 1e-2,1e-1,1e0,1e1,1e2 + +model.init.C: tag(log, interval(1e-3, 1e3)) +model.init.gamma: scale,auto +model.init.class_weight: balanced,null - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio model_name: ${model_name} - data.sample.random_state: int(interval(1, 10000)) direction: ${direction} max_failure_rate: 1.0 launcher: @@ -19757,30 +9478,30 @@ stages: temp_folder: /tmp/deckard max_nbytes: 100000 mmap_mode: r - model_name: gzip_svc outs: - - path: sms_spam/logs/gzip_svc/500 + - path: truthseeker/logs/gzip_svc/100/symmetry_false hash: md5 - md5: eefe1bc86da71e9b275bb91a94c7e1e5.dir - size: 1460547 - nfiles: 514 - - path: sms_spam/reports/gzip_svc/500/train/ + md5: b33c39d320d25d5bfbd81006713e3d62.dir + size: 1254591 + nfiles: 513 + - path: truthseeker/reports/gzip_svc/100/symmetry_false/train/ hash: md5 - md5: 71e3b0cc05eadc9ccec862d8a314ae76.dir - size: 543107 + md5: 13ac657603b4c71f4a17d78cbdc69083.dir + size: 547239 nfiles: 384 - grid_search@500-truthseeker-gzip_knn: - cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker - data.sample.train_size=500 data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_knn_truthseeker hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=truthseeker/logs/gzip_knn/500 hydra.callbacks.study_dump.output_file=truthseeker/logs/gzip_knn/500/study.csv - files.directory=truthseeker files.reports=reports/gzip_knn/500 hydra.launcher.n_jobs=-1 + grid_search@300-ddos-gzip_knn-true: + cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=300 + data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null + model.init.symmetric=true hydra.sweeper.study_name=gzip_knn_ddos hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=ddos/logs/gzip_knn/300/symmetry_true + hydra.callbacks.study_dump.output_file=ddos/logs/gzip_knn/300/study.csv files.directory=ddos + files.reports=reports/gzip_knn/300/symmetry_true hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 ++raise_exception=True --config-name gzip_knn --multirun deps: - path: conf/gzip_knn.yaml hash: md5 - md5: ceff1a602afc3323e49200a1da539310 - size: 2046 + md5: 187b2fd2a0a70b8980acfd256687f05a + size: 1928 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead @@ -19805,9 +9526,10 @@ stages: sampler: _target_: optuna.samplers.TPESampler consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false + consider_endpoints: true n_startup_trials: 10 n_ei_candidates: 24 multivariate: true @@ -19815,18 +9537,15 @@ stages: direction: ${direction} storage: sqlite:///optuna.db study_name: ${dataset}_${model_name}_${stage} - n_trials: 2 - n_jobs: 2 + n_trials: 128 + n_jobs: 8 max_failure_rate: 1.0 params: model.init.k: 1,3,5,7,11 +model.init.weights: uniform,distance +model.init.algorithm: brute - model.init.symmetric: True,False - ++model.init.precompute: true model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio model_name: ${model_name} - ++data.sample.random_state: int(interval(1, 10000)) launcher: _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher n_jobs: 8 @@ -19838,43 +9557,42 @@ stages: temp_folder: /tmp/deckard max_nbytes: 100000 mmap_mode: r - model_name: gzip_knn outs: - - path: truthseeker/logs/gzip_knn/500 + - path: ddos/logs/gzip_knn/300/symmetry_true hash: md5 - md5: b54fab88a876d95f9b2d92b0c287fbf4.dir - size: 1374058 - nfiles: 514 - - path: truthseeker/reports/gzip_knn/500/train/ + md5: d23dbd6a384157d616bebeeb6cf41a27.dir + size: 1175564 + nfiles: 513 + - path: ddos/reports/gzip_knn/300/symmetry_true/train/ hash: md5 - md5: de58821607d6834fb53f8f0aec1e08df.dir - size: 383103 - nfiles: 329 - grid_search@500-truthseeker-gzip_logistic: - cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker - data.sample.train_size=500 data.sample.test_size=100 model_name=gzip_logistic - model.init.distance_matrix=null hydra.sweeper.study_name=gzip_logistic_truthseeker - hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 hydra.sweep.dir=truthseeker/logs/gzip_logistic/500 - hydra.callbacks.study_dump.output_file=truthseeker/logs/gzip_logistic/500/study.csv - files.directory=truthseeker files.reports=reports/gzip_logistic/500 hydra.launcher.n_jobs=-1 - ++raise_exception=True --config-name gzip_logistic --multirun + md5: 4c887424c72eed237277e641dfcd47e2.dir + size: 191347 + nfiles: 205 + grid_search@300-ddos-gzip_knn-false: + cmd: python -m deckard.layers.optimise stage=train data=ddos dataset=ddos data.sample.train_size=300 + data.sample.test_size=100 model_name=gzip_knn model.init.distance_matrix=null + model.init.symmetric=false hydra.sweeper.study_name=gzip_knn_ddos hydra.sweeper.n_trials=128 + hydra.sweeper.n_jobs=8 hydra.sweep.dir=ddos/logs/gzip_knn/300/symmetry_false + hydra.callbacks.study_dump.output_file=ddos/logs/gzip_knn/300/study.csv files.directory=ddos + files.reports=reports/gzip_knn/300/symmetry_false hydra.launcher.n_jobs=-1 ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + ++raise_exception=True --config-name gzip_knn --multirun deps: - - path: conf/gzip_logistic.yaml + - path: conf/gzip_knn.yaml hash: md5 - md5: a051c1bd6690aa80000909c49eb45023 - size: 2189 + md5: 187b2fd2a0a70b8980acfd256687f05a + size: 1928 - path: params.yaml hash: md5 md5: 486532089f9aed37612260a1f0a2bead size: 1469 params: - conf/gzip_logistic.yaml: + conf/gzip_knn.yaml: hydra: run: dir: ${dataset}/logs/${stage}/ sweep: dir: ??? - subdir: ${hydra.job.id} + subdir: ${hydra.job.num} callbacks: study_dump: _target_: database.OptunaStudyDumpCallback @@ -19887,115 +9605,26 @@ stages: sampler: _target_: optuna.samplers.TPESampler consider_prior: true + seed: 123 prior_weight: 1.0 consider_magic_clip: true - consider_endpoints: false + consider_endpoints: true n_startup_trials: 10 n_ei_candidates: 24 multivariate: true _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name}_${stage} - storage: sqlite:///optuna.db - n_jobs: 1 - n_trials: 1 - params: - +model.init.solver: saga - +model.init.penalty: l2,l1,l2,none - +model.init.tol: 1e-4,1e-3,1e-2 - +model.init.C: 1e-2,1e-1,1e0,1e1,1e2 - +model.init.fit_intercept: True,False - +model.init.class_weight: balanced,None - model.init.symmetric: True,False - ++model.init.precompute: true - model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio - model_name: ${model_name} - data.sample.random_state: int(interval(1, 10000)) direction: ${direction} - max_failure_rate: 1.0 - launcher: - _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher - n_jobs: 8 - prefer: processes - verbose: 1 - timeout: - pre_dispatch: ${hydra.sweeper.n_jobs} - batch_size: auto - temp_folder: /tmp/deckard - max_nbytes: 100000 - mmap_mode: r - model_name: gzip_logistic - outs: - - path: truthseeker/logs/gzip_logistic/500 - hash: md5 - md5: 28faffb212522c53212996b0a17adad4.dir - size: 1533992 - nfiles: 514 - - path: truthseeker/reports/gzip_logistic/500/train/ - hash: md5 - md5: 3e62c32091d4e6cf11f8746d3023ea2b.dir - size: 555653 - nfiles: 371 - grid_search@500-truthseeker-gzip_svc: - cmd: python -m deckard.layers.optimise stage=train data=truthseeker dataset=truthseeker - data.sample.train_size=500 data.sample.test_size=100 model_name=gzip_svc model.init.distance_matrix=null - hydra.sweeper.study_name=gzip_svc_truthseeker hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=truthseeker/logs/gzip_svc/500 hydra.callbacks.study_dump.output_file=truthseeker/logs/gzip_svc/500/study.csv - files.directory=truthseeker files.reports=reports/gzip_svc/500 hydra.launcher.n_jobs=-1 - ++raise_exception=True --config-name gzip_svc --multirun - deps: - - path: conf/gzip_svc.yaml - hash: md5 - md5: 71702231d42f4d68a2237772b3475697 - size: 2115 - - path: params.yaml - hash: md5 - md5: 486532089f9aed37612260a1f0a2bead - size: 1469 - params: - conf/gzip_svc.yaml: - hydra: - run: - dir: ${dataset}/logs/${stage}/ - sweep: - dir: ??? - subdir: ${hydra.job.id} - callbacks: - study_dump: - _target_: database.OptunaStudyDumpCallback - storage: ${hydra.sweeper.storage} - study_name: ${hydra.sweeper.study_name} - directions: - - maximize - metric_names: - - accuracy - output_file: ${dataset}/logs/${model_name}/${data.sample.train_size}/study.csv - sweeper: - sampler: - _target_: optuna.samplers.TPESampler - consider_prior: true - prior_weight: 1.0 - consider_magic_clip: true - consider_endpoints: false - n_startup_trials: 10 - n_ei_candidates: 24 - multivariate: true - _target_: hydra_plugins.hydra_optuna_sweeper.optuna_sweeper.OptunaSweeper - study_name: ${dataset}_${model_name}_${stage} storage: sqlite:///optuna.db - n_jobs: 2 - n_trials: 2 + study_name: ${dataset}_${model_name}_${stage} + n_trials: 128 + n_jobs: 8 + max_failure_rate: 1.0 params: - +model.init.kernel: rbf,precomputed - +model.init.C: 1e-2,1e-1,1e0,1e1,1e2 - +model.init.gamma: scale,auto - +model.init.class_weight: balanced,null - model.init.symmetric: True,False - ++model.init.precompute: true + model.init.k: 1,3,5,7,11 + +model.init.weights: uniform,distance + +model.init.algorithm: brute model.init.metric: gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio model_name: ${model_name} - data.sample.random_state: int(interval(1, 10000)) - direction: ${direction} - max_failure_rate: 1.0 launcher: _target_: hydra_plugins.hydra_joblib_launcher.joblib_launcher.JoblibLauncher n_jobs: 8 @@ -20007,15 +9636,14 @@ stages: temp_folder: /tmp/deckard max_nbytes: 100000 mmap_mode: r - model_name: gzip_svc outs: - - path: truthseeker/logs/gzip_svc/500 + - path: ddos/logs/gzip_knn/300/symmetry_false hash: md5 - md5: 7aabf6a304d62119b25bf04f87fbf1e6.dir - size: 1477307 - nfiles: 514 - - path: truthseeker/reports/gzip_svc/500/train/ + md5: 8ed5c114922082086fcec773797c4983.dir + size: 1159774 + nfiles: 513 + - path: ddos/reports/gzip_knn/300/symmetry_false/train/ hash: md5 - md5: 40fe30277b8a7d712eaee252561a010d.dir - size: 547190 - nfiles: 384 + md5: 4122b0aa41babba1d8a8e141206a1c1a.dir + size: 167245 + nfiles: 167 diff --git a/examples/gzip/dvc.yaml b/examples/gzip/dvc.yaml index e5f35871..367523d2 100644 --- a/examples/gzip/dvc.yaml +++ b/examples/gzip/dvc.yaml @@ -71,112 +71,12 @@ stages: - params.yaml - raw_data/ # Raw data ############################################################################## - # test_each_dataset: - # matrix: - # dataset : [ddos, truthseeker, sms_spam, kdd_nsl] - # model_name : [gzip_knn, gzip_svc, gzip_logistic] - # cmd : >- - # python -m deckard.layers.optimise - # stage=train - # files.name=${item.model_name} - # data.sample.train_size=100 - # files.directory=${item.dataset} - # data=${item.dataset} - # dataset=${item.dataset} - # model_name=${item.model_name} - # model=${item.model_name} - # hydra.run.dir=${item.dataset}/logs/train/${item.model_name} - # ++raise_exception=True - # deps: - # - params.yaml - # - ${files.directory}/${files.reports}/train/default/${files.score_dict_file} - # outs: - # - ${item.dataset}/${files.reports}/train/${item.model_name}/${files.score_dict_file} - # - ${item.dataset}/logs/train/${item.model_name} - # params: - # - data - # - model - # - scorers - # - files - # - dataset - # - model_name - # - device_id - ############################################################################## - # test_each_metric: - # matrix: - # metric: [gzip, zstd, pkl, bz2, lzma,levenshtein, ratio, hamming, jaro, jaro_winkler, seqratio] - # model : [gzip_knn,] # gzip_svc, gzip_logistic - # dataset : [kdd_nsl] #truthseeker, sms_spam, ddos - # train_size: [20] #100, 1000, 10000 - # cmd : >- - # python -m deckard.layers.optimise - # stage=test_each_metric - # files.name=${item.model}/${item.metric}/${item.train_size} - # files.directory=${item.dataset} - # data=${item.dataset} - # data.sample.train_size=${item.train_size} - # dataset=${item.dataset} - # model=${item.model} - # model_name=${model_name} - # model.init.metric=${item.metric} - # model.init.m=-1 - # hydra.run.dir=${item.dataset}/logs/test_each_metric/${item.model}/${item.metric}/${item.train_size} - # ++raise_exception=True - # deps: - # - params.yaml - # - ${files.directory}/${files.reports}/train/default/${files.score_dict_file} - # outs: - # - ${item.dataset}/${files.reports}/test_each_metric/${item.model}/${item.metric}/${item.train_size}/${files.score_dict_file} - # - ${item.dataset}/logs/test_each_metric/${item.model}/${item.metric}/${item.train_size} - # params: - # - data - # - model - # - scorers - # - files - # - dataset - # - model_name - # - device_id - # ############################################################################## - # test_each_model: - # matrix: - # metric: [gzip] #, zstd, pkl, bz2, lzma,levenshtein, ratio, hamming, jaro, jaro_winkler, seqratio - # model : [gzip_knn, gzip_svc, gzip_logistic] - # dataset : [kdd_nsl] #truthseeker, sms_spam, ddos - # train_size: [20] #100, 1000, 10000 - # cmd : >- - # python -m deckard.layers.optimise - # stage=test_each_model - # files.name=${item.model}/${item.metric}/${item.train_size} - # files.directory=${item.dataset} - # data=${item.dataset} - # data.sample.train_size=${item.train_size} - # dataset=${item.dataset} - # model=${item.model} - # model_name=${model_name} - # model.init.metric=${item.metric} - # model.init.m=-1 - # hydra.run.dir=${item.dataset}/logs/test_each_model/${item.model}/${item.metric}/${item.train_size} - # ++raise_exception=True - # deps: - # - params.yaml - # - ${files.directory}/${files.reports}/train/default/${files.score_dict_file} - # outs: - # - ${item.dataset}/${files.reports}/test_each_model/${item.model}/${item.metric}/${item.train_size}/${files.score_dict_file} - # - ${item.dataset}/logs/test_each_model/${item.model}/${item.metric}/${item.train_size} - # params: - # - data - # - model - # - scorers - # - files - # - dataset - # - model_name - # - device_id - ############################################################################## grid_search: matrix: train_size: [20, 100, 300, 500] # dataset : [ddos, kdd_nsl, sms_spam, truthseeker] # configs: [gzip_knn, gzip_logistic, gzip_svc] + symmetric : [True, False] cmd: >- python -m deckard.layers.optimise stage=train @@ -186,14 +86,17 @@ stages: data.sample.test_size=100 model_name=${item.configs} model.init.distance_matrix=null + model.init.symmetric=${item.symmetric} hydra.sweeper.study_name=${item.configs}_${item.dataset} hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=${item.dataset}/logs/${item.configs}/${item.train_size} + hydra.sweep.dir=${item.dataset}/logs/${item.configs}/${item.train_size}/symmetry_${item.symmetric} hydra.callbacks.study_dump.output_file=${item.dataset}/logs/${item.configs}/${item.train_size}/study.csv files.directory=${item.dataset} - files.reports=${files.reports}/${item.configs}/${item.train_size} + files.reports=${files.reports}/${item.configs}/${item.train_size}/symmetry_${item.symmetric} hydra.launcher.n_jobs=-1 + ++data.sample.random_state=1,2,3,4,5,6,7,8,9,10 + model.init.metric=gzip,lzma,bz2,pkl,zstd,levenshtein,ratio,hamming,jaro,jaro_winkler,seqratio ++raise_exception=True --config-name ${item.configs} --multirun @@ -201,15 +104,17 @@ stages: - params.yaml - conf/${item.configs}.yaml outs: - - ${item.dataset}/logs/${item.configs}/${item.train_size} - - ${item.dataset}/${files.reports}/${item.configs}/${item.train_size}/train/: + - ${item.dataset}/logs/${item.configs}/${item.train_size}/symmetry_${item.symmetric}: + cache: true + persist: true + push: true + - ${item.dataset}/${files.reports}/${item.configs}/${item.train_size}/symmetry_${item.symmetric}/train/: cache: true persist: true push: true params: - conf/${item.configs}.yaml: - hydra - - model_name ############################################################################## # find_best_model: # This isn't actually used in later steps, but it's handy to have these configs ready for a line search instead of a massive grid search # matrix: @@ -221,43 +126,12 @@ stages: # python -m deckard.layers.find_best --storage sqlite:///optuna.db --study_name ${item.model}_${item.dataset} --config_subdir model --params_file best_${item.model}_${item.dataset} --default_config ${item.model} # outs: # - conf/model/best_${item.model}_${item.dataset}.yaml - ############################################################################# - # test_each_method: - # matrix: - # dataset : [ddos] # kdd_nsl, truthseeker, sms_spam, - # method: [medoid, sum, svc, hardness, nearmiss,random,knn] - # cmd : >- - # python -m deckard.layers.optimise - # stage=train - # +model.init.sampling_method=${item.method} - # model.init.m=3 - # data.sample.train_size=100 - # files.name=${item.method} - # files.directory=${item.dataset} - # data=${item.dataset} - # dataset=${item.dataset} - # model_name=${item.method} - # hydra.run.dir=${item.dataset}/logs/method/${item.method} - # ++raise_exception=True - # deps: - # - params.yaml - # - ${files.directory}/${files.reports}/train/default/${files.score_dict_file} - # outs: - # - ${item.dataset}/${files.reports}/train/${item.method}/${files.score_dict_file} - # - ${item.dataset}/logs/method/${item.method} - # params: - # - data - # - model - # - scorers - # - files - # - dataset - # - model_name - # - device_id ############################################################################## condense: matrix: dataset : [ddos, kdd_nsl, truthseeker, sms_spam,] # kdd_nsl, truthseeker, sms_spam, model_name : [knn, svc, logistic] + ratio : [1, .9, .8, .7, .6, .5, .4, .3, .2, .1] deps: - params.yaml - conf/condense_${item.model_name}.yaml @@ -270,19 +144,28 @@ stages: data.sample.test_size=100 model_name=condensed_${item.model_name} model=gzip_${item.model_name} + ++model.init.m=${item.ratio} + ++model.init.distance_matrix=${item.dataset}/models/${item.model_name}/${item.ratio}/distance_matrix.npz files.directory=${item.dataset} - files.reports=${files.reports}/condense/${item.model_name}/ + files.reports=${files.reports}/condense/${item.model_name}/${item.ratio}/ hydra.sweeper.study_name=condense_${item.model_name}_${item.dataset} - hydra.sweeper.n_trials=1024 + hydra.sweeper.n_trials=128 hydra.sweeper.n_jobs=8 - hydra.sweep.dir=${item.dataset}/logs/condense/${item.model_name}/ + hydra.sweep.dir=${item.dataset}/logs/condense/${item.model_name}/${item.ratio}/ hydra.callbacks.study_dump.output_file=${item.dataset}/logs/${item.model_name}/study.csv hydra.launcher.n_jobs=-1 --config-name condense_${item.model_name} --multirun outs: - - ${item.dataset}/logs/condense/${item.model_name}/ - - ${item.dataset}/${files.reports}/condense/${item.model_name}/: + - ${item.dataset}/logs/condense/${item.model_name}/${item.ratio}: + cache: true + persist: true + push: true + - ${item.dataset}/${files.reports}/condense/${item.model_name}/${item.ratio}: + cache: true + persist: true + push: true + - ${item.dataset}/models/${item.model_name}/${item.ratio}/: cache: true persist: true push: true @@ -291,7 +174,7 @@ stages: - hydra compile: matrix: - dataset : [kdd_nsl, sms_spam, ddos] + dataset : [kdd_nsl, sms_spam, ddos, truthseeker] stage : [gzip_knn, gzip_svc, gzip_logistic, condense/knn, condense/svc, condense/logistic] deps: - ${item.dataset}/${files.reports}/${item.stage}/ @@ -304,7 +187,7 @@ stages: ############################################################################## clean: matrix: - dataset : [kdd_nsl, sms_spam, ddos] + dataset : [kdd_nsl, sms_spam, ddos, truthseeker] stage : [gzip_knn, gzip_svc, gzip_logistic, condense/knn, condense/svc, condense/logistic] deps: - ${item.dataset}/${files.reports}/${item.stage}.csv @@ -318,10 +201,12 @@ stages: params: - conf/clean.yaml: - replace + - drop_values + - replace_cols ############################################################################## merge: matrix: - dataset : [kdd_nsl, sms_spam, ddos] + dataset : [kdd_nsl, sms_spam, ddos, truthseeker] deps: - ${item.dataset}/plots/clean/gzip_knn.csv - ${item.dataset}/plots/clean/gzip_logistic.csv @@ -338,7 +223,7 @@ stages: ############################################################################## merge_condense: matrix: - dataset : [kdd_nsl, sms_spam, ddos] + dataset : [kdd_nsl, sms_spam, ddos, truthseeker] deps: - ${item.dataset}/plots/clean/condense/knn.csv - ${item.dataset}/plots/clean/condense/logistic.csv @@ -355,7 +240,7 @@ stages: ############################################################################## plot: matrix: - dataset : [kdd_nsl, sms_spam, ddos] + dataset : [kdd_nsl, sms_spam, ddos, truthseeker] cmd: >- python -m deckard.layers.plots --path ${item.dataset}/plots/ @@ -363,6 +248,7 @@ stages: -c conf/plots.yaml deps: - ${item.dataset}/plots/merged.csv + - conf/plots.yaml plots: - ${item.dataset}/plots/${line_plot[0].file} - ${item.dataset}/plots/${line_plot[1].file} @@ -379,7 +265,7 @@ stages: ############################################################################## plot_condense: matrix: - dataset : [kdd_nsl, sms_spam, ddos] + dataset : [kdd_nsl, sms_spam, ddos, truthseeker] cmd: >- python -m deckard.layers.plots --path ${item.dataset}/plots/ @@ -387,22 +273,72 @@ stages: -c conf/condensed_plots.yaml deps: - ${item.dataset}/plots/condensed_merged.csv + - conf/condensed_plots.yaml plots: - - ${item.dataset}/plots/sampling_method_vs_accuracy.pdf - - ${item.dataset}/plots/sampling_method_vs_train_time.pdf - - ${item.dataset}/plots/sampling_method_vs_predict_time.pdf + - ${item.dataset}/plots/condensing_method_vs_accuracy.pdf + - ${item.dataset}/plots/condensing_method_vs_train_time.pdf + - ${item.dataset}/plots/condensing_method_vs_predict_time.pdf params: - conf/condensed_plots.yaml: + - cat_plot + ############################################################################## + merge_datasets: + cmd: >- + python merge.py + --big_dir . + --little_dir . + --data_file sms_spam/plots/merged.csv + --little_dir_data_file kdd_nsl/plots/merged.csv ddos/plots/merged.csv truthseeker/plots/merged.csv kdd_nsl/plots/condensed_merged.csv ddos/plots/condensed_merged.csv truthseeker/plots/condensed_merged.csv sms_spam/plots/condensed_merged.csv + --output_folder combined/plots/ + --output_file merged.csv + deps: + - sms_spam/plots/merged.csv + - kdd_nsl/plots/merged.csv + - ddos/plots/merged.csv + - truthseeker/plots/merged.csv + outs: + - combined/plots/merged.csv + ############################################################################## + plot_merged: + cmd: >- + python -m deckard.layers.plots + --path combined/plots/ + --file combined/plots/merged.csv + -c conf/merged_plots.yaml + deps: + - combined/plots/merged.csv + - conf/merged_plots.yaml + plots: + - combined/plots/compressor_metric_vs_accuracy.pdf + - combined/plots/compressor_metric_vs_train_time.pdf + - combined/plots/compressor_metric_vs_predict_time.pdf + - combined/plots/string_metric_vs_accuracy.pdf + - combined/plots/string_metric_vs_train_time.pdf + - combined/plots/string_metric_vs_predict_time.pdf + - combined/plots/symmetric_models_vs_accuracy.pdf + - combined/plots/symmetric_models_vs_train_time.pdf + - combined/plots/symmetric_models_vs_predict_time.pdf + - combined/plots/condensing_methods_vs_accuracy.pdf + - combined/plots/condensing_methods_vs_train_time.pdf + - combined/plots/condensing_methods_vs_predict_time.pdf + - combined/plots/models_vs_accuracy.pdf + - combined/plots/models_vs_train_time.pdf + - combined/plots/models_vs_predict_time.pdf + params: + - conf/merged_plots.yaml: + - cat_plot + - conf/merged_plots.yaml: - line_plot - # copy: - # matrix: - # dataset : [kdd_nsl, truthseeker, sms_spam, ddos] - # cmd: >- - # rm -rf ~/Gzip-KNN/figs/${item.dataset}/ && - # mkdir -p ~/Gzip-KNN/figs/${item.dataset}/ && - # cp -r ${item.dataset}/plots/* ~/Gzip-KNN/figs/${item.dataset}/ - # deps: - # - ${item.dataset}/plots/ + copy: + matrix: + dataset : [kdd_nsl, truthseeker, sms_spam, ddos, combined] + cmd: >- + rm -rf ~/Gzip-KNN/figs/${item.dataset}/ && + mkdir -p ~/Gzip-KNN/figs/${item.dataset}/ && + cp -r ${item.dataset}/plots/* ~/Gzip-KNN/figs/${item.dataset}/ && + rm -rf ~/Gzip-KNN/figs/${item.dataset}/.gitignore + deps: + - ${item.dataset}/plots/ # ############################################################################## # # attack: # # cmd: python -m deckard.layers.experiment attack From 7b681874691475a7f8c48c44e44c37a32c966908 Mon Sep 17 00:00:00 2001 From: Charlie Meyers Date: Tue, 30 Jul 2024 20:19:58 +0200 Subject: [PATCH 34/35] liniting --- deckard/layers/afr.py | 9 +- deckard/layers/plots.py | 64 ++++++----- examples/gzip/batchMixin.py | 27 +++-- examples/gzip/conf/condensed_plots.yaml | 2 +- examples/gzip/conf/merged_plots.yaml | 2 +- examples/gzip/gzip_classifier.py | 144 ++++++++++++++++++------ examples/gzip/objective.py | 32 ++++-- 7 files changed, 198 insertions(+), 82 deletions(-) diff --git a/deckard/layers/afr.py b/deckard/layers/afr.py index 25098367..c69e7887 100644 --- a/deckard/layers/afr.py +++ b/deckard/layers/afr.py @@ -28,7 +28,14 @@ logger = logging.getLogger(__name__) -__all__ = ["afr_main", "survival_probability_calibration", "fit_aft", "plot_aft", "afr_parser"] +__all__ = [ + "afr_main", + "survival_probability_calibration", + "fit_aft", + "plot_aft", + "afr_parser", +] + # Modified from https://github.com/CamDavidsonPilon/lifelines/blob/master/lifelines/calibration.py def survival_probability_calibration( diff --git a/deckard/layers/plots.py b/deckard/layers/plots.py index 53914e36..ab584351 100644 --- a/deckard/layers/plots.py +++ b/deckard/layers/plots.py @@ -47,7 +47,7 @@ def cat_plot( filetype=".eps", x_scale=None, y_scale=None, - digitize = [], + digitize=[], **kwargs, ): """ @@ -124,28 +124,28 @@ def cat_plot( # graph is a FacetGrid object and we need to set the x,y scales, labels, titles on the axes for graph_ in graph.axes.flat: if y_scale is not None: - graph_.set_yscale(y_scale) + graph_.set_yscale(y_scale) if x_scale is not None: - graph_.set_xscale(x_scale) + graph_.set_xscale(x_scale) if xticklabels is not None: - graph_.set_xticklabels(xticklabels) + graph_.set_xticklabels(xticklabels) if yticklabels is not None: - graph_.set_yticklabels(yticklabels) + graph_.set_yticklabels(yticklabels) if titles is not None: - if isinstance(titles, dict): - graph.set_titles(**titles) - elif isinstance(titles, str): - graph.set_titles(titles) + if isinstance(titles, dict): + graph.set_titles(**titles) + elif isinstance(titles, str): + graph.set_titles(titles) else: - try: - graph.set_titles("{row_name} | {col_name}") - except KeyError as e: - if "row_name" in str(e): - graph.set_titles("{col_name}") - elif "col_name" in str(e): - graph.set_titles("{row_name}") - else: - raise e + try: + graph.set_titles("{row_name} | {col_name}") + except KeyError as e: + if "row_name" in str(e): + graph.set_titles("{col_name}") + elif "col_name" in str(e): + graph.set_titles("{row_name}") + else: + raise e if legend_title is not None: graph.legend.set_title(title=legend_title) else: @@ -154,9 +154,9 @@ def cat_plot( else: pass if xlabels is not None: - graph.set_xlabels(xlabels) + graph.set_xlabels(xlabels) if ylabels is not None: - graph.set_ylabels(ylabels) + graph.set_ylabels(ylabels) graph.set_xticklabels(graph.axes.flat[-1].get_xticklabels(), rotation=rotation) if x_lim is not None: graph.set(xlim=x_lim) @@ -169,18 +169,21 @@ def cat_plot( plt.clf() logger.info(f"Saved graph to {folder / file}") + def digitize_cols(data, digitize): - if isinstance(digitize,str): - digitize = [digitize] + if isinstance(digitize, str): + digitize = [digitize] else: - assert isinstance(digitize, list), "digitize must be a list of columns to digitize" + assert isinstance( + digitize, list + ), "digitize must be a list of columns to digitize" if len(digitize) > 0: - for col in digitize: - min_ = data[col].min() - max_ = data[col].max() - NUMBER_OF_BINS = 10 - bins = np.linspace(min_, max_, NUMBER_OF_BINS) - data[col] = np.digitize(data[col], bins)/NUMBER_OF_BINS + for col in digitize: + min_ = data[col].min() + max_ = data[col].max() + NUMBER_OF_BINS = 10 + bins = np.linspace(min_, max_, NUMBER_OF_BINS) + data[col] = np.digitize(data[col], bins) / NUMBER_OF_BINS return data @@ -445,8 +448,6 @@ def plots_main(args): logger.info(f"Creating folder {FOLDER}") FOLDER.mkdir(parents=True, exist_ok=True) - - line_plot_list = big_dict.get("line_plot", []) for dict_ in line_plot_list: line_plot(data, **dict_, folder=FOLDER, filetype=IMAGE_FILETYPE) @@ -459,6 +460,7 @@ def plots_main(args): for dict_ in cat_plot_list: cat_plot(data, **dict_, folder=FOLDER, filetype=IMAGE_FILETYPE) + if __name__ == "__main__": args = plots_parser.parse_args() plots_main(args) diff --git a/examples/gzip/batchMixin.py b/examples/gzip/batchMixin.py index 9ec7a573..73751683 100644 --- a/examples/gzip/batchMixin.py +++ b/examples/gzip/batchMixin.py @@ -38,7 +38,6 @@ def __init__( if self.nb_epoch > 1: self.fit = self.epoch_fit(self.fit) - def epoch_fit(self, fit_func): def wrapper(*args, **kwargs): X, y = args @@ -57,7 +56,9 @@ def wrapper(*args, **kwargs): score = self.score(X, y) train_scores.append(score) if X_test is not None: - assert len(X_test) == len(y_test), "X_test and y_test must have the same length" + assert len(X_test) == len( + y_test + ), "X_test and y_test must have the same length" test_score = self.score(X_test, y_test) test_scores.append(test_score) logger.info(f"Train score: {score}, Test score: {test_score}") @@ -67,9 +68,11 @@ def wrapper(*args, **kwargs): if Path(log_file).exists(): if i == 0: # rotate the log file by appending a timestamp before the extension - rotated_log_name = log_file.replace(".csv", f"_{int(time())}.csv") + rotated_log_name = log_file.replace( + ".csv", f"_{int(time())}.csv" + ) # rename the log file - Path(log_file).rename(rotated_log_name) + Path(log_file).rename(rotated_log_name) with open(log_file, "w") as f: f.write("epoch, train_score,") if "test_score" in locals(): @@ -79,7 +82,7 @@ def wrapper(*args, **kwargs): f.write(f"{score},") if "test_score" in locals(): f.write(f" {test_score},") - f.write("\n") + f.write("\n") else: with open(log_file, "a") as f: # assuming csv format @@ -100,6 +103,7 @@ def wrapper(*args, **kwargs): f.write(f"{test_score},") f.write("\n") import plotext as plt + plt.plot(train_scores, label="Train score") if X_test is not None: plt.plot(test_scores, label="Test score") @@ -107,6 +111,7 @@ def wrapper(*args, **kwargs): plt.ylabel("Accuracy") plt.title("Scores") plt.show() + return wrapper def batched_fit(self, fit_func): @@ -119,14 +124,20 @@ def wrapper(*args, **kwargs): f"Number of batches ({n_batches}) is greater than max_batches ({self.max_batches}). Using max_batches.", ) n_batches = self.max_batches - for i in tqdm(range(n_batches), total=n_batches, desc="Fitting batches", leave=False, position=1): + for i in tqdm( + range(n_batches), + total=n_batches, + desc="Fitting batches", + leave=False, + position=1, + ): start = i * self.batch_size end = (i + 1) * self.batch_size X_batch = X_train[start:end] y_batch = y_train[start:end] fit_func(X_batch, y_batch, **kwargs) + return wrapper - def batched_find_best_samples(self, func): def wrapper(method, **kwargs): @@ -163,8 +174,6 @@ def wrapper(method, **kwargs): return wrapper - - if __name__ == "__main__": logging.basicConfig(level=logging.INFO) big_X = [] diff --git a/examples/gzip/conf/condensed_plots.yaml b/examples/gzip/conf/condensed_plots.yaml index b2a19969..de1d9e92 100644 --- a/examples/gzip/conf/condensed_plots.yaml +++ b/examples/gzip/conf/condensed_plots.yaml @@ -85,4 +85,4 @@ cat_plot: - k-NN xlabels: "Condensing Method" ylabels: "Prediction Time" - legend_title : "Sample Ratio" \ No newline at end of file + legend_title : "Sample Ratio" diff --git a/examples/gzip/conf/merged_plots.yaml b/examples/gzip/conf/merged_plots.yaml index 45ac1a9f..5226c4bd 100644 --- a/examples/gzip/conf/merged_plots.yaml +++ b/examples/gzip/conf/merged_plots.yaml @@ -369,4 +369,4 @@ line_plot: bbox_to_anchor : [1.05, .5] loc: center left prop: {"size" : 12} - y_scale: log \ No newline at end of file + y_scale: log diff --git a/examples/gzip/gzip_classifier.py b/examples/gzip/gzip_classifier.py index 08d49366..e3f14866 100644 --- a/examples/gzip/gzip_classifier.py +++ b/examples/gzip/gzip_classifier.py @@ -47,8 +47,9 @@ from typing import Literal from batchMixin import BatchedMixin -warnings.simplefilter(action='ignore', category=FutureWarning) -warnings.simplefilter(action='ignore', category=UserWarning) + +warnings.simplefilter(action="ignore", category=FutureWarning) +warnings.simplefilter(action="ignore", category=UserWarning) logger = logging.getLogger(__name__) @@ -135,7 +136,17 @@ def ncd( **string_metrics, } -all_condensers = ["sum", "mean", "medoid", "random", "knn", "svc", "hardness", "nearmiss"] +all_condensers = [ + "sum", + "mean", + "medoid", + "random", + "knn", + "svc", + "hardness", + "nearmiss", +] + def _calculate_string_distance(x1, x2, method): x1 = str(x1) @@ -260,7 +271,7 @@ def _calculate_rectangular_distance_matrix( desc="Calculating asymmetric distance matrix.", leave=False, dynamic_ncols=True, - position=2 + position=2, ) Cx1 = Cx1 if Cx1 is not None else [None] * len(x1) Cx2 = Cx2 if Cx2 is not None else [None] * len(x2) @@ -424,9 +435,13 @@ def _prepare_training_matrix(self, n_jobs=-1): n_jobs=n_jobs, ) self._save_distance_matrix(self.distance_matrix, distance_matrix) - elif isinstance(self.distance_matrix, np.ndarray) and len(self.distance_matrix) == len(self.X_): + elif isinstance(self.distance_matrix, np.ndarray) and len( + self.distance_matrix + ) == len(self.X_): distance_matrix = self.distance_matrix - elif isinstance(self.distance_matrix, np.ndarray) and len(self.distance_matrix) != len(self.X_): + elif isinstance(self.distance_matrix, np.ndarray) and len( + self.distance_matrix + ) != len(self.X_): distance_matrix = self._calculate_distance_matrix( self.X_, self.X_, @@ -446,9 +461,15 @@ def _prepare_training_matrix(self, n_jobs=-1): raise ValueError( f"distance_matrix must be a path to a numpy file or a numpy array, got {type(self.distance_matrix)}", ) - assert distance_matrix.shape[0] == distance_matrix.shape[1], f"Distance matrix must be square, got {distance_matrix.shape}" - assert len(self.X_) == distance_matrix.shape[0], f"Expected len(X) == {distance_matrix.shape[0]}" - assert len(self.y_) == distance_matrix.shape[0], f"Expected len(y) == {distance_matrix.shape[0]}" + assert ( + distance_matrix.shape[0] == distance_matrix.shape[1] + ), f"Distance matrix must be square, got {distance_matrix.shape}" + assert ( + len(self.X_) == distance_matrix.shape[0] + ), f"Expected len(X) == {distance_matrix.shape[0]}" + assert ( + len(self.y_) == distance_matrix.shape[0] + ), f"Expected len(y) == {distance_matrix.shape[0]}" return distance_matrix def _find_best_samples(self, method="medoid", n_jobs=-1): @@ -542,7 +563,7 @@ def _find_best_samples(self, method="medoid", n_jobs=-1): indices = y.index[: m * n_classes] else: raise NotImplementedError(f"Method {method} not supported") - + if len(indices) > len(self.X_): indices = indices[: len(self.X_)] return indices @@ -603,7 +624,7 @@ def fit(self, X: np.ndarray, y: np.ndarray, n_jobs=-1, X_test=None, y_test=None) ) self.distance_matrix = self._prepare_training_matrix(n_jobs=n_jobs) with warnings.catch_warnings(): - warnings.filterwarnings('error') + warnings.filterwarnings("error") try: self.clf_ = self.clf_.fit(self.distance_matrix, self.y_) except DataConversionWarning: @@ -703,7 +724,7 @@ def score(self, X: np.ndarray, y: np.ndarray): class BatchedGzipClassifier(BatchedMixin, GzipClassifier): - + pass @@ -889,7 +910,7 @@ def test_model( alias = model_scorers[model_type] scorer = scorers[alias] start = time.time() - + model.fit(X_train, y_train, X_test=X_test, y_test=y_test) check_is_fitted(model) end = time.time() @@ -1009,11 +1030,11 @@ def main(args: argparse.Namespace): kwarg_args = params.pop("kwargs") # conver list of key-value pairs to dictionary kwarg_args = dict([arg.split("=") for arg in kwarg_args]) - for k,v in kwarg_args.items(): + for k, v in kwarg_args.items(): # Typecast the values to the correct type try: kwarg_args[k] = eval(v) - except: #noqa E722 + except: # noqa E722 kwarg_args[k] = v params.update(**kwarg_args) X = np.array(X) if not isinstance(X, np.ndarray) else X @@ -1022,23 +1043,82 @@ def main(args: argparse.Namespace): parser = argparse.ArgumentParser() -parser.add_argument("--model_type", type=str, default="knn", help="The type of model to use. Choices are knn, logistic, svc") -parser.add_argument("--symmetric", action="store_true", help="If True, the distance matrix will be treated as symmetric. Default is False.") -parser.add_argument("--metric", type=str, default="gzip", choices=all_metrics, help=f"The metric used to calculate the distance between samples. Choices are {list(all_metrics.keys())}") -parser.add_argument("--m", type=int, default=-1, help="The number of best samples to use. If -1, all samples will be used.") -parser.add_argument("--sampling_method", type=str, default="random", help=f"The method used to select the best training samples. Choices are {all_condensers}") -parser.add_argument("--distance_matrix", type=str, default=None, help="The path to a numpy array representing the distance matrix. If a path is provided, the file will be loaded. Default is None.") -parser.add_argument("--dataset", type=str, default="kdd_nsl", help="The dataset to use. Choices are 20newsgroups, kdd_nsl, make_classification, truthseeker, sms-spam, ddos.") -parser.add_argument("--train_size", type=int, default=100, help="The number of samples to use for training. Default is 100.") -parser.add_argument("--test_size", type=int, default=100, help="The number of samples to use for testing. Default is 100.") -parser.add_argument("--optimizer", type=str, default="accuracy", help="The metric to use for optimization. Default is accuracy.") -parser.add_argument("--precompressed", action="store_true", help="If True, the data will be precompressed using gzip.") -parser.add_argument("--random_state", type=int, default=42, help="The random state to use. Default is 42.") -parser.add_argument("kwargs", nargs=argparse.REMAINDER, help="Additional keyword arguments to pass to the GzipClassifier") - - - - +parser.add_argument( + "--model_type", + type=str, + default="knn", + help="The type of model to use. Choices are knn, logistic, svc", +) +parser.add_argument( + "--symmetric", + action="store_true", + help="If True, the distance matrix will be treated as symmetric. Default is False.", +) +parser.add_argument( + "--metric", + type=str, + default="gzip", + choices=all_metrics, + help=f"The metric used to calculate the distance between samples. Choices are {list(all_metrics.keys())}", +) +parser.add_argument( + "--m", + type=int, + default=-1, + help="The number of best samples to use. If -1, all samples will be used.", +) +parser.add_argument( + "--sampling_method", + type=str, + default="random", + help=f"The method used to select the best training samples. Choices are {all_condensers}", +) +parser.add_argument( + "--distance_matrix", + type=str, + default=None, + help="The path to a numpy array representing the distance matrix. If a path is provided, the file will be loaded. Default is None.", +) +parser.add_argument( + "--dataset", + type=str, + default="kdd_nsl", + help="The dataset to use. Choices are 20newsgroups, kdd_nsl, make_classification, truthseeker, sms-spam, ddos.", +) +parser.add_argument( + "--train_size", + type=int, + default=100, + help="The number of samples to use for training. Default is 100.", +) +parser.add_argument( + "--test_size", + type=int, + default=100, + help="The number of samples to use for testing. Default is 100.", +) +parser.add_argument( + "--optimizer", + type=str, + default="accuracy", + help="The metric to use for optimization. Default is accuracy.", +) +parser.add_argument( + "--precompressed", + action="store_true", + help="If True, the data will be precompressed using gzip.", +) +parser.add_argument( + "--random_state", + type=int, + default=42, + help="The random state to use. Default is 42.", +) +parser.add_argument( + "kwargs", + nargs=argparse.REMAINDER, + help="Additional keyword arguments to pass to the GzipClassifier", +) if __name__ == "__main__": diff --git a/examples/gzip/objective.py b/examples/gzip/objective.py index 013904a3..1bdb2462 100644 --- a/examples/gzip/objective.py +++ b/examples/gzip/objective.py @@ -1,12 +1,12 @@ - import optuna from gzip_classifier import all_metrics + def objective(trial: optuna.Trial): model_type = trial.suggest_categorical("model_type", ["knn", "logistic", "svc"]) metric = trial.suggest_categorical("model.init.metric", all_metrics.keys()) if model_type == "knn": - k = trial.suggest_categorical("k", [3,5, 7, 9, 11]) + k = trial.suggest_categorical("k", [3, 5, 7, 9, 11]) weights = trial.suggest_categorical("weights", ["uniform", "distance"]) algorithm = trial.suggest_categorical("algorithm", ["brute"]) params = {"k": k, "weights": weights, "algorithm": algorithm} @@ -16,20 +16,38 @@ def objective(trial: optuna.Trial): penalty = trial.suggest_categorical("penalty", ["l1", "l2", None]) fit_intercept = trial.suggest_categorical("fit_intercept", [True, False]) class_weight = trial.suggest_categorical("class_weight", ["balanced", None]) - params = {"C": C, "solver": solver, "penalty": penalty, "fit_intercept": fit_intercept, "class_weight": class_weight} + params = { + "C": C, + "solver": solver, + "penalty": penalty, + "fit_intercept": fit_intercept, + "class_weight": class_weight, + } elif model_type == "svc": C = trial.suggest_loguniform("C", 1e-10, 1e10) - kernel = trial.suggest_categorical("kernel", ["linear", "rbf", "poly", "sigmoid"]) + kernel = trial.suggest_categorical( + "kernel", ["linear", "rbf", "poly", "sigmoid"] + ) class_weight = trial.suggest_categorical("class_weight", ["balanced", None]) if kernel == "poly": degree = trial.suggest_int("degree", 2, 5) - params = {"C": C, "kernel": kernel, "degree": degree, "class_weight": class_weight} + params = { + "C": C, + "kernel": kernel, + "degree": degree, + "class_weight": class_weight, + } elif kernel == "rbf": gamma = trial.suggest_categorical("gamma", ["auto", "scale"]) - params = {"C": C, "kernel": kernel, "gamma": gamma, "class_weight": class_weight} + params = { + "C": C, + "kernel": kernel, + "gamma": gamma, + "class_weight": class_weight, + } else: params = {"C": C, "kernel": kernel, "class_weight": class_weight} else: raise NotImplementedError(f"Model type {model_type} not supported.") params["metric"] = metric - params['model_name'] = f"{metric}_{model_type}" \ No newline at end of file + params["model_name"] = f"{metric}_{model_type}" From 76f77ee33a9328a12c922aadb6f41e92a3cd34fd Mon Sep 17 00:00:00 2001 From: Charlie Meyers Date: Tue, 30 Jul 2024 20:20:32 +0200 Subject: [PATCH 35/35] linting --- deckard/layers/plots.py | 3 ++- examples/gzip/batchMixin.py | 5 +++-- examples/gzip/gzip_classifier.py | 4 ++-- examples/gzip/objective.py | 3 ++- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/deckard/layers/plots.py b/deckard/layers/plots.py index ab584351..6e37ce7f 100644 --- a/deckard/layers/plots.py +++ b/deckard/layers/plots.py @@ -175,7 +175,8 @@ def digitize_cols(data, digitize): digitize = [digitize] else: assert isinstance( - digitize, list + digitize, + list, ), "digitize must be a list of columns to digitize" if len(digitize) > 0: for col in digitize: diff --git a/examples/gzip/batchMixin.py b/examples/gzip/batchMixin.py index 73751683..d21098a4 100644 --- a/examples/gzip/batchMixin.py +++ b/examples/gzip/batchMixin.py @@ -57,7 +57,7 @@ def wrapper(*args, **kwargs): train_scores.append(score) if X_test is not None: assert len(X_test) == len( - y_test + y_test, ), "X_test and y_test must have the same length" test_score = self.score(X_test, y_test) test_scores.append(test_score) @@ -69,7 +69,8 @@ def wrapper(*args, **kwargs): if i == 0: # rotate the log file by appending a timestamp before the extension rotated_log_name = log_file.replace( - ".csv", f"_{int(time())}.csv" + ".csv", + f"_{int(time())}.csv", ) # rename the log file Path(log_file).rename(rotated_log_name) diff --git a/examples/gzip/gzip_classifier.py b/examples/gzip/gzip_classifier.py index e3f14866..fb4aef27 100644 --- a/examples/gzip/gzip_classifier.py +++ b/examples/gzip/gzip_classifier.py @@ -436,11 +436,11 @@ def _prepare_training_matrix(self, n_jobs=-1): ) self._save_distance_matrix(self.distance_matrix, distance_matrix) elif isinstance(self.distance_matrix, np.ndarray) and len( - self.distance_matrix + self.distance_matrix, ) == len(self.X_): distance_matrix = self.distance_matrix elif isinstance(self.distance_matrix, np.ndarray) and len( - self.distance_matrix + self.distance_matrix, ) != len(self.X_): distance_matrix = self._calculate_distance_matrix( self.X_, diff --git a/examples/gzip/objective.py b/examples/gzip/objective.py index 1bdb2462..39e4185e 100644 --- a/examples/gzip/objective.py +++ b/examples/gzip/objective.py @@ -26,7 +26,8 @@ def objective(trial: optuna.Trial): elif model_type == "svc": C = trial.suggest_loguniform("C", 1e-10, 1e10) kernel = trial.suggest_categorical( - "kernel", ["linear", "rbf", "poly", "sigmoid"] + "kernel", + ["linear", "rbf", "poly", "sigmoid"], ) class_weight = trial.suggest_categorical("class_weight", ["balanced", None]) if kernel == "poly":