Repository: dpuenteramirez/Semisupervised-learning-and-instance-selection-methods (language: python)

Issue:
Prepare script to visualize the results obtained from the hypotheses
Due to the necessity to visualize the data retrived from the experimentation. This issue is the next step from #78 
Create script for hypothesis validation
The aim of the script is to target some datasets already explored in the literature combining the instance selection methods and self-training.
Create script for hypothesis validation
The aim of the script is to target some datasets already explored in the literature combining the instance selection methods and self-training.
Create script for hypothesis validation
The aim of the script is to target some datasets already explored in the literature combining the instance selection methods and self-training.
Prepare script to visualize the results obtained from the hypotheses
Due to the necessity to visualize the data retrived from the experimentation. This issue is the next step from #78 


Discussion / hints:

Fix patch:
diff --git a/hypothesis/__init__.py b/hypothesis/__init__.py
new file mode 100644
index 0000000..b5f0084
--- /dev/null
+++ b/hypothesis/__init__.py
@@ -0,0 +1,5 @@
+#!/usr/bin/env python
+# -*- coding:utf-8 -*-
+# @Filename:    __init__.py.py
+# @Author:      Daniel Puente Ramírez
+# @Time:        23/1/22 17:09
diff --git a/hypothesis/results_visualization.py b/hypothesis/results_visualization.py
new file mode 100644
index 0000000..3bf229a
--- /dev/null
+++ b/hypothesis/results_visualization.py
@@ -0,0 +1,92 @@
+#!/usr/bin/env python
+# -*- coding:utf-8 -*-
+# @Filename:    results_visualization.py
+# @Author:      Daniel Puente Ramírez
+# @Time:        25/1/22 16:01
+
+import numpy as np
+import pandas as pd
+from os import walk
+import matplotlib.pyplot as plt
+from os.path import join
+from utils.reading_tests import DatasetResult
+
+if __name__ == '__main__':
+    folder = join('.', 'tests')
+    training_method = 'self_training'
+    results_found = next(walk(folder), (None, None, []))[2]
+    results_found.sort()
+
+    working_results = [r for r in results_found if training_method in r]
+    if len(working_results) > 2:
+        print('Select the date to visualize:')
+        i = 0
+        for result in working_results:
+            print(result)
+            if i % 2 == 0:
+                print(f'{i}.', result.split('.')[0].split('_')[-1])
+                i += 1
+            else:
+                continue
+        date = int(input(f'Select [0-{len(working_results)}]')) * 2
+    else:
+        date = 0
+    pre_post_dict = {'post': pd.read_csv(join(folder, working_results[date])),
+                    'pre': pd.read_csv(join(folder, working_results[date + 1]))
+                    }
+
+    if len(pre_post_dict['pre']) != len(pre_post_dict['post']):
+        print('Files items do not match. First different pair:\n')
+        print('\tpre\t\tpost')
+        for i in range(len(pre_post_dict['pre'])):
+            pre = pre_post_dict['pre'].iloc[[i]].to_numpy()
+            post = pre_post_dict['post'].iloc[[i]].to_numpy()
+
+            if np.array_equal(pre[0][:3], post[0][:3]):
+                continue
+            else:
+                print(i, pre[0][:3], post[0][:3])
+                break
+
+    datasets_names = pre_post_dict['pre'].dataset.unique()
+    results_dict = dict.fromkeys(datasets_names)
+
+    for name in results_dict.keys():
+        rows_pre = pre_post_dict['pre'].loc[pre_post_dict['pre']['dataset'] ==
+                                            name]
+        rows_post = pre_post_dict['post'].loc[pre_post_dict['post'][
+                                                  'dataset'] == name]
+        precision = rows_pre['percent labeled'].unique()
+        n_iterations = rows_pre['iteration'].max()
+        results_dict[name] = {
+            'pre': DatasetResult(name, precision, n_iterations,
+                                 rows_pre['f1-score'].to_list(),
+                                 rows_pre['mean squared error'].to_list(),
+                                 rows_pre['accuracy score'].to_list()
+                                 ),
+            'post': DatasetResult(name, precision, n_iterations,
+                                  rows_post['f1-score'].to_list(),
+                                  rows_post['mean squared error'].to_list(),
+                                  rows_post['accuracy score'].to_list()
+                                  )
+        }
+
+    f1_mean_pre = np.array([x['pre'].f1 for x in results_dict.values()])
+    mse_mean_pre = np.array([x['pre'].mse for x in results_dict.values()])
+    acc_mean_pre = np.array([x['pre'].acc for x in results_dict.values()])
+    f1_mean_post = np.array([x['post'].f1 for x in results_dict.values()])
+    mse_mean_post = np.array([x['post'].mse for x in results_dict.values()])
+    acc_mean_post = np.array([x['post'].acc for x in results_dict.values()])
+
+    n_groups = len(f1_mean_post[0])
+    x = np.arange((len(f1_mean_pre[0])))
+    bar_width = 0.35
+    for index, (pre, post) in enumerate(zip(f1_mean_pre, f1_mean_post)):
+        plt.bar(x, pre, width=bar_width, label='Before Filtering')
+        plt.bar(x+bar_width, post, width=bar_width, label='After Filtering')
+        plt.legend(loc='best')
+        plt.xticks(x+bar_width, precision)
+        plt.ylabel('Value')
+        plt.xlabel('% labeled')
+        plt.title(f'Dataset {datasets_names[index]} - f1-score')
+        plt.show()
diff --git a/hypothesis/self_training_validation.py b/hypothesis/self_training_validation.py
new file mode 100644
index 0000000..801def9
--- /dev/null
+++ b/hypothesis/self_training_validation.py
@@ -0,0 +1,182 @@
+#!/usr/bin/env python
+# -*- coding:utf-8 -*-
+# @Filename:    self_training_validation.py
+# @Author:      Daniel Puente Ramírez
+# @Time:        23/1/22 17:09
+
+import csv
+import logging
+import os
+import sys
+import time
+from math import floor
+from os import walk
+
+import numpy as np
+from sklearn.metrics import f1_score, mean_squared_error, accuracy_score
+from sklearn.semi_supervised import SelfTrainingClassifier
+from sklearn.svm import SVC
+from sklearn.utils import Bunch
+
+time_str = time.strftime("%Y%m%d-%H%M%S")
+file_name = 'hyp_self_training'
+csv_path_before = os.path.join('tests', file_name + '_pre_' + time_str + '.csv')
+csv_path_after = os.path.join('tests', file_name + '_post_' + time_str + '.csv')
+logging.basicConfig(level=logging.INFO,
+                    format="%(asctime)s [%(levelname)s] %(message)s",
+                    handlers=[logging.FileHandler(
+                        os.path.join('..', 'logs', '_'.join(
+                            [file_name, time_str]))),
+                        logging.StreamHandler(sys.stdout)]
+                    )
+
+current = os.path.dirname(os.path.realpath(__file__))
+parent = os.path.dirname(current)
+sys.path.append(parent)
+sys.path.append(os.path.join(parent, "Instance Selection Algorithms"))
+
+from utils.arff2dataset import arff_data
+from ENN import *
+
+
+def working_datasets(folder):
+    if os.path.isdir(folder):
+        logging.info(f'Looking up for datasets in {folder}')
+    else:
+        logging.error(f'{folder} does not exist')
+
+    datasets_found = next(walk(folder), (None, None, []))[2]
+    datasets_found.sort()
+    logging.info(f'Founded {len(datasets_found)} - {datasets_found}')
+
+    header = ['dataset', 'percent labeled', 'iteration', 'f1-score',
+              'mean squared error', 'accuracy score']
+    for csv_path in [csv_path_before, csv_path_after]:
+        with open(csv_path, 'w') as save:
+            w = csv.writer(save)
+            w.writerow(header)
+            save.close()
+
+    datasets = dict.fromkeys(datasets_found)
+    for dataset in datasets_found:
+        bunch = arff_data(os.path.join(folder, dataset))
+        datasets[dataset] = tuple([bunch['data'], bunch['target']])
+    logging.debug('Datasets ready to be used')
+    return datasets
+
+
+def training_model(X, y_train, x_test, y_true, dataset, precision, itera, pre):
+    logging.debug('\t\tCreating model')
+    svc = SVC(probability=True, gamma="auto")
+    model = SelfTrainingClassifier(svc)
+    logging.debug('\t\tFitting model')
+    model.fit(X, y_train)
+    logging.debug('\t\tPredicting')
+    y_pred = model.predict(x_test)
+    y_proba = model.predict_proba(x_test)
+    f1 = f1_score(y_true=y_true, y_pred=y_pred, average="weighted")
+    mse = mean_squared_error(y_true=y_true, y_pred=y_pred)
+    acc = accuracy_score(y_true=y_true, y_pred=y_pred)
+    logging.info(f'\t{"pre" if pre else "post"} f1 {f1:.2f} - mse {mse:.2f} - '
+                 f'acc {acc:.2f}')
+
+    with open(csv_path_before if pre else csv_path_after, 'a') as save:
+        w = csv.writer(save)
+        w.writerow([dataset, precision, itera + 1, f1, mse, acc])
+        save.close()
+
+    return y_proba
+
+
+def self_training_hypothesis(datasets):
+    logging.info('Starting hypothesis testing')
+    for dataset, (X, y) in datasets.items():
+        logging.info(f'Current dataset: {dataset} - Total samples: {len(X)}')
+        if len(X) != len(set([tuple(i) for i in X])):
+            logging.warning('\tThe dataset contains repeated samples')
+            repeated_samples = True
+        else:
+            repeated_samples = False
+
+        for precision in precisions:
+            for itera in range(2):
+                logging.info(f'\tprecision {precision} - iter {itera + 1}')
+                unlabeled_indexes = np.random.choice(len(X), floor(len(X) * (
+                        1 - precision)), replace=False)
+                labeled_indexes = [i for i in [*range(len(X))] if i not in
+                                   unlabeled_indexes]
+                y_train = np.copy(y)
+                y_labeled = y[labeled_indexes]
+                y_train[unlabeled_indexes] = -1
+                y_true = y[unlabeled_indexes]
+                x_test = X[unlabeled_indexes]
+                x_train = X[labeled_indexes]
+
+                y_proba = training_model(X, y_train, x_test, y_true, dataset,
+                                         precision, itera, True)
+                logging.debug('\t\tWritten to file before filtering')
+
+                for index0, y_p in enumerate(y_proba):
+                    for index1, y_p1 in enumerate(y_p):
+                        if y_p1 >= 0.75:
+                            y_labeled = np.concatenate((y_labeled, [index1]))
+                            x_train = np.concatenate((x_train,
+                                                      [x_test[index0]]))
+                            break
+
+                try:
+                    assert len(x_train) == len(y_labeled)
+                except AssertionError:
+                    logging.fatal(f'len(x_train) != len(y_labeled) -'
+                                  f' {len(x_train)} != {len(y_labeled)}')
+                    exit(1)
+
+                logging.debug('\t\tFiltering')
+                dataset_filtered = ENN(Bunch(data=x_train, target=y_labeled), 3)
+                logging.debug('\t\tFiltered')
+                x_filtered = dataset_filtered['data']
+
+                unlabeled_x_indexes = []
+                for index0, old_x in enumerate(x_train):
+                    was_in = False
+                    for x_f in x_filtered:
+                        if np.array_equal(old_x, x_f):
+                            was_in = True
+                            break
+                    if not was_in:
+                        unlabeled_x_indexes.append(index0)
+
+                x_removed = x_train[unlabeled_x_indexes]
+
+                for index0, x_value in enumerate(X):
+                    to_be_removed = False
+                    for x_r in x_removed:
+                        if np.array_equal(x_value, x_r):
+                            to_be_removed = True
+                            break
+                    if to_be_removed:
+                        try:
+                            assert y_train[index0] != -1
+                        except AssertionError:
+                            if repeated_samples:
+                                logging.warning('Result might be inconsistent '
+                                                'due to repeated samples')
+                                continue
+                        y_true = np.concatenate((y_true, [y_train[index0]]))
+                        x_test = np.concatenate((x_test, [x_value]))
+                        y_train[index0] = -1
+
+                logging.debug('\t\tDataset ready to train the new model')
+                _ = training_model(X, y_train, x_test, y_true, dataset,
+                                   precision, itera, False)
+                logging.debug('\t\tWritten to file after filtering')
+                logging.info('\n\n')
+
+
+if __name__ == "__main__":
+    logging.info('--- Starting ---')
+    precisions = [0.01, 0.05, 0.1, 0.15, 0.2, 0.25]
+    hyp_datasets = working_datasets(folder=os.path.join('..', 'datasets',
+                                                        'hypothesis'))
+    self_training_hypothesis(hyp_datasets)
+    logging.info('--- Process completed ---')


