diff --git a/__pycache__/run.cpython-37.pyc b/__pycache__/run.cpython-37.pyc
index 48006013e..b63815b57 100644
Binary files a/__pycache__/run.cpython-37.pyc and b/__pycache__/run.cpython-37.pyc differ
diff --git a/cachedir/joblib/run/GridSearchForModels/34dd4fa44cf8d83f42cfacc70a3fdd71/metadata.json b/cachedir/joblib/run/GridSearchForModels/34dd4fa44cf8d83f42cfacc70a3fdd71/metadata.json
index eed954a99..2908451aa 100644
--- a/cachedir/joblib/run/GridSearchForModels/34dd4fa44cf8d83f42cfacc70a3fdd71/metadata.json
+++ b/cachedir/joblib/run/GridSearchForModels/34dd4fa44cf8d83f42cfacc70a3fdd71/metadata.json
@@ -1 +1 @@
-{"duration": 277.43560791015625, "input_args": {"XData": " sepal_l sepal_w petal_l petal_w\n0 6.3 3.3 6.0 2.5\n1 7.1 3.0 5.9 2.1\n2 5.8 2.7 5.1 1.9\n3 6.3 2.9 5.6 1.8\n4 7.6 3.0 6.6 2.1\n.. ... ... ... ...\n145 5.1 3.8 1.6 0.2\n146 5.0 3.5 1.6 0.6\n147 5.1 3.4 1.5 0.2\n148 4.6 3.2 1.4 0.2\n149 4.8 3.0 1.4 0.3\n\n[150 rows x 4 columns]", "yData": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]", "clf": "KNeighborsClassifier(algorithm='ball_tree', leaf_size=30, metric='minkowski',\n metric_params=None, n_jobs=None, n_neighbors=24, p=2,\n weights='distance')", "params": "{'n_neighbors': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24], 'weights': ['uniform', 'distance'], 'algorithm': ['brute', 'kd_tree', 'ball_tree'], 'metric': ['chebyshev', 'manhattan', 'euclidean', 'minkowski']}", "eachAlgor": "'KNN'", "factors": "[1, 1, 1, 1, 1]", "AlgorithmsIDsEnd": "0"}}
\ No newline at end of file
+{"duration": 291.49311804771423, "input_args": {"XData": " sepal_l sepal_w petal_l petal_w\n0 6.3 3.3 6.0 2.5\n1 7.1 3.0 5.9 2.1\n2 5.8 2.7 5.1 1.9\n3 6.3 2.9 5.6 1.8\n4 7.6 3.0 6.6 2.1\n.. ... ... ... ...\n145 5.1 3.8 1.6 0.2\n146 5.0 3.5 1.6 0.6\n147 5.1 3.4 1.5 0.2\n148 4.6 3.2 1.4 0.2\n149 4.8 3.0 1.4 0.3\n\n[150 rows x 4 columns]", "yData": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]", "clf": "KNeighborsClassifier(algorithm='ball_tree', leaf_size=30, metric='minkowski',\n metric_params=None, n_jobs=None, n_neighbors=24, p=2,\n weights='distance')", "params": "{'n_neighbors': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24], 'weights': ['uniform', 'distance'], 'algorithm': ['brute', 'kd_tree', 'ball_tree'], 'metric': ['chebyshev', 'manhattan', 'euclidean', 'minkowski']}", "eachAlgor": "'KNN'", "factors": "[1, 1, 1, 1, 1]", "AlgorithmsIDsEnd": "0"}}
\ No newline at end of file
diff --git a/cachedir/joblib/run/GridSearchForModels/8e80923b781a32dc2365aa1381c36157/metadata.json b/cachedir/joblib/run/GridSearchForModels/3e589fe0fa65fac056ce8e152ff3ecba/metadata.json
similarity index 94%
rename from cachedir/joblib/run/GridSearchForModels/8e80923b781a32dc2365aa1381c36157/metadata.json
rename to cachedir/joblib/run/GridSearchForModels/3e589fe0fa65fac056ce8e152ff3ecba/metadata.json
index 1f8b8aba2..ba2a5faaa 100644
--- a/cachedir/joblib/run/GridSearchForModels/8e80923b781a32dc2365aa1381c36157/metadata.json
+++ b/cachedir/joblib/run/GridSearchForModels/3e589fe0fa65fac056ce8e152ff3ecba/metadata.json
@@ -1 +1 @@
-{"duration": 359.44206166267395, "input_args": {"XData": " sepal_l sepal_w petal_l petal_w\n0 6.3 3.3 6.0 2.5\n1 7.1 3.0 5.9 2.1\n2 5.8 2.7 5.1 1.9\n3 6.3 2.9 5.6 1.8\n4 7.6 3.0 6.6 2.1\n.. ... ... ... ...\n145 5.1 3.8 1.6 0.2\n146 5.0 3.5 1.6 0.6\n147 5.1 3.4 1.5 0.2\n148 4.6 3.2 1.4 0.2\n149 4.8 3.0 1.4 0.3\n\n[150 rows x 4 columns]", "yData": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]", "clf": "RandomForestClassifier(bootstrap=True, class_weight=None, criterion='entropy',\n max_depth=None, max_features='auto', max_leaf_nodes=None,\n min_impurity_decrease=0.0, min_impurity_split=None,\n min_samples_leaf=1, min_samples_split=2,\n min_weight_fraction_leaf=0.0, n_estimators=119,\n n_jobs=None, oob_score=False, random_state=None,\n verbose=0, warm_start=False)", "params": "{'n_estimators': [40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119], 'criterion': ['gini', 'entropy']}", "eachAlgor": "'RF'", "factors": "[1, 1, 1, 1, 1]", "AlgorithmsIDsEnd": "576"}}
\ No newline at end of file
+{"duration": 335.52157711982727, "input_args": {"XData": " sepal_l sepal_w petal_l petal_w\n0 6.3 3.3 6.0 2.5\n1 7.1 3.0 5.9 2.1\n2 5.8 2.7 5.1 1.9\n3 6.3 2.9 5.6 1.8\n4 7.6 3.0 6.6 2.1\n.. ... ... ... ...\n145 5.1 3.8 1.6 0.2\n146 5.0 3.5 1.6 0.6\n147 5.1 3.4 1.5 0.2\n148 4.6 3.2 1.4 0.2\n149 4.8 3.0 1.4 0.3\n\n[150 rows x 4 columns]", "yData": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]", "clf": "RandomForestClassifier(bootstrap=True, class_weight=None, criterion='entropy',\n max_depth=None, max_features='auto', max_leaf_nodes=None,\n min_impurity_decrease=0.0, min_impurity_split=None,\n min_samples_leaf=1, min_samples_split=2,\n min_weight_fraction_leaf=0.0, n_estimators=119,\n n_jobs=None, oob_score=False, random_state=None,\n verbose=0, warm_start=False)", "params": "{'n_estimators': [40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119], 'criterion': ['gini', 'entropy']}", "eachAlgor": "'RF'", "factors": "[1, 1, 1, 1, 1]", "AlgorithmsIDsEnd": "576"}}
\ No newline at end of file
diff --git a/cachedir/joblib/run/GridSearchForModels/65cf512fe73627ad01497d789001f38b/output.pkl b/cachedir/joblib/run/GridSearchForModels/65cf512fe73627ad01497d789001f38b/output.pkl
index b369180f1..a1842fa6f 100644
Binary files a/cachedir/joblib/run/GridSearchForModels/65cf512fe73627ad01497d789001f38b/output.pkl and b/cachedir/joblib/run/GridSearchForModels/65cf512fe73627ad01497d789001f38b/output.pkl differ
diff --git a/cachedir/joblib/run/GridSearchForModels/d109acd8d5a29b882753c4dd79f6b7ac/output.pkl b/cachedir/joblib/run/GridSearchForModels/d109acd8d5a29b882753c4dd79f6b7ac/output.pkl
deleted file mode 100644
index a0d48e183..000000000
Binary files a/cachedir/joblib/run/GridSearchForModels/d109acd8d5a29b882753c4dd79f6b7ac/output.pkl and /dev/null differ
diff --git a/cachedir/joblib/run/GridSearchForModels/d3f870ddccd6a0536b79f604734d6849/output.pkl b/cachedir/joblib/run/GridSearchForModels/d3f870ddccd6a0536b79f604734d6849/output.pkl
deleted file mode 100644
index c58dcb023..000000000
Binary files a/cachedir/joblib/run/GridSearchForModels/d3f870ddccd6a0536b79f604734d6849/output.pkl and /dev/null differ
diff --git a/cachedir/joblib/run/GridSearchForModels/d3ffb9c0e5d4e64abbb8f8a71e13e521/metadata.json b/cachedir/joblib/run/GridSearchForModels/d3ffb9c0e5d4e64abbb8f8a71e13e521/metadata.json
deleted file mode 100644
index d69cbbe5a..000000000
--- a/cachedir/joblib/run/GridSearchForModels/d3ffb9c0e5d4e64abbb8f8a71e13e521/metadata.json
+++ /dev/null
@@ -1 +0,0 @@
-{"duration": 2426.6991608142853, "input_args": {"XData": " Pregnan Glucose BloodPress SkinThick Insulin BMI DPF Age\n0 8 183 64 0 0 23.3 0.672 32\n1 2 197 70 45 543 30.5 0.158 53\n2 8 125 96 0 0 0.0 0.232 54\n3 10 168 74 0 0 38.0 0.537 34\n4 1 189 60 23 846 30.1 0.398 59\n.. ... ... ... ... ... ... ... ...\n763 9 89 62 0 0 22.5 0.142 33\n764 2 122 70 27 0 36.8 0.340 27\n765 10 101 76 48 180 32.9 0.171 63\n766 5 121 72 23 112 26.2 0.245 30\n767 1 93 70 31 0 30.4 0.315 23\n\n[768 rows x 8 columns]", "yData": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]", "clf": "KNeighborsClassifier(algorithm='ball_tree', leaf_size=30, metric='minkowski',\n metric_params=None, n_jobs=None, n_neighbors=24, p=2,\n weights='distance')", "params": "{'n_neighbors': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24], 'weights': ['uniform', 'distance'], 'algorithm': ['brute', 'kd_tree', 'ball_tree'], 'metric': ['chebyshev', 'manhattan', 'euclidean', 'minkowski']}", "eachAlgor": "'KNN'", "factors": "[1, 1, 1, 1, 1]", "AlgorithmsIDsEnd": "0"}}
\ No newline at end of file
diff --git a/cachedir/joblib/run/GridSearchForModels/ef9a593cce41dd71bdac1d445edc2a58/output.pkl b/cachedir/joblib/run/GridSearchForModels/ef9a593cce41dd71bdac1d445edc2a58/output.pkl
index 668031a0d..1d77cd3a6 100644
Binary files a/cachedir/joblib/run/GridSearchForModels/ef9a593cce41dd71bdac1d445edc2a58/output.pkl and b/cachedir/joblib/run/GridSearchForModels/ef9a593cce41dd71bdac1d445edc2a58/output.pkl differ
diff --git a/cachedir/joblib/run/GridSearchForModels/fa486d0ef10b213eeae65d5db1f9232b/metadata.json b/cachedir/joblib/run/GridSearchForModels/fa486d0ef10b213eeae65d5db1f9232b/metadata.json
deleted file mode 100644
index 97542d264..000000000
--- a/cachedir/joblib/run/GridSearchForModels/fa486d0ef10b213eeae65d5db1f9232b/metadata.json
+++ /dev/null
@@ -1 +0,0 @@
-{"duration": 923.801488161087, "input_args": {"XData": " Pregnan Glucose BloodPress SkinThick Insulin BMI DPF Age\n0 8 183 64 0 0 23.3 0.672 32\n1 2 197 70 45 543 30.5 0.158 53\n2 8 125 96 0 0 0.0 0.232 54\n3 10 168 74 0 0 38.0 0.537 34\n4 1 189 60 23 846 30.1 0.398 59\n.. ... ... ... ... ... ... ... ...\n763 9 89 62 0 0 22.5 0.142 33\n764 2 122 70 27 0 36.8 0.340 27\n765 10 101 76 48 180 32.9 0.171 63\n766 5 121 72 23 112 26.2 0.245 30\n767 1 93 70 31 0 30.4 0.315 23\n\n[768 rows x 8 columns]", "yData": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]", "clf": "RandomForestClassifier(bootstrap=True, class_weight=None, criterion='entropy',\n max_depth=None, max_features='auto', max_leaf_nodes=None,\n min_impurity_decrease=0.0, min_impurity_split=None,\n min_samples_leaf=1, min_samples_split=2,\n min_weight_fraction_leaf=0.0, n_estimators=119,\n n_jobs=None, oob_score=False, random_state=None,\n verbose=0, warm_start=False)", "params": "{'n_estimators': [40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119], 'criterion': ['gini', 'entropy']}", "eachAlgor": "'RF'", "factors": "[1, 1, 1, 1, 1]", "AlgorithmsIDsEnd": "576"}}
\ No newline at end of file
diff --git a/cachedir/joblib/run/GridSearchForModels/func_code.py b/cachedir/joblib/run/GridSearchForModels/func_code.py
index 48a7e07d7..32c047996 100644
--- a/cachedir/joblib/run/GridSearchForModels/func_code.py
+++ b/cachedir/joblib/run/GridSearchForModels/func_code.py
@@ -1,4 +1,4 @@
-# first line: 463
+# first line: 465
@memory.cache
def GridSearchForModels(XData, yData, clf, params, eachAlgor, factors, AlgorithmsIDsEnd):
@@ -46,12 +46,12 @@ def GridSearchForModels(XData, yData, clf, params, eachAlgor, factors, Algorithm
# copy and filter in order to get only the metrics
metrics = df_cv_results_classifiers.copy()
metrics = metrics.filter(['mean_test_accuracy','mean_test_f1_macro','mean_test_precision','mean_test_recall','mean_test_jaccard'])
-
+
# control the factors
sumperModel = []
for index, row in metrics.iterrows():
rowSum = 0
- lengthFactors = NumberofscoringMetrics
+ lengthFactors = len(scoring)
for loop,elements in enumerate(row):
lengthFactors = lengthFactors - 1 + factors[loop]
rowSum = elements*factors[loop] + rowSum
diff --git a/frontend/src/components/AlgorithmHyperParam.vue b/frontend/src/components/AlgorithmHyperParam.vue
index 9ffb8d967..7692ba980 100644
--- a/frontend/src/components/AlgorithmHyperParam.vue
+++ b/frontend/src/components/AlgorithmHyperParam.vue
@@ -1,5 +1,5 @@
-
+
\ No newline at end of file
+
+
+
\ No newline at end of file
diff --git a/frontend/src/components/Parameters.vue b/frontend/src/components/Parameters.vue
index 95d316171..5fe1ebab1 100644
--- a/frontend/src/components/Parameters.vue
+++ b/frontend/src/components/Parameters.vue
@@ -36,6 +36,337 @@ export default {
svg.selectAll("*").remove();
}, 50);
},
+ /////////////////////////////////////////////////////////
+/////////////// The Radar Chart Function ////////////////
+/////////////// Written by Nadieh Bremer ////////////////
+////////////////// VisualCinnamon.com ///////////////////
+/////////// Inspired by the code of alangrafu ///////////
+/////////////////////////////////////////////////////////
+
+ RadarChart(id, data, options) {
+ var cfg = {
+ w: 600, //Width of the circle
+ h: 600, //Height of the circle
+ margin: {top: 20, right: 20, bottom: 20, left: 20}, //The margins of the SVG
+ levels: 3, //How many levels or inner circles should there be drawn
+ maxValue: 0, //What is the value that the biggest circle will represent
+ labelFactor: 1.25, //How much farther than the radius of the outer circle should the labels be placed
+ wrapWidth: 60, //The number of pixels after which a label needs to be given a new line
+ opacityArea: 0.35, //The opacity of the area of the blob
+ dotRadius: 4, //The size of the colored circles of each blog
+ opacityCircles: 0.1, //The opacity of the circles of each blob
+ strokeWidth: 2, //The width of the stroke around each blob
+ roundStrokes: false, //If true the area and stroke will follow a round path (cardinal-closed)
+ color: d3.scale.category10() //Color function
+ };
+
+ //Put all of the options into a variable called cfg
+ if('undefined' !== typeof options){
+ for(var i in options){
+ if('undefined' !== typeof options[i]){ cfg[i] = options[i]; }
+ }//for i
+ }//if
+
+ //If the supplied maxValue is smaller than the actual one, replace by the max in the data
+ var maxValue = Math.max(cfg.maxValue, d3.max(data, function(i){return d3.max(i.map(function(o){return o.value;}))}));
+
+ var allAxis = (data[0].map(function(i, j){return i.axis})), //Names of each axis
+ total = allAxis.length, //The number of different axes
+ radius = Math.min(cfg.w/2, cfg.h/2), //Radius of the outermost circle
+ Format = d3.format('%'), //Percentage formatting
+ angleSlice = Math.PI * 2 / total; //The width in radians of each "slice"
+
+ //Scale for the radius
+ var rScale = d3.scale.linear()
+ .range([0, radius])
+ .domain([0, maxValue]);
+
+ /////////////////////////////////////////////////////////
+ //////////// Create the container SVG and g /////////////
+ /////////////////////////////////////////////////////////
+
+ //Remove whatever chart with the same id/class was present before
+ d3.select(id).select("svg").remove();
+
+ //Initiate the radar chart SVG
+ var svg = d3.select(id).append("svg")
+ .attr("width", cfg.w + cfg.margin.left + cfg.margin.right)
+ .attr("height", cfg.h + cfg.margin.top + cfg.margin.bottom)
+ .attr("class", "radar"+id);
+ //Append a g element
+ var g = svg.append("g")
+ .attr("transform", "translate(" + (cfg.w/2 + cfg.margin.left) + "," + (cfg.h/2 + cfg.margin.top) + ")");
+
+ /////////////////////////////////////////////////////////
+ ////////// Glow filter for some extra pizzazz ///////////
+ /////////////////////////////////////////////////////////
+
+ //Filter for the outside glow
+ var filter = g.append('defs').append('filter').attr('id','glow'),
+ feGaussianBlur = filter.append('feGaussianBlur').attr('stdDeviation','2.5').attr('result','coloredBlur'),
+ feMerge = filter.append('feMerge'),
+ feMergeNode_1 = feMerge.append('feMergeNode').attr('in','coloredBlur'),
+ feMergeNode_2 = feMerge.append('feMergeNode').attr('in','SourceGraphic');
+
+ /////////////////////////////////////////////////////////
+ /////////////// Draw the Circular grid //////////////////
+ /////////////////////////////////////////////////////////
+
+ //Wrapper for the grid & axes
+ var axisGrid = g.append("g").attr("class", "axisWrapper");
+
+ //Draw the background circles
+ axisGrid.selectAll(".levels")
+ .data(d3.range(1,(cfg.levels+1)).reverse())
+ .enter()
+ .append("circle")
+ .attr("class", "gridCircle")
+ .attr("r", function(d, i){return radius/cfg.levels*d;})
+ .style("fill", "#CDCDCD")
+ .style("stroke", "#CDCDCD")
+ .style("fill-opacity", cfg.opacityCircles)
+ .style("filter" , "url(#glow)");
+
+ //Text indicating at what % each level is
+ axisGrid.selectAll(".axisLabel")
+ .data(d3.range(1,(cfg.levels+1)).reverse())
+ .enter().append("text")
+ .attr("class", "axisLabel")
+ .attr("x", 4)
+ .attr("y", function(d){return -d*radius/cfg.levels;})
+ .attr("dy", "0.4em")
+ .style("font-size", "10px")
+ .attr("fill", "#737373")
+ .text(function(d,i) { return Format(maxValue * d/cfg.levels); });
+
+ /////////////////////////////////////////////////////////
+ //////////////////// Draw the axes //////////////////////
+ /////////////////////////////////////////////////////////
+
+ //Create the straight lines radiating outward from the center
+ var axis = axisGrid.selectAll(".axis")
+ .data(allAxis)
+ .enter()
+ .append("g")
+ .attr("class", "axis");
+ //Append the lines
+ axis.append("line")
+ .attr("x1", 0)
+ .attr("y1", 0)
+ .attr("x2", function(d, i){ return rScale(maxValue*1.1) * Math.cos(angleSlice*i - Math.PI/2); })
+ .attr("y2", function(d, i){ return rScale(maxValue*1.1) * Math.sin(angleSlice*i - Math.PI/2); })
+ .attr("class", "line")
+ .style("stroke", "white")
+ .style("stroke-width", "2px");
+
+ //Append the labels at each axis
+ axis.append("text")
+ .attr("class", "legend")
+ .style("font-size", "11px")
+ .attr("text-anchor", "middle")
+ .attr("dy", "0.35em")
+ .attr("x", function(d, i){ return rScale(maxValue * cfg.labelFactor) * Math.cos(angleSlice*i - Math.PI/2); })
+ .attr("y", function(d, i){ return rScale(maxValue * cfg.labelFactor) * Math.sin(angleSlice*i - Math.PI/2); })
+ .text(function(d){return d})
+ .call(wrap, cfg.wrapWidth);
+
+ /////////////////////////////////////////////////////////
+ ///////////// Draw the radar chart blobs ////////////////
+ /////////////////////////////////////////////////////////
+
+ //The radial line function
+ var radarLine = d3.svg.line.radial()
+ .interpolate("linear-closed")
+ .radius(function(d) { return rScale(d.value); })
+ .angle(function(d,i) { return i*angleSlice; });
+
+ if(cfg.roundStrokes) {
+ radarLine.interpolate("cardinal-closed");
+ }
+
+ //Create a wrapper for the blobs
+ var blobWrapper = g.selectAll(".radarWrapper")
+ .data(data)
+ .enter().append("g")
+ .attr("class", "radarWrapper");
+
+ //Append the backgrounds
+ blobWrapper
+ .append("path")
+ .attr("class", "radarArea")
+ .attr("d", function(d,i) { return radarLine(d); })
+ .style("fill", function(d,i) { return cfg.color(i); })
+ .style("fill-opacity", cfg.opacityArea)
+ .on('mouseover', function (d,i){
+ //Dim all blobs
+ d3.selectAll(".radarArea")
+ .transition().duration(200)
+ .style("fill-opacity", 0.1);
+ //Bring back the hovered over blob
+ d3.select(this)
+ .transition().duration(200)
+ .style("fill-opacity", 0.7);
+ })
+ .on('mouseout', function(){
+ //Bring back all blobs
+ d3.selectAll(".radarArea")
+ .transition().duration(200)
+ .style("fill-opacity", cfg.opacityArea);
+ });
+
+ //Create the outlines
+ blobWrapper.append("path")
+ .attr("class", "radarStroke")
+ .attr("d", function(d,i) { return radarLine(d); })
+ .style("stroke-width", cfg.strokeWidth + "px")
+ .style("stroke", function(d,i) { return cfg.color(i); })
+ .style("fill", "none")
+ .style("filter" , "url(#glow)");
+
+ //Append the circles
+ blobWrapper.selectAll(".radarCircle")
+ .data(function(d,i) { return d; })
+ .enter().append("circle")
+ .attr("class", "radarCircle")
+ .attr("r", cfg.dotRadius)
+ .attr("cx", function(d,i){ return rScale(d.value) * Math.cos(angleSlice*i - Math.PI/2); })
+ .attr("cy", function(d,i){ return rScale(d.value) * Math.sin(angleSlice*i - Math.PI/2); })
+ .style("fill", function(d,i,j) { return cfg.color(j); })
+ .style("fill-opacity", 0.8);
+
+ /////////////////////////////////////////////////////////
+ //////// Append invisible circles for tooltip ///////////
+ /////////////////////////////////////////////////////////
+
+ //Wrapper for the invisible circles on top
+ var blobCircleWrapper = g.selectAll(".radarCircleWrapper")
+ .data(data)
+ .enter().append("g")
+ .attr("class", "radarCircleWrapper");
+
+ //Append a set of invisible circles on top for the mouseover pop-up
+ blobCircleWrapper.selectAll(".radarInvisibleCircle")
+ .data(function(d,i) { return d; })
+ .enter().append("circle")
+ .attr("class", "radarInvisibleCircle")
+ .attr("r", cfg.dotRadius*1.5)
+ .attr("cx", function(d,i){ return rScale(d.value) * Math.cos(angleSlice*i - Math.PI/2); })
+ .attr("cy", function(d,i){ return rScale(d.value) * Math.sin(angleSlice*i - Math.PI/2); })
+ .style("fill", "none")
+ .style("pointer-events", "all")
+ .on("mouseover", function(d,i) {
+ newX = parseFloat(d3.select(this).attr('cx')) - 10;
+ newY = parseFloat(d3.select(this).attr('cy')) - 10;
+
+ tooltip
+ .attr('x', newX)
+ .attr('y', newY)
+ .text(Format(d.value))
+ .transition().duration(200)
+ .style('opacity', 1);
+ })
+ .on("mouseout", function(){
+ tooltip.transition().duration(200)
+ .style("opacity", 0);
+ });
+
+ //Set up the small tooltip for when you hover over a circle
+ var tooltip = g.append("text")
+ .attr("class", "tooltip")
+ .style("opacity", 0);
+
+ /////////////////////////////////////////////////////////
+ /////////////////// Helper Function /////////////////////
+ /////////////////////////////////////////////////////////
+
+ //Taken from http://bl.ocks.org/mbostock/7555321
+ //Wraps SVG text
+ function wrap(text, width) {
+ text.each(function() {
+ var text = d3.select(this),
+ words = text.text().split(/\s+/).reverse(),
+ word,
+ line = [],
+ lineNumber = 0,
+ lineHeight = 1.4, // ems
+ y = text.attr("y"),
+ x = text.attr("x"),
+ dy = parseFloat(text.attr("dy")),
+ tspan = text.text(null).append("tspan").attr("x", x).attr("y", y).attr("dy", dy + "em");
+
+ while (word = words.pop()) {
+ line.push(word);
+ tspan.text(line.join(" "));
+ if (tspan.node().getComputedTextLength() > width) {
+ line.pop();
+ tspan.text(line.join(" "));
+ line = [word];
+ tspan = text.append("tspan").attr("x", x).attr("y", y).attr("dy", ++lineNumber * lineHeight + dy + "em").text(word);
+ }
+ }
+ });
+ }//wrap
+
+},
+ overview() {
+ /* Radar chart design created by Nadieh Bremer - VisualCinnamon.com */
+
+ //////////////////////////////////////////////////////////////
+ //////////////////////// Set-Up //////////////////////////////
+ //////////////////////////////////////////////////////////////
+
+ var margin = {top: 50, right: 50, bottom: 50, left: 50},
+ width = Math.min(420, window.innerWidth - 10) - margin.left - margin.right,
+ height = Math.min(width, window.innerHeight - margin.top - margin.bottom - 20);
+
+ //////////////////////////////////////////////////////////////
+ ////////////////////////// Data //////////////////////////////
+ //////////////////////////////////////////////////////////////
+
+ var data = [
+ [
+ {axis:"KNN",value:1},
+ {axis:"RF",value:0.30},
+ {axis:"Alg3",value:0.55},
+ {axis:"Alg4",value:0.68},
+ {axis:"Alg5",value:0.22},
+ {axis:"Alg6",value:0.28},
+ {axis:"Alg7",value:0.55},
+ {axis:"Alg9",value:0.68},
+ {axis:"Alg9",value:0.22},
+ {axis:"Alg10",value:0.28},
+ ],[
+ {axis:"KNN",value:0.05},
+ {axis:"RF",value:0.18},
+ {axis:"Alg3",value:0.25},
+ {axis:"Alg4",value:0.28},
+ {axis:"Alg5",value:0.22},
+ {axis:"Alg6",value:0.18},
+ {axis:"Alg7",value:0.45},
+ {axis:"Alg9",value:0.18},
+ {axis:"Alg9",value:0.22},
+ {axis:"Alg10",value:0.18},
+ ],
+ ];
+ //////////////////////////////////////////////////////////////
+ //////////////////// Draw the Chart //////////////////////////
+ //////////////////////////////////////////////////////////////
+
+ var color = d3.scale.ordinal()
+ .range(["#EDC951","#CC333F","#00A0B0"]);
+
+ var radarChartOptions = {
+ w: width,
+ h: height,
+ margin: margin,
+ maxValue: 0.5,
+ levels: 5,
+ roundStrokes: true,
+ color: color
+ };
+ //Call function to draw the Radar chart
+ this.RadarChart("#overview", data, radarChartOptions);
+ },
draw () {
// Clear Heatmap first
var svg = d3.select("#overview");
@@ -47,7 +378,6 @@ export default {
width = widthinter,
height = heightinter,
maxBarHeight = height / 2 - (margin + 70);
-
var innerRadius = 0.1 * maxBarHeight; // innermost circle
var svg = d3.select('#overview')
@@ -595,11 +925,11 @@ export default {
mounted () {
EventBus.$on('updateFlagKNN', data => { this.FlagKNN = data })
EventBus.$on('updateFlagRF', data => { this.FlagRF = data })
- EventBus.$on('updateFlagKNN', this.draw)
- EventBus.$on('updateFlagRF', this.draw)
+ EventBus.$on('updateFlagKNN', this.overview)
+ EventBus.$on('updateFlagRF', this.overview)
EventBus.$on('sendParameters', data => { this.storeParameters = data })
EventBus.$on('updateActiveModels', data => { this.storeActiveModels = data })
- EventBus.$on('updateActiveModels', this.draw)
+ EventBus.$on('updateActiveModels', this.overview)
//EventBus.$on('updateActiveModels', this.drawEncodings)
EventBus.$on('Responsive', data => {
@@ -611,7 +941,7 @@ export default {
EventBus.$on('resetViews', this.reset)
EventBus.$on('alternateFlagLock', this.updateFlags)
- EventBus.$on('alternateFlagLock', this.draw)
+ EventBus.$on('alternateFlagLock', this.overview)
}
}
@@ -688,4 +1018,8 @@ export default {
.filled {
fill: url(#mainGradient);
}
+
+#overview {
+ min-height: 430px;
+}
\ No newline at end of file
diff --git a/frontend/src/components/PerMetricBarChart.vue b/frontend/src/components/PerMetricBarChart.vue
index 7b77eb45e..f6df22be6 100644
--- a/frontend/src/components/PerMetricBarChart.vue
+++ b/frontend/src/components/PerMetricBarChart.vue
@@ -26,8 +26,8 @@ export default {
} else {
metricsPerModelSel = this.SelBarChartMetrics
}
- var width = this.WH[0]*3 // interactive visualization
- var height = this.WH[1]/2 // interactive visualization
+ var width = this.WH[0]*6.5 // interactive visualization
+ var height = this.WH[1]*0.5 // interactive visualization
var trace1 = {
x: ['Acc','F1s','Pre','Rec','Jac'],
y: metricsPerModel,
diff --git a/frontend/src/components/PredictionsSpace.vue b/frontend/src/components/PredictionsSpace.vue
index 4f77c9362..8d6d7db1a 100644
--- a/frontend/src/components/PredictionsSpace.vue
+++ b/frontend/src/components/PredictionsSpace.vue
@@ -1,11 +1,17 @@
- Projection Selection:
-
-
+
+
+
+ Projection Selection:
+
+
+
+
+