Test patch:
diff --git a/hypothesis/tests/hyp_self_training_post_20220124-191715.csv b/hypothesis/tests/hyp_self_training_post_20220124-191715.csv
new file mode 100644
index 0000000..0977319
--- /dev/null
+++ b/hypothesis/tests/hyp_self_training_post_20220124-191715.csv
@@ -0,0 +1,253 @@
+dataset,percent labeled,iteration,f1-score,mean squared error,accuracy score
+03_contraceptive_norm.arff,0.01,1,0.08276656581566552,0.7748299319727892,0.22517006802721087
+03_contraceptive_norm.arff,0.01,2,,,
+03_contraceptive_norm.arff,0.05,1,,,
+03_contraceptive_norm.arff,0.05,2,0.24951267056530216,1.6385041551246537,0.42105263157894735
+03_contraceptive_norm.arff,0.1,1,0.25147785016397806,1.6327526132404182,0.4229965156794425
+03_contraceptive_norm.arff,0.1,2,0.2342847560671038,1.679886685552408,0.40580736543909346
+03_contraceptive_norm.arff,0.15,1,0.2610561526370907,1.6560922855082914,0.40807498197548664
+03_contraceptive_norm.arff,0.15,2,0.23626537071884327,1.685466377440347,0.4078091106290672
+03_contraceptive_norm.arff,0.2,1,0.23800601627295778,1.733430444282593,0.3874726875455208
+03_contraceptive_norm.arff,0.2,2,0.23852604672902628,1.832116788321168,0.3635036496350365
+03_contraceptive_norm.arff,0.25,1,0.21619518909598243,1.715261958997722,0.38724373576309795
+03_contraceptive_norm.arff,0.25,2,0.298049837594966,1.827252419955324,0.37230081906180196
+03_contraceptive_norm.arff,0.5,1,0.32437857246153545,1.6166807076663858,0.3917438921651222
+03_contraceptive_norm.arff,0.5,2,0.18295443661787886,1.7701543739279588,0.3516295025728988
+04_yeast_norm.arff,0.01,1,,,
+04_yeast_norm.arff,0.01,2,,,
+04_yeast_norm.arff,0.05,1,0.14527698556736668,26.37935748462064,0.3082706766917293
+04_yeast_norm.arff,0.05,2,,,
+04_yeast_norm.arff,0.1,1,0.14335619180452777,26.476386036960985,0.3059548254620123
+04_yeast_norm.arff,0.1,2,0.13405311209039514,26.90041782729805,0.2945682451253482
+04_yeast_norm.arff,0.15,1,0.23257814360676574,24.152219873150106,0.34249471458773784
+04_yeast_norm.arff,0.15,2,0.01984929520294543,10.037947997189038,0.10470836261419536
+04_yeast_norm.arff,0.2,1,0.13582958834064027,26.80450070323488,0.2967651195499297
+04_yeast_norm.arff,0.2,2,0.12364841025256734,17.425035360678926,0.2814710042432815
+04_yeast_norm.arff,0.25,1,0.11748305062111977,17.77745872218234,0.27351040918880115
+04_yeast_norm.arff,0.25,2,0.3044802909448083,18.91178546224418,0.3705010585744531
+04_yeast_norm.arff,0.5,1,0.40881083419486003,18.066511987625677,0.46790409899458624
+04_yeast_norm.arff,0.5,2,0.3592781939761932,19.003021148036254,0.44410876132930516
+05_winequality-red_norm.arff,0.01,1,,,
+05_winequality-red_norm.arff,0.01,2,0.22599377668133666,0.7865662272441933,0.3973634651600753
+05_winequality-red_norm.arff,0.05,1,0.4176898634540815,0.7736808645899556,0.46853146853146854
+05_winequality-red_norm.arff,0.05,2,0.3583884359694139,0.916243654822335,0.4517766497461929
+05_winequality-red_norm.arff,0.1,1,0.4211146779555326,0.6796116504854369,0.5042071197411003
+05_winequality-red_norm.arff,0.1,2,0.22705736628222722,0.7807865892972276,0.3984526112185687
+05_winequality-red_norm.arff,0.15,1,0.42842119013392554,0.7072691552062869,0.48264571054354943
+05_winequality-red_norm.arff,0.15,2,0.43956444728426125,0.6742323097463284,0.4893190921228304
+05_winequality-red_norm.arff,0.2,1,0.21005653402913674,1.1452054794520548,0.38082191780821917
+05_winequality-red_norm.arff,0.2,2,0.2155445414064509,1.141877998629198,0.3865661411925977
+05_winequality-red_norm.arff,0.25,1,0.4397618727791553,0.6359223300970874,0.515256588072122
+05_winequality-red_norm.arff,0.25,2,0.22274840384981504,0.8148409893992933,0.38798586572438165
+05_winequality-red_norm.arff,0.5,1,0.4128573751352794,0.6780561883067577,0.49278663629460895
+05_winequality-red_norm.arff,0.5,2,0.4129308983765521,0.669511249030256,0.4887509697439876
+07_titanic_norm.arff,0.01,1,0.5456977757979448,0.32370472260430994,0.6762952773956901
+07_titanic_norm.arff,0.01,2,0.5455064953324997,0.3238532110091743,0.6761467889908257
+07_titanic_norm.arff,0.05,1,0.5834410220081548,0.32461977186311786,0.6753802281368821
+07_titanic_norm.arff,0.05,2,0.7504206381773211,0.2299618320610687,0.7700381679389313
+07_titanic_norm.arff,0.1,1,0.7572056918146068,0.22522522522522523,0.7747747747747747
+07_titanic_norm.arff,0.1,2,0.7597936089701753,0.22611305652826413,0.7738869434717359
+07_titanic_norm.arff,0.15,1,0.7641232836421616,0.222397476340694,0.777602523659306
+07_titanic_norm.arff,0.15,2,0.7708920686487395,0.2168164992067689,0.7831835007932311
+07_titanic_norm.arff,0.2,1,0.7535519705536051,0.231859410430839,0.768140589569161
+07_titanic_norm.arff,0.2,2,0.7473946746236606,0.23172804532577904,0.7682719546742209
+07_titanic_norm.arff,0.25,1,0.7584167913072378,0.23372781065088757,0.7662721893491125
+07_titanic_norm.arff,0.25,2,0.7749513067898718,0.21256038647342995,0.7874396135265701
+07_titanic_norm.arff,0.5,1,0.7433901292345173,0.23792486583184258,0.7620751341681574
+07_titanic_norm.arff,0.5,2,0.7502114915163809,0.2359855334538879,0.7640144665461122
+08_segment_norm.arff,0.01,1,0.09503622777699845,9.019497400346621,0.2179376083188908
+08_segment_norm.arff,0.01,2,,,
+08_segment_norm.arff,0.05,1,0.31772137836140313,2.271572492334647,0.42093736311870344
+08_segment_norm.arff,0.05,2,0.1758367337167071,3.470357454228422,0.27550130775937226
+08_segment_norm.arff,0.1,1,0.4069914515280579,4.433333333333334,0.5017543859649123
+08_segment_norm.arff,0.1,2,0.12893758683412068,10.540361711513013,0.27657697397441555
+08_segment_norm.arff,0.15,1,0.1611953088516216,3.334069818824569,0.25143614670790987
+08_segment_norm.arff,0.15,2,0.1648426698831832,9.98715108551174,0.29641116526362427
+08_segment_norm.arff,0.2,1,0.3207660043944873,5.744888888888889,0.4235555555555556
+08_segment_norm.arff,0.2,2,0.36760083741554306,5.678217821782178,0.459045904590459
+08_segment_norm.arff,0.25,1,0.3223067257524736,7.908602150537634,0.4157706093189964
+08_segment_norm.arff,0.25,2,0.7140267306766429,1.9643662607126748,0.747406405051872
+08_segment_norm.arff,0.5,1,0.5127029452718408,5.83641404805915,0.5679297597042514
+08_segment_norm.arff,0.5,2,0.7641739369397592,1.0723404255319149,0.7858156028368795
+13_winequality-white_norm.arff,0.01,1,0.27737125774106053,0.7989363878093679,0.44814890570668847
+13_winequality-white_norm.arff,0.01,2,0.37016326784554643,0.8328890711502973,0.46155423416034447
+13_winequality-white_norm.arff,0.05,1,0.2778779017356337,0.8028169014084507,0.44863297431648713
+13_winequality-white_norm.arff,0.05,2,0.13156776569526088,1.5752598752598752,0.2914760914760915
+13_winequality-white_norm.arff,0.1,1,0.13386874965619672,1.5689727463312368,0.2943396226415094
+13_winequality-white_norm.arff,0.1,2,0.12483930374497419,1.5950010590976489,0.2829908917602203
+13_winequality-white_norm.arff,0.15,1,0.21123256861058393,1.3906384814495254,0.33088869715271785
+13_winequality-white_norm.arff,0.15,2,0.36710728395205006,0.9128271685052995,0.43845987454034174
+13_winequality-white_norm.arff,0.2,1,0.2659409243876063,0.8253142609449502,0.43714781100996963
+13_winequality-white_norm.arff,0.2,2,0.26110339643352326,0.8303454306952339,0.43244425010931353
+13_winequality-white_norm.arff,0.25,1,0.34837840777639734,0.7686983701719133,0.4643893726278187
+13_winequality-white_norm.arff,0.25,2,0.4127843761741753,0.8022636484687083,0.4869063470927652
+13_winequality-white_norm.arff,0.5,1,0.2782965654544602,0.8404848484848485,0.42109090909090907
+13_winequality-white_norm.arff,0.5,2,0.27131775062101726,0.854726368159204,0.408955223880597
+14_banana_norm.arff,0.01,1,0.2771076535120972,0.5521030693444486,0.44789693065555136
+14_banana_norm.arff,0.01,2,0.4093067220378205,0.55446107217276,0.44553892782724
+14_banana_norm.arff,0.05,1,0.39133921597102844,0.44912959381044487,0.5508704061895551
+14_banana_norm.arff,0.05,2,0.3837352095005669,0.45565689889384825,0.5443431011061518
+14_banana_norm.arff,0.1,1,0.5441642051019479,0.4305057745917961,0.5694942254082039
+14_banana_norm.arff,0.1,2,0.3905775262931299,0.4497816593886463,0.5502183406113537
+14_banana_norm.arff,0.15,1,0.51952968718615,0.4669657422512235,0.5330342577487766
+14_banana_norm.arff,0.15,2,0.3927522542051013,0.44792095512556607,0.5520790448744339
+14_banana_norm.arff,0.2,1,0.5087924263672995,0.40387042490534286,0.5961295750946571
+14_banana_norm.arff,0.2,2,0.6019362491415537,0.3928645941998748,0.6071354058001251
+14_banana_norm.arff,0.25,1,0.4933505115832766,0.5073497622135754,0.4926502377864246
+14_banana_norm.arff,0.25,2,0.5715744362425247,0.38293216630196936,0.6170678336980306
+14_banana_norm.arff,0.5,1,0.5196498662142855,0.4109025456415531,0.5890974543584468
+14_banana_norm.arff,0.5,2,0.474897361989901,0.42468513853904283,0.5753148614609572
+15_phoneme_norm.arff,0.01,1,0.5840779183629374,0.2941942687011537,0.7058057312988463
+15_phoneme_norm.arff,0.01,2,,,
+15_phoneme_norm.arff,0.05,1,0.5760710970989911,0.30030546009927456,0.6996945399007255
+15_phoneme_norm.arff,0.05,2,0.5762955676276065,0.30013381762569297,0.699866182374307
+15_phoneme_norm.arff,0.1,1,0.5665524857273826,0.30760095011876487,0.6923990498812351
+15_phoneme_norm.arff,0.1,2,0.563965461344715,0.3095895816890292,0.6904104183109708
+15_phoneme_norm.arff,0.15,1,0.5535607510886016,0.31761328685667417,0.6823867131433258
+15_phoneme_norm.arff,0.15,2,0.5531269543464666,0.31794871794871793,0.6820512820512821
+15_phoneme_norm.arff,0.2,1,0.5486419625218726,0.3214210192429689,0.678578980757031
+15_phoneme_norm.arff,0.2,2,0.5441806726297778,0.32488282914358757,0.6751171708564124
+15_phoneme_norm.arff,0.25,1,0.5137776389889993,0.34869156788190564,0.6513084321180944
+15_phoneme_norm.arff,0.25,2,0.51817038599056,0.3452274754683318,0.6547725245316681
+15_phoneme_norm.arff,0.5,1,0.4482913581869949,0.4014027515511195,0.5985972484488805
+15_phoneme_norm.arff,0.5,2,0.44327225887201815,0.40553250345781466,0.5944674965421853
+16_page-blocks_norm.arff,0.01,1,0.848925848925849,0.5617044825677919,0.8974358974358975
+16_page-blocks_norm.arff,0.01,2,,,
+16_page-blocks_norm.arff,0.05,1,,,
+16_page-blocks_norm.arff,0.05,2,0.8432730322502696,0.5853565283884534,0.8935194035557255
+16_page-blocks_norm.arff,0.1,1,0.8351555084422827,0.6124171187462327,0.8878842676311031
+16_page-blocks_norm.arff,0.1,2,0.8351555084422827,0.6154309825195902,0.8878842676311031
+16_page-blocks_norm.arff,0.15,1,0.8275441019334479,0.6420741989881956,0.8825885328836425
+16_page-blocks_norm.arff,0.15,2,,,
+16_page-blocks_norm.arff,0.2,1,0.817744242085566,0.6812402409101048,0.8757528440776265
+16_page-blocks_norm.arff,0.2,2,0.8189308359898723,0.6794672586015539,0.8765815760266371
+16_page-blocks_norm.arff,0.25,1,,,
+16_page-blocks_norm.arff,0.25,2,0.8074599687981547,0.7182033096926714,0.8685579196217494
+16_page-blocks_norm.arff,0.5,1,0.7327845881219357,1.0089700996677742,0.8156146179401993
+16_page-blocks_norm.arff,0.5,2,0.7342895513842682,1.0013355592654425,0.81669449081803
+17_texture_norm.arff,0.01,1,0.015051291150848372,26.01346188830271,0.0905948699290522
+17_texture_norm.arff,0.01,2,0.01500910509071458,18.995631598107025,0.0904623225336731
+17_texture_norm.arff,0.05,1,0.063467143111304,20.62805991962002,0.17975886006576544
+17_texture_norm.arff,0.05,2,0.0152700842277346,19.01350118591498,0.090311986863711
+17_texture_norm.arff,0.1,1,0.014701035634897807,19.073869900771776,0.08948915839764793
+17_texture_norm.arff,0.1,2,0.3573925962578297,14.13198900091659,0.4472960586617782
+17_texture_norm.arff,0.15,1,0.04158503970673791,24.7263022271305,0.12313638873550524
+17_texture_norm.arff,0.15,2,0.06482891220255327,31.07308970099668,0.18032484311554078
+17_texture_norm.arff,0.2,1,0.05818870803134837,16.585406609728928,0.1799108800594133
+17_texture_norm.arff,0.2,2,0.060976841577577684,16.47213478985373,0.17885576745047213
+17_texture_norm.arff,0.25,1,0.05577308700452597,22.21797252135165,0.18121054585963609
+17_texture_norm.arff,0.25,2,0.014777551440296901,13.990379278445884,0.08973172987974098
+17_texture_norm.arff,0.5,1,0.6217063896838593,11.857879656160458,0.679847182425979
+17_texture_norm.arff,0.5,2,0.27513648860842893,9.739624786810689,0.37995072958120146
+18_optdigits_norm.arff,0.01,1,0.017402064830460275,29.94869109947644,0.09773123909249563
+18_optdigits_norm.arff,0.01,2,0.08591145205147306,9.855005343783398,0.194335589597435
+18_optdigits_norm.arff,0.05,1,0.0058924409334661434,15.91069492360769,0.05490389354361755
+18_optdigits_norm.arff,0.05,2,0.01720526523602299,12.876147685094745,0.062219183434264504
+18_optdigits_norm.arff,0.1,1,0.07563824953561206,38.01942140400566,0.15749544810843616
+18_optdigits_norm.arff,0.1,2,0.09028099551662312,18.437714170530136,0.20802257609352953
+18_optdigits_norm.arff,0.15,1,0.13412518422364145,27.087594256791654,0.2731122817890714
+18_optdigits_norm.arff,0.15,2,0.17253663221282364,25.991733829303573,0.3143211407315561
+18_optdigits_norm.arff,0.2,1,0.19405392606585226,25.48581218545883,0.3344041117892708
+18_optdigits_norm.arff,0.2,2,0.20216465190779076,13.269591462757356,0.3358844454026086
+18_optdigits_norm.arff,0.25,1,0.2554727474800083,21.595795664960242,0.3952728460951966
+18_optdigits_norm.arff,0.25,2,0.1442898556270382,23.897033158813265,0.28217713787085513
+18_optdigits_norm.arff,0.5,1,0.24930044823055353,23.929337294923137,0.38870946906084486
+18_optdigits_norm.arff,0.5,2,0.2436523224375215,12.560706967213115,0.39190573770491804
+19_satimage_norm.arff,0.01,1,0.05497587380899894,4.446370967741935,0.18010752688172044
+19_satimage_norm.arff,0.01,2,0.032678979206058986,20.919278854865013,0.13625656821888024
+19_satimage_norm.arff,0.05,1,0.28987393597690725,7.414081367267323,0.4472413152517184
+19_satimage_norm.arff,0.05,2,0.33068308156129783,6.721086530383646,0.4765238495286101
+19_satimage_norm.arff,0.1,1,0.23620765211419692,6.761162227602906,0.4
+19_satimage_norm.arff,0.1,2,0.3071236146169553,7.2911022317512915,0.4626254750998928
+19_satimage_norm.arff,0.15,1,0.3489859036476038,6.504828537642886,0.49211667323610564
+19_satimage_norm.arff,0.15,2,0.35804684553772637,6.103291599353796,0.49979806138933763
+19_satimage_norm.arff,0.2,1,0.32314524012780466,6.693647010052855,0.47714789097315785
+19_satimage_norm.arff,0.2,2,0.3793937224449923,6.338750262109457,0.516460473893898
+19_satimage_norm.arff,0.25,1,0.3748274099544888,6.040184807134415,0.5127323519931235
+19_satimage_norm.arff,0.25,2,0.38685309341586877,5.968453586273047,0.5263774912075029
+19_satimage_norm.arff,0.5,1,0.4813128475095034,4.130624278938598,0.6032559928214332
+19_satimage_norm.arff,0.5,2,0.4758809978999097,4.3461189581443564,0.5984190747699883
+20_thyroid_norm.arff,0.01,1,,,
+20_thyroid_norm.arff,0.01,2,,,
+20_thyroid_norm.arff,0.05,1,,,
+20_thyroid_norm.arff,0.05,2,,,
+20_thyroid_norm.arff,0.1,1,,,
+20_thyroid_norm.arff,0.1,2,,,
+20_thyroid_norm.arff,0.15,1,,,
+20_thyroid_norm.arff,0.15,2,,,
+20_thyroid_norm.arff,0.2,1,,,
+20_thyroid_norm.arff,0.2,2,,,
+20_thyroid_norm.arff,0.25,1,,,
+20_thyroid_norm.arff,0.25,2,,,
+20_thyroid_norm.arff,0.5,1,,,
+20_thyroid_norm.arff,0.5,2,,,
+21_ring_norm.arff,0.01,1,0.3875887846109527,1.1564867645683286,0.49031895987279017
+21_ring_norm.arff,0.01,2,0.1769233167207102,1.6044333147838992,0.3449267297347431
+21_ring_norm.arff,0.05,1,0.4078892254135006,0.9941062900111777,0.5055380550757037
+21_ring_norm.arff,0.05,2,0.43968358172238803,0.8807415036045314,0.533264675592173
+21_ring_norm.arff,0.1,1,0.4599211820697199,0.8674882868201264,0.5523528213485435
+21_ring_norm.arff,0.1,2,0.43805265324824116,0.9556151325588322,0.5358951444742329
+21_ring_norm.arff,0.15,1,0.46326067315972624,0.8851294903926483,0.5578529657477026
+21_ring_norm.arff,0.15,2,0.4545800355435575,0.9224782067247821,0.5504358655043586
+21_ring_norm.arff,0.2,1,0.4871004927000613,0.8138888888888889,0.5767777777777777
+21_ring_norm.arff,0.2,2,0.4808253046992215,0.8142384105960265,0.5708609271523178
+21_ring_norm.arff,0.25,1,0.48716569180320235,0.8244662826160624,0.576753642832938
+21_ring_norm.arff,0.25,2,0.5059196561925505,0.7847793351094637,0.592262249507703
+21_ring_norm.arff,0.5,1,0.5367411352682533,0.6981870920957215,0.6111675126903553
+21_ring_norm.arff,0.5,2,0.5647172300246145,0.6650138544553011,0.6359924165086772
+22_twonorm_norm.arff,0.01,1,0.17144249999914593,0.6612368856985091,0.33876311430149086
+22_twonorm_norm.arff,0.01,2,0.5181229907849662,0.8463768115942029,0.6476449275362319
+22_twonorm_norm.arff,0.05,1,0.5378350826083582,0.8290356097100218,0.6640219136677057
+22_twonorm_norm.arff,0.05,2,0.5271660096974868,0.8428837209302326,0.656093023255814
+22_twonorm_norm.arff,0.1,1,0.5387342728202861,0.8047554610477479,0.6649913009858882
+22_twonorm_norm.arff,0.1,2,0.5431892001001171,0.8122873529697676,0.6686108680859337
+22_twonorm_norm.arff,0.15,1,0.5478542138432216,0.8044198895027624,0.6720241084881969
+22_twonorm_norm.arff,0.15,2,0.5493241333305576,0.79317998385795,0.6729217110573043
+22_twonorm_norm.arff,0.2,1,0.5618911144674191,0.7647986541898854,0.6834191988224162
+22_twonorm_norm.arff,0.2,2,0.5663830417233686,0.7679880965033479,0.6863641194600913
+22_twonorm_norm.arff,0.25,1,0.5683623976280227,0.7600217864923747,0.6880174291938997
+22_twonorm_norm.arff,0.25,2,0.5605088721640314,0.7637938408896493,0.682420872540633
+22_twonorm_norm.arff,0.5,1,0.6406974355619887,0.6041067761806982,0.7416837782340863
+22_twonorm_norm.arff,0.5,2,0.6288634969103157,0.6380501015572105,0.7336492890995261
+24_marketing_norm.arff,0.01,1,0.026822859608090915,8.604221251819505,0.12270742358078603
+24_marketing_norm.arff,0.01,2,0.0396002410568083,9.120524017467249,0.11528384279475982
+24_marketing_norm.arff,0.05,1,0.1423574015138271,9.90959706959707,0.2547985347985348
+24_marketing_norm.arff,0.05,2,0.1350088493198205,12.277891654465593,0.2639824304538799
+24_marketing_norm.arff,0.1,1,0.07167188271937049,7.662792408415477,0.17860820950419304
+24_marketing_norm.arff,0.1,2,0.08877505546286489,11.477973568281937,0.14596182085168868
+24_marketing_norm.arff,0.15,1,0.052363956903479794,24.166195085629187,0.17542814594192108
+24_marketing_norm.arff,0.15,2,0.05287311946411172,24.073279714030384,0.17634792969913612
+24_marketing_norm.arff,0.2,1,0.1388254983501758,9.775297843462525,0.2771829286683758
+24_marketing_norm.arff,0.2,2,0.06274511845978394,11.173790442267736,0.12288512911843277
+24_marketing_norm.arff,0.25,1,0.06567746834772589,8.303587443946189,0.11883408071748879
+24_marketing_norm.arff,0.25,2,0.09844589581812598,13.943967464979666,0.22910076818798011
+24_marketing_norm.arff,0.5,1,0.060744384636350644,7.608127043437646,0.1650319165498988
+24_marketing_norm.arff,0.5,2,0.18009128975204383,8.241465315666407,0.23398285268901015
+25_coil2000_norm.arff,0.01,1,,,
+25_coil2000_norm.arff,0.01,2,,,
+25_coil2000_norm.arff,0.05,1,0.9076112307121222,0.06225930680359435,0.9377406931964056
+25_coil2000_norm.arff,0.05,2,0.9089856968795255,0.06132277397260274,0.9386772260273972
+25_coil2000_norm.arff,0.1,1,0.9047107751508775,0.06423669704128698,0.935763302958713
+25_coil2000_norm.arff,0.1,2,0.9046530755874698,0.06427604871447902,0.935723951285521
+25_coil2000_norm.arff,0.15,1,0.8995947654683082,0.06772813688212928,0.9322718631178707
+25_coil2000_norm.arff,0.15,2,0.9011029809030582,0.06669837118059684,0.9333016288194032
+25_coil2000_norm.arff,0.2,1,0.8966011233277376,0.06977329974811083,0.9302267002518891
+25_coil2000_norm.arff,0.2,2,0.8957446379676597,0.07035871617369414,0.9296412838263058
+25_coil2000_norm.arff,0.25,1,0.8900098147360814,0.07428189712758851,0.9257181028724115
+25_coil2000_norm.arff,0.25,2,0.8929923710541036,0.07224080267558529,0.9277591973244147
+25_coil2000_norm.arff,0.5,1,0.8513103911453809,0.10091386350379156,0.8990861364962084
+25_coil2000_norm.arff,0.5,2,0.8523779560656471,0.10017540440459949,0.8998245955954005
+iris.arff,0.01,1,,,
+iris.arff,0.01,2,,,
+iris.arff,0.05,1,,,
+iris.arff,0.05,2,,,
+iris.arff,0.1,1,0.15678898431400384,1.6849315068493151,0.3219178082191781
+iris.arff,0.1,2,0.8358335939522951,0.15602836879432624,0.8439716312056738
+iris.arff,0.15,1,0.5341379310344828,0.35,0.65
+iris.arff,0.15,2,0.5846330348833478,0.3262411347517731,0.6737588652482269
+iris.arff,0.2,1,0.8235689705365746,0.1678832116788321,0.8321167883211679
+iris.arff,0.2,2,0.8876670774480993,0.10948905109489052,0.8905109489051095
+iris.arff,0.25,1,0.6319419687066745,0.3014705882352941,0.6985294117647058
+iris.arff,0.25,2,0.8841162433395443,0.11363636363636363,0.8863636363636364
+iris.arff,0.5,1,0.925,0.075,0.925
+iris.arff,0.5,2,0.8652293331371104,0.13274336283185842,0.8672566371681416
diff --git a/hypothesis/tests/hyp_self_training_pre_20220124-191715.csv b/hypothesis/tests/hyp_self_training_pre_20220124-191715.csv
new file mode 100644
index 0000000..a32dbe6
--- /dev/null
+++ b/hypothesis/tests/hyp_self_training_pre_20220124-191715.csv
@@ -0,0 +1,253 @@
+dataset,percent labeled,iteration,f1-score,mean squared error,accuracy score
+03_contraceptive_norm.arff,0.01,1,0.25584473540406405,1.615912208504801,0.4272976680384088
+03_contraceptive_norm.arff,0.01,2,0.17759655680144978,1.940329218106996,0.345679012345679
+03_contraceptive_norm.arff,0.05,1,0.2509193573298946,1.6368834882058614,0.4224446032880629
+03_contraceptive_norm.arff,0.05,2,0.25599800701767444,1.6147248034310222,0.4274481772694782
+03_contraceptive_norm.arff,0.1,1,0.25974166707560836,1.6173584905660376,0.42641509433962266
+03_contraceptive_norm.arff,0.1,2,0.3647566031261023,1.6316981132075472,0.4188679245283019
+03_contraceptive_norm.arff,0.15,1,0.25213767526971226,1.6190095846645367,0.4185303514376997
+03_contraceptive_norm.arff,0.15,2,0.24857955055937497,1.634185303514377,0.42012779552715657
+03_contraceptive_norm.arff,0.2,1,0.4377757438080568,1.434634974533107,0.4617996604414261
+03_contraceptive_norm.arff,0.2,2,0.41930344884226584,1.4736842105263157,0.4685908319185059
+03_contraceptive_norm.arff,0.25,1,0.24147157190635454,1.6603260869565217,0.41304347826086957
+03_contraceptive_norm.arff,0.25,2,0.45084979874360065,1.3432971014492754,0.4746376811594203
+03_contraceptive_norm.arff,0.5,1,0.48048724722592895,1.3016304347826086,0.48097826086956524
+03_contraceptive_norm.arff,0.5,2,0.39490722444539833,1.452445652173913,0.46059782608695654
+04_yeast_norm.arff,0.01,1,0.12875609675362712,17.473791695030634,0.28795098706603134
+04_yeast_norm.arff,0.01,2,0.04553193795903792,12.758339006126617,0.16269571136827773
+04_yeast_norm.arff,0.05,1,0.14684196240389324,26.1596877217885,0.31014904187366926
+04_yeast_norm.arff,0.05,2,0.12891232474431388,17.697657913413767,0.2881476224272534
+04_yeast_norm.arff,0.1,1,0.47613953515727875,17.065168539325843,0.501123595505618
+04_yeast_norm.arff,0.1,2,0.44918929338915625,18.118352059925094,0.47265917602996255
+04_yeast_norm.arff,0.15,1,0.14479638009049775,26.46946867565424,0.3076923076923077
+04_yeast_norm.arff,0.15,2,0.3064270085965029,18.69310071371927,0.4234734337827121
+04_yeast_norm.arff,0.2,1,0.4823250275137006,16.75737152485257,0.5037910699241785
+04_yeast_norm.arff,0.2,2,0.318264003018027,16.819713563605728,0.405223251895535
+04_yeast_norm.arff,0.25,1,0.3979066057103519,18.144654088050313,0.48607367475292
+04_yeast_norm.arff,0.25,2,0.41760669638447456,17.657681940700808,0.5013477088948787
+04_yeast_norm.arff,0.5,1,0.4433323832425271,17.601078167115904,0.4865229110512129
+04_yeast_norm.arff,0.5,2,0.41036970666350714,18.09164420485175,0.4838274932614555
+05_winequality-red_norm.arff,0.01,1,0.2523714421361392,1.0543272267845862,0.4238787113076437
+05_winequality-red_norm.arff,0.01,2,0.22351673578877018,0.7902716361339229,0.39481996209728365
+05_winequality-red_norm.arff,0.05,1,0.2534735856994497,1.0585911784068467,0.42330480579328505
+05_winequality-red_norm.arff,0.05,2,0.2584950857354063,1.0421329822251482,0.4279131007241606
+05_winequality-red_norm.arff,0.1,1,0.46096559814571153,0.6038915913829048,0.5211952744961779
+05_winequality-red_norm.arff,0.1,2,0.42933690689792314,0.7414871438498958,0.48019457956914524
+05_winequality-red_norm.arff,0.15,1,0.4647873148801271,0.6607799852832965,0.5062545989698307
+05_winequality-red_norm.arff,0.15,2,0.45081409891392804,0.6431199411331862,0.5033112582781457
+05_winequality-red_norm.arff,0.2,1,0.2535185882906257,1.0265832681782643,0.4245504300234558
+05_winequality-red_norm.arff,0.2,2,0.3392346705691202,0.8162627052384676,0.4659890539483972
+05_winequality-red_norm.arff,0.25,1,0.3967552490939184,0.7447873227689742,0.49291075896580483
+05_winequality-red_norm.arff,0.25,2,0.49222336589198734,0.5596330275229358,0.5496246872393661
+05_winequality-red_norm.arff,0.5,1,0.5000719684870825,0.5331664580725908,0.5569461827284106
+05_winequality-red_norm.arff,0.5,2,0.5165256405409537,0.5369211514392991,0.5782227784730913
+07_titanic_norm.arff,0.01,1,0.761476873830407,0.22405876951331496,0.7759412304866851
+07_titanic_norm.arff,0.01,2,0.7510024955704995,0.23186409550045914,0.7681359044995408
+07_titanic_norm.arff,0.05,1,0.7611364973751397,0.22392344497607655,0.7760765550239235
+07_titanic_norm.arff,0.05,2,0.7616388882595206,0.22392344497607655,0.7760765550239235
+07_titanic_norm.arff,0.1,1,0.7657232114964073,0.2202020202020202,0.7797979797979798
+07_titanic_norm.arff,0.1,2,0.7570207668191236,0.22828282828282828,0.7717171717171717
+07_titanic_norm.arff,0.15,1,0.7618688651894532,0.2283422459893048,0.7716577540106951
+07_titanic_norm.arff,0.15,2,0.7674774212092431,0.2192513368983957,0.7807486631016043
+07_titanic_norm.arff,0.2,1,0.7527960259320754,0.23238636363636364,0.7676136363636363
+07_titanic_norm.arff,0.2,2,0.7593743878040424,0.22443181818181818,0.7755681818181818
+07_titanic_norm.arff,0.25,1,0.7525493161543976,0.23272727272727273,0.7672727272727272
+07_titanic_norm.arff,0.25,2,0.773862258953168,0.21333333333333335,0.7866666666666666
+07_titanic_norm.arff,0.5,1,0.758634805875834,0.22818181818181818,0.7718181818181818
+07_titanic_norm.arff,0.5,2,0.7483998576027472,0.23727272727272727,0.7627272727272727
+08_segment_norm.arff,0.01,1,0.1835044809416336,9.433945756780403,0.2852143482064742
+08_segment_norm.arff,0.01,2,0.03457982596824419,13.05249343832021,0.14041994750656167
+08_segment_norm.arff,0.05,1,0.3585709112265135,4.050592525068368,0.42980856882406565
+08_segment_norm.arff,0.05,2,0.5564487806365761,1.8322698268003645,0.6280765724703737
+08_segment_norm.arff,0.1,1,0.6655588594064177,2.9494949494949494,0.7032227032227032
+08_segment_norm.arff,0.1,2,0.5835248805781375,2.3525733525733528,0.6541606541606542
+08_segment_norm.arff,0.15,1,0.8328888365426704,1.2587875700458482,0.8339276617422313
+08_segment_norm.arff,0.15,2,0.8328285862896663,1.2842587875700457,0.8334182373917474
+08_segment_norm.arff,0.2,1,0.837876342959783,1.2224025974025974,0.8382034632034632
+08_segment_norm.arff,0.2,2,0.8510836301100415,1.0963203463203464,0.8522727272727273
+08_segment_norm.arff,0.25,1,0.8393748232239034,1.115473441108545,0.8400692840646651
+08_segment_norm.arff,0.25,2,0.8447563482423255,1.1368360277136258,0.8458429561200924
+08_segment_norm.arff,0.5,1,0.8442910247055765,1.1584415584415584,0.8467532467532467
+08_segment_norm.arff,0.5,2,0.8556962676824955,1.0649350649350648,0.8562770562770563
+13_winequality-white_norm.arff,0.01,1,0.2784348605823873,0.7974840173231594,0.4491647762425242
+13_winequality-white_norm.arff,0.01,2,0.27886708398734983,0.796659104970097,0.44957723241905545
+13_winequality-white_norm.arff,0.05,1,0.28207239605930307,0.7923920051579626,0.45239630346013326
+13_winequality-white_norm.arff,0.05,2,0.13900597003773726,1.541371158392435,0.3006662368364496
+13_winequality-white_norm.arff,0.1,1,0.30102132850309016,1.0737295825771325,0.3908802177858439
+13_winequality-white_norm.arff,0.1,2,0.33456341064764616,0.9879764065335753,0.41674228675136116
+13_winequality-white_norm.arff,0.15,1,0.3905999322131292,0.8239250540475619,0.46432860917607494
+13_winequality-white_norm.arff,0.15,2,0.35451705913818043,0.921450876771559,0.4323804948354552
+13_winequality-white_norm.arff,0.2,1,0.4282546243853064,0.7656967840735069,0.5058703420112303
+13_winequality-white_norm.arff,0.2,2,0.42525592668840206,0.7667177131189382,0.5012761613067892
+13_winequality-white_norm.arff,0.25,1,0.45544223011540075,0.7288320174244487,0.5194663762591887
+13_winequality-white_norm.arff,0.25,2,0.4327613189790937,0.7391777838279335,0.5058535257282875
+13_winequality-white_norm.arff,0.5,1,0.4374895312656815,0.7382605144957125,0.5169456921192324
+13_winequality-white_norm.arff,0.5,2,0.431927081833673,0.7162106982441813,0.5124540628828093
+14_banana_norm.arff,0.01,1,0.3923602201573864,0.4482561463693539,0.551743853630646
+14_banana_norm.arff,0.01,2,0.39191455606549946,0.44863731656184486,0.5513626834381551
+14_banana_norm.arff,0.05,1,0.39328253460267065,0.44746772591857004,0.55253227408143
+14_banana_norm.arff,0.05,2,0.5120548462507175,0.4764647467725919,0.5235352532274081
+14_banana_norm.arff,0.1,1,0.39245775898038604,0.44842767295597485,0.5515723270440251
+14_banana_norm.arff,0.1,2,0.4993434682201776,0.4964360587002096,0.5035639412997903
+14_banana_norm.arff,0.15,1,0.3948279339339606,0.44750277469478356,0.5524972253052164
+14_banana_norm.arff,0.15,2,0.4013202288537791,0.4435072142064373,0.5564927857935628
+14_banana_norm.arff,0.2,1,0.4360632695777706,0.42877358490566037,0.5712264150943396
+14_banana_norm.arff,0.2,2,0.5360298558197036,0.4507075471698113,0.5492924528301887
+14_banana_norm.arff,0.25,1,0.5488245500577976,0.4057861635220126,0.5942138364779874
+14_banana_norm.arff,0.25,2,0.5647769925765489,0.4108176100628931,0.5891823899371069
+14_banana_norm.arff,0.5,1,0.5541330478602557,0.38301886792452833,0.6169811320754717
+14_banana_norm.arff,0.5,2,0.5468083253426659,0.39169811320754716,0.6083018867924528
+15_phoneme_norm.arff,0.01,1,0.7803008430366355,0.2219106375023369,0.7780893624976631
+15_phoneme_norm.arff,0.01,2,0.5837454581737013,0.2944475602916433,0.7055524397083567
+15_phoneme_norm.arff,0.05,1,0.7730868709971863,0.22462497564776934,0.7753750243522307
+15_phoneme_norm.arff,0.05,2,0.772852875563018,0.2244301578024547,0.7755698421975453
+15_phoneme_norm.arff,0.1,1,0.7728802504435479,0.22599218589348138,0.7740078141065186
+15_phoneme_norm.arff,0.1,2,0.756896284161097,0.23771334567139626,0.7622866543286038
+15_phoneme_norm.arff,0.15,1,0.7696819352191352,0.22730241672109733,0.7726975832789027
+15_phoneme_norm.arff,0.15,2,0.7704927103991389,0.22664924885695623,0.7733507511430437
+15_phoneme_norm.arff,0.2,1,0.7781894881508057,0.22183668748554244,0.7781633125144576
+15_phoneme_norm.arff,0.2,2,0.7675450484124142,0.23062687948184132,0.7693731205181586
+15_phoneme_norm.arff,0.25,1,0.7180901579646861,0.25734024179620035,0.7426597582037997
+15_phoneme_norm.arff,0.25,2,0.7404299232825248,0.2509252405625463,0.7490747594374537
+15_phoneme_norm.arff,0.5,1,0.7745774587264135,0.22353811991117692,0.7764618800888231
+15_phoneme_norm.arff,0.5,2,0.7637359392198448,0.23390081421169504,0.7660991857883049
+16_page-blocks_norm.arff,0.01,1,0.8498832103950485,0.5571349455418129,0.8980985785490123
+16_page-blocks_norm.arff,0.01,2,0.8498832103950485,0.5595347978585933,0.8980985785490123
+16_page-blocks_norm.arff,0.05,1,0.8966813225862895,0.4896113889957676,0.9184301654482493
+16_page-blocks_norm.arff,0.05,2,0.896961801245376,0.46556367833782225,0.917660638707195
+16_page-blocks_norm.arff,0.1,1,0.8785018413890736,0.5623476848090982,0.9114541023558083
+16_page-blocks_norm.arff,0.1,2,0.8993841721707967,0.47258326563769293,0.9191714053614947
+16_page-blocks_norm.arff,0.15,1,0.9025466763573795,0.5005375188131584,0.9219522683293915
+16_page-blocks_norm.arff,0.15,2,0.8991022351064232,0.49365727800473014,0.9174371102988604
+16_page-blocks_norm.arff,0.2,1,0.9028925058061464,0.4953164267763308,0.9191226867717615
+16_page-blocks_norm.arff,0.2,2,0.9086529249096266,0.4516792323509253,0.9243774274617318
+16_page-blocks_norm.arff,0.25,1,0.8993954296862878,0.5077972709551657,0.9193469785575049
+16_page-blocks_norm.arff,0.25,2,0.8991230020384767,0.5131578947368421,0.9173976608187134
+16_page-blocks_norm.arff,0.5,1,0.8993556894590862,0.5274122807017544,0.9236111111111112
+16_page-blocks_norm.arff,0.5,2,0.8806398847165772,0.5782163742690059,0.9111842105263158
+17_texture_norm.arff,0.01,1,0.06314978906891175,10.717539026629936,0.18071625344352618
+17_texture_norm.arff,0.01,2,0.05704644620700602,24.669421487603305,0.17006427915518824
+17_texture_norm.arff,0.05,1,0.27383479831326085,10.614928229665072,0.38717703349282295
+17_texture_norm.arff,0.05,2,0.1198820393125074,11.436363636363636,0.2748325358851675
+17_texture_norm.arff,0.1,1,0.5015722512466858,8.1610101010101,0.6072727272727273
+17_texture_norm.arff,0.1,2,0.4990631146054537,11.712929292929292,0.5644444444444444
+17_texture_norm.arff,0.15,1,0.8208242971339844,6.151229946524064,0.824812834224599
+17_texture_norm.arff,0.15,2,0.833190790618851,4.561925133689839,0.8355080213903743
+17_texture_norm.arff,0.2,1,0.8130244823899182,6.23,0.8163636363636364
+17_texture_norm.arff,0.2,2,0.8192784625561762,6.297272727272727,0.8234090909090909
+17_texture_norm.arff,0.25,1,0.8397553073509441,5.184484848484849,0.8421818181818181
+17_texture_norm.arff,0.25,2,0.8229851229997905,5.714424242424243,0.830060606060606
+17_texture_norm.arff,0.5,1,0.8679332571063197,4.852727272727273,0.8690909090909091
+17_texture_norm.arff,0.5,2,0.9002856816968081,3.110909090909091,0.901090909090909
+18_optdigits_norm.arff,0.01,1,0.06304093456217642,9.189286356282581,0.1576487506740967
+18_optdigits_norm.arff,0.01,2,0.17201239521844497,8.07513931332015,0.24483192522020492
+18_optdigits_norm.arff,0.05,1,0.9657193883754979,0.7868514703127927,0.9655366173440719
+18_optdigits_norm.arff,0.05,2,0.9615506238023458,0.8569020415808204,0.9614159955047762
+18_optdigits_norm.arff,0.1,1,0.9659330388211399,0.7536575721629103,0.9657967576117042
+18_optdigits_norm.arff,0.1,2,0.9672793499574309,0.7667062079873468,0.9671807038355081
+18_optdigits_norm.arff,0.15,1,0.9686882392323862,0.7199078919824158,0.9685995394599121
+18_optdigits_norm.arff,0.15,2,0.9649224949159642,0.7362361314632615,0.9648314841951016
+18_optdigits_norm.arff,0.2,1,0.9664925369481369,0.7798042704626335,0.9664145907473309
+18_optdigits_norm.arff,0.2,2,0.9689200025734543,0.6981761565836299,0.9688612099644128
+18_optdigits_norm.arff,0.25,1,0.971057575195184,0.6448398576512455,0.971055753262159
+18_optdigits_norm.arff,0.25,2,0.9725278283168275,0.629655990510083,0.9724792408066429
+18_optdigits_norm.arff,0.5,1,0.9726304881034062,0.6,0.9725978647686833
+18_optdigits_norm.arff,0.5,2,0.9754852727338673,0.5277580071174377,0.9754448398576513
+19_satimage_norm.arff,0.01,1,0.1790344049707795,3.6698587127158557,0.30957613814756674
+19_satimage_norm.arff,0.01,2,0.6748332094654618,1.0750392464678178,0.7566718995290423
+19_satimage_norm.arff,0.05,1,0.7815429217168084,0.8653688859806968,0.8233273351873057
+19_satimage_norm.arff,0.05,2,0.7793952064219227,0.8977588745296908,0.8221822345820383
+19_satimage_norm.arff,0.1,1,0.783000462249203,0.8290450699361077,0.8257641167328613
+19_satimage_norm.arff,0.1,2,0.8285759274279824,0.7908824037299258,0.8335347953721292
+19_satimage_norm.arff,0.15,1,0.78049286998234,0.8568294020844761,0.8237337721704151
+19_satimage_norm.arff,0.15,2,0.7837515104649394,0.8584750411409764,0.8264765039312488
+19_satimage_norm.arff,0.2,1,0.7809441787114103,0.8106060606060606,0.8247863247863247
+19_satimage_norm.arff,0.2,2,0.7917158620514918,0.8214840714840714,0.8325563325563325
+19_satimage_norm.arff,0.25,1,0.7845311952324096,0.8244923331951927,0.8273932863655201
+19_satimage_norm.arff,0.25,2,0.781712161866739,0.8518441773725652,0.8253211769581434
+19_satimage_norm.arff,0.5,1,0.8064021941074077,0.8023002797637551,0.8296549580354368
+19_satimage_norm.arff,0.5,2,0.8183739256826386,0.7699720236244949,0.8396021137705937
+20_thyroid_norm.arff,0.01,1,0.8903133903133903,0.14351851851851852,0.9259259259259259
+20_thyroid_norm.arff,0.01,2,0.8903133903133903,0.14351851851851852,0.9259259259259259
+20_thyroid_norm.arff,0.05,1,0.8934355794353993,0.13757309941520468,0.9273391812865497
+20_thyroid_norm.arff,0.05,2,0.8909756277505335,0.13786549707602339,0.9257309941520467
+20_thyroid_norm.arff,0.1,1,0.8940061812151449,0.13935185185185187,0.9277777777777778
+20_thyroid_norm.arff,0.1,2,0.8966252243751144,0.13333333333333333,0.9291666666666667
+20_thyroid_norm.arff,0.15,1,0.8968087751898289,0.1300653594771242,0.9292483660130719
+20_thyroid_norm.arff,0.15,2,0.8968257447903805,0.13398692810457516,0.9292483660130719
+20_thyroid_norm.arff,0.2,1,0.8939914404096944,0.13194444444444445,0.9274305555555555
+20_thyroid_norm.arff,0.2,2,0.8946480628063094,0.13784722222222223,0.9277777777777778
+20_thyroid_norm.arff,0.25,1,0.8912257269329045,0.14166666666666666,0.9255555555555556
+20_thyroid_norm.arff,0.25,2,0.8967637757441766,0.13407407407407407,0.9292592592592592
+20_thyroid_norm.arff,0.5,1,0.8981390267359107,0.14,0.93
+20_thyroid_norm.arff,0.5,2,0.8940499595448884,0.13416666666666666,0.9275
+21_ring_norm.arff,0.01,1,0.738037917964879,0.25484575484575483,0.7451542451542451
+21_ring_norm.arff,0.01,2,0.7647818492100792,0.23095823095823095,0.769041769041769
+21_ring_norm.arff,0.05,1,0.7330231526959808,0.2529160739687055,0.7470839260312945
+21_ring_norm.arff,0.05,2,0.728922029402703,0.25647226173541965,0.7435277382645804
+21_ring_norm.arff,0.1,1,0.7776940761252846,0.22087087087087087,0.7791291291291291
+21_ring_norm.arff,0.1,2,0.7784622739077927,0.21966966966966966,0.7803303303303303
+21_ring_norm.arff,0.15,1,0.7825194097972167,0.21510333863275038,0.7848966613672496
+21_ring_norm.arff,0.15,2,0.7786265543673628,0.2181240063593005,0.7818759936406995
+21_ring_norm.arff,0.2,1,0.7893697969051182,0.20827702702702702,0.791722972972973
+21_ring_norm.arff,0.2,2,0.7803442876258274,0.21672297297297297,0.7832770270270271
+21_ring_norm.arff,0.25,1,0.789765481441013,0.20792792792792794,0.7920720720720721
+21_ring_norm.arff,0.25,2,0.7922232077668347,0.20540540540540542,0.7945945945945946
+21_ring_norm.arff,0.5,1,0.8063609486320712,0.19054054054054054,0.8094594594594594
+21_ring_norm.arff,0.5,2,0.8004872601603392,0.19702702702702704,0.802972972972973
+22_twonorm_norm.arff,0.01,1,0.9724191982113625,0.027573027573027573,0.9724269724269724
+22_twonorm_norm.arff,0.01,2,0.9785694653925611,0.021430521430521432,0.9785694785694786
+22_twonorm_norm.arff,0.05,1,0.9783781088743788,0.021621621621621623,0.9783783783783784
+22_twonorm_norm.arff,0.05,2,0.9785204194413348,0.021479374110953058,0.978520625889047
+22_twonorm_norm.arff,0.1,1,0.9780780978473282,0.02192192192192192,0.9780780780780781
+22_twonorm_norm.arff,0.1,2,0.978378368629138,0.021621621621621623,0.9783783783783784
+22_twonorm_norm.arff,0.15,1,0.9766292358177973,0.023370429252782193,0.9766295707472178
+22_twonorm_norm.arff,0.15,2,0.9766271337720648,0.023370429252782193,0.9766295707472178
+22_twonorm_norm.arff,0.2,1,0.9790541257739409,0.020945945945945947,0.9790540540540541
+22_twonorm_norm.arff,0.2,2,0.9782087039742565,0.02179054054054054,0.9782094594594595
+22_twonorm_norm.arff,0.25,1,0.9765762663058054,0.023423423423423424,0.9765765765765766
+22_twonorm_norm.arff,0.25,2,0.9780170415715832,0.021981981981981983,0.978018018018018
+22_twonorm_norm.arff,0.5,1,0.9762153405614653,0.023783783783783784,0.9762162162162162
+22_twonorm_norm.arff,0.5,2,0.9767556157520813,0.023243243243243242,0.9767567567567568
+24_marketing_norm.arff,0.01,1,0.14092388546948412,16.192889672396063,0.2188923167327751
+24_marketing_norm.arff,0.01,2,0.13635588224574993,12.729396209784046,0.2722197737623035
+24_marketing_norm.arff,0.05,1,0.18301711085624656,8.401867728107778,0.29898958971218614
+24_marketing_norm.arff,0.05,2,0.19462766186157374,8.00826699326393,0.30511328842620944
+24_marketing_norm.arff,0.1,1,0.19581670089215417,7.5932449903038135,0.3067226890756303
+24_marketing_norm.arff,0.1,2,0.16980288736104526,8.788784744667097,0.3009049773755656
+24_marketing_norm.arff,0.15,1,0.20879262454592828,6.979295003422314,0.30715263518138264
+24_marketing_norm.arff,0.15,2,0.2201483950010992,6.979123887748118,0.31177275838466806
+24_marketing_norm.arff,0.2,1,0.21437489557886594,7.036909090909091,0.3129090909090909
+24_marketing_norm.arff,0.2,2,0.19465087690507085,7.489090909090909,0.30818181818181817
+24_marketing_norm.arff,0.25,1,0.20637091151932682,7.372697304634477,0.31258483614504556
+24_marketing_norm.arff,0.25,2,0.2167846676484955,6.816172193135544,0.31413612565445026
+24_marketing_norm.arff,0.5,1,0.21904384437040944,6.936591041303084,0.3112274578243165
+24_marketing_norm.arff,0.5,2,0.22622693273434316,6.9165212332751596,0.30831878999418266
+25_coil2000_norm.arff,0.01,1,0.9109852319197778,0.0599609174123213,0.9400390825876787
+25_coil2000_norm.arff,0.01,2,0.9114383944648727,0.059652370667489456,0.9403476293325106
+25_coil2000_norm.arff,0.05,1,0.9102667872099074,0.06045016077170418,0.9395498392282958
+25_coil2000_norm.arff,0.05,2,0.9110537615154882,0.059914255091103964,0.9400857449088961
+25_coil2000_norm.arff,0.1,1,0.9124799754499027,0.05894331938002036,0.9410566806199796
+25_coil2000_norm.arff,0.1,2,0.9091570818883351,0.061206018780405026,0.938793981219595
+25_coil2000_norm.arff,0.15,1,0.9107308077391054,0.06013416387158601,0.939865836128414
+25_coil2000_norm.arff,0.15,2,0.9114345219878133,0.05965500718735026,0.9403449928126497
+25_coil2000_norm.arff,0.2,1,0.9110063402809576,0.05994654448262696,0.9400534555173731
+25_coil2000_norm.arff,0.2,2,0.9110063402809576,0.05994654448262696,0.9400534555173731
+25_coil2000_norm.arff,0.25,1,0.9119168576265775,0.0593266358946511,0.9406733641053489
+25_coil2000_norm.arff,0.25,2,0.9131135875219,0.05851208254140646,0.9414879174585935
+25_coil2000_norm.arff,0.5,1,0.9132191605224278,0.058440236204439014,0.9415597637955609
+25_coil2000_norm.arff,0.5,2,0.9111252075354408,0.05986560781918143,0.9401343921808186
+iris.arff,0.01,1,,,
+iris.arff,0.01,2,0.543953043953044,0.34459459459459457,0.6554054054054054
+iris.arff,0.05,1,0.5259666881656886,0.3732394366197183,0.6267605633802817
+iris.arff,0.05,2,0.541514823204964,0.34507042253521125,0.6549295774647887
+iris.arff,0.1,1,0.8292181069958848,0.16296296296296298,0.837037037037037
+iris.arff,0.1,2,0.9777670229212878,0.022222222222222223,0.9777777777777777
+iris.arff,0.15,1,0.9842226503601943,0.015748031496062992,0.984251968503937
+iris.arff,0.15,2,0.9447587666582631,0.05511811023622047,0.9448818897637795
+iris.arff,0.2,1,0.8360364061955277,0.15833333333333333,0.8416666666666667
+iris.arff,0.2,2,0.87004662004662,0.125,0.875
+iris.arff,0.25,1,0.964272308022308,0.03571428571428571,0.9642857142857143
+iris.arff,0.25,2,1.0,0.0,1.0
+iris.arff,0.5,1,0.9601708590412908,0.04,0.96
+iris.arff,0.5,2,0.9866492374727668,0.013333333333333334,0.9866666666666667
diff --git a/utils/reading_tests.py b/utils/reading_tests.py
new file mode 100644
index 0000000..e1d4558
--- /dev/null
+++ b/utils/reading_tests.py
@@ -0,0 +1,106 @@
+#!/usr/bin/env python
+# -*- coding:utf-8 -*-
+# @Filename:    reading_tests.py
+# @Author:      Daniel Puente Ramírez
+# @Time:        25/1/22 16:01
+
+from collections.abc import Iterable
+from numpy import nanmean
+
+
+
+class DatasetResult:
+    def __init__(self, name, precision, iterations, f1, mse, acc):
+        self.__name = name
+        self.__precision = precision
+        self.__iterations = int(iterations)
+        self.__f1 = [nanmean(x) for x in f1[::self.__iterations]]
+        self.__f1_values = f1
+        self.__mse = [nanmean(x) for x in mse[::self.__iterations]]
+        self.__mse_values = mse
+        self.__acc = [nanmean(x) for x in acc[::self.__iterations]]
+        self.__acc_values = acc
+
+    @property
+    def name(self):
+        return self.__name
+
+    @name.setter
+    def name(self, name):
+        self.__name: str = name
+
+    @property
+    def precision(self):
+        return self.__precision
+
+    @precision.setter
+    def precision(self, precision):
+        if isinstance(precision, Iterable):
+            self.__precision = precision
+        else:
+            raise ValueError('Expected an iterable with the precisions')
+
+    @property
+    def iterations(self):
+        return self.__iterations
+
+    @iterations.setter
+    def iterations(self, iterations):
+        self.__iterations: int = iterations
+
+    @property
+    def f1(self):
+        return self.__f1
+
+    @f1.setter
+    def f1(self, f1):
+        if isinstance(f1, Iterable):
+            self.__f1 = [nanmean(x) for x in f1[::self.__iterations]]
+        else:
+            raise ValueError('Expected an iterable with f1')
+
+    @property
+    def mse(self):
+        return self.__mse
+
+    @mse.setter
+    def mse(self, mse):
+        if isinstance(mse, Iterable):
+            self.__mse = [nanmean(x) for x in mse[::self.__iterations]]
+        else:
+            raise ValueError('Expected an iterable with mse')
+
+    @property
+    def acc(self):
+        return self.__acc
+
+    @acc.setter
+    def acc(self, acc):
+        if isinstance(acc, Iterable):
+            self.__acc = [nanmean(x) for x in acc[::self.__iterations]]
+        else:
+            raise ValueError('Expected an iterable with acc')
+
+    @property
+    def f1_values(self):
+        return self.__f1_values
+
+    @f1_values.setter
+    def f1_values(self, f1):
+        self.__f1_values = f1
+
+    @property
+    def mse_values(self):
+        return self.__mse_values
+
+    @mse_values.setter
+    def mse_values(self, mse):
+        self.__mse_values = mse
+
+    @property
+    def acc_values(self):
+        return self.__acc_values
+
+    @acc_values.setter
+    def acc_values(self, acc):
+        self.__acc_values = acc