├── .python-version ├── README.md ├── eep567-project-report.pdf ├── runlocal.sh ├── pyproject.toml ├── a2-15s.ipynb ├── a2-15s.py ├── a2-60s.ipynb ├── a2-60s.py ├── a2-30s.py ├── a2-30s.ipynb ├── project-eep567.md └── timeout120_tree.dot /.python-version: -------------------------------------------------------------------------------- 1 | 3.11 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # eep567 2 | class project 3 | -------------------------------------------------------------------------------- /eep567-project-report.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/patterns/eep567/main/eep567-project-report.pdf -------------------------------------------------------------------------------- /runlocal.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | 4 | # also possible to activate manually 5 | #source .venv/bin/activate 6 | #python local.py 7 | 8 | # and to purge 9 | #uv cache clean 10 | 11 | # command to run script 12 | ##uv run --with tensorflow local.py 13 | ##uv run --with tensorflow a2-15s.py 14 | ##uv run --with tensorflow a2-15s-novpn.py 15 | ##uv run --with tensorflow a2-60s.py 16 | uv run --with tensorflow a2-30s.py 17 | 18 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | name = "local-hw2" 3 | version = "0.1.0" 4 | description = "Can we use UV to run notebook converted to python, locally" 5 | readme = "README.md" 6 | requires-python = ">=3.11" 7 | dependencies = [ 8 | "assertpy>=1.1", 9 | "graphviz>=0.20.3", 10 | "imutils>=0.5.4", 11 | "matplotlib>=3.10.0", 12 | "numpy<2", 13 | "opencv-python>=4.11.0.86", 14 | "pandas>=2.2.3", 15 | "pillow>=11.1.0", 16 | "scikit-learn>=1.6.1", 17 | "tensorflow>=2.14.0", 18 | "tqdm>=4.67.1", 19 | ] 20 | -------------------------------------------------------------------------------- /a2-15s.ipynb: -------------------------------------------------------------------------------- 1 | {"cells":[{"cell_type":"code","execution_count":4,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":3150,"status":"ok","timestamp":1742089895781,"user":{"displayName":"Hsin-ih “興怡” Tu","userId":"08845434978895628909"},"user_tz":420},"id":"3wvh7u8RHZ33","outputId":"09f3379b-11db-44ec-da76-cf7ce6977cfe"},"outputs":[{"output_type":"stream","name":"stdout","text":["Loading VPN 15s (ftm) ds.\n","Train set size: 7834\n","Test set size: 1959\n"," precision recall f1-score support\n","\n"," 0 0.73 0.75 0.74 513\n"," 1 0.46 0.42 0.44 233\n"," 2 0.73 0.66 0.69 411\n"," 3 0.60 0.74 0.66 95\n"," 4 0.66 0.74 0.70 170\n"," 5 0.79 0.81 0.80 108\n"," 6 0.96 0.97 0.96 429\n","\n"," accuracy 0.74 1959\n"," macro avg 0.71 0.73 0.71 1959\n","weighted avg 0.74 0.74 0.74 1959\n","\n","KNN F1: 0.761669823337621\n","KNN precision: 0.8088180015531933\n","KNN recall: 0.7283956395963084\n","KNN report:\n"," precision recall f1-score support\n","\n"," 0 0.77 0.82 0.79 513\n"," 1 0.64 0.41 0.50 233\n"," 2 0.78 0.60 0.68 411\n"," 3 0.68 0.66 0.67 95\n"," 4 0.72 0.70 0.71 170\n"," 5 0.78 0.78 0.78 108\n"," 6 0.98 0.97 0.98 429\n","\n"," micro avg 0.80 0.74 0.77 1959\n"," macro avg 0.76 0.71 0.73 1959\n","weighted avg 0.79 0.74 0.76 1959\n"," samples avg 0.80 0.74 0.74 1959\n","\n"]}],"source":["\"\"\"\n","\n","# Note, in Colab that we use the UI to mount G-drive\n","\n","\"\"\"\n","\n","import os\n","from pathlib import Path\n","print(\"Loading VPN 15s (ftm) ds.\")\n","data_dir15 = Path(os.path.abspath(\"/content/drive/MyDrive/eep567/TimeBasedFeatures-Dataset-15s-VPN.arff\"))\n","\n","import pandas as pd\n","df = pd.read_csv(data_dir15)\n","####df.head()\n","####df.info()\n","####df[\"Unnamed: 23\"].value_counts()\n","####df.describe() #(shows max of 1000000 and min of 0 in Unnamed: 9; large variance in values)\n","proj_random_seed = 42\n","recursion_depth = df.shape[1] // 2 #(experimental depth as half of # columns)\n","\n","# derive feature / label subgroups from pool\n","# (skip the top 26 rows which are NaN)\n","# the \"Unnamed: 23\" column contains the network traffic category\n","features_pool = df.drop([\"Unnamed: 23\"], axis=1).values[26:]\n","category_pool = df[\"Unnamed: 23\"].values[26:]\n","from sklearn.model_selection import train_test_split\n","train_set, test_set, train_category, test_category = train_test_split(\n"," features_pool, category_pool, test_size=0.2, random_state=proj_random_seed\n",")\n","print(\"Train set size:\", len(train_category))\n","print(\"Test set size:\", len(test_category))\n","\n","# for decision trees, scaling is unnecessary. only use scaling with PCA\n","from sklearn.decomposition import PCA\n","from sklearn.pipeline import make_pipeline\n","from sklearn.preprocessing import StandardScaler\n","pca_pipeline = make_pipeline(StandardScaler(), PCA())\n","features_std_scaled = pca_pipeline.fit_transform(train_set)\n","\n","from sklearn.tree import DecisionTreeClassifier\n","from sklearn.preprocessing import OneHotEncoder\n","\n","ohenc = OneHotEncoder(handle_unknown='ignore')\n","many_observations_of_one_feature = train_category.reshape(-1,1)\n","fitted_categories = ohenc.fit(many_observations_of_one_feature)\n","# ~ print(fitted_categories.categories_)\n","# ~ print(many_observations_of_one_feature[:10])\n","\n","labels_train = ohenc.transform(many_observations_of_one_feature).toarray()\n","# regularize with max_depth\n","dtc_model = DecisionTreeClassifier(max_depth=recursion_depth, random_state=proj_random_seed)\n","dtc_model.fit(features_std_scaled, labels_train)\n","\n","# to inspect the tree (as plain text)\n","from sklearn import tree\n","tree_format_text = tree.export_text(dtc_model)\n","# ~ print(tree_format_text)\n","# to inspect the tree (as graphvis diagram)\n","# ~ category_columns = ohenc.get_feature_names_out()\n","# ~ tree.export_graphviz(\n","\t# ~ dtc_model,\n","\t# ~ out_file=\"timeout15_tree.dot\",\n","\t# ~ class_names=category_columns,\n","\t# ~ rounded=True,\n","\t# ~ filled=True\n","# ~ )\n","# ~ from graphviz import Source\n","# ~ Source.from_file(\"timeout15_tree.dot\")\n","\n","\n","\n","# ~ from sklearn.model_selection import cross_val_score\n","# ~ measure_performance = cross_val_score(dtc_model, features_std_scaled, labels_train , cv=10)\n","# ~ pd.Series(measure_performance).describe()\n","from sklearn.model_selection import cross_val_predict\n","# ~ labels_predict = cross_val_predict(dtc_model, features_std_scaled, labels_train , cv=10)\n","# ~ decode_predict = labels_predict.argmax(axis=1)\n","# ~ decode_train = labels_train.argmax(axis=1)\n","\n","# run the model on the test data set and show the classification report\n","# (the classification report has a line for each category, so we should display the name instead of 0-6)\n","n_observations_test_category = test_category.reshape(-1,1)\n","labels_test = ohenc.transform(n_observations_test_category).toarray()\n","features_scaled_test = pca_pipeline.fit_transform(test_set)\n","\n","labels_predict_test = cross_val_predict(dtc_model, features_scaled_test, labels_test , cv=10)\n","decode_predict_test = labels_predict_test.argmax(axis=1)\n","decode_test = labels_test.argmax(axis=1)\n","from sklearn.metrics import classification_report\n","classifi_rpt = classification_report(decode_test, decode_predict_test)\n","print(classifi_rpt)\n","\n","# nearest neighbor algo\n","from sklearn.neighbors import KNeighborsClassifier\n","knn_clf = KNeighborsClassifier()\n","knn_clf.fit(features_std_scaled, labels_train)\n","knn_train_predict = cross_val_predict(knn_clf, features_std_scaled, labels_train , cv=10)\n","from sklearn.metrics import f1_score\n","# macro means all labels are equally important (versus weighted)\n","knn_f1_score = f1_score(labels_train, knn_train_predict, average='macro')\n","print(\"KNN F1:\", knn_f1_score)\n","from sklearn.metrics import precision_score, recall_score\n","knn_pr_score = precision_score(labels_train, knn_train_predict, average='macro')\n","knn_rc_score = recall_score(labels_train, knn_train_predict, average='macro')\n","print(\"KNN precision:\", knn_pr_score)\n","print(\"KNN recall:\", knn_rc_score)\n","import numpy as np\n","# we are specifying np.nan in the report to address the warning of unpredicted labels\n","knn_validat_predict = cross_val_predict(knn_clf, features_scaled_test, labels_test , cv=10)\n","# ~ knn_classifi_rpt = classification_report(labels_test, knn_validat_predict)\n","knn_classifi_rpt = classification_report(labels_test, knn_validat_predict, zero_division=np.nan)\n","print(\"KNN report:\\n\", knn_classifi_rpt)\n","\n"]}],"metadata":{"colab":{"provenance":[{"file_id":"1_qrYahOhqpsoOpt7po6TBSGyUNuyUaxw","timestamp":1741907427826}],"mount_file_id":"1gm4ecQuuyAxr-z-hX_jOSp6ZGBmyLpq1","authorship_tag":"ABX9TyPcuDxSo9gXbhhproU6OdFj"},"kernelspec":{"display_name":"Python 3","name":"python3"},"language_info":{"name":"python"}},"nbformat":4,"nbformat_minor":0} -------------------------------------------------------------------------------- /a2-15s.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """a2-15s.ipynb 3 | 4 | Automatically generated by Colab. 5 | 6 | Original file is located at 7 | https://colab.research.google.com/drive/1_qrYahOhqpsoOpt7po6TBSGyUNuyUaxw 8 | """ 9 | 10 | """ 11 | 12 | # Note, in Colab that we use the UI to mount G-drive 13 | 14 | """ 15 | 16 | import os 17 | from pathlib import Path 18 | import tensorflow as tf 19 | from pathlib import Path 20 | # specify (archive) in local fs 21 | dataset_url = "file://" + os.path.abspath("./TimeBasedFeatures-Dataset-15s-VPN.arff") 22 | ds_name = "TimeBasedFeatures-Dataset-15s-VPN" 23 | archive = tf.keras.utils.get_file(fname=ds_name, origin=dataset_url, extract=False) 24 | data_dir = Path(archive).parent 25 | ds_home = Path.home().joinpath(".keras/datasets") 26 | assert data_dir==ds_home, "expect that ds is extracted under ~/.keras/dataset" 27 | print("Loading VPN 15s (ftm) ds.") 28 | 29 | import pandas as pd 30 | df = pd.read_csv(archive) 31 | ####df.head() 32 | ####df.info() 33 | ####df["Unnamed: 23"].value_counts() 34 | ####df.describe() #(shows max of 1000000 and min of 0 in Unnamed: 9; large variance in values) 35 | proj_random_seed = 42 36 | recursion_depth = df.shape[1] // 2 #(experimental depth as half of # columns) 37 | 38 | 39 | # derive feature / label subgroups from pool 40 | # (skip the top 26 rows which are NaN) 41 | # the "Unnamed: 23" column contains the network traffic category 42 | features_pool = df.drop(["Unnamed: 23"], axis=1).values[26:] 43 | category_pool = df["Unnamed: 23"].values[26:] 44 | from sklearn.model_selection import train_test_split 45 | train_set, test_set, train_category, test_category = train_test_split( 46 | features_pool, category_pool, test_size=0.2, random_state=proj_random_seed 47 | ) 48 | print("Train set size:", len(train_category)) 49 | print("Test set size:", len(test_category)) 50 | 51 | # for decision trees, scaling is unnecessary. only use scaling with PCA 52 | from sklearn.decomposition import PCA 53 | from sklearn.pipeline import make_pipeline 54 | from sklearn.preprocessing import StandardScaler 55 | pca_pipeline = make_pipeline(StandardScaler(), PCA()) 56 | features_std_scaled = pca_pipeline.fit_transform(train_set) 57 | 58 | from sklearn.tree import DecisionTreeClassifier 59 | from sklearn.preprocessing import OneHotEncoder 60 | 61 | ohenc = OneHotEncoder(handle_unknown='ignore') 62 | many_observations_of_one_feature = train_category.reshape(-1,1) 63 | fitted_categories = ohenc.fit(many_observations_of_one_feature) 64 | # ~ print(fitted_categories.categories_) 65 | # ~ print(many_observations_of_one_feature[:10]) 66 | 67 | labels_train = ohenc.transform(many_observations_of_one_feature).toarray() 68 | 69 | # regularize with max_depth 70 | dtc_model = DecisionTreeClassifier(max_depth=recursion_depth, random_state=proj_random_seed) 71 | dtc_model.fit(features_std_scaled, labels_train) 72 | 73 | # to inspect the tree (as plain text) 74 | from sklearn import tree 75 | tree_format_text = tree.export_text(dtc_model) 76 | # ~ print(tree_format_text) 77 | # to inspect the tree (as graphvis diagram) 78 | category_columns = ohenc.get_feature_names_out() 79 | tree.export_graphviz( 80 | dtc_model, 81 | out_file="timeout15_tree.dot", 82 | class_names=category_columns, 83 | rounded=True, 84 | filled=True 85 | ) 86 | # ~ from graphviz import Source 87 | # ~ Source.from_file("timeout15_tree.dot") 88 | 89 | 90 | 91 | # ~ from sklearn.model_selection import cross_val_score 92 | # ~ measure_performance = cross_val_score(dtc_model, features_std_scaled, labels_train , cv=10) 93 | # ~ pd.Series(measure_performance).describe() 94 | from sklearn.model_selection import cross_val_predict 95 | # ~ labels_predict = cross_val_predict(dtc_model, features_std_scaled, labels_train , cv=10) 96 | # ~ decode_predict = labels_predict.argmax(axis=1) 97 | # ~ decode_train = labels_train.argmax(axis=1) 98 | 99 | # run the model on the test data set and show the classification report 100 | # (the classification report has a line for each category, so we should display the name instead of 0-6) 101 | n_observations_test_category = test_category.reshape(-1,1) 102 | labels_test = ohenc.transform(n_observations_test_category).toarray() 103 | features_scaled_test = pca_pipeline.fit_transform(test_set) 104 | 105 | labels_predict_test = cross_val_predict(dtc_model, features_scaled_test, labels_test , cv=10) 106 | decode_predict_test = labels_predict_test.argmax(axis=1) 107 | decode_test = labels_test.argmax(axis=1) 108 | from sklearn.metrics import classification_report 109 | classifi_rpt = classification_report(decode_test, decode_predict_test) 110 | print(classifi_rpt) 111 | 112 | # nearest neighbor algo 113 | from sklearn.neighbors import KNeighborsClassifier 114 | knn_clf = KNeighborsClassifier() 115 | knn_clf.fit(features_std_scaled, labels_train) 116 | knn_train_predict = cross_val_predict(knn_clf, features_std_scaled, labels_train , cv=10) 117 | from sklearn.metrics import f1_score 118 | # macro means all labels are equally important (versus weighted) 119 | knn_f1_score = f1_score(labels_train, knn_train_predict, average='macro') 120 | print("KNN F1:", knn_f1_score) 121 | from sklearn.metrics import precision_score, recall_score 122 | knn_pr_score = precision_score(labels_train, knn_train_predict, average='macro') 123 | knn_rc_score = recall_score(labels_train, knn_train_predict, average='macro') 124 | print("KNN precision:", knn_pr_score) 125 | print("KNN recall:", knn_rc_score) 126 | import numpy as np 127 | # we are specifying np.nan in the report to address the warning of unpredicted labels 128 | knn_validat_predict = cross_val_predict(knn_clf, features_scaled_test, labels_test , cv=10) 129 | # ~ knn_classifi_rpt = classification_report(labels_test, knn_validat_predict) 130 | knn_classifi_rpt = classification_report(labels_test, knn_validat_predict, zero_division=np.nan) 131 | print("KNN report:\n", knn_classifi_rpt) 132 | 133 | 134 | # local test pass output: 135 | # ~ Test set size: 1959 136 | # ~ precision recall f1-score support 137 | 138 | # ~ 0 0.73 0.75 0.74 513 139 | # ~ 1 0.46 0.42 0.44 233 140 | # ~ 2 0.73 0.66 0.69 411 141 | # ~ 3 0.60 0.74 0.66 95 142 | # ~ 4 0.66 0.74 0.70 170 143 | # ~ 5 0.79 0.81 0.80 108 144 | # ~ 6 0.96 0.97 0.96 429 145 | 146 | # ~ accuracy 0.74 1959 147 | # ~ macro avg 0.71 0.73 0.71 1959 148 | # ~ weighted avg 0.74 0.74 0.74 1959 149 | 150 | # ~ KNN F1: 0.761450984391107 151 | # ~ KNN precision: 0.8087443696159463 152 | # ~ KNN recall: 0.728034889235558 153 | # ~ KNN report: 154 | # ~ precision recall f1-score support 155 | 156 | # ~ 0 0.77 0.82 0.79 513 157 | # ~ 1 0.65 0.41 0.50 233 158 | # ~ 2 0.78 0.60 0.68 411 159 | # ~ 3 0.68 0.66 0.67 95 160 | # ~ 4 0.72 0.70 0.71 170 161 | # ~ 5 0.78 0.78 0.78 108 162 | # ~ 6 0.98 0.97 0.98 429 163 | 164 | # ~ micro avg 0.80 0.74 0.77 1959 165 | # ~ macro avg 0.77 0.71 0.73 1959 166 | # ~ weighted avg 0.79 0.74 0.76 1959 167 | # ~ samples avg 0.80 0.74 0.74 1959 168 | 169 | -------------------------------------------------------------------------------- /a2-60s.ipynb: -------------------------------------------------------------------------------- 1 | {"cells":[{"cell_type":"code","execution_count":1,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":15551,"status":"ok","timestamp":1742090209237,"user":{"displayName":"Hsin-ih “興怡” Tu","userId":"08845434978895628909"},"user_tz":420},"id":"3wvh7u8RHZ33","outputId":"64630e71-f7a4-472c-a83d-c0d772964143"},"outputs":[{"output_type":"stream","name":"stdout","text":["Loading VPN 60s (ftm) ds.\n","Train set size: 5548\n","Test set size: 1387\n"," precision recall f1-score support\n","\n"," 0 0.77 0.82 0.80 513\n"," 1 0.33 0.28 0.30 104\n"," 2 0.53 0.45 0.49 190\n"," 3 0.68 0.65 0.66 71\n"," 4 0.73 0.74 0.73 151\n"," 5 0.56 0.65 0.60 34\n"," 6 0.87 0.90 0.88 324\n","\n"," accuracy 0.73 1387\n"," macro avg 0.64 0.64 0.64 1387\n","weighted avg 0.72 0.73 0.72 1387\n","\n","KNN F1: 0.7458656152835103\n","KNN precision: 0.7879925162988884\n","KNN recall: 0.7146233833289954\n","KNN report:\n"," precision recall f1-score support\n","\n"," 0 0.77 0.83 0.80 513\n"," 1 0.63 0.26 0.37 104\n"," 2 0.74 0.37 0.50 190\n"," 3 0.67 0.55 0.60 71\n"," 4 0.69 0.66 0.68 151\n"," 5 0.76 0.56 0.64 34\n"," 6 0.89 0.86 0.87 324\n","\n"," micro avg 0.78 0.69 0.73 1387\n"," macro avg 0.74 0.59 0.64 1387\n","weighted avg 0.77 0.69 0.72 1387\n"," samples avg 0.78 0.69 0.69 1387\n","\n"]}],"source":["\"\"\"\n","\n","# Note, in Colab that we use the UI to mount G-drive\n","\n","\"\"\"\n","\n","import os\n","from pathlib import Path\n","\n","print(\"Loading VPN 60s (ftm) ds.\")\n","data_dir60 = Path(os.path.abspath(\"/content/drive/MyDrive/eep567/TimeBasedFeatures-Dataset-60s-VPN.arff\"))\n","\n","import pandas as pd\n","df = pd.read_csv(data_dir60)\n","####df.head()\n","####df.info()\n","####df[\"Unnamed: 23\"].value_counts()\n","####df.describe() #(shows max of 1000000 and min of 0 in Unnamed: 9; large variance in values)\n","proj_random_seed = 42\n","recursion_depth = df.shape[1] // 2 #(experimental depth as half of # columns)\n","\n","# derive feature / label subgroups from pool\n","# (skip the top 26 rows which are NaN)\n","# the \"Unnamed: 23\" column contains the network traffic category\n","features_pool = df.drop([\"Unnamed: 23\"], axis=1).values[26:]\n","category_pool = df[\"Unnamed: 23\"].values[26:]\n","from sklearn.model_selection import train_test_split\n","train_set, test_set, train_category, test_category = train_test_split(\n"," features_pool, category_pool, test_size=0.2, random_state=proj_random_seed\n",")\n","print(\"Train set size:\", len(train_category))\n","print(\"Test set size:\", len(test_category))\n","\n","# for decision trees, scaling is unnecessary. only use scaling with PCA\n","from sklearn.decomposition import PCA\n","from sklearn.pipeline import make_pipeline\n","from sklearn.preprocessing import StandardScaler\n","pca_pipeline = make_pipeline(StandardScaler(), PCA())\n","features_std_scaled = pca_pipeline.fit_transform(train_set)\n","\n","from sklearn.tree import DecisionTreeClassifier\n","from sklearn.preprocessing import OneHotEncoder\n","\n","ohenc = OneHotEncoder(handle_unknown='ignore')\n","many_observations_of_one_feature = train_category.reshape(-1,1)\n","fitted_categories = ohenc.fit(many_observations_of_one_feature)\n","# ~ print(fitted_categories.categories_)\n","# ~ print(many_observations_of_one_feature[:10])\n","\n","labels_train = ohenc.transform(many_observations_of_one_feature).toarray()\n","# regularize with max_depth\n","dtc_model = DecisionTreeClassifier(max_depth=recursion_depth, random_state=proj_random_seed)\n","dtc_model.fit(features_std_scaled, labels_train)\n","\n","# to inspect the tree (as plain text)\n","from sklearn import tree\n","tree_format_text = tree.export_text(dtc_model)\n","# ~ print(tree_format_text)\n","# to inspect the tree (as graphvis diagram)\n","# ~ category_columns = ohenc.get_feature_names_out()\n","# ~ tree.export_graphviz(\n","\t# ~ dtc_model,\n","\t# ~ out_file=\"timeout60_tree.dot\",\n","\t# ~ class_names=category_columns,\n","\t# ~ rounded=True,\n","\t# ~ filled=True\n","# ~ )\n","# ~ from graphviz import Source\n","# ~ Source.from_file(\"timeout60_tree.dot\")\n","\n","\n","# ~ from sklearn.model_selection import cross_val_score\n","# ~ measure_performance = cross_val_score(dtc_model, features_std_scaled, labels_train , cv=10)\n","# ~ pd.Series(measure_performance).describe()\n","from sklearn.model_selection import cross_val_predict\n","# ~ labels_predict = cross_val_predict(dtc_model, features_std_scaled, labels_train , cv=10)\n","# ~ decode_predict = labels_predict.argmax(axis=1)\n","# ~ decode_train = labels_train.argmax(axis=1)\n","# ~ from sklearn.metrics import confusion_matrix\n","# ~ cm = confusion_matrix(decode_train, decode_predict)\n","# ~ print(cm)\n","# ~ from sklearn.metrics import precision_score, recall_score\n","# ~ pr_score = precision_score(decode_train, decode_predict, average='weighted')\n","# ~ rc_score = recall_score(decode_train, decode_predict, average='weighted')\n","# ~ print(pr_score)\n","# ~ print(rc_score)\n","# ~ from sklearn.metrics import f1_score\n","# ~ combo_score = f1_score(decode_train, decode_predict, average='weighted')\n","# ~ print(combo_score)\n","\n","n_observations_test_category = test_category.reshape(-1,1)\n","labels_test = ohenc.transform(n_observations_test_category).toarray()\n","features_scaled_test = pca_pipeline.fit_transform(test_set)\n","\n","labels_predict_test = cross_val_predict(dtc_model, features_scaled_test, labels_test , cv=10)\n","decode_predict_test = labels_predict_test.argmax(axis=1)\n","decode_test = labels_test.argmax(axis=1)\n","from sklearn.metrics import classification_report\n","classifi_rpt = classification_report(decode_test, decode_predict_test)\n","print(classifi_rpt)\n","\n","\n","# nearest neighbor algo\n","from sklearn.neighbors import KNeighborsClassifier\n","knn_clf = KNeighborsClassifier()\n","knn_clf.fit(features_std_scaled, labels_train)\n","knn_train_predict = cross_val_predict(knn_clf, features_std_scaled, labels_train , cv=10)\n","from sklearn.metrics import f1_score\n","# macro means all labels are equally important (versus weighted)\n","knn_f1_score = f1_score(labels_train, knn_train_predict, average='macro')\n","print(\"KNN F1:\", knn_f1_score)\n","from sklearn.metrics import precision_score, recall_score\n","knn_pr_score = precision_score(labels_train, knn_train_predict, average='macro')\n","knn_rc_score = recall_score(labels_train, knn_train_predict, average='macro')\n","print(\"KNN precision:\", knn_pr_score)\n","print(\"KNN recall:\", knn_rc_score)\n","import numpy as np\n","# we are specifying np.nan in the report to address the warning of unpredicted labels\n","knn_validat_predict = cross_val_predict(knn_clf, features_scaled_test, labels_test , cv=10)\n","# ~ knn_classifi_rpt = classification_report(labels_test, knn_validat_predict)\n","knn_classifi_rpt = classification_report(labels_test, knn_validat_predict, zero_division=np.nan)\n","print(\"KNN report:\\n\", knn_classifi_rpt)\n"]}],"metadata":{"colab":{"provenance":[{"file_id":"1gm4ecQuuyAxr-z-hX_jOSp6ZGBmyLpq1","timestamp":1742080525423},{"file_id":"1_qrYahOhqpsoOpt7po6TBSGyUNuyUaxw","timestamp":1741907427826}],"mount_file_id":"1AupDWI70d_4RYIvLMwa9bW_tNhoQhbPr","authorship_tag":"ABX9TyMrrQvpsYgteCU19FodD4M3"},"kernelspec":{"display_name":"Python 3","name":"python3"},"language_info":{"name":"python"}},"nbformat":4,"nbformat_minor":0} -------------------------------------------------------------------------------- /a2-60s.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """a2-60s.ipynb 3 | 4 | Automatically generated by Colab. 5 | 6 | Original file is located at 7 | https://colab.research.google.com/drive/1_qrYahOhqpsoOpt7po6TBSGyUNuyUaxw 8 | """ 9 | 10 | """ 11 | 12 | # Note, in Colab that we use the UI to mount G-drive 13 | 14 | """ 15 | 16 | import os 17 | from pathlib import Path 18 | import tensorflow as tf 19 | from pathlib import Path 20 | # specify (archive) in local fs 21 | dataset_url = "file://" + os.path.abspath("./TimeBasedFeatures-Dataset-60s-VPN.arff") 22 | ds_name = "TimeBasedFeatures-Dataset-60s-VPN" 23 | archive = tf.keras.utils.get_file(fname=ds_name, origin=dataset_url, extract=False) 24 | data_dir = Path(archive).parent 25 | ds_home = Path.home().joinpath(".keras/datasets") 26 | assert data_dir==ds_home, "expect that ds is extracted under ~/.keras/dataset" 27 | print("Loading VPN 60s (ftm) ds.") 28 | 29 | import pandas as pd 30 | df = pd.read_csv(archive) 31 | ####df.head() 32 | ####df.info() 33 | ####df["Unnamed: 23"].value_counts() 34 | ####df.describe() #(shows max of 1000000 and min of 0 in Unnamed: 9; large variance in values) 35 | proj_random_seed = 42 36 | recursion_depth = df.shape[1] // 2 #(experimental depth as half of # columns) 37 | 38 | 39 | # derive feature / label subgroups from pool 40 | # (skip the top 26 rows which are NaN) 41 | # the "Unnamed: 23" column contains the network traffic category 42 | features_pool = df.drop(["Unnamed: 23"], axis=1).values[26:] 43 | category_pool = df["Unnamed: 23"].values[26:] 44 | from sklearn.model_selection import train_test_split 45 | train_set, test_set, train_category, test_category = train_test_split( 46 | features_pool, category_pool, test_size=0.2, random_state=proj_random_seed 47 | ) 48 | print("Train set size:", len(train_category)) 49 | print("Test set size:", len(test_category)) 50 | 51 | # for decision trees, scaling is unnecessary. only use scaling with PCA 52 | from sklearn.decomposition import PCA 53 | from sklearn.pipeline import make_pipeline 54 | from sklearn.preprocessing import StandardScaler 55 | pca_pipeline = make_pipeline(StandardScaler(), PCA()) 56 | features_std_scaled = pca_pipeline.fit_transform(train_set) 57 | 58 | from sklearn.tree import DecisionTreeClassifier 59 | from sklearn.preprocessing import OneHotEncoder 60 | 61 | ohenc = OneHotEncoder(handle_unknown='ignore') 62 | many_observations_of_one_feature = train_category.reshape(-1,1) 63 | fitted_categories = ohenc.fit(many_observations_of_one_feature) 64 | # ~ print(fitted_categories.categories_) 65 | # ~ print(many_observations_of_one_feature[:10]) 66 | 67 | labels_train = ohenc.transform(many_observations_of_one_feature).toarray() 68 | 69 | # regularize with max_depth 70 | dtc_model = DecisionTreeClassifier(max_depth=recursion_depth, random_state=proj_random_seed) 71 | dtc_model.fit(features_std_scaled, labels_train) 72 | 73 | # to inspect the tree (as plain text) 74 | from sklearn import tree 75 | tree_format_text = tree.export_text(dtc_model) 76 | # ~ print(tree_format_text) 77 | # to inspect the tree (as graphvis diagram) 78 | category_columns = ohenc.get_feature_names_out() 79 | tree.export_graphviz( 80 | dtc_model, 81 | out_file="timeout60_tree.dot", 82 | class_names=category_columns, 83 | rounded=True, 84 | filled=True 85 | ) 86 | # ~ from graphviz import Source 87 | # ~ Source.from_file("timeout60_tree.dot") 88 | 89 | 90 | # ~ from sklearn.model_selection import cross_val_score 91 | # ~ measure_performance = cross_val_score(dtc_model, features_std_scaled, labels_train , cv=10) 92 | # ~ pd.Series(measure_performance).describe() 93 | from sklearn.model_selection import cross_val_predict 94 | # ~ labels_predict = cross_val_predict(dtc_model, features_std_scaled, labels_train , cv=10) 95 | # ~ decode_predict = labels_predict.argmax(axis=1) 96 | # ~ decode_train = labels_train.argmax(axis=1) 97 | # ~ from sklearn.metrics import confusion_matrix 98 | # ~ cm = confusion_matrix(decode_train, decode_predict) 99 | # ~ print(cm) 100 | # ~ from sklearn.metrics import precision_score, recall_score 101 | # ~ pr_score = precision_score(decode_train, decode_predict, average='weighted') 102 | # ~ rc_score = recall_score(decode_train, decode_predict, average='weighted') 103 | # ~ print(pr_score) 104 | # ~ print(rc_score) 105 | # ~ from sklearn.metrics import f1_score 106 | # ~ combo_score = f1_score(decode_train, decode_predict, average='weighted') 107 | # ~ print(combo_score) 108 | 109 | # run the model on the test data set and show the classification report 110 | # (the classification report has a line for each category, so we should display the name instead of 0-6) 111 | n_observations_test_category = test_category.reshape(-1,1) 112 | labels_test = ohenc.transform(n_observations_test_category).toarray() 113 | features_scaled_test = pca_pipeline.fit_transform(test_set) 114 | labels_predict_test = cross_val_predict(dtc_model, features_scaled_test, labels_test , cv=10) 115 | decode_predict_test = labels_predict_test.argmax(axis=1) 116 | decode_test = labels_test.argmax(axis=1) 117 | from sklearn.metrics import classification_report 118 | classifi_rpt = classification_report(decode_test, decode_predict_test) 119 | print(classifi_rpt) 120 | 121 | # nearest neighbor algo 122 | from sklearn.neighbors import KNeighborsClassifier 123 | knn_clf = KNeighborsClassifier() 124 | knn_clf.fit(features_std_scaled, labels_train) 125 | knn_train_predict = cross_val_predict(knn_clf, features_std_scaled, labels_train , cv=10) 126 | from sklearn.metrics import f1_score 127 | # macro means all labels are equally important (versus weighted) 128 | knn_f1_score = f1_score(labels_train, knn_train_predict, average='macro') 129 | print("KNN F1:", knn_f1_score) 130 | from sklearn.metrics import precision_score, recall_score 131 | knn_pr_score = precision_score(labels_train, knn_train_predict, average='macro') 132 | knn_rc_score = recall_score(labels_train, knn_train_predict, average='macro') 133 | print("KNN precision:", knn_pr_score) 134 | print("KNN recall:", knn_rc_score) 135 | import numpy as np 136 | # we are specifying np.nan in the report to address the warning of unpredicted labels 137 | knn_validat_predict = cross_val_predict(knn_clf, features_scaled_test, labels_test , cv=10) 138 | # ~ knn_classifi_rpt = classification_report(labels_test, knn_validat_predict) 139 | knn_classifi_rpt = classification_report(labels_test, knn_validat_predict, zero_division=np.nan) 140 | print("KNN report:\n", knn_classifi_rpt) 141 | 142 | 143 | # local test pass output: 144 | # ~ Test set size: 1387 145 | # ~ precision recall f1-score support 146 | 147 | # ~ 0 0.77 0.82 0.80 513 148 | # ~ 1 0.33 0.28 0.30 104 149 | # ~ 2 0.53 0.45 0.49 190 150 | # ~ 3 0.68 0.65 0.66 71 151 | # ~ 4 0.73 0.74 0.73 151 152 | # ~ 5 0.56 0.65 0.60 34 153 | # ~ 6 0.87 0.90 0.88 324 154 | 155 | # ~ accuracy 0.73 1387 156 | # ~ macro avg 0.64 0.64 0.64 1387 157 | # ~ weighted avg 0.72 0.73 0.72 1387 158 | 159 | # ~ KNN F1: 0.745737344932684 160 | # ~ KNN precision: 0.787943180025375 161 | # ~ KNN recall: 0.7143672834966244 162 | # ~ KNN report: 163 | # ~ precision recall f1-score support 164 | 165 | # ~ 0 0.77 0.83 0.80 513 166 | # ~ 1 0.63 0.26 0.37 104 167 | # ~ 2 0.74 0.37 0.50 190 168 | # ~ 3 0.67 0.55 0.60 71 169 | # ~ 4 0.69 0.66 0.68 151 170 | # ~ 5 0.76 0.56 0.64 34 171 | # ~ 6 0.89 0.86 0.87 324 172 | 173 | # ~ micro avg 0.78 0.69 0.73 1387 174 | # ~ macro avg 0.74 0.59 0.64 1387 175 | # ~ weighted avg 0.77 0.69 0.72 1387 176 | # ~ samples avg 0.78 0.69 0.69 1387 177 | 178 | -------------------------------------------------------------------------------- /a2-30s.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """a2-30s.ipynb 3 | 4 | Automatically generated by Colab. 5 | 6 | Original file is located at 7 | https://colab.research.google.com/drive/1_qrYahOhqpsoOpt7po6TBSGyUNuyUaxw 8 | """ 9 | 10 | """ 11 | 12 | # Note, in Colab that we use the UI to mount G-drive 13 | 14 | """ 15 | 16 | import os 17 | from pathlib import Path 18 | import tensorflow as tf 19 | from pathlib import Path 20 | # specify (archive) in local fs 21 | dataset_url = "file://" + os.path.abspath("./TimeBasedFeatures-Dataset-30s-VPN.arff") 22 | ds_name = "TimeBasedFeatures-Dataset-30s-VPN" 23 | archive = tf.keras.utils.get_file(fname=ds_name, origin=dataset_url, extract=False) 24 | data_dir = Path(archive).parent 25 | ds_home = Path.home().joinpath(".keras/datasets") 26 | assert data_dir==ds_home, "expect that ds is extracted under ~/.keras/dataset" 27 | print("Loading VPN 30s (ftm) ds.") 28 | 29 | import pandas as pd 30 | df = pd.read_csv(archive) 31 | ####df.head() 32 | ####df.info() 33 | ####df["Unnamed: 23"].value_counts() 34 | ####df.describe() #(shows max of 1000000 and min of 0 in Unnamed: 9; large variance in values) 35 | proj_random_seed = 42 36 | recursion_depth = df.shape[1] // 2 #(experimental depth as half of # columns) 37 | 38 | 39 | # derive feature / label subgroups from pool 40 | # (skip the top 26 rows which are NaN) 41 | # the "Unnamed: 23" column contains the network traffic category 42 | features_pool = df.drop(["Unnamed: 23"], axis=1).values[26:] 43 | category_pool = df["Unnamed: 23"].values[26:] 44 | from sklearn.model_selection import train_test_split 45 | train_set, test_set, train_category, test_category = train_test_split( 46 | features_pool, category_pool, test_size=0.2, random_state=proj_random_seed 47 | ) 48 | print("Train set size:", len(train_category)) 49 | print("Test set size:", len(test_category)) 50 | 51 | # for decision trees, scaling is unnecessary. only use scaling with PCA 52 | from sklearn.decomposition import PCA 53 | from sklearn.pipeline import make_pipeline 54 | from sklearn.preprocessing import StandardScaler 55 | pca_pipeline = make_pipeline(StandardScaler(), PCA()) 56 | features_std_scaled = pca_pipeline.fit_transform(train_set) 57 | 58 | from sklearn.tree import DecisionTreeClassifier 59 | from sklearn.preprocessing import OneHotEncoder 60 | 61 | ohenc = OneHotEncoder(handle_unknown='ignore') 62 | many_observations_of_one_feature = train_category.reshape(-1,1) 63 | fitted_categories = ohenc.fit(many_observations_of_one_feature) 64 | # ~ print(fitted_categories.categories_) 65 | # ~ print(many_observations_of_one_feature[:10]) 66 | 67 | labels_train = ohenc.transform(many_observations_of_one_feature).toarray() 68 | 69 | # regularize with max_depth 70 | dtc_model = DecisionTreeClassifier(max_depth=recursion_depth, random_state=proj_random_seed) 71 | dtc_model.fit(features_std_scaled, labels_train) 72 | 73 | # to inspect the tree (as plain text) 74 | from sklearn import tree 75 | tree_format_text = tree.export_text(dtc_model) 76 | # ~ print(tree_format_text) 77 | # to inspect the tree (as graphvis diagram) 78 | category_columns = ohenc.get_feature_names_out() 79 | tree.export_graphviz( 80 | dtc_model, 81 | out_file="timeout30_tree.dot", 82 | class_names=category_columns, 83 | rounded=True, 84 | filled=True 85 | ) 86 | # ~ from graphviz import Source 87 | # ~ Source.from_file("timeout30_tree.dot") 88 | 89 | 90 | # ~ from sklearn.model_selection import cross_val_score 91 | # ~ measure_performance = cross_val_score(dtc_model, features_std_scaled, labels_train , cv=10) 92 | # ~ pd.Series(measure_performance).describe() 93 | from sklearn.model_selection import cross_val_predict 94 | # ~ labels_predict = cross_val_predict(dtc_model, features_std_scaled, labels_train , cv=10) 95 | # ~ decode_predict = labels_predict.argmax(axis=1) 96 | # ~ decode_train = labels_train.argmax(axis=1) 97 | # ~ from sklearn.metrics import confusion_matrix 98 | # ~ cm = confusion_matrix(decode_train, decode_predict) 99 | # ~ print(cm) 100 | # ~ from sklearn.metrics import precision_score, recall_score 101 | # ~ pr_score = precision_score(decode_train, decode_predict, average='weighted') 102 | # ~ rc_score = recall_score(decode_train, decode_predict, average='weighted') 103 | # ~ print(pr_score) 104 | # ~ print(rc_score) 105 | # ~ from sklearn.metrics import f1_score 106 | # ~ combo_score = f1_score(decode_train, decode_predict, average='weighted') 107 | # ~ print(combo_score) 108 | 109 | # run the model on the test data set and show the classification report 110 | # (the classification report has a line for each category, so we should display the name instead of 0-6) 111 | n_observations_test_category = test_category.reshape(-1,1) 112 | labels_test = ohenc.transform(n_observations_test_category).toarray() 113 | features_scaled_test = pca_pipeline.fit_transform(test_set) 114 | 115 | labels_predict_test = cross_val_predict(dtc_model, features_scaled_test, labels_test , cv=10) 116 | decode_predict_test = labels_predict_test.argmax(axis=1) 117 | decode_test = labels_test.argmax(axis=1) 118 | from sklearn.metrics import classification_report 119 | classifi_rpt = classification_report(decode_test, decode_predict_test) 120 | print(classifi_rpt) 121 | 122 | 123 | # nearest neighbor algo 124 | from sklearn.neighbors import KNeighborsClassifier 125 | knn_clf = KNeighborsClassifier() 126 | knn_clf.fit(features_std_scaled, labels_train) 127 | knn_train_predict = cross_val_predict(knn_clf, features_std_scaled, labels_train , cv=10) 128 | from sklearn.metrics import f1_score 129 | # macro means all labels are equally important (versus weighted) 130 | knn_f1_score = f1_score(labels_train, knn_train_predict, average='macro') 131 | print("KNN F1:", knn_f1_score) 132 | from sklearn.metrics import precision_score, recall_score 133 | knn_pr_score = precision_score(labels_train, knn_train_predict, average='macro') 134 | knn_rc_score = recall_score(labels_train, knn_train_predict, average='macro') 135 | print("KNN precision:", knn_pr_score) 136 | print("KNN recall:", knn_rc_score) 137 | import numpy as np 138 | # we are specifying np.nan in the report to address the warning of unpredicted labels 139 | knn_validat_predict = cross_val_predict(knn_clf, features_scaled_test, labels_test , cv=10) 140 | # ~ knn_classifi_rpt = classification_report(labels_test, knn_validat_predict) 141 | knn_classifi_rpt = classification_report(labels_test, knn_validat_predict, zero_division=np.nan) 142 | print("KNN report:\n", knn_classifi_rpt) 143 | 144 | 145 | # local test pass output: 146 | # ~ Test set size: 1547 147 | # ~ precision recall f1-score support 148 | 149 | # ~ 0 0.77 0.85 0.81 528 150 | # ~ 1 0.51 0.44 0.47 149 151 | # ~ 2 0.61 0.51 0.56 205 152 | # ~ 3 0.82 0.82 0.82 175 153 | # ~ 4 0.75 0.74 0.75 175 154 | # ~ 5 0.79 0.78 0.79 59 155 | # ~ 6 0.96 0.96 0.96 256 156 | 157 | # ~ accuracy 0.77 1547 158 | # ~ macro avg 0.74 0.73 0.74 1547 159 | # ~ weighted avg 0.76 0.77 0.76 1547 160 | 161 | # ~ KNN F1: 0.7990925067241735 162 | # ~ KNN precision: 0.8286870416403358 163 | # ~ KNN recall: 0.7768344841459086 164 | # ~ KNN report: 165 | # ~ precision recall f1-score support 166 | 167 | # ~ 0 0.78 0.85 0.81 528 168 | # ~ 1 0.55 0.32 0.41 149 169 | # ~ 2 0.70 0.40 0.51 205 170 | # ~ 3 0.79 0.78 0.78 175 171 | # ~ 4 0.76 0.75 0.76 175 172 | # ~ 5 0.77 0.69 0.73 59 173 | # ~ 6 0.98 0.96 0.97 256 174 | 175 | # ~ micro avg 0.79 0.73 0.76 1547 176 | # ~ macro avg 0.76 0.68 0.71 1547 177 | # ~ weighted avg 0.78 0.73 0.75 1547 178 | # ~ samples avg 0.79 0.73 0.73 1547 179 | 180 | -------------------------------------------------------------------------------- /a2-30s.ipynb: -------------------------------------------------------------------------------- 1 | {"cells":[{"cell_type":"code","execution_count":1,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":11877,"status":"ok","timestamp":1742090023042,"user":{"displayName":"Hsin-ih “興怡” Tu","userId":"08845434978895628909"},"user_tz":420},"id":"3wvh7u8RHZ33","outputId":"b08efd02-1667-4aee-f7b2-1e038df39c5d"},"outputs":[{"output_type":"stream","name":"stdout","text":["Loading VPN 30s (ftm) ds.\n","Train set size: 6187\n","Test set size: 1547\n"," precision recall f1-score support\n","\n"," 0 0.77 0.85 0.81 528\n"," 1 0.51 0.44 0.47 149\n"," 2 0.61 0.51 0.56 205\n"," 3 0.82 0.82 0.82 175\n"," 4 0.75 0.74 0.75 175\n"," 5 0.79 0.78 0.79 59\n"," 6 0.96 0.96 0.96 256\n","\n"," accuracy 0.77 1547\n"," macro avg 0.74 0.73 0.74 1547\n","weighted avg 0.76 0.77 0.76 1547\n","\n","KNN F1: 0.7989104467470252\n","KNN precision: 0.8284589045754632\n","KNN recall: 0.7766845815825748\n","KNN report:\n"," precision recall f1-score support\n","\n"," 0 0.78 0.85 0.81 528\n"," 1 0.55 0.32 0.41 149\n"," 2 0.70 0.40 0.51 205\n"," 3 0.79 0.78 0.78 175\n"," 4 0.76 0.75 0.76 175\n"," 5 0.77 0.69 0.73 59\n"," 6 0.98 0.96 0.97 256\n","\n"," micro avg 0.79 0.73 0.76 1547\n"," macro avg 0.76 0.68 0.71 1547\n","weighted avg 0.78 0.73 0.75 1547\n"," samples avg 0.79 0.73 0.73 1547\n","\n"]}],"source":["\"\"\"\n","\n","# Note, in Colab that we use the UI to mount G-drive\n","\n","\"\"\"\n","\n","import os\n","from pathlib import Path\n","print(\"Loading VPN 30s (ftm) ds.\")\n","data_dir30 = Path(os.path.abspath(\"/content/drive/MyDrive/eep567/TimeBasedFeatures-Dataset-30s-VPN.arff\"))\n","\n","import pandas as pd\n","df = pd.read_csv(data_dir30)\n","####df.head()\n","####df.info()\n","####df[\"Unnamed: 23\"].value_counts()\n","####df.describe() #(shows max of 1000000 and min of 0 in Unnamed: 9; large variance in values)\n","proj_random_seed = 42\n","recursion_depth = df.shape[1] // 2 #(experimental depth as half of # columns)\n","\n","# derive feature / label subgroups from pool\n","# (skip the top 26 rows which are NaN)\n","# the \"Unnamed: 23\" column contains the network traffic category\n","features_pool = df.drop([\"Unnamed: 23\"], axis=1).values[26:]\n","category_pool = df[\"Unnamed: 23\"].values[26:]\n","from sklearn.model_selection import train_test_split\n","train_set, test_set, train_category, test_category = train_test_split(\n"," features_pool, category_pool, test_size=0.2, random_state=proj_random_seed\n",")\n","print(\"Train set size:\", len(train_category))\n","print(\"Test set size:\", len(test_category))\n","\n","# for decision trees, scaling is unnecessary. only use scaling with PCA\n","from sklearn.decomposition import PCA\n","from sklearn.pipeline import make_pipeline\n","from sklearn.preprocessing import StandardScaler\n","pca_pipeline = make_pipeline(StandardScaler(), PCA())\n","features_std_scaled = pca_pipeline.fit_transform(train_set)\n","\n","from sklearn.tree import DecisionTreeClassifier\n","from sklearn.preprocessing import OneHotEncoder\n","\n","ohenc = OneHotEncoder(handle_unknown='ignore')\n","many_observations_of_one_feature = train_category.reshape(-1,1)\n","fitted_categories = ohenc.fit(many_observations_of_one_feature)\n","# ~ print(fitted_categories.categories_)\n","# ~ print(many_observations_of_one_feature[:10])\n","\n","labels_train = ohenc.transform(many_observations_of_one_feature).toarray()\n","# regularize with max_depth\n","dtc_model = DecisionTreeClassifier(max_depth=recursion_depth, random_state=proj_random_seed)\n","dtc_model.fit(features_std_scaled, labels_train)\n","\n","# to inspect the tree (as plain text)\n","from sklearn import tree\n","tree_format_text = tree.export_text(dtc_model)\n","# ~ print(tree_format_text)\n","# to inspect the tree (as graphvis diagram)\n","# ~ category_columns = ohenc.get_feature_names_out()\n","# ~ tree.export_graphviz(\n","\t# ~ dtc_model,\n","\t# ~ out_file=\"timeout30_tree.dot\",\n","\t# ~ class_names=category_columns,\n","\t# ~ rounded=True,\n","\t# ~ filled=True\n","# ~ )\n","# ~ from graphviz import Source\n","# ~ Source.from_file(\"timeout30_tree.dot\")\n","\n","\n","# ~ from sklearn.model_selection import cross_val_score\n","# ~ measure_performance = cross_val_score(dtc_model, features_std_scaled, labels_train , cv=10)\n","# ~ pd.Series(measure_performance).describe()\n","from sklearn.model_selection import cross_val_predict\n","# ~ labels_predict = cross_val_predict(dtc_model, features_std_scaled, labels_train , cv=10)\n","# ~ decode_predict = labels_predict.argmax(axis=1)\n","# ~ decode_train = labels_train.argmax(axis=1)\n","# ~ from sklearn.metrics import confusion_matrix\n","# ~ cm = confusion_matrix(decode_train, decode_predict)\n","# ~ print(cm)\n","# ~ from sklearn.metrics import precision_score, recall_score\n","# ~ pr_score = precision_score(decode_train, decode_predict, average='weighted')\n","# ~ rc_score = recall_score(decode_train, decode_predict, average='weighted')\n","# ~ print(pr_score)\n","# ~ print(rc_score)\n","# ~ from sklearn.metrics import f1_score\n","# ~ combo_score = f1_score(decode_train, decode_predict, average='weighted')\n","# ~ print(combo_score)\n","\n","n_observations_test_category = test_category.reshape(-1,1)\n","labels_test = ohenc.transform(n_observations_test_category).toarray()\n","features_scaled_test = pca_pipeline.fit_transform(test_set)\n","\n","labels_predict_test = cross_val_predict(dtc_model, features_scaled_test, labels_test , cv=10)\n","decode_predict_test = labels_predict_test.argmax(axis=1)\n","decode_test = labels_test.argmax(axis=1)\n","from sklearn.metrics import classification_report\n","classifi_rpt = classification_report(decode_test, decode_predict_test)\n","print(classifi_rpt)\n","\n","# nearest neighbor algo\n","from sklearn.neighbors import KNeighborsClassifier\n","knn_clf = KNeighborsClassifier()\n","knn_clf.fit(features_std_scaled, labels_train)\n","knn_train_predict = cross_val_predict(knn_clf, features_std_scaled, labels_train , cv=10)\n","from sklearn.metrics import f1_score\n","# macro means all labels are equally important (versus weighted)\n","knn_f1_score = f1_score(labels_train, knn_train_predict, average='macro')\n","print(\"KNN F1:\", knn_f1_score)\n","from sklearn.metrics import precision_score, recall_score\n","knn_pr_score = precision_score(labels_train, knn_train_predict, average='macro')\n","knn_rc_score = recall_score(labels_train, knn_train_predict, average='macro')\n","print(\"KNN precision:\", knn_pr_score)\n","print(\"KNN recall:\", knn_rc_score)\n","import numpy as np\n","# we are specifying np.nan in the report to address the warning of unpredicted labels\n","knn_validat_predict = cross_val_predict(knn_clf, features_scaled_test, labels_test , cv=10)\n","# ~ knn_classifi_rpt = classification_report(labels_test, knn_validat_predict)\n","knn_classifi_rpt = classification_report(labels_test, knn_validat_predict, zero_division=np.nan)\n","print(\"KNN report:\\n\", knn_classifi_rpt)\n","\n","\n"]},{"cell_type":"code","source":["from google.colab import drive\n","drive.mount('/content/drive')"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"QwhlAmZIQ-a8","executionInfo":{"status":"ok","timestamp":1742083511753,"user_tz":420,"elapsed":34633,"user":{"displayName":"Hsin-ih “興怡” Tu","userId":"08845434978895628909"}},"outputId":"06f387e8-fc48-439b-d68b-d2b34ef2a899"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Mounted at /content/drive\n"]}]}],"metadata":{"colab":{"provenance":[{"file_id":"1AupDWI70d_4RYIvLMwa9bW_tNhoQhbPr","timestamp":1742083243286},{"file_id":"1gm4ecQuuyAxr-z-hX_jOSp6ZGBmyLpq1","timestamp":1742080525423},{"file_id":"1_qrYahOhqpsoOpt7po6TBSGyUNuyUaxw","timestamp":1741907427826}],"mount_file_id":"1oSC53TbMtz-plXhPT6AnkRxDQ8KP9Ckd","authorship_tag":"ABX9TyPlh0jlU9HTd3YC1hi07hO/"},"kernelspec":{"display_name":"Python 3","name":"python3"},"language_info":{"name":"python"}},"nbformat":4,"nbformat_minor":0} -------------------------------------------------------------------------------- /project-eep567.md: -------------------------------------------------------------------------------- 1 | 2 | ### Intro 3 | How did the researchers detect categories of activity in VPN network traffic in the Draper-Gil, Lashkari, Mamun, and Ghorbani paper [1]? My understanding of VPN is virtual network is created that is insulated from the outside so it made me wonder what techniques did the researchers use because I was under the impression that VPN traffic is not exposed. Can we reproduce the results from the paper and be able to identify the 7 categories of traffic (web browser, email, chat, streaming, file transfer, voIP, P2P)? by attempting to train two network traffic classifiers. 4 | 5 | ### Previous work 6 | The reference paper describes related work done by other teams that are dependent on the payload, or data packet. So most of the analysis relies on searching for patterns with the information that is transmitted. This can be less effective when connections use encryption. Another weakness described is the related works have been narrower in scope by concentrating on specific traffic or specific devices. The paper proposes to analyze network traffic using time related features, and across more than one set of traffic category. 7 | 8 | ### Approach 9 | We only follow the methods from the paper that involve the VPN subset. This is because my interest centered much more on the fear that VPN traffic was vulnerable to detection. The algorithms specified were C4.5 and KNN. Cross validation with 10 folds are also used according to the paper. For the training and testing data, Standard scaling and PCA is applied in order to prevent axis [3] skew. 10 | 11 | ### Experiments 12 | The first step was to read the dataset into a dataframe. The archive files hosted at the UNBCA URL are organized into two subdirectories: raw PCAP network capture data, and delimited data (CSV) with the .arff file extension. Without knowing what the difference was, I avoided the PCAP files as their size exceeded 20 GB. Once unzipped the CSV data is separated into three scenario subdirectories: A1, A2, B. Within the scenarios there are files collecting the time related data into timeouts of 15, 30, 60, 120. Starting with the A2 non-VPN 120-timeout data, examining the info (head, describe) and sample rows the only thing we can determine is columns with names such as "Unnamed NN". It seems that column 23 contains the human readable label of the traffic designation. Looking at the value_count of column 23 seems to confirm. The additional note is that the first 26 rows seem to be header related, and mostly contain NaN which is the reason we skip them in preparing the training and testing subsets. For the dataset split, we used the value 0.2 for test subset. 13 | 14 | For the Decision Tree algorithm, the SciKit Learn library provides `DecisionTreeClassifier`. We create the model and choose a `max_depth` parameter value of half the number of columns; this maximum depth is a guess instead of doing multiple trial/error tests. This is one way to regularize and reduce overfitting in the decision tree. 15 | 16 | Next, we call the fit method to train on the training subset. For an embarrassing long time, I struggled to format the training feature data and training label data into the proper types expected by the fit method. With the feature training data, it can actually be passed straight from the output result of the `train_test_split` call. However, we follow the steps described in the O'Reilly book to combine Standard scaling with PCA into a pipeline. The output result of this pipeline becomes the feature training subset that is passed as the first parameter of the fit call. 17 | 18 | For the second parameter of the fit call, we transform the training label data. The `OneHotEncoder` will convert the text into the sparse matrix of ones and zeros. So we create the encoder, but to call its fit method the training labels need to be two dimensional in shape. This can be done with the `reshape` method. The new shape we want means "many observations of one feature" which is a way of saying these category labels are different values of one enum. We specify the reshape parameters (-1, 1) to mean "guess the n-many rows, and one column". This two dimensional shape is ready to pass to the encoder's fit method. Then after the fit is done, the encoder can be used to call transform on more two dimensional shaped training labels. Which we do and call the transform and pass the same two dimensional shaped training labels to produce the encoded list. This encoded list is almost ready to be used for the DecisionTreeClassifier's fit method. It just has to be in array format. So for convenience, we call the to-array method and store that in the `labels_train` variable. This variable can be finally passed as the second parameter of the DecisionTreeClassifier's fit method. 19 | 20 | To evaluate the model, we shape the test subset into parameters for the cross validation to make prediction results. Then we take these prediction results as input parameters to the classification report. 21 | 22 | For the K-Nearest Neighbor algorithm, the Scikit Learn library provides `KNeighborsClassifier`. We create the model and call the fit method to train on the training subset. We call the cross validation with the training subset for the prediction values that will be input to the average scores for F1, Precision, and Recall. Finally, we call the cross validation with the testing subset for the prediction values that will be input to the classification report. 23 | 24 | One value that can be a factor in the KNN classification report comes from the handling of unpredicted labels. The call returns a warning about divide-by-zero, and mentions a `zero_division` parameter. The default behavior is to use a zero value in the calculation and return the warning. For our experiments, we assign the `zero_division` parameter as `np.nan` to signify not-a-number. 25 | 26 | We repeated these steps for the different VPN dataset files of timeouts 15, 30, 60. 27 | 28 | ### Conclusions 29 | Using the Draper-Gil, Lashkari, Mamun, and Ghorbani paper [1] as reference we wanted to learn how VPN network traffic can be grouped into categories. We used the DecisionTreeClassifier and KNeighborsClassifier to approximate the research procedures that involved C4.5 and KNN. We used the dataset provided for scenario A2 (VPN 15/30/60 timeout). The differences observed can be caused by any combination of the algorithm default parameters, split size of train/testing sets, and the random seed value. The important understanding that I gained was that classification achievable with machine learning does not mean that the content of VPN traffic is revealed or decrypted. In other words, my concern was that the research had found methods to defeat the primary purpose of VPN (common example of remote employees need for secure connections to the office network). 30 | 31 | As future work, I need to study the CICFlowMeter tool [2] created by the researchers. It was named ISCXFlowMeter in its first incarnation. Since then, CICFlowMeter reached a 4th version. The community has also ported the tool (from Java) to Python, and more recently C++. Based on the summary of the extraction of the time related features, the definition of a flow is: packets that have the same Source-IP, Destination-IP, Source-Port, Destination-Port, Protocol (TCP/UDP) [1]. How flexible is this definition? There is also the question of whether it is possible for a VPN server to evade the classifier by mimicing the categories that performed the worst (i.e., category #1). 32 | 33 | timeout-15 DTC classification report: 34 | precision recall f1-score support 35 | 36 | 0 0.73 0.75 0.74 513 37 | 1 0.46 0.42 0.44 233 38 | 2 0.73 0.66 0.69 411 39 | 3 0.60 0.74 0.66 95 40 | 4 0.66 0.74 0.70 170 41 | 5 0.79 0.81 0.80 108 42 | 6 0.96 0.97 0.96 429 43 | 44 | accuracy 0.74 1959 45 | macro avg 0.71 0.73 0.71 1959 46 | weighted avg 0.74 0.74 0.74 1959 47 | 48 | KNN F1: 0.761450984391107 49 | KNN precision: 0.8087443696159463 50 | KNN recall: 0.728034889235558 51 | KNN report: 52 | precision recall f1-score support 53 | 54 | 0 0.77 0.82 0.79 513 55 | 1 0.65 0.41 0.50 233 56 | 2 0.78 0.60 0.68 411 57 | 3 0.68 0.66 0.67 95 58 | 4 0.72 0.70 0.71 170 59 | 5 0.78 0.78 0.78 108 60 | 6 0.98 0.97 0.98 429 61 | 62 | micro avg 0.80 0.74 0.77 1959 63 | macro avg 0.77 0.71 0.73 1959 64 | weighted avg 0.79 0.74 0.76 1959 65 | samples avg 0.80 0.74 0.74 1959 66 | 67 | 68 | timeout-30 DTC classification report: 69 | precision recall f1-score support 70 | 71 | 0 0.77 0.85 0.81 528 72 | 1 0.51 0.44 0.47 149 73 | 2 0.61 0.51 0.56 205 74 | 3 0.82 0.82 0.82 175 75 | 4 0.75 0.74 0.75 175 76 | 5 0.79 0.78 0.79 59 77 | 6 0.96 0.96 0.96 256 78 | 79 | accuracy 0.77 1547 80 | macro avg 0.74 0.73 0.74 1547 81 | weighted avg 0.76 0.77 0.76 1547 82 | 83 | KNN F1: 0.7990925067241735 84 | KNN precision: 0.8286870416403358 85 | KNN recall: 0.7768344841459086 86 | KNN report: 87 | precision recall f1-score support 88 | 89 | 0 0.78 0.85 0.81 528 90 | 1 0.55 0.32 0.41 149 91 | 2 0.70 0.40 0.51 205 92 | 3 0.79 0.78 0.78 175 93 | 4 0.76 0.75 0.76 175 94 | 5 0.77 0.69 0.73 59 95 | 6 0.98 0.96 0.97 256 96 | 97 | micro avg 0.79 0.73 0.76 1547 98 | macro avg 0.76 0.68 0.71 1547 99 | weighted avg 0.78 0.73 0.75 1547 100 | samples avg 0.79 0.73 0.73 1547 101 | 102 | 103 | timeout-60 DTC classification report: 104 | precision recall f1-score support 105 | 106 | 0 0.77 0.82 0.80 513 107 | 1 0.33 0.28 0.30 104 108 | 2 0.53 0.45 0.49 190 109 | 3 0.68 0.65 0.66 71 110 | 4 0.73 0.74 0.73 151 111 | 5 0.56 0.65 0.60 34 112 | 6 0.87 0.90 0.88 324 113 | 114 | accuracy 0.73 1387 115 | macro avg 0.64 0.64 0.64 1387 116 | weighted avg 0.72 0.73 0.72 1387 117 | 118 | KNN F1: 0.745737344932684 119 | KNN precision: 0.787943180025375 120 | KNN recall: 0.7143672834966244 121 | KNN report: 122 | precision recall f1-score support 123 | 124 | 0 0.77 0.83 0.80 513 125 | 1 0.63 0.26 0.37 104 126 | 2 0.74 0.37 0.50 190 127 | 3 0.67 0.55 0.60 71 128 | 4 0.69 0.66 0.68 151 129 | 5 0.76 0.56 0.64 34 130 | 6 0.89 0.86 0.87 324 131 | 132 | micro avg 0.78 0.69 0.73 1387 133 | macro avg 0.74 0.59 0.64 1387 134 | weighted avg 0.77 0.69 0.72 1387 135 | samples avg 0.78 0.69 0.69 1387 136 | 137 | ### References 138 | 1. Gerard Drapper Gil, Arash Habibi Lashkari, Mohammad Mamun, Ali A. Ghorbani, "Characterization of Encrypted and VPN Traffic Using Time-Related Features", In Proceedings of the 2nd International Conference on Information Systems Security and Privacy(ICISSP 2016) , pages 407-414, Rome, Italy. 139 | 140 | 2. CICFlowMeter network traffic flow generator, https://www.unb.ca/cic/research/applications.html; (source repo https://github.com/ahlashkari/CICFlowMeter). 141 | 142 | 3. Aurélien Géron, "Hands-on machine learning with Scikit-Learn, Keras and TensorFlow", 2023, O'Reilly Media, Inc. 143 | 144 | =========================================== 145 | # eep567 project - network traffic detection and classification 146 | dataset - https://www.unb.ca/cic/datasets/vpn.html 147 | Challenge - Can you train two network traffic classifiers using traditional 148 | machine learning and deep learning-based methods? How well do they 149 | perform compared to each other? Can you try a low overhead 150 | traditional method that can classify traffic in real time, without 151 | sacrificing too much on performance? 152 | 153 | ### proposal 154 | 1. title: 155 | Understand How VPN Traffic was Analyzed 156 | 2. group members: 157 | Hsin-ih Tu 158 | 3. dataset(s): 159 | www.unb.ca/cic/datasets/vpn.html 160 | 4. problems to work on: 161 | Can we reproduce the results from the paper and be able to identify the 7 categories of traffic (web browser, email, chat, streaming, file transfer, voIP, P2P)? by attempting to train two network traffic classifiers. 162 | 5. potential ways to solve: 163 | The paper describes training with the Decision Tree and K-Nearest Neighbor algorithms. I will repeat their work to learn how to process the data and identify the network traffic. 164 | 165 | 166 | 6. what to complete by the milestone: 167 | Repeat the experiments (using the time related features, Decision Tree and K-Nearest Neighbor). With good understanding the final report would include exploration or make educated guess for some methods to disguise network traffic that avoids categorization / detection. 168 | 7. references: 169 | Gerard Drapper Gil, Arash Habibi Lashkari, Mohammad Mamun, Ali A. Ghorbani, "Characterization of Encrypted and VPN Traffic Using Time-Related Features", In Proceedings of the 2nd International Conference on Information Systems Security and Privacy(ICISSP 2016) , pages 407-414, Rome, Italy. 170 | 171 | ### references 172 | Gerard Drapper Gil, Arash Habibi Lashkari, Mohammad Mamun, Ali A. Ghorbani, "Characterization of Encrypted and VPN Traffic Using Time-Related Features", In Proceedings of the 2nd International Conference on Information Systems Security and Privacy(ICISSP 2016) , pages 407-414, Rome, Italy. 173 | 174 | Kolosnjaji, Bojan; "Artificial Intelligence for Cybersecurity"; 2024 Packt Publishing; 175 | https://orbiscascade-washington.primo.exlibrisgroup.com/permalink/01ALLIANCE_UW/1juclfo/alma99162904463101452 176 | 177 | 178 | -------------------------------------------------------------------------------- /timeout120_tree.dot: -------------------------------------------------------------------------------- 1 | digraph Tree { 2 | node [shape=box, style="filled, rounded", color="black", fontname="helvetica"] ; 3 | edge [fontname="helvetica"] ; 4 | 0 [label="x[3] <= 2.299\ngini = 0.201\nsamples = 4120\nvalue = [[2132, 1988]\n[3921, 199]\n[3619, 501]\n[3971, 149]\n[3325, 795]\n[3944, 176]\n[3808, 312]]", fillcolor="#fbece1"] ; 5 | 1 [label="x[1] <= 0.101\ngini = 0.191\nsamples = 3850\nvalue = [[1863.0, 1987.0]\n[3651.0, 199.0]\n[3350.0, 500.0]\n[3701.0, 149.0]\n[3055.0, 795.0]\n[3680.0, 170.0]\n[3800.0, 50.0]]", fillcolor="#fae6d8"] ; 6 | 0 -> 1 [labeldistance=2.5, labelangle=45, headlabel="True"] ; 7 | 2 [label="x[15] <= 0.049\ngini = 0.104\nsamples = 1705\nvalue = [[356, 1349]\n[1610, 95]\n[1618, 87]\n[1685, 20]\n[1652, 53]\n[1636, 69]\n[1673, 32]]", fillcolor="#f0b890"] ; 8 | 1 -> 2 ; 9 | 3 [label="x[0] <= -0.226\ngini = 0.08\nsamples = 1422\nvalue = [[219.0, 1203.0]\n[1383.0, 39.0]\n[1361.0, 61.0]\n[1412.0, 10.0]\n[1398.0, 24.0]\n[1366.0, 56.0]\n[1393.0, 29.0]]", fillcolor="#eeab7c"] ; 10 | 2 -> 3 ; 11 | 4 [label="x[21] <= -0.0\ngini = 0.133\nsamples = 652\nvalue = [[183.0, 469.0]\n[614.0, 38.0]\n[599.0, 53.0]\n[642.0, 10.0]\n[634.0, 18.0]\n[615.0, 37.0]\n[625.0, 27.0]]", fillcolor="#f4c8a8"] ; 12 | 3 -> 4 ; 13 | 5 [label="x[19] <= 0.003\ngini = 0.221\nsamples = 117\nvalue = [[81.0, 36.0]\n[112.0, 5.0]\n[87.0, 30.0]\n[116.0, 1.0]\n[113.0, 4.0]\n[93.0, 24.0]\n[100.0, 17.0]]", fillcolor="#fdf6f1"] ; 14 | 4 -> 5 ; 15 | 6 [label="x[17] <= -0.004\ngini = 0.209\nsamples = 81\nvalue = [[49, 32]\n[76, 5]\n[75, 6]\n[80, 1]\n[79, 2]\n[58, 23]\n[69, 12]]", fillcolor="#fcf0e7"] ; 16 | 5 -> 6 ; 17 | 7 [label="x[4] <= 0.787\ngini = 0.192\nsamples = 22\nvalue = [[20, 2]\n[22, 0]\n[18, 4]\n[22, 0]\n[21, 1]\n[18, 4]\n[11, 11]]", fillcolor="#fae7da"] ; 18 | 6 -> 7 ; 19 | 8 [label="x[15] <= -0.013\ngini = 0.16\nsamples = 18\nvalue = [[16, 2]\n[18, 0]\n[18, 0]\n[18, 0]\n[17, 1]\n[14, 4]\n[7, 11]]", fillcolor="#f7d6bf"] ; 20 | 7 -> 8 ; 21 | 9 [label="x[5] <= 0.374\ngini = 0.074\nsamples = 13\nvalue = [[13, 0]\n[13, 0]\n[13, 0]\n[13, 0]\n[13, 0]\n[11, 2]\n[2, 11]]", fillcolor="#eda977"] ; 22 | 8 -> 9 ; 23 | 10 [label="x[22] <= -0.0\ngini = 0.044\nsamples = 12\nvalue = [[12, 0]\n[12, 0]\n[12, 0]\n[12, 0]\n[12, 0]\n[11, 1]\n[1, 11]]", fillcolor="#ea985d"] ; 24 | 9 -> 10 ; 25 | 11 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]]", fillcolor="#e58139"] ; 26 | 10 -> 11 ; 27 | 12 [label="gini = 0.0\nsamples = 11\nvalue = [[11, 0]\n[11, 0]\n[11, 0]\n[11, 0]\n[11, 0]\n[11, 0]\n[0, 11]]", fillcolor="#e58139"] ; 28 | 10 -> 12 ; 29 | 13 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]]", fillcolor="#e58139"] ; 30 | 9 -> 13 ; 31 | 14 [label="x[19] <= -0.005\ngini = 0.183\nsamples = 5\nvalue = [[3, 2]\n[5, 0]\n[5, 0]\n[5, 0]\n[4, 1]\n[3, 2]\n[5, 0]]", fillcolor="#f9e2d2"] ; 32 | 8 -> 14 ; 33 | 15 [label="x[0] <= -0.533\ngini = 0.127\nsamples = 3\nvalue = [[1, 2]\n[3, 0]\n[3, 0]\n[3, 0]\n[2, 1]\n[3, 0]\n[3, 0]]", fillcolor="#f3c4a3"] ; 34 | 14 -> 15 ; 35 | 16 [label="gini = 0.0\nsamples = 2\nvalue = [[0, 2]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#e58139"] ; 36 | 15 -> 16 ; 37 | 17 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 38 | 15 -> 17 ; 39 | 18 [label="gini = 0.0\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[0, 2]\n[2, 0]]", fillcolor="#e58139"] ; 40 | 14 -> 18 ; 41 | 19 [label="gini = 0.0\nsamples = 4\nvalue = [[4, 0]\n[4, 0]\n[0, 4]\n[4, 0]\n[4, 0]\n[4, 0]\n[4, 0]]", fillcolor="#e58139"] ; 42 | 7 -> 19 ; 43 | 20 [label="x[2] <= -1.193\ngini = 0.18\nsamples = 59\nvalue = [[29, 30]\n[54, 5]\n[57, 2]\n[58, 1]\n[58, 1]\n[40, 19]\n[58, 1]]", fillcolor="#f9e0cf"] ; 44 | 6 -> 20 ; 45 | 21 [label="x[4] <= -0.356\ngini = 0.07\nsamples = 14\nvalue = [[12, 2]\n[14, 0]\n[14, 0]\n[14, 0]\n[14, 0]\n[2, 12]\n[14, 0]]", fillcolor="#eda673"] ; 46 | 20 -> 21 ; 47 | 22 [label="gini = 0.0\nsamples = 12\nvalue = [[12, 0]\n[12, 0]\n[12, 0]\n[12, 0]\n[12, 0]\n[0, 12]\n[12, 0]]", fillcolor="#e58139"] ; 48 | 21 -> 22 ; 49 | 23 [label="gini = 0.0\nsamples = 2\nvalue = [[0, 2]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#e58139"] ; 50 | 21 -> 23 ; 51 | 24 [label="x[4] <= 0.613\ngini = 0.164\nsamples = 45\nvalue = [[17, 28]\n[40, 5]\n[43, 2]\n[44, 1]\n[44, 1]\n[38, 7]\n[44, 1]]", fillcolor="#f7d8c2"] ; 52 | 20 -> 24 ; 53 | 25 [label="x[7] <= -0.454\ngini = 0.139\nsamples = 40\nvalue = [[12, 28]\n[35, 5]\n[38, 2]\n[39, 1]\n[39, 1]\n[38, 2]\n[39, 1]]", fillcolor="#f4cbad"] ; 54 | 24 -> 25 ; 55 | 26 [label="x[16] <= -0.009\ngini = 0.127\nsamples = 6\nvalue = [[4, 2]\n[2, 4]\n[6, 0]\n[6, 0]\n[6, 0]\n[6, 0]\n[6, 0]]", fillcolor="#f3c4a3"] ; 56 | 25 -> 26 ; 57 | 27 [label="gini = 0.0\nsamples = 3\nvalue = [[3, 0]\n[0, 3]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]]", fillcolor="#e58139"] ; 58 | 26 -> 27 ; 59 | 28 [label="x[0] <= -0.871\ngini = 0.127\nsamples = 3\nvalue = [[1, 2]\n[2, 1]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]]", fillcolor="#f3c4a3"] ; 60 | 26 -> 28 ; 61 | 29 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 62 | 28 -> 29 ; 63 | 30 [label="gini = 0.0\nsamples = 2\nvalue = [[0, 2]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#e58139"] ; 64 | 28 -> 30 ; 65 | 31 [label="x[11] <= 0.061\ngini = 0.116\nsamples = 34\nvalue = [[8, 26]\n[33, 1]\n[32, 2]\n[33, 1]\n[33, 1]\n[32, 2]\n[33, 1]]", fillcolor="#f2be9a"] ; 66 | 25 -> 31 ; 67 | 32 [label="x[16] <= 0.023\ngini = 0.085\nsamples = 30\nvalue = [[5, 25]\n[29, 1]\n[30, 0]\n[29, 1]\n[30, 0]\n[28, 2]\n[29, 1]]", fillcolor="#eeae80"] ; 68 | 31 -> 32 ; 69 | 33 [label="gini = 0.071\nsamples = 29\nvalue = [[4, 25]\n[29, 0]\n[29, 0]\n[28, 1]\n[29, 0]\n[27, 2]\n[28, 1]]", fillcolor="#eda775"] ; 70 | 32 -> 33 ; 71 | 34 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 72 | 32 -> 34 ; 73 | 35 [label="x[7] <= -0.177\ngini = 0.179\nsamples = 4\nvalue = [[3, 1]\n[4, 0]\n[2, 2]\n[4, 0]\n[3, 1]\n[4, 0]\n[4, 0]]", fillcolor="#f9e0ce"] ; 74 | 31 -> 35 ; 75 | 36 [label="gini = 0.0\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[0, 2]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#e58139"] ; 76 | 35 -> 36 ; 77 | 37 [label="gini = 0.143\nsamples = 2\nvalue = [[1, 1]\n[2, 0]\n[2, 0]\n[2, 0]\n[1, 1]\n[2, 0]\n[2, 0]]", fillcolor="#f5cdb0"] ; 78 | 35 -> 37 ; 79 | 38 [label="gini = 0.0\nsamples = 5\nvalue = [[5, 0]\n[5, 0]\n[5, 0]\n[5, 0]\n[5, 0]\n[0, 5]\n[5, 0]]", fillcolor="#e58139"] ; 80 | 24 -> 38 ; 81 | 39 [label="x[13] <= 0.079\ngini = 0.149\nsamples = 36\nvalue = [[32, 4]\n[36, 0]\n[12, 24]\n[36, 0]\n[34, 2]\n[35, 1]\n[31, 5]]", fillcolor="#f5d0b5"] ; 82 | 5 -> 39 ; 83 | 40 [label="x[15] <= 0.006\ngini = 0.11\nsamples = 31\nvalue = [[30, 1]\n[31, 0]\n[7, 24]\n[31, 0]\n[29, 2]\n[30, 1]\n[28, 3]]", fillcolor="#f1bb95"] ; 84 | 39 -> 40 ; 85 | 41 [label="x[10] <= -0.045\ngini = 0.086\nsamples = 29\nvalue = [[28, 1]\n[29, 0]\n[5, 24]\n[29, 0]\n[29, 0]\n[28, 1]\n[26, 3]]", fillcolor="#eeaf81"] ; 86 | 40 -> 41 ; 87 | 42 [label="x[18] <= 0.007\ngini = 0.17\nsamples = 8\nvalue = [[7, 1]\n[8, 0]\n[4, 4]\n[8, 0]\n[8, 0]\n[8, 0]\n[5, 3]]", fillcolor="#f8dbc7"] ; 88 | 41 -> 42 ; 89 | 43 [label="gini = 0.0\nsamples = 3\nvalue = [[3, 0]\n[3, 0]\n[0, 3]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]]", fillcolor="#e58139"] ; 90 | 42 -> 43 ; 91 | 44 [label="x[19] <= 0.005\ngini = 0.16\nsamples = 5\nvalue = [[4, 1]\n[5, 0]\n[4, 1]\n[5, 0]\n[5, 0]\n[5, 0]\n[2, 3]]", fillcolor="#f7d6bf"] ; 92 | 42 -> 44 ; 93 | 45 [label="x[0] <= -1.199\ngini = 0.143\nsamples = 2\nvalue = [[1, 1]\n[2, 0]\n[1, 1]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#f5cdb0"] ; 94 | 44 -> 45 ; 95 | 46 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 96 | 45 -> 46 ; 97 | 47 [label="gini = 0.0\nsamples = 1\nvalue = [[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 98 | 45 -> 47 ; 99 | 48 [label="gini = 0.0\nsamples = 3\nvalue = [[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]\n[0, 3]]", fillcolor="#e58139"] ; 100 | 44 -> 48 ; 101 | 49 [label="x[3] <= -0.431\ngini = 0.026\nsamples = 21\nvalue = [[21, 0]\n[21, 0]\n[1, 20]\n[21, 0]\n[21, 0]\n[20, 1]\n[21, 0]]", fillcolor="#e88f4f"] ; 102 | 41 -> 49 ; 103 | 50 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]]", fillcolor="#e58139"] ; 104 | 49 -> 50 ; 105 | 51 [label="gini = 0.0\nsamples = 20\nvalue = [[20, 0]\n[20, 0]\n[0, 20]\n[20, 0]\n[20, 0]\n[20, 0]\n[20, 0]]", fillcolor="#e58139"] ; 106 | 49 -> 51 ; 107 | 52 [label="gini = 0.0\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[0, 2]\n[2, 0]\n[2, 0]]", fillcolor="#e58139"] ; 108 | 40 -> 52 ; 109 | 53 [label="x[1] <= -0.793\ngini = 0.137\nsamples = 5\nvalue = [[2, 3]\n[5, 0]\n[5, 0]\n[5, 0]\n[5, 0]\n[5, 0]\n[3, 2]]", fillcolor="#f4caab"] ; 110 | 39 -> 53 ; 111 | 54 [label="gini = 0.0\nsamples = 3\nvalue = [[0, 3]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]]", fillcolor="#e58139"] ; 112 | 53 -> 54 ; 113 | 55 [label="gini = 0.0\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[0, 2]]", fillcolor="#e58139"] ; 114 | 53 -> 55 ; 115 | 56 [label="x[2] <= -0.847\ngini = 0.096\nsamples = 535\nvalue = [[102, 433]\n[502, 33]\n[512, 23]\n[526, 9]\n[521, 14]\n[522, 13]\n[525, 10]]", fillcolor="#f0b489"] ; 116 | 4 -> 56 ; 117 | 57 [label="x[3] <= -0.425\ngini = 0.021\nsamples = 239\nvalue = [[9.0, 230.0]\n[239.0, 0.0]\n[238.0, 1.0]\n[239.0, 0.0]\n[238.0, 1.0]\n[232.0, 7.0]\n[239.0, 0.0]]", fillcolor="#e78c4a"] ; 118 | 56 -> 57 ; 119 | 58 [label="x[11] <= 0.004\ngini = 0.106\nsamples = 9\nvalue = [[8, 1]\n[9, 0]\n[8, 1]\n[9, 0]\n[9, 0]\n[2, 7]\n[9, 0]]", fillcolor="#f1b991"] ; 120 | 57 -> 58 ; 121 | 59 [label="gini = 0.0\nsamples = 7\nvalue = [[7, 0]\n[7, 0]\n[7, 0]\n[7, 0]\n[7, 0]\n[0, 7]\n[7, 0]]", fillcolor="#e58139"] ; 122 | 58 -> 59 ; 123 | 60 [label="x[8] <= -0.008\ngini = 0.143\nsamples = 2\nvalue = [[1, 1]\n[2, 0]\n[1, 1]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#f5cdb0"] ; 124 | 58 -> 60 ; 125 | 61 [label="gini = 0.0\nsamples = 1\nvalue = [[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 126 | 60 -> 61 ; 127 | 62 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 128 | 60 -> 62 ; 129 | 63 [label="x[11] <= 0.032\ngini = 0.002\nsamples = 230\nvalue = [[1, 229]\n[230, 0]\n[230, 0]\n[230, 0]\n[229, 1]\n[230, 0]\n[230, 0]]", fillcolor="#e5823b"] ; 130 | 57 -> 63 ; 131 | 64 [label="gini = 0.0\nsamples = 229\nvalue = [[0, 229]\n[229, 0]\n[229, 0]\n[229, 0]\n[229, 0]\n[229, 0]\n[229, 0]]", fillcolor="#e58139"] ; 132 | 63 -> 64 ; 133 | 65 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 134 | 63 -> 65 ; 135 | 66 [label="x[21] <= 0.0\ngini = 0.145\nsamples = 296\nvalue = [[93, 203]\n[263, 33]\n[274, 22]\n[287, 9]\n[283, 13]\n[290, 6]\n[286, 10]]", fillcolor="#f5ceb2"] ; 136 | 56 -> 66 ; 137 | 67 [label="x[9] <= 0.011\ngini = 0.202\nsamples = 69\nvalue = [[35.0, 34.0]\n[65.0, 4.0]\n[59.0, 10.0]\n[63.0, 6.0]\n[64.0, 5.0]\n[67.0, 2.0]\n[61.0, 8.0]]", fillcolor="#fbece1"] ; 138 | 66 -> 67 ; 139 | 68 [label="x[19] <= -0.0\ngini = 0.237\nsamples = 33\nvalue = [[25, 8]\n[30, 3]\n[28, 5]\n[28, 5]\n[28, 5]\n[32, 1]\n[27, 6]]", fillcolor="#ffffff"] ; 140 | 67 -> 68 ; 141 | 69 [label="x[14] <= -0.002\ngini = 0.198\nsamples = 18\nvalue = [[10, 8]\n[15, 3]\n[13, 5]\n[18, 0]\n[17, 1]\n[18, 0]\n[17, 1]]", fillcolor="#fbeade"] ; 142 | 68 -> 69 ; 143 | 70 [label="x[4] <= -0.27\ngini = 0.212\nsamples = 9\nvalue = [[8, 1]\n[6, 3]\n[6, 3]\n[9, 0]\n[8, 1]\n[9, 0]\n[8, 1]]", fillcolor="#fcf1ea"] ; 144 | 69 -> 70 ; 145 | 71 [label="gini = 0.0\nsamples = 3\nvalue = [[3, 0]\n[3, 0]\n[0, 3]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]]", fillcolor="#e58139"] ; 146 | 70 -> 71 ; 147 | 72 [label="x[22] <= 0.001\ngini = 0.19\nsamples = 6\nvalue = [[5, 1]\n[3, 3]\n[6, 0]\n[6, 0]\n[5, 1]\n[6, 0]\n[5, 1]]", fillcolor="#fae6d8"] ; 148 | 70 -> 72 ; 149 | 73 [label="gini = 0.143\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[1, 1]\n[2, 0]\n[1, 1]]", fillcolor="#f5cdb0"] ; 150 | 72 -> 73 ; 151 | 74 [label="gini = 0.107\nsamples = 4\nvalue = [[3, 1]\n[1, 3]\n[4, 0]\n[4, 0]\n[4, 0]\n[4, 0]\n[4, 0]]", fillcolor="#f1ba92"] ; 152 | 72 -> 74 ; 153 | 75 [label="x[7] <= -0.345\ngini = 0.099\nsamples = 9\nvalue = [[2, 7]\n[9, 0]\n[7, 2]\n[9, 0]\n[9, 0]\n[9, 0]\n[9, 0]]", fillcolor="#f0b58b"] ; 154 | 69 -> 75 ; 155 | 76 [label="gini = 0.0\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[0, 2]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#e58139"] ; 156 | 75 -> 76 ; 157 | 77 [label="gini = 0.0\nsamples = 7\nvalue = [[0, 7]\n[7, 0]\n[7, 0]\n[7, 0]\n[7, 0]\n[7, 0]\n[7, 0]]", fillcolor="#e58139"] ; 158 | 75 -> 77 ; 159 | 78 [label="x[6] <= -0.049\ngini = 0.201\nsamples = 15\nvalue = [[15, 0]\n[15, 0]\n[15, 0]\n[10, 5]\n[11, 4]\n[14, 1]\n[10, 5]]", fillcolor="#fbece0"] ; 160 | 68 -> 78 ; 161 | 79 [label="x[9] <= -0.009\ngini = 0.166\nsamples = 10\nvalue = [[10, 0]\n[10, 0]\n[10, 0]\n[5, 5]\n[6, 4]\n[9, 1]\n[10, 0]]", fillcolor="#f7d9c3"] ; 162 | 78 -> 79 ; 163 | 80 [label="x[17] <= -0.002\ngini = 0.091\nsamples = 5\nvalue = [[5, 0]\n[5, 0]\n[5, 0]\n[5, 0]\n[1, 4]\n[4, 1]\n[5, 0]]", fillcolor="#efb285"] ; 164 | 79 -> 80 ; 165 | 81 [label="gini = 0.0\nsamples = 4\nvalue = [[4, 0]\n[4, 0]\n[4, 0]\n[4, 0]\n[0, 4]\n[4, 0]\n[4, 0]]", fillcolor="#e58139"] ; 166 | 80 -> 81 ; 167 | 82 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]]", fillcolor="#e58139"] ; 168 | 80 -> 82 ; 169 | 83 [label="gini = 0.0\nsamples = 5\nvalue = [[5, 0]\n[5, 0]\n[5, 0]\n[0, 5]\n[5, 0]\n[5, 0]\n[5, 0]]", fillcolor="#e58139"] ; 170 | 79 -> 83 ; 171 | 84 [label="gini = 0.0\nsamples = 5\nvalue = [[5, 0]\n[5, 0]\n[5, 0]\n[5, 0]\n[5, 0]\n[5, 0]\n[0, 5]]", fillcolor="#e58139"] ; 172 | 78 -> 84 ; 173 | 85 [label="x[16] <= -0.013\ngini = 0.13\nsamples = 36\nvalue = [[10, 26]\n[35, 1]\n[31, 5]\n[35, 1]\n[36, 0]\n[35, 1]\n[34, 2]]", fillcolor="#f3c6a5"] ; 174 | 67 -> 85 ; 175 | 86 [label="x[7] <= 0.037\ngini = 0.117\nsamples = 7\nvalue = [[5, 2]\n[7, 0]\n[2, 5]\n[7, 0]\n[7, 0]\n[7, 0]\n[7, 0]]", fillcolor="#f2bf9a"] ; 176 | 85 -> 86 ; 177 | 87 [label="gini = 0.0\nsamples = 2\nvalue = [[0, 2]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#e58139"] ; 178 | 86 -> 87 ; 179 | 88 [label="gini = 0.0\nsamples = 5\nvalue = [[5, 0]\n[5, 0]\n[0, 5]\n[5, 0]\n[5, 0]\n[5, 0]\n[5, 0]]", fillcolor="#e58139"] ; 180 | 86 -> 88 ; 181 | 89 [label="x[8] <= 0.141\ngini = 0.088\nsamples = 29\nvalue = [[5, 24]\n[28, 1]\n[29, 0]\n[28, 1]\n[29, 0]\n[28, 1]\n[27, 2]]", fillcolor="#efb082"] ; 182 | 85 -> 89 ; 183 | 90 [label="x[1] <= 0.072\ngini = 0.059\nsamples = 27\nvalue = [[3, 24]\n[26, 1]\n[27, 0]\n[27, 0]\n[27, 0]\n[26, 1]\n[26, 1]]", fillcolor="#eba06a"] ; 184 | 89 -> 90 ; 185 | 91 [label="x[13] <= -0.003\ngini = 0.041\nsamples = 26\nvalue = [[2, 24]\n[25, 1]\n[26, 0]\n[26, 0]\n[26, 0]\n[26, 0]\n[25, 1]]", fillcolor="#ea975c"] ; 186 | 90 -> 91 ; 187 | 92 [label="gini = 0.16\nsamples = 5\nvalue = [[2, 3]\n[4, 1]\n[5, 0]\n[5, 0]\n[5, 0]\n[5, 0]\n[4, 1]]", fillcolor="#f7d6bf"] ; 188 | 91 -> 92 ; 189 | 93 [label="gini = 0.0\nsamples = 21\nvalue = [[0, 21]\n[21, 0]\n[21, 0]\n[21, 0]\n[21, 0]\n[21, 0]\n[21, 0]]", fillcolor="#e58139"] ; 190 | 91 -> 93 ; 191 | 94 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]]", fillcolor="#e58139"] ; 192 | 90 -> 94 ; 193 | 95 [label="x[0] <= -0.911\ngini = 0.143\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[2, 0]\n[1, 1]\n[2, 0]\n[2, 0]\n[1, 1]]", fillcolor="#f5cdb0"] ; 194 | 89 -> 95 ; 195 | 96 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]]", fillcolor="#e58139"] ; 196 | 95 -> 96 ; 197 | 97 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 198 | 95 -> 97 ; 199 | 98 [label="x[6] <= 0.039\ngini = 0.121\nsamples = 227\nvalue = [[58, 169]\n[198, 29]\n[215, 12]\n[224, 3]\n[219, 8]\n[223, 4]\n[225, 2]]", fillcolor="#f2c19e"] ; 200 | 66 -> 98 ; 201 | 99 [label="x[10] <= -0.062\ngini = 0.111\nsamples = 214\nvalue = [[49.0, 165.0]\n[190.0, 24.0]\n[203.0, 11.0]\n[211.0, 3.0]\n[208.0, 6.0]\n[210.0, 4.0]\n[213.0, 1.0]]", fillcolor="#f1bc96"] ; 202 | 98 -> 99 ; 203 | 100 [label="x[9] <= 0.125\ngini = 0.042\nsamples = 90\nvalue = [[7, 83]\n[87, 3]\n[87, 3]\n[90, 0]\n[90, 0]\n[89, 1]\n[90, 0]]", fillcolor="#ea975c"] ; 204 | 99 -> 100 ; 205 | 101 [label="x[21] <= 0.021\ngini = 0.031\nsamples = 88\nvalue = [[5, 83]\n[85, 3]\n[87, 1]\n[88, 0]\n[88, 0]\n[87, 1]\n[88, 0]]", fillcolor="#e89253"] ; 206 | 100 -> 101 ; 207 | 102 [label="x[16] <= 0.019\ngini = 0.025\nsamples = 87\nvalue = [[4, 83]\n[84, 3]\n[86, 1]\n[87, 0]\n[87, 0]\n[87, 0]\n[87, 0]]", fillcolor="#e88e4e"] ; 208 | 101 -> 102 ; 209 | 103 [label="gini = 0.007\nsamples = 79\nvalue = [[1, 78]\n[78, 1]\n[79, 0]\n[79, 0]\n[79, 0]\n[79, 0]\n[79, 0]]", fillcolor="#e6853f"] ; 210 | 102 -> 103 ; 211 | 104 [label="gini = 0.152\nsamples = 8\nvalue = [[3, 5]\n[6, 2]\n[7, 1]\n[8, 0]\n[8, 0]\n[8, 0]\n[8, 0]]", fillcolor="#f6d2b8"] ; 212 | 102 -> 104 ; 213 | 105 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]]", fillcolor="#e58139"] ; 214 | 101 -> 105 ; 215 | 106 [label="gini = 0.0\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[0, 2]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#e58139"] ; 216 | 100 -> 106 ; 217 | 107 [label="x[6] <= -0.056\ngini = 0.15\nsamples = 124\nvalue = [[42, 82]\n[103, 21]\n[116, 8]\n[121, 3]\n[118, 6]\n[121, 3]\n[123, 1]]", fillcolor="#f5d1b7"] ; 218 | 99 -> 107 ; 219 | 108 [label="x[10] <= -0.014\ngini = 0.071\nsamples = 59\nvalue = [[8, 51]\n[56, 3]\n[59, 0]\n[58, 1]\n[56, 3]\n[59, 0]\n[58, 1]]", fillcolor="#eda674"] ; 220 | 107 -> 108 ; 221 | 109 [label="x[1] <= 0.075\ngini = 0.107\nsamples = 4\nvalue = [[3, 1]\n[4, 0]\n[4, 0]\n[4, 0]\n[1, 3]\n[4, 0]\n[4, 0]]", fillcolor="#f1ba92"] ; 222 | 108 -> 109 ; 223 | 110 [label="gini = 0.0\nsamples = 3\nvalue = [[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]\n[0, 3]\n[3, 0]\n[3, 0]]", fillcolor="#e58139"] ; 224 | 109 -> 110 ; 225 | 111 [label="gini = 0.0\nsamples = 1\nvalue = [[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 226 | 109 -> 111 ; 227 | 112 [label="x[2] <= -0.844\ngini = 0.049\nsamples = 55\nvalue = [[5, 50]\n[52, 3]\n[55, 0]\n[54, 1]\n[55, 0]\n[55, 0]\n[54, 1]]", fillcolor="#ea9b62"] ; 228 | 108 -> 112 ; 229 | 113 [label="gini = 0.0\nsamples = 2\nvalue = [[2, 0]\n[0, 2]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#e58139"] ; 230 | 112 -> 113 ; 231 | 114 [label="gini = 0.031\nsamples = 53\nvalue = [[3, 50]\n[52, 1]\n[53, 0]\n[52, 1]\n[53, 0]\n[53, 0]\n[52, 1]]", fillcolor="#e89253"] ; 232 | 112 -> 114 ; 233 | 115 [label="x[17] <= 0.006\ngini = 0.193\nsamples = 65\nvalue = [[34, 31]\n[47, 18]\n[57, 8]\n[63, 2]\n[62, 3]\n[62, 3]\n[65, 0]]", fillcolor="#fae8da"] ; 234 | 107 -> 115 ; 235 | 116 [label="x[11] <= 0.025\ngini = 0.203\nsamples = 36\nvalue = [[26, 10]\n[21, 15]\n[30, 6]\n[36, 0]\n[33, 3]\n[34, 2]\n[36, 0]]", fillcolor="#fbede3"] ; 236 | 115 -> 116 ; 237 | 117 [label="gini = 0.183\nsamples = 29\nvalue = [[23.0, 6.0]\n[14.0, 15.0]\n[23.0, 6.0]\n[29.0, 0.0]\n[29.0, 0.0]\n[27.0, 2.0]\n[29.0, 0.0]]", fillcolor="#f9e2d2"] ; 238 | 116 -> 117 ; 239 | 118 [label="gini = 0.14\nsamples = 7\nvalue = [[3, 4]\n[7, 0]\n[7, 0]\n[7, 0]\n[4, 3]\n[7, 0]\n[7, 0]]", fillcolor="#f4cbae"] ; 240 | 116 -> 118 ; 241 | 119 [label="x[14] <= 0.004\ngini = 0.13\nsamples = 29\nvalue = [[8, 21]\n[26, 3]\n[27, 2]\n[27, 2]\n[29, 0]\n[28, 1]\n[29, 0]]", fillcolor="#f3c6a5"] ; 242 | 115 -> 119 ; 243 | 120 [label="gini = 0.094\nsamples = 26\nvalue = [[5, 21]\n[23, 3]\n[24, 2]\n[26, 0]\n[26, 0]\n[26, 0]\n[26, 0]]", fillcolor="#efb387"] ; 244 | 119 -> 120 ; 245 | 121 [label="gini = 0.127\nsamples = 3\nvalue = [[3, 0]\n[3, 0]\n[3, 0]\n[1, 2]\n[3, 0]\n[2, 1]\n[3, 0]]", fillcolor="#f3c4a3"] ; 246 | 119 -> 121 ; 247 | 122 [label="x[18] <= 0.015\ngini = 0.206\nsamples = 13\nvalue = [[9, 4]\n[8, 5]\n[12, 1]\n[13, 0]\n[11, 2]\n[13, 0]\n[12, 1]]", fillcolor="#fcefe5"] ; 248 | 98 -> 122 ; 249 | 123 [label="x[3] <= 2.027\ngini = 0.091\nsamples = 5\nvalue = [[1, 4]\n[4, 1]\n[5, 0]\n[5, 0]\n[5, 0]\n[5, 0]\n[5, 0]]", fillcolor="#efb285"] ; 250 | 122 -> 123 ; 251 | 124 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 252 | 123 -> 124 ; 253 | 125 [label="gini = 0.0\nsamples = 4\nvalue = [[0, 4]\n[4, 0]\n[4, 0]\n[4, 0]\n[4, 0]\n[4, 0]\n[4, 0]]", fillcolor="#e58139"] ; 254 | 123 -> 125 ; 255 | 126 [label="x[8] <= 0.093\ngini = 0.188\nsamples = 8\nvalue = [[8, 0]\n[4, 4]\n[7, 1]\n[8, 0]\n[6, 2]\n[8, 0]\n[7, 1]]", fillcolor="#fae5d6"] ; 256 | 122 -> 126 ; 257 | 127 [label="gini = 0.0\nsamples = 4\nvalue = [[4, 0]\n[0, 4]\n[4, 0]\n[4, 0]\n[4, 0]\n[4, 0]\n[4, 0]]", fillcolor="#e58139"] ; 258 | 126 -> 127 ; 259 | 128 [label="x[10] <= -0.16\ngini = 0.179\nsamples = 4\nvalue = [[4, 0]\n[4, 0]\n[3, 1]\n[4, 0]\n[2, 2]\n[4, 0]\n[3, 1]]", fillcolor="#f9e0ce"] ; 260 | 126 -> 128 ; 261 | 129 [label="gini = 0.0\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[0, 2]\n[2, 0]\n[2, 0]]", fillcolor="#e58139"] ; 262 | 128 -> 129 ; 263 | 130 [label="x[11] <= -0.072\ngini = 0.143\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[1, 1]\n[2, 0]\n[2, 0]\n[2, 0]\n[1, 1]]", fillcolor="#f5cdb0"] ; 264 | 128 -> 130 ; 265 | 131 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 266 | 130 -> 131 ; 267 | 132 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]]", fillcolor="#e58139"] ; 268 | 130 -> 132 ; 269 | 133 [label="x[15] <= -0.286\ngini = 0.026\nsamples = 770\nvalue = [[36, 734]\n[769, 1]\n[762, 8]\n[770, 0]\n[764, 6]\n[751, 19]\n[768, 2]]", fillcolor="#e88f4f"] ; 270 | 3 -> 133 ; 271 | 134 [label="x[8] <= 0.971\ngini = 0.175\nsamples = 6\nvalue = [[6, 0]\n[6, 0]\n[3, 3]\n[6, 0]\n[6, 0]\n[4, 2]\n[5, 1]]", fillcolor="#f8decb"] ; 272 | 133 -> 134 ; 273 | 135 [label="gini = 0.0\nsamples = 3\nvalue = [[3, 0]\n[3, 0]\n[0, 3]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]]", fillcolor="#e58139"] ; 274 | 134 -> 135 ; 275 | 136 [label="x[10] <= -3.006\ngini = 0.127\nsamples = 3\nvalue = [[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]\n[1, 2]\n[2, 1]]", fillcolor="#f3c4a3"] ; 276 | 134 -> 136 ; 277 | 137 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]]", fillcolor="#e58139"] ; 278 | 136 -> 137 ; 279 | 138 [label="gini = 0.0\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[0, 2]\n[2, 0]]", fillcolor="#e58139"] ; 280 | 136 -> 138 ; 281 | 139 [label="x[17] <= 0.109\ngini = 0.022\nsamples = 764\nvalue = [[30, 734]\n[763, 1]\n[759, 5]\n[764, 0]\n[758, 6]\n[747, 17]\n[763, 1]]", fillcolor="#e78d4b"] ; 282 | 133 -> 139 ; 283 | 140 [label="x[14] <= 0.449\ngini = 0.017\nsamples = 751\nvalue = [[23, 728]\n[750, 1]\n[746, 5]\n[751, 0]\n[745, 6]\n[741, 10]\n[750, 1]]", fillcolor="#e78a47"] ; 284 | 139 -> 140 ; 285 | 141 [label="x[20] <= 0.14\ngini = 0.016\nsamples = 749\nvalue = [[21.0, 728.0]\n[748.0, 1.0]\n[744.0, 5.0]\n[749.0, 0.0]\n[743.0, 6.0]\n[741.0, 8.0]\n[748.0, 1.0]]", fillcolor="#e78946"] ; 286 | 140 -> 141 ; 287 | 142 [label="x[14] <= 0.282\ngini = 0.015\nsamples = 748\nvalue = [[20.0, 728.0]\n[747.0, 1.0]\n[743.0, 5.0]\n[748.0, 0.0]\n[742.0, 6.0]\n[741.0, 7.0]\n[747.0, 1.0]]", fillcolor="#e78946"] ; 288 | 141 -> 142 ; 289 | 143 [label="x[20] <= -0.045\ngini = 0.012\nsamples = 733\nvalue = [[16, 717]\n[732, 1]\n[729, 4]\n[733, 0]\n[729, 4]\n[726, 7]\n[733, 0]]", fillcolor="#e68843"] ; 290 | 142 -> 143 ; 291 | 144 [label="x[4] <= 0.279\ngini = 0.143\nsamples = 2\nvalue = [[1, 1]\n[2, 0]\n[1, 1]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#f5cdb0"] ; 292 | 143 -> 144 ; 293 | 145 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 294 | 144 -> 145 ; 295 | 146 [label="gini = 0.0\nsamples = 1\nvalue = [[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 296 | 144 -> 146 ; 297 | 147 [label="x[22] <= -0.003\ngini = 0.012\nsamples = 731\nvalue = [[15, 716]\n[730, 1]\n[728, 3]\n[731, 0]\n[727, 4]\n[724, 7]\n[731, 0]]", fillcolor="#e68743"] ; 298 | 143 -> 147 ; 299 | 148 [label="x[15] <= -0.026\ngini = 0.143\nsamples = 2\nvalue = [[1, 1]\n[2, 0]\n[1, 1]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#f5cdb0"] ; 300 | 147 -> 148 ; 301 | 149 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 302 | 148 -> 149 ; 303 | 150 [label="gini = 0.0\nsamples = 1\nvalue = [[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 304 | 148 -> 150 ; 305 | 151 [label="x[17] <= -0.163\ngini = 0.011\nsamples = 729\nvalue = [[14.0, 715.0]\n[728.0, 1.0]\n[727.0, 2.0]\n[729.0, 0.0]\n[725.0, 4.0]\n[722.0, 7.0]\n[729.0, 0.0]]", fillcolor="#e68742"] ; 306 | 147 -> 151 ; 307 | 152 [label="gini = 0.097\nsamples = 10\nvalue = [[2, 8]\n[10, 0]\n[10, 0]\n[10, 0]\n[9, 1]\n[9, 1]\n[10, 0]]", fillcolor="#f0b58a"] ; 308 | 151 -> 152 ; 309 | 153 [label="gini = 0.009\nsamples = 719\nvalue = [[12, 707]\n[718, 1]\n[717, 2]\n[719, 0]\n[716, 3]\n[713, 6]\n[719, 0]]", fillcolor="#e68641"] ; 310 | 151 -> 153 ; 311 | 154 [label="x[19] <= -0.045\ngini = 0.124\nsamples = 15\nvalue = [[4, 11]\n[15, 0]\n[14, 1]\n[15, 0]\n[13, 2]\n[15, 0]\n[14, 1]]", fillcolor="#f3c3a1"] ; 312 | 142 -> 154 ; 313 | 155 [label="gini = 0.0\nsamples = 11\nvalue = [[0, 11]\n[11, 0]\n[11, 0]\n[11, 0]\n[11, 0]\n[11, 0]\n[11, 0]]", fillcolor="#e58139"] ; 314 | 154 -> 155 ; 315 | 156 [label="x[2] <= 2.046\ngini = 0.179\nsamples = 4\nvalue = [[4, 0]\n[4, 0]\n[3, 1]\n[4, 0]\n[2, 2]\n[4, 0]\n[3, 1]]", fillcolor="#f9e0ce"] ; 316 | 154 -> 156 ; 317 | 157 [label="x[13] <= -0.034\ngini = 0.143\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[1, 1]\n[2, 0]\n[2, 0]\n[2, 0]\n[1, 1]]", fillcolor="#f5cdb0"] ; 318 | 156 -> 157 ; 319 | 158 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 320 | 157 -> 158 ; 321 | 159 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]]", fillcolor="#e58139"] ; 322 | 157 -> 159 ; 323 | 160 [label="gini = 0.0\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[0, 2]\n[2, 0]\n[2, 0]]", fillcolor="#e58139"] ; 324 | 156 -> 160 ; 325 | 161 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]]", fillcolor="#e58139"] ; 326 | 141 -> 161 ; 327 | 162 [label="gini = 0.0\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[0, 2]\n[2, 0]]", fillcolor="#e58139"] ; 328 | 140 -> 162 ; 329 | 163 [label="x[15] <= -0.098\ngini = 0.142\nsamples = 13\nvalue = [[7, 6]\n[13, 0]\n[13, 0]\n[13, 0]\n[13, 0]\n[6, 7]\n[13, 0]]", fillcolor="#f5ccb0"] ; 330 | 139 -> 163 ; 331 | 164 [label="gini = 0.0\nsamples = 6\nvalue = [[6, 0]\n[6, 0]\n[6, 0]\n[6, 0]\n[6, 0]\n[0, 6]\n[6, 0]]", fillcolor="#e58139"] ; 332 | 163 -> 164 ; 333 | 165 [label="x[0] <= 0.697\ngini = 0.07\nsamples = 7\nvalue = [[1, 6]\n[7, 0]\n[7, 0]\n[7, 0]\n[7, 0]\n[6, 1]\n[7, 0]]", fillcolor="#eda673"] ; 334 | 163 -> 165 ; 335 | 166 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]]", fillcolor="#e58139"] ; 336 | 165 -> 166 ; 337 | 167 [label="gini = 0.0\nsamples = 6\nvalue = [[0, 6]\n[6, 0]\n[6, 0]\n[6, 0]\n[6, 0]\n[6, 0]\n[6, 0]]", fillcolor="#e58139"] ; 338 | 165 -> 167 ; 339 | 168 [label="x[1] <= -1.059\ngini = 0.192\nsamples = 283\nvalue = [[137.0, 146.0]\n[227.0, 56.0]\n[257.0, 26.0]\n[273.0, 10.0]\n[254.0, 29.0]\n[270.0, 13.0]\n[280.0, 3.0]]", fillcolor="#fae7d9"] ; 340 | 2 -> 168 ; 341 | 169 [label="x[11] <= 0.114\ngini = 0.153\nsamples = 153\nvalue = [[52, 101]\n[145, 8]\n[134, 19]\n[144, 9]\n[151, 2]\n[142, 11]\n[150, 3]]", fillcolor="#f6d2b9"] ; 342 | 168 -> 169 ; 343 | 170 [label="x[9] <= 0.275\ngini = 0.123\nsamples = 129\nvalue = [[33, 96]\n[121, 8]\n[120, 9]\n[120, 9]\n[127, 2]\n[126, 3]\n[127, 2]]", fillcolor="#f3c3a0"] ; 344 | 169 -> 170 ; 345 | 171 [label="x[3] <= 1.439\ngini = 0.058\nsamples = 82\nvalue = [[9, 73]\n[80, 2]\n[80, 2]\n[79, 3]\n[81, 1]\n[81, 1]\n[82, 0]]", fillcolor="#eba06a"] ; 346 | 170 -> 171 ; 347 | 172 [label="x[15] <= 0.215\ngini = 0.024\nsamples = 69\nvalue = [[3, 66]\n[69, 0]\n[67, 2]\n[69, 0]\n[68, 1]\n[69, 0]\n[69, 0]]", fillcolor="#e88e4d"] ; 348 | 171 -> 172 ; 349 | 173 [label="gini = 0.0\nsamples = 63\nvalue = [[0, 63]\n[63, 0]\n[63, 0]\n[63, 0]\n[63, 0]\n[63, 0]\n[63, 0]]", fillcolor="#e58139"] ; 350 | 172 -> 173 ; 351 | 174 [label="x[10] <= 0.375\ngini = 0.175\nsamples = 6\nvalue = [[3, 3]\n[6, 0]\n[4, 2]\n[6, 0]\n[5, 1]\n[6, 0]\n[6, 0]]", fillcolor="#f8decb"] ; 352 | 172 -> 174 ; 353 | 175 [label="x[0] <= 4.931\ngini = 0.127\nsamples = 3\nvalue = [[3, 0]\n[3, 0]\n[1, 2]\n[3, 0]\n[2, 1]\n[3, 0]\n[3, 0]]", fillcolor="#f3c4a3"] ; 354 | 174 -> 175 ; 355 | 176 [label="gini = 0.0\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[0, 2]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#e58139"] ; 356 | 175 -> 176 ; 357 | 177 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 358 | 175 -> 177 ; 359 | 178 [label="gini = 0.0\nsamples = 3\nvalue = [[0, 3]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]]", fillcolor="#e58139"] ; 360 | 174 -> 178 ; 361 | 179 [label="x[6] <= 0.026\ngini = 0.179\nsamples = 13\nvalue = [[6, 7]\n[11, 2]\n[13, 0]\n[10, 3]\n[13, 0]\n[12, 1]\n[13, 0]]", fillcolor="#f9e0cf"] ; 362 | 171 -> 179 ; 363 | 180 [label="x[13] <= -0.085\ngini = 0.175\nsamples = 6\nvalue = [[6, 0]\n[4, 2]\n[6, 0]\n[3, 3]\n[6, 0]\n[5, 1]\n[6, 0]]", fillcolor="#f8decb"] ; 364 | 179 -> 180 ; 365 | 181 [label="x[11] <= -0.15\ngini = 0.127\nsamples = 3\nvalue = [[3, 0]\n[1, 2]\n[3, 0]\n[3, 0]\n[3, 0]\n[2, 1]\n[3, 0]]", fillcolor="#f3c4a3"] ; 366 | 180 -> 181 ; 367 | 182 [label="gini = 0.0\nsamples = 2\nvalue = [[2, 0]\n[0, 2]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#e58139"] ; 368 | 181 -> 182 ; 369 | 183 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]]", fillcolor="#e58139"] ; 370 | 181 -> 183 ; 371 | 184 [label="gini = 0.0\nsamples = 3\nvalue = [[3, 0]\n[3, 0]\n[3, 0]\n[0, 3]\n[3, 0]\n[3, 0]\n[3, 0]]", fillcolor="#e58139"] ; 372 | 180 -> 184 ; 373 | 185 [label="gini = 0.0\nsamples = 7\nvalue = [[0, 7]\n[7, 0]\n[7, 0]\n[7, 0]\n[7, 0]\n[7, 0]\n[7, 0]]", fillcolor="#e58139"] ; 374 | 179 -> 185 ; 375 | 186 [label="x[4] <= 0.382\ngini = 0.2\nsamples = 47\nvalue = [[24.0, 23.0]\n[41.0, 6.0]\n[40.0, 7.0]\n[41.0, 6.0]\n[46.0, 1.0]\n[45.0, 2.0]\n[45.0, 2.0]]", fillcolor="#fbece0"] ; 376 | 170 -> 186 ; 377 | 187 [label="x[22] <= -0.002\ngini = 0.185\nsamples = 42\nvalue = [[19.0, 23.0]\n[41.0, 1.0]\n[35.0, 7.0]\n[36.0, 6.0]\n[41.0, 1.0]\n[40.0, 2.0]\n[40.0, 2.0]]", fillcolor="#f9e3d3"] ; 378 | 186 -> 187 ; 379 | 188 [label="x[14] <= -0.343\ngini = 0.079\nsamples = 6\nvalue = [[5, 1]\n[6, 0]\n[1, 5]\n[6, 0]\n[6, 0]\n[6, 0]\n[6, 0]]", fillcolor="#eeab7b"] ; 380 | 187 -> 188 ; 381 | 189 [label="gini = 0.0\nsamples = 1\nvalue = [[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 382 | 188 -> 189 ; 383 | 190 [label="gini = 0.0\nsamples = 5\nvalue = [[5, 0]\n[5, 0]\n[0, 5]\n[5, 0]\n[5, 0]\n[5, 0]\n[5, 0]]", fillcolor="#e58139"] ; 384 | 188 -> 190 ; 385 | 191 [label="x[11] <= -0.157\ngini = 0.168\nsamples = 36\nvalue = [[14, 22]\n[35, 1]\n[34, 2]\n[30, 6]\n[35, 1]\n[34, 2]\n[34, 2]]", fillcolor="#f7dac5"] ; 386 | 187 -> 191 ; 387 | 192 [label="x[1] <= -1.711\ngini = 0.136\nsamples = 28\nvalue = [[8, 20]\n[27, 1]\n[26, 2]\n[27, 1]\n[27, 1]\n[27, 1]\n[26, 2]]", fillcolor="#f4c9aa"] ; 388 | 191 -> 192 ; 389 | 193 [label="x[15] <= 0.257\ngini = 0.206\nsamples = 6\nvalue = [[5, 1]\n[6, 0]\n[4, 2]\n[6, 0]\n[5, 1]\n[6, 0]\n[4, 2]]", fillcolor="#fcefe5"] ; 390 | 192 -> 193 ; 391 | 194 [label="gini = 0.0\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[0, 2]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#e58139"] ; 392 | 193 -> 194 ; 393 | 195 [label="x[7] <= 1.017\ngini = 0.179\nsamples = 4\nvalue = [[3, 1]\n[4, 0]\n[4, 0]\n[4, 0]\n[3, 1]\n[4, 0]\n[2, 2]]", fillcolor="#f9e0ce"] ; 394 | 193 -> 195 ; 395 | 196 [label="gini = 0.143\nsamples = 2\nvalue = [[1, 1]\n[2, 0]\n[2, 0]\n[2, 0]\n[1, 1]\n[2, 0]\n[2, 0]]", fillcolor="#f5cdb0"] ; 396 | 195 -> 196 ; 397 | 197 [label="gini = 0.0\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[0, 2]]", fillcolor="#e58139"] ; 398 | 195 -> 197 ; 399 | 198 [label="x[10] <= -0.005\ngini = 0.071\nsamples = 22\nvalue = [[3, 19]\n[21, 1]\n[22, 0]\n[21, 1]\n[22, 0]\n[21, 1]\n[22, 0]]", fillcolor="#eda774"] ; 400 | 192 -> 198 ; 401 | 199 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]]", fillcolor="#e58139"] ; 402 | 198 -> 199 ; 403 | 200 [label="x[15] <= 0.165\ngini = 0.051\nsamples = 21\nvalue = [[2, 19]\n[20, 1]\n[21, 0]\n[20, 1]\n[21, 0]\n[21, 0]\n[21, 0]]", fillcolor="#eb9c63"] ; 404 | 198 -> 200 ; 405 | 201 [label="gini = 0.0\nsamples = 16\nvalue = [[0, 16]\n[16, 0]\n[16, 0]\n[16, 0]\n[16, 0]\n[16, 0]\n[16, 0]]", fillcolor="#e58139"] ; 406 | 200 -> 201 ; 407 | 202 [label="gini = 0.16\nsamples = 5\nvalue = [[2, 3]\n[4, 1]\n[5, 0]\n[4, 1]\n[5, 0]\n[5, 0]\n[5, 0]]", fillcolor="#f7d6bf"] ; 408 | 200 -> 202 ; 409 | 203 [label="x[6] <= -0.005\ngini = 0.152\nsamples = 8\nvalue = [[6, 2]\n[8, 0]\n[8, 0]\n[3, 5]\n[8, 0]\n[7, 1]\n[8, 0]]", fillcolor="#f6d2b8"] ; 410 | 191 -> 203 ; 411 | 204 [label="x[12] <= -0.236\ngini = 0.127\nsamples = 3\nvalue = [[1, 2]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]\n[2, 1]\n[3, 0]]", fillcolor="#f3c4a3"] ; 412 | 203 -> 204 ; 413 | 205 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]]", fillcolor="#e58139"] ; 414 | 204 -> 205 ; 415 | 206 [label="gini = 0.0\nsamples = 2\nvalue = [[0, 2]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#e58139"] ; 416 | 204 -> 206 ; 417 | 207 [label="gini = 0.0\nsamples = 5\nvalue = [[5, 0]\n[5, 0]\n[5, 0]\n[0, 5]\n[5, 0]\n[5, 0]\n[5, 0]]", fillcolor="#e58139"] ; 418 | 203 -> 207 ; 419 | 208 [label="gini = 0.0\nsamples = 5\nvalue = [[5, 0]\n[0, 5]\n[5, 0]\n[5, 0]\n[5, 0]\n[5, 0]\n[5, 0]]", fillcolor="#e58139"] ; 420 | 186 -> 208 ; 421 | 209 [label="x[16] <= 0.001\ngini = 0.191\nsamples = 24\nvalue = [[19, 5]\n[24, 0]\n[14, 10]\n[24, 0]\n[24, 0]\n[16, 8]\n[23, 1]]", fillcolor="#fae7d9"] ; 422 | 169 -> 209 ; 423 | 210 [label="x[17] <= -0.092\ngini = 0.079\nsamples = 6\nvalue = [[1, 5]\n[6, 0]\n[6, 0]\n[6, 0]\n[6, 0]\n[5, 1]\n[6, 0]]", fillcolor="#eeab7b"] ; 424 | 209 -> 210 ; 425 | 211 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]]", fillcolor="#e58139"] ; 426 | 210 -> 211 ; 427 | 212 [label="gini = 0.0\nsamples = 5\nvalue = [[0, 5]\n[5, 0]\n[5, 0]\n[5, 0]\n[5, 0]\n[5, 0]\n[5, 0]]", fillcolor="#e58139"] ; 428 | 210 -> 212 ; 429 | 213 [label="x[21] <= -0.007\ngini = 0.153\nsamples = 18\nvalue = [[18, 0]\n[18, 0]\n[8, 10]\n[18, 0]\n[18, 0]\n[11, 7]\n[17, 1]]", fillcolor="#f6d3b9"] ; 430 | 209 -> 213 ; 431 | 214 [label="gini = 0.0\nsamples = 5\nvalue = [[5, 0]\n[5, 0]\n[5, 0]\n[5, 0]\n[5, 0]\n[0, 5]\n[5, 0]]", fillcolor="#e58139"] ; 432 | 213 -> 214 ; 433 | 215 [label="x[10] <= -1.223\ngini = 0.108\nsamples = 13\nvalue = [[13, 0]\n[13, 0]\n[3, 10]\n[13, 0]\n[13, 0]\n[11, 2]\n[12, 1]]", fillcolor="#f1ba93"] ; 434 | 213 -> 215 ; 435 | 216 [label="x[15] <= 2.261\ngini = 0.143\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[1, 1]\n[1, 1]]", fillcolor="#f5cdb0"] ; 436 | 215 -> 216 ; 437 | 217 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]]", fillcolor="#e58139"] ; 438 | 216 -> 217 ; 439 | 218 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]]", fillcolor="#e58139"] ; 440 | 216 -> 218 ; 441 | 219 [label="x[9] <= 0.125\ngini = 0.047\nsamples = 11\nvalue = [[11, 0]\n[11, 0]\n[1, 10]\n[11, 0]\n[11, 0]\n[10, 1]\n[11, 0]]", fillcolor="#ea9a60"] ; 442 | 215 -> 219 ; 443 | 220 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]]", fillcolor="#e58139"] ; 444 | 219 -> 220 ; 445 | 221 [label="gini = 0.0\nsamples = 10\nvalue = [[10, 0]\n[10, 0]\n[0, 10]\n[10, 0]\n[10, 0]\n[10, 0]\n[10, 0]]", fillcolor="#e58139"] ; 446 | 219 -> 221 ; 447 | 222 [label="x[6] <= 0.006\ngini = 0.199\nsamples = 130\nvalue = [[85, 45]\n[82, 48]\n[123, 7]\n[129, 1]\n[103, 27]\n[128, 2]\n[130, 0]]", fillcolor="#fbebdf"] ; 448 | 168 -> 222 ; 449 | 223 [label="x[6] <= -0.048\ngini = 0.189\nsamples = 70\nvalue = [[37, 33]\n[63, 7]\n[65, 5]\n[69, 1]\n[48, 22]\n[68, 2]\n[70, 0]]", fillcolor="#fae6d7"] ; 450 | 222 -> 223 ; 451 | 224 [label="x[14] <= -0.061\ngini = 0.081\nsamples = 25\nvalue = [[4, 21]\n[25, 0]\n[24, 1]\n[24, 1]\n[25, 0]\n[23, 2]\n[25, 0]]", fillcolor="#eeac7d"] ; 452 | 223 -> 224 ; 453 | 225 [label="gini = 0.0\nsamples = 20\nvalue = [[0, 20]\n[20, 0]\n[20, 0]\n[20, 0]\n[20, 0]\n[20, 0]\n[20, 0]]", fillcolor="#e58139"] ; 454 | 224 -> 225 ; 455 | 226 [label="x[10] <= -0.26\ngini = 0.206\nsamples = 5\nvalue = [[4, 1]\n[5, 0]\n[4, 1]\n[4, 1]\n[5, 0]\n[3, 2]\n[5, 0]]", fillcolor="#fceee5"] ; 456 | 224 -> 226 ; 457 | 227 [label="gini = 0.0\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[0, 2]\n[2, 0]]", fillcolor="#e58139"] ; 458 | 226 -> 227 ; 459 | 228 [label="x[5] <= -0.149\ngini = 0.19\nsamples = 3\nvalue = [[2, 1]\n[3, 0]\n[2, 1]\n[2, 1]\n[3, 0]\n[3, 0]\n[3, 0]]", fillcolor="#fae6d8"] ; 460 | 226 -> 228 ; 461 | 229 [label="gini = 0.0\nsamples = 1\nvalue = [[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 462 | 228 -> 229 ; 463 | 230 [label="x[2] <= -0.861\ngini = 0.143\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[1, 1]\n[1, 1]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#f5cdb0"] ; 464 | 228 -> 230 ; 465 | 231 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 466 | 230 -> 231 ; 467 | 232 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 468 | 230 -> 232 ; 469 | 233 [label="x[9] <= 0.09\ngini = 0.188\nsamples = 45\nvalue = [[33, 12]\n[38, 7]\n[41, 4]\n[45, 0]\n[23, 22]\n[45, 0]\n[45, 0]]", fillcolor="#fae5d6"] ; 470 | 223 -> 233 ; 471 | 234 [label="x[4] <= 0.17\ngini = 0.113\nsamples = 29\nvalue = [[25, 4]\n[26, 3]\n[29, 0]\n[29, 0]\n[7, 22]\n[29, 0]\n[29, 0]]", fillcolor="#f1bd97"] ; 472 | 233 -> 234 ; 473 | 235 [label="x[18] <= -0.034\ngini = 0.077\nsamples = 26\nvalue = [[25, 1]\n[23, 3]\n[26, 0]\n[26, 0]\n[4, 22]\n[26, 0]\n[26, 0]]", fillcolor="#edaa79"] ; 474 | 234 -> 235 ; 475 | 236 [label="x[12] <= -0.06\ngini = 0.143\nsamples = 2\nvalue = [[1, 1]\n[1, 1]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#f5cdb0"] ; 476 | 235 -> 236 ; 477 | 237 [label="gini = 0.0\nsamples = 1\nvalue = [[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 478 | 236 -> 237 ; 479 | 238 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 480 | 236 -> 238 ; 481 | 239 [label="x[22] <= 0.001\ngini = 0.044\nsamples = 24\nvalue = [[24, 0]\n[22, 2]\n[24, 0]\n[24, 0]\n[2, 22]\n[24, 0]\n[24, 0]]", fillcolor="#ea985d"] ; 482 | 235 -> 239 ; 483 | 240 [label="x[21] <= -0.003\ngini = 0.024\nsamples = 23\nvalue = [[23, 0]\n[22, 1]\n[23, 0]\n[23, 0]\n[1, 22]\n[23, 0]\n[23, 0]]", fillcolor="#e88e4d"] ; 484 | 239 -> 240 ; 485 | 241 [label="x[1] <= -0.93\ngini = 0.143\nsamples = 2\nvalue = [[2, 0]\n[1, 1]\n[2, 0]\n[2, 0]\n[1, 1]\n[2, 0]\n[2, 0]]", fillcolor="#f5cdb0"] ; 486 | 240 -> 241 ; 487 | 242 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 488 | 241 -> 242 ; 489 | 243 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 490 | 241 -> 243 ; 491 | 244 [label="gini = 0.0\nsamples = 21\nvalue = [[21, 0]\n[21, 0]\n[21, 0]\n[21, 0]\n[0, 21]\n[21, 0]\n[21, 0]]", fillcolor="#e58139"] ; 492 | 240 -> 244 ; 493 | 245 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 494 | 239 -> 245 ; 495 | 246 [label="gini = 0.0\nsamples = 3\nvalue = [[0, 3]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]]", fillcolor="#e58139"] ; 496 | 234 -> 246 ; 497 | 247 [label="x[18] <= -0.013\ngini = 0.179\nsamples = 16\nvalue = [[8, 8]\n[12, 4]\n[12, 4]\n[16, 0]\n[16, 0]\n[16, 0]\n[16, 0]]", fillcolor="#f9e0ce"] ; 498 | 233 -> 247 ; 499 | 248 [label="x[6] <= 0.002\ngini = 0.056\nsamples = 9\nvalue = [[1, 8]\n[9, 0]\n[8, 1]\n[9, 0]\n[9, 0]\n[9, 0]\n[9, 0]]", fillcolor="#eb9f68"] ; 500 | 247 -> 248 ; 501 | 249 [label="gini = 0.0\nsamples = 8\nvalue = [[0, 8]\n[8, 0]\n[8, 0]\n[8, 0]\n[8, 0]\n[8, 0]\n[8, 0]]", fillcolor="#e58139"] ; 502 | 248 -> 249 ; 503 | 250 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 504 | 248 -> 250 ; 505 | 251 [label="x[13] <= -0.106\ngini = 0.14\nsamples = 7\nvalue = [[7, 0]\n[3, 4]\n[4, 3]\n[7, 0]\n[7, 0]\n[7, 0]\n[7, 0]]", fillcolor="#f4cbae"] ; 506 | 247 -> 251 ; 507 | 252 [label="gini = 0.0\nsamples = 3\nvalue = [[3, 0]\n[0, 3]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]]", fillcolor="#e58139"] ; 508 | 251 -> 252 ; 509 | 253 [label="x[1] <= -0.973\ngini = 0.107\nsamples = 4\nvalue = [[4, 0]\n[3, 1]\n[1, 3]\n[4, 0]\n[4, 0]\n[4, 0]\n[4, 0]]", fillcolor="#f1ba92"] ; 510 | 251 -> 253 ; 511 | 254 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 512 | 253 -> 254 ; 513 | 255 [label="gini = 0.0\nsamples = 3\nvalue = [[3, 0]\n[3, 0]\n[0, 3]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]]", fillcolor="#e58139"] ; 514 | 253 -> 255 ; 515 | 256 [label="x[1] <= -0.631\ngini = 0.139\nsamples = 60\nvalue = [[48, 12]\n[19, 41]\n[58, 2]\n[60, 0]\n[55, 5]\n[60, 0]\n[60, 0]]", fillcolor="#f4cbad"] ; 516 | 222 -> 256 ; 517 | 257 [label="x[4] <= 0.351\ngini = 0.104\nsamples = 52\nvalue = [[41, 11]\n[12, 40]\n[51, 1]\n[52, 0]\n[52, 0]\n[52, 0]\n[52, 0]]", fillcolor="#f0b890"] ; 518 | 256 -> 257 ; 519 | 258 [label="x[1] <= -0.937\ngini = 0.14\nsamples = 21\nvalue = [[12, 9]\n[9, 12]\n[21, 0]\n[21, 0]\n[21, 0]\n[21, 0]\n[21, 0]]", fillcolor="#f4cbae"] ; 520 | 257 -> 258 ; 521 | 259 [label="x[21] <= -0.005\ngini = 0.07\nsamples = 7\nvalue = [[1, 6]\n[6, 1]\n[7, 0]\n[7, 0]\n[7, 0]\n[7, 0]\n[7, 0]]", fillcolor="#eda673"] ; 522 | 258 -> 259 ; 523 | 260 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 524 | 259 -> 260 ; 525 | 261 [label="gini = 0.0\nsamples = 6\nvalue = [[0, 6]\n[6, 0]\n[6, 0]\n[6, 0]\n[6, 0]\n[6, 0]\n[6, 0]]", fillcolor="#e58139"] ; 526 | 259 -> 261 ; 527 | 262 [label="x[7] <= 0.139\ngini = 0.096\nsamples = 14\nvalue = [[11, 3]\n[3, 11]\n[14, 0]\n[14, 0]\n[14, 0]\n[14, 0]\n[14, 0]]", fillcolor="#f0b489"] ; 528 | 258 -> 262 ; 529 | 263 [label="x[15] <= 0.078\ngini = 0.044\nsamples = 12\nvalue = [[11, 1]\n[1, 11]\n[12, 0]\n[12, 0]\n[12, 0]\n[12, 0]\n[12, 0]]", fillcolor="#ea985d"] ; 530 | 262 -> 263 ; 531 | 264 [label="gini = 0.0\nsamples = 1\nvalue = [[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 532 | 263 -> 264 ; 533 | 265 [label="gini = 0.0\nsamples = 11\nvalue = [[11, 0]\n[0, 11]\n[11, 0]\n[11, 0]\n[11, 0]\n[11, 0]\n[11, 0]]", fillcolor="#e58139"] ; 534 | 263 -> 265 ; 535 | 266 [label="gini = 0.0\nsamples = 2\nvalue = [[0, 2]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#e58139"] ; 536 | 262 -> 266 ; 537 | 267 [label="x[20] <= 0.009\ngini = 0.051\nsamples = 31\nvalue = [[29, 2]\n[3, 28]\n[30, 1]\n[31, 0]\n[31, 0]\n[31, 0]\n[31, 0]]", fillcolor="#eb9c64"] ; 538 | 257 -> 267 ; 539 | 268 [label="x[14] <= -0.15\ngini = 0.019\nsamples = 29\nvalue = [[28, 1]\n[1, 28]\n[29, 0]\n[29, 0]\n[29, 0]\n[29, 0]\n[29, 0]]", fillcolor="#e78b49"] ; 540 | 267 -> 268 ; 541 | 269 [label="x[0] <= -0.243\ngini = 0.079\nsamples = 6\nvalue = [[5, 1]\n[1, 5]\n[6, 0]\n[6, 0]\n[6, 0]\n[6, 0]\n[6, 0]]", fillcolor="#eeab7b"] ; 542 | 268 -> 269 ; 543 | 270 [label="gini = 0.0\nsamples = 1\nvalue = [[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 544 | 269 -> 270 ; 545 | 271 [label="gini = 0.0\nsamples = 5\nvalue = [[5, 0]\n[0, 5]\n[5, 0]\n[5, 0]\n[5, 0]\n[5, 0]\n[5, 0]]", fillcolor="#e58139"] ; 546 | 269 -> 271 ; 547 | 272 [label="gini = 0.0\nsamples = 23\nvalue = [[23, 0]\n[0, 23]\n[23, 0]\n[23, 0]\n[23, 0]\n[23, 0]\n[23, 0]]", fillcolor="#e58139"] ; 548 | 268 -> 272 ; 549 | 273 [label="x[4] <= 0.463\ngini = 0.143\nsamples = 2\nvalue = [[1, 1]\n[2, 0]\n[1, 1]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#f5cdb0"] ; 550 | 267 -> 273 ; 551 | 274 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 552 | 273 -> 274 ; 553 | 275 [label="gini = 0.0\nsamples = 1\nvalue = [[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 554 | 273 -> 275 ; 555 | 276 [label="x[12] <= 0.01\ngini = 0.161\nsamples = 8\nvalue = [[7, 1]\n[7, 1]\n[7, 1]\n[8, 0]\n[3, 5]\n[8, 0]\n[8, 0]]", fillcolor="#f7d6bf"] ; 556 | 256 -> 276 ; 557 | 277 [label="gini = 0.0\nsamples = 5\nvalue = [[5, 0]\n[5, 0]\n[5, 0]\n[5, 0]\n[0, 5]\n[5, 0]\n[5, 0]]", fillcolor="#e58139"] ; 558 | 276 -> 277 ; 559 | 278 [label="x[11] <= 0.162\ngini = 0.19\nsamples = 3\nvalue = [[2, 1]\n[2, 1]\n[2, 1]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]]", fillcolor="#fae6d8"] ; 560 | 276 -> 278 ; 561 | 279 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 562 | 278 -> 279 ; 563 | 280 [label="x[21] <= -0.001\ngini = 0.143\nsamples = 2\nvalue = [[1, 1]\n[2, 0]\n[1, 1]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#f5cdb0"] ; 564 | 278 -> 280 ; 565 | 281 [label="gini = 0.0\nsamples = 1\nvalue = [[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 566 | 280 -> 281 ; 567 | 282 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 568 | 280 -> 282 ; 569 | 283 [label="x[0] <= -2.372\ngini = 0.213\nsamples = 2145\nvalue = [[1507.0, 638.0]\n[2041.0, 104.0]\n[1732.0, 413.0]\n[2016.0, 129.0]\n[1403.0, 742.0]\n[2044.0, 101.0]\n[2127.0, 18.0]]", fillcolor="#fcf2eb"] ; 570 | 1 -> 283 ; 571 | 284 [label="x[17] <= -0.0\ngini = 0.173\nsamples = 628\nvalue = [[593, 35]\n[615, 13]\n[254, 374]\n[563, 65]\n[544, 84]\n[574, 54]\n[625, 3]]", fillcolor="#f8ddc9"] ; 572 | 283 -> 284 ; 573 | 285 [label="x[1] <= 0.139\ngini = 0.132\nsamples = 407\nvalue = [[373, 34]\n[399, 8]\n[114, 293]\n[382, 25]\n[395, 12]\n[375, 32]\n[404, 3]]", fillcolor="#f4c7a8"] ; 574 | 284 -> 285 ; 575 | 286 [label="x[11] <= 0.003\ngini = 0.082\nsamples = 24\nvalue = [[4, 20]\n[24, 0]\n[21, 3]\n[24, 0]\n[24, 0]\n[23, 1]\n[24, 0]]", fillcolor="#eead7e"] ; 576 | 285 -> 286 ; 577 | 287 [label="x[0] <= -2.373\ngini = 0.16\nsamples = 5\nvalue = [[4, 1]\n[5, 0]\n[2, 3]\n[5, 0]\n[5, 0]\n[4, 1]\n[5, 0]]", fillcolor="#f7d6bf"] ; 578 | 286 -> 287 ; 579 | 288 [label="x[21] <= 0.0\ngini = 0.107\nsamples = 4\nvalue = [[4, 0]\n[4, 0]\n[1, 3]\n[4, 0]\n[4, 0]\n[3, 1]\n[4, 0]]", fillcolor="#f1ba92"] ; 580 | 287 -> 288 ; 581 | 289 [label="gini = 0.0\nsamples = 3\nvalue = [[3, 0]\n[3, 0]\n[0, 3]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]]", fillcolor="#e58139"] ; 582 | 288 -> 289 ; 583 | 290 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]]", fillcolor="#e58139"] ; 584 | 288 -> 290 ; 585 | 291 [label="gini = 0.0\nsamples = 1\nvalue = [[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 586 | 287 -> 291 ; 587 | 292 [label="gini = 0.0\nsamples = 19\nvalue = [[0, 19]\n[19, 0]\n[19, 0]\n[19, 0]\n[19, 0]\n[19, 0]\n[19, 0]]", fillcolor="#e58139"] ; 588 | 286 -> 292 ; 589 | 293 [label="x[12] <= 0.0\ngini = 0.118\nsamples = 383\nvalue = [[369.0, 14.0]\n[375.0, 8.0]\n[93.0, 290.0]\n[358.0, 25.0]\n[371.0, 12.0]\n[352.0, 31.0]\n[380.0, 3.0]]", fillcolor="#f2c09c"] ; 590 | 285 -> 293 ; 591 | 294 [label="x[21] <= 0.0\ngini = 0.187\nsamples = 58\nvalue = [[52, 6]\n[57, 1]\n[32, 26]\n[37, 21]\n[56, 2]\n[56, 2]\n[58, 0]]", fillcolor="#fae4d5"] ; 592 | 293 -> 294 ; 593 | 295 [label="x[15] <= 0.001\ngini = 0.138\nsamples = 36\nvalue = [[30, 6]\n[35, 1]\n[11, 25]\n[36, 0]\n[34, 2]\n[34, 2]\n[36, 0]]", fillcolor="#f4caac"] ; 594 | 294 -> 295 ; 595 | 296 [label="x[18] <= -0.002\ngini = 0.108\nsamples = 32\nvalue = [[30, 2]\n[31, 1]\n[7, 25]\n[32, 0]\n[30, 2]\n[30, 2]\n[32, 0]]", fillcolor="#f1ba93"] ; 596 | 295 -> 296 ; 597 | 297 [label="x[3] <= -0.433\ngini = 0.127\nsamples = 3\nvalue = [[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]\n[1, 2]\n[2, 1]\n[3, 0]]", fillcolor="#f3c4a3"] ; 598 | 296 -> 297 ; 599 | 298 [label="gini = 0.0\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[0, 2]\n[2, 0]\n[2, 0]]", fillcolor="#e58139"] ; 600 | 297 -> 298 ; 601 | 299 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]]", fillcolor="#e58139"] ; 602 | 297 -> 299 ; 603 | 300 [label="x[6] <= -0.717\ngini = 0.071\nsamples = 29\nvalue = [[27, 2]\n[28, 1]\n[4, 25]\n[29, 0]\n[29, 0]\n[28, 1]\n[29, 0]]", fillcolor="#eda775"] ; 604 | 296 -> 300 ; 605 | 301 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]]", fillcolor="#e58139"] ; 606 | 300 -> 301 ; 607 | 302 [label="x[11] <= 0.004\ngini = 0.056\nsamples = 28\nvalue = [[26, 2]\n[27, 1]\n[3, 25]\n[28, 0]\n[28, 0]\n[28, 0]\n[28, 0]]", fillcolor="#eb9f68"] ; 608 | 300 -> 302 ; 609 | 303 [label="x[17] <= -0.001\ngini = 0.04\nsamples = 27\nvalue = [[26, 1]\n[26, 1]\n[2, 25]\n[27, 0]\n[27, 0]\n[27, 0]\n[27, 0]]", fillcolor="#e9965a"] ; 610 | 302 -> 303 ; 611 | 304 [label="gini = 0.16\nsamples = 5\nvalue = [[4, 1]\n[4, 1]\n[2, 3]\n[5, 0]\n[5, 0]\n[5, 0]\n[5, 0]]", fillcolor="#f7d6bf"] ; 612 | 303 -> 304 ; 613 | 305 [label="gini = 0.0\nsamples = 22\nvalue = [[22, 0]\n[22, 0]\n[0, 22]\n[22, 0]\n[22, 0]\n[22, 0]\n[22, 0]]", fillcolor="#e58139"] ; 614 | 303 -> 305 ; 615 | 306 [label="gini = 0.0\nsamples = 1\nvalue = [[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 616 | 302 -> 306 ; 617 | 307 [label="gini = 0.0\nsamples = 4\nvalue = [[0, 4]\n[4, 0]\n[4, 0]\n[4, 0]\n[4, 0]\n[4, 0]\n[4, 0]]", fillcolor="#e58139"] ; 618 | 295 -> 307 ; 619 | 308 [label="x[8] <= 0.004\ngini = 0.025\nsamples = 22\nvalue = [[22, 0]\n[22, 0]\n[21, 1]\n[1, 21]\n[22, 0]\n[22, 0]\n[22, 0]]", fillcolor="#e88e4e"] ; 620 | 294 -> 308 ; 621 | 309 [label="x[22] <= 0.001\ngini = 0.143\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[1, 1]\n[1, 1]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#f5cdb0"] ; 622 | 308 -> 309 ; 623 | 310 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 624 | 309 -> 310 ; 625 | 311 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 626 | 309 -> 311 ; 627 | 312 [label="gini = 0.0\nsamples = 20\nvalue = [[20, 0]\n[20, 0]\n[20, 0]\n[0, 20]\n[20, 0]\n[20, 0]\n[20, 0]]", fillcolor="#e58139"] ; 628 | 308 -> 312 ; 629 | 313 [label="x[6] <= 0.013\ngini = 0.094\nsamples = 325\nvalue = [[317.0, 8.0]\n[318.0, 7.0]\n[61.0, 264.0]\n[321.0, 4.0]\n[315.0, 10.0]\n[296.0, 29.0]\n[322.0, 3.0]]", fillcolor="#efb388"] ; 630 | 293 -> 313 ; 631 | 314 [label="x[20] <= 0.001\ngini = 0.129\nsamples = 198\nvalue = [[190, 8]\n[195, 3]\n[55, 143]\n[195, 3]\n[189, 9]\n[169, 29]\n[195, 3]]", fillcolor="#f3c6a5"] ; 632 | 313 -> 314 ; 633 | 315 [label="x[22] <= 0.001\ngini = 0.197\nsamples = 25\nvalue = [[17.0, 8.0]\n[25.0, 0.0]\n[18.0, 7.0]\n[25.0, 0.0]\n[16.0, 9.0]\n[24.0, 1.0]\n[25.0, 0.0]]", fillcolor="#fbe9dd"] ; 634 | 314 -> 315 ; 635 | 316 [label="x[11] <= 0.004\ngini = 0.07\nsamples = 7\nvalue = [[6, 1]\n[7, 0]\n[1, 6]\n[7, 0]\n[7, 0]\n[7, 0]\n[7, 0]]", fillcolor="#eda673"] ; 636 | 315 -> 316 ; 637 | 317 [label="gini = 0.0\nsamples = 6\nvalue = [[6, 0]\n[6, 0]\n[0, 6]\n[6, 0]\n[6, 0]\n[6, 0]\n[6, 0]]", fillcolor="#e58139"] ; 638 | 316 -> 317 ; 639 | 318 [label="gini = 0.0\nsamples = 1\nvalue = [[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 640 | 316 -> 318 ; 641 | 319 [label="x[17] <= -0.0\ngini = 0.169\nsamples = 18\nvalue = [[11, 7]\n[18, 0]\n[17, 1]\n[18, 0]\n[9, 9]\n[17, 1]\n[18, 0]]", fillcolor="#f8dbc6"] ; 642 | 315 -> 319 ; 643 | 320 [label="gini = 0.0\nsamples = 4\nvalue = [[0, 4]\n[4, 0]\n[4, 0]\n[4, 0]\n[4, 0]\n[4, 0]\n[4, 0]]", fillcolor="#e58139"] ; 644 | 319 -> 320 ; 645 | 321 [label="x[12] <= 0.001\ngini = 0.152\nsamples = 14\nvalue = [[11, 3]\n[14, 0]\n[13, 1]\n[14, 0]\n[5, 9]\n[13, 1]\n[14, 0]]", fillcolor="#f6d2b8"] ; 646 | 319 -> 321 ; 647 | 322 [label="x[0] <= -2.373\ngini = 0.09\nsamples = 11\nvalue = [[11, 0]\n[11, 0]\n[10, 1]\n[11, 0]\n[2, 9]\n[10, 1]\n[11, 0]]", fillcolor="#efb184"] ; 648 | 321 -> 322 ; 649 | 323 [label="gini = 0.051\nsamples = 10\nvalue = [[10, 0]\n[10, 0]\n[9, 1]\n[10, 0]\n[1, 9]\n[10, 0]\n[10, 0]]", fillcolor="#eb9c64"] ; 650 | 322 -> 323 ; 651 | 324 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]]", fillcolor="#e58139"] ; 652 | 322 -> 324 ; 653 | 325 [label="gini = 0.0\nsamples = 3\nvalue = [[0, 3]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]]", fillcolor="#e58139"] ; 654 | 321 -> 325 ; 655 | 326 [label="x[22] <= 0.001\ngini = 0.101\nsamples = 173\nvalue = [[173.0, 0.0]\n[170.0, 3.0]\n[37.0, 136.0]\n[170.0, 3.0]\n[173.0, 0.0]\n[145.0, 28.0]\n[170.0, 3.0]]", fillcolor="#f0b78e"] ; 656 | 314 -> 326 ; 657 | 327 [label="gini = 0.0\nsamples = 12\nvalue = [[12, 0]\n[12, 0]\n[0, 12]\n[12, 0]\n[12, 0]\n[12, 0]\n[12, 0]]", fillcolor="#e58139"] ; 658 | 326 -> 327 ; 659 | 328 [label="x[10] <= 0.024\ngini = 0.107\nsamples = 161\nvalue = [[161, 0]\n[158, 3]\n[37, 124]\n[158, 3]\n[161, 0]\n[133, 28]\n[158, 3]]", fillcolor="#f1ba93"] ; 660 | 326 -> 328 ; 661 | 329 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]]", fillcolor="#e58139"] ; 662 | 328 -> 329 ; 663 | 330 [label="x[8] <= 0.004\ngini = 0.106\nsamples = 160\nvalue = [[160, 0]\n[157, 3]\n[36, 124]\n[157, 3]\n[160, 0]\n[133, 27]\n[157, 3]]", fillcolor="#f1b991"] ; 664 | 328 -> 330 ; 665 | 331 [label="gini = 0.0\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[0, 2]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#e58139"] ; 666 | 330 -> 331 ; 667 | 332 [label="gini = 0.107\nsamples = 158\nvalue = [[158, 0]\n[155, 3]\n[36, 122]\n[155, 3]\n[158, 0]\n[131, 27]\n[155, 3]]", fillcolor="#f1ba92"] ; 668 | 330 -> 332 ; 669 | 333 [label="x[21] <= 0.0\ngini = 0.026\nsamples = 127\nvalue = [[127, 0]\n[123, 4]\n[6, 121]\n[126, 1]\n[126, 1]\n[127, 0]\n[127, 0]]", fillcolor="#e88f4f"] ; 670 | 313 -> 333 ; 671 | 334 [label="x[17] <= -0.0\ngini = 0.009\nsamples = 122\nvalue = [[122, 0]\n[122, 0]\n[2, 120]\n[121, 1]\n[121, 1]\n[122, 0]\n[122, 0]]", fillcolor="#e68641"] ; 672 | 333 -> 334 ; 673 | 335 [label="gini = 0.0\nsamples = 114\nvalue = [[114, 0]\n[114, 0]\n[0, 114]\n[114, 0]\n[114, 0]\n[114, 0]\n[114, 0]]", fillcolor="#e58139"] ; 674 | 334 -> 335 ; 675 | 336 [label="x[21] <= 0.0\ngini = 0.116\nsamples = 8\nvalue = [[8, 0]\n[8, 0]\n[2, 6]\n[7, 1]\n[7, 1]\n[8, 0]\n[8, 0]]", fillcolor="#f2bf9a"] ; 676 | 334 -> 336 ; 677 | 337 [label="gini = 0.0\nsamples = 6\nvalue = [[6, 0]\n[6, 0]\n[0, 6]\n[6, 0]\n[6, 0]\n[6, 0]\n[6, 0]]", fillcolor="#e58139"] ; 678 | 336 -> 337 ; 679 | 338 [label="x[10] <= 0.024\ngini = 0.143\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[2, 0]\n[1, 1]\n[1, 1]\n[2, 0]\n[2, 0]]", fillcolor="#f5cdb0"] ; 680 | 336 -> 338 ; 681 | 339 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 682 | 338 -> 339 ; 683 | 340 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 684 | 338 -> 340 ; 685 | 341 [label="x[8] <= 0.004\ngini = 0.091\nsamples = 5\nvalue = [[5, 0]\n[1, 4]\n[4, 1]\n[5, 0]\n[5, 0]\n[5, 0]\n[5, 0]]", fillcolor="#efb285"] ; 686 | 333 -> 341 ; 687 | 342 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 688 | 341 -> 342 ; 689 | 343 [label="gini = 0.0\nsamples = 4\nvalue = [[4, 0]\n[0, 4]\n[4, 0]\n[4, 0]\n[4, 0]\n[4, 0]\n[4, 0]]", fillcolor="#e58139"] ; 690 | 341 -> 343 ; 691 | 344 [label="x[12] <= 0.001\ngini = 0.205\nsamples = 221\nvalue = [[220, 1]\n[216, 5]\n[140, 81]\n[181, 40]\n[149, 72]\n[199, 22]\n[221, 0]]", fillcolor="#fbeee4"] ; 692 | 284 -> 344 ; 693 | 345 [label="x[6] <= 0.251\ngini = 0.184\nsamples = 136\nvalue = [[135, 1]\n[131, 5]\n[67, 69]\n[98, 38]\n[131, 5]\n[118, 18]\n[136, 0]]", fillcolor="#f9e3d3"] ; 694 | 344 -> 345 ; 695 | 346 [label="x[19] <= 0.001\ngini = 0.119\nsamples = 51\nvalue = [[50.0, 1.0]\n[51.0, 0.0]\n[13.0, 38.0]\n[51.0, 0.0]\n[46.0, 5.0]\n[44.0, 7.0]\n[51.0, 0.0]]", fillcolor="#f2c09c"] ; 696 | 345 -> 346 ; 697 | 347 [label="gini = 0.0\nsamples = 6\nvalue = [[6, 0]\n[6, 0]\n[6, 0]\n[6, 0]\n[6, 0]\n[0, 6]\n[6, 0]]", fillcolor="#e58139"] ; 698 | 346 -> 347 ; 699 | 348 [label="x[10] <= 0.023\ngini = 0.078\nsamples = 45\nvalue = [[44, 1]\n[45, 0]\n[7, 38]\n[45, 0]\n[40, 5]\n[44, 1]\n[45, 0]]", fillcolor="#eeab7a"] ; 700 | 346 -> 348 ; 701 | 349 [label="gini = 0.0\nsamples = 22\nvalue = [[22, 0]\n[22, 0]\n[0, 22]\n[22, 0]\n[22, 0]\n[22, 0]\n[22, 0]]", fillcolor="#e58139"] ; 702 | 348 -> 349 ; 703 | 350 [label="x[19] <= 0.001\ngini = 0.133\nsamples = 23\nvalue = [[22, 1]\n[23, 0]\n[7, 16]\n[23, 0]\n[18, 5]\n[22, 1]\n[23, 0]]", fillcolor="#f4c8a8"] ; 704 | 348 -> 350 ; 705 | 351 [label="x[22] <= 0.001\ngini = 0.079\nsamples = 6\nvalue = [[5, 1]\n[6, 0]\n[6, 0]\n[6, 0]\n[1, 5]\n[6, 0]\n[6, 0]]", fillcolor="#eeab7b"] ; 706 | 350 -> 351 ; 707 | 352 [label="gini = 0.0\nsamples = 1\nvalue = [[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 708 | 351 -> 352 ; 709 | 353 [label="gini = 0.0\nsamples = 5\nvalue = [[5, 0]\n[5, 0]\n[5, 0]\n[5, 0]\n[0, 5]\n[5, 0]\n[5, 0]]", fillcolor="#e58139"] ; 710 | 351 -> 353 ; 711 | 354 [label="x[7] <= -0.111\ngini = 0.032\nsamples = 17\nvalue = [[17, 0]\n[17, 0]\n[1, 16]\n[17, 0]\n[17, 0]\n[16, 1]\n[17, 0]]", fillcolor="#e89253"] ; 712 | 350 -> 354 ; 713 | 355 [label="x[10] <= 0.024\ngini = 0.127\nsamples = 3\nvalue = [[3, 0]\n[3, 0]\n[1, 2]\n[3, 0]\n[3, 0]\n[2, 1]\n[3, 0]]", fillcolor="#f3c4a3"] ; 714 | 354 -> 355 ; 715 | 356 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]]", fillcolor="#e58139"] ; 716 | 355 -> 356 ; 717 | 357 [label="gini = 0.0\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[0, 2]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#e58139"] ; 718 | 355 -> 357 ; 719 | 358 [label="gini = 0.0\nsamples = 14\nvalue = [[14, 0]\n[14, 0]\n[0, 14]\n[14, 0]\n[14, 0]\n[14, 0]\n[14, 0]]", fillcolor="#e58139"] ; 720 | 354 -> 358 ; 721 | 359 [label="x[0] <= -2.423\ngini = 0.185\nsamples = 85\nvalue = [[85.0, 0.0]\n[80.0, 5.0]\n[54.0, 31.0]\n[47.0, 38.0]\n[85.0, 0.0]\n[74.0, 11.0]\n[85.0, 0.0]]", fillcolor="#f9e3d3"] ; 722 | 345 -> 359 ; 723 | 360 [label="x[15] <= 0.0\ngini = 0.136\nsamples = 23\nvalue = [[23, 0]\n[23, 0]\n[9, 14]\n[23, 0]\n[23, 0]\n[14, 9]\n[23, 0]]", fillcolor="#f4c9ab"] ; 724 | 359 -> 360 ; 725 | 361 [label="x[16] <= -0.005\ngini = 0.099\nsamples = 9\nvalue = [[9, 0]\n[9, 0]\n[7, 2]\n[9, 0]\n[9, 0]\n[2, 7]\n[9, 0]]", fillcolor="#f0b58b"] ; 726 | 360 -> 361 ; 727 | 362 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 728 | 361 -> 362 ; 729 | 363 [label="x[3] <= -2.27\ngini = 0.062\nsamples = 8\nvalue = [[8, 0]\n[8, 0]\n[7, 1]\n[8, 0]\n[8, 0]\n[1, 7]\n[8, 0]]", fillcolor="#eca26d"] ; 730 | 361 -> 363 ; 731 | 364 [label="gini = 0.0\nsamples = 5\nvalue = [[5, 0]\n[5, 0]\n[5, 0]\n[5, 0]\n[5, 0]\n[0, 5]\n[5, 0]]", fillcolor="#e58139"] ; 732 | 363 -> 364 ; 733 | 365 [label="x[15] <= -0.0\ngini = 0.127\nsamples = 3\nvalue = [[3, 0]\n[3, 0]\n[2, 1]\n[3, 0]\n[3, 0]\n[1, 2]\n[3, 0]]", fillcolor="#f3c4a3"] ; 734 | 363 -> 365 ; 735 | 366 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 736 | 365 -> 366 ; 737 | 367 [label="gini = 0.0\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[0, 2]\n[2, 0]]", fillcolor="#e58139"] ; 738 | 365 -> 367 ; 739 | 368 [label="x[15] <= 0.001\ngini = 0.07\nsamples = 14\nvalue = [[14, 0]\n[14, 0]\n[2, 12]\n[14, 0]\n[14, 0]\n[12, 2]\n[14, 0]]", fillcolor="#eda673"] ; 740 | 360 -> 368 ; 741 | 369 [label="x[0] <= -2.457\ngini = 0.127\nsamples = 6\nvalue = [[6, 0]\n[6, 0]\n[2, 4]\n[6, 0]\n[6, 0]\n[4, 2]\n[6, 0]]", fillcolor="#f3c4a3"] ; 742 | 368 -> 369 ; 743 | 370 [label="gini = 0.0\nsamples = 4\nvalue = [[4, 0]\n[4, 0]\n[0, 4]\n[4, 0]\n[4, 0]\n[4, 0]\n[4, 0]]", fillcolor="#e58139"] ; 744 | 369 -> 370 ; 745 | 371 [label="gini = 0.0\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[0, 2]\n[2, 0]]", fillcolor="#e58139"] ; 746 | 369 -> 371 ; 747 | 372 [label="gini = 0.0\nsamples = 8\nvalue = [[8, 0]\n[8, 0]\n[0, 8]\n[8, 0]\n[8, 0]\n[8, 0]\n[8, 0]]", fillcolor="#e58139"] ; 748 | 368 -> 372 ; 749 | 373 [label="x[19] <= 0.001\ngini = 0.155\nsamples = 62\nvalue = [[62, 0]\n[57, 5]\n[45, 17]\n[24, 38]\n[62, 0]\n[60, 2]\n[62, 0]]", fillcolor="#f6d3ba"] ; 750 | 359 -> 373 ; 751 | 374 [label="x[21] <= 0.0\ngini = 0.123\nsamples = 38\nvalue = [[38, 0]\n[34, 4]\n[34, 4]\n[10, 28]\n[38, 0]\n[36, 2]\n[38, 0]]", fillcolor="#f3c3a0"] ; 752 | 373 -> 374 ; 753 | 375 [label="x[6] <= 1.028\ngini = 0.208\nsamples = 11\nvalue = [[11, 0]\n[7, 4]\n[9, 2]\n[8, 3]\n[11, 0]\n[9, 2]\n[11, 0]]", fillcolor="#fcefe6"] ; 754 | 374 -> 375 ; 755 | 376 [label="x[3] <= -0.72\ngini = 0.163\nsamples = 7\nvalue = [[7, 0]\n[3, 4]\n[5, 2]\n[6, 1]\n[7, 0]\n[7, 0]\n[7, 0]]", fillcolor="#f7d8c1"] ; 756 | 375 -> 376 ; 757 | 377 [label="x[2] <= -0.917\ngini = 0.143\nsamples = 6\nvalue = [[6, 0]\n[2, 4]\n[5, 1]\n[5, 1]\n[6, 0]\n[6, 0]\n[6, 0]]", fillcolor="#f5cdb0"] ; 758 | 376 -> 377 ; 759 | 378 [label="gini = 0.107\nsamples = 4\nvalue = [[4, 0]\n[1, 3]\n[3, 1]\n[4, 0]\n[4, 0]\n[4, 0]\n[4, 0]]", fillcolor="#f1ba92"] ; 760 | 377 -> 378 ; 761 | 379 [label="gini = 0.143\nsamples = 2\nvalue = [[2, 0]\n[1, 1]\n[2, 0]\n[1, 1]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#f5cdb0"] ; 762 | 377 -> 379 ; 763 | 380 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 764 | 376 -> 380 ; 765 | 381 [label="x[1] <= 0.151\ngini = 0.143\nsamples = 4\nvalue = [[4, 0]\n[4, 0]\n[4, 0]\n[2, 2]\n[4, 0]\n[2, 2]\n[4, 0]]", fillcolor="#f5cdb0"] ; 766 | 375 -> 381 ; 767 | 382 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]]", fillcolor="#e58139"] ; 768 | 381 -> 382 ; 769 | 383 [label="x[4] <= 0.919\ngini = 0.127\nsamples = 3\nvalue = [[3, 0]\n[3, 0]\n[3, 0]\n[1, 2]\n[3, 0]\n[2, 1]\n[3, 0]]", fillcolor="#f3c4a3"] ; 770 | 381 -> 383 ; 771 | 384 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 772 | 383 -> 384 ; 773 | 385 [label="gini = 0.143\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[2, 0]\n[1, 1]\n[2, 0]\n[1, 1]\n[2, 0]]", fillcolor="#f5cdb0"] ; 774 | 383 -> 385 ; 775 | 386 [label="x[22] <= 0.001\ngini = 0.039\nsamples = 27\nvalue = [[27, 0]\n[27, 0]\n[25, 2]\n[2, 25]\n[27, 0]\n[27, 0]\n[27, 0]]", fillcolor="#e9965a"] ; 776 | 374 -> 386 ; 777 | 387 [label="x[5] <= -0.127\ngini = 0.085\nsamples = 11\nvalue = [[11, 0]\n[11, 0]\n[9, 2]\n[2, 9]\n[11, 0]\n[11, 0]\n[11, 0]]", fillcolor="#eeae80"] ; 778 | 386 -> 387 ; 779 | 388 [label="x[0] <= -2.399\ngini = 0.127\nsamples = 3\nvalue = [[3, 0]\n[3, 0]\n[1, 2]\n[2, 1]\n[3, 0]\n[3, 0]\n[3, 0]]", fillcolor="#f3c4a3"] ; 780 | 387 -> 388 ; 781 | 389 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 782 | 388 -> 389 ; 783 | 390 [label="gini = 0.143\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[1, 1]\n[1, 1]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#f5cdb0"] ; 784 | 388 -> 390 ; 785 | 391 [label="gini = 0.0\nsamples = 8\nvalue = [[8, 0]\n[8, 0]\n[8, 0]\n[0, 8]\n[8, 0]\n[8, 0]\n[8, 0]]", fillcolor="#e58139"] ; 786 | 387 -> 391 ; 787 | 392 [label="gini = 0.0\nsamples = 16\nvalue = [[16, 0]\n[16, 0]\n[16, 0]\n[0, 16]\n[16, 0]\n[16, 0]\n[16, 0]]", fillcolor="#e58139"] ; 788 | 386 -> 392 ; 789 | 393 [label="x[12] <= 0.0\ngini = 0.152\nsamples = 24\nvalue = [[24, 0]\n[23, 1]\n[11, 13]\n[14, 10]\n[24, 0]\n[24, 0]\n[24, 0]]", fillcolor="#f6d2b8"] ; 790 | 373 -> 393 ; 791 | 394 [label="x[17] <= -0.0\ngini = 0.132\nsamples = 16\nvalue = [[16, 0]\n[15, 1]\n[5, 11]\n[12, 4]\n[16, 0]\n[16, 0]\n[16, 0]]", fillcolor="#f3c7a7"] ; 792 | 393 -> 394 ; 793 | 395 [label="gini = 0.0\nsamples = 7\nvalue = [[7, 0]\n[7, 0]\n[0, 7]\n[7, 0]\n[7, 0]\n[7, 0]\n[7, 0]]", fillcolor="#e58139"] ; 794 | 394 -> 395 ; 795 | 396 [label="x[22] <= 0.001\ngini = 0.169\nsamples = 9\nvalue = [[9, 0]\n[8, 1]\n[5, 4]\n[5, 4]\n[9, 0]\n[9, 0]\n[9, 0]]", fillcolor="#f8dbc6"] ; 796 | 394 -> 396 ; 797 | 397 [label="gini = 0.0\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[0, 2]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#e58139"] ; 798 | 396 -> 397 ; 799 | 398 [label="x[19] <= 0.001\ngini = 0.163\nsamples = 7\nvalue = [[7, 0]\n[6, 1]\n[5, 2]\n[3, 4]\n[7, 0]\n[7, 0]\n[7, 0]]", fillcolor="#f7d8c1"] ; 800 | 396 -> 398 ; 801 | 399 [label="gini = 0.0\nsamples = 3\nvalue = [[3, 0]\n[3, 0]\n[3, 0]\n[0, 3]\n[3, 0]\n[3, 0]\n[3, 0]]", fillcolor="#e58139"] ; 802 | 398 -> 399 ; 803 | 400 [label="gini = 0.179\nsamples = 4\nvalue = [[4, 0]\n[3, 1]\n[2, 2]\n[3, 1]\n[4, 0]\n[4, 0]\n[4, 0]]", fillcolor="#f9e0ce"] ; 804 | 398 -> 400 ; 805 | 401 [label="x[2] <= -0.862\ngini = 0.107\nsamples = 8\nvalue = [[8, 0]\n[8, 0]\n[6, 2]\n[2, 6]\n[8, 0]\n[8, 0]\n[8, 0]]", fillcolor="#f1ba92"] ; 806 | 393 -> 401 ; 807 | 402 [label="gini = 0.0\nsamples = 3\nvalue = [[3, 0]\n[3, 0]\n[3, 0]\n[0, 3]\n[3, 0]\n[3, 0]\n[3, 0]]", fillcolor="#e58139"] ; 808 | 401 -> 402 ; 809 | 403 [label="x[7] <= -0.105\ngini = 0.137\nsamples = 5\nvalue = [[5, 0]\n[5, 0]\n[3, 2]\n[2, 3]\n[5, 0]\n[5, 0]\n[5, 0]]", fillcolor="#f4caab"] ; 810 | 401 -> 403 ; 811 | 404 [label="gini = 0.0\nsamples = 3\nvalue = [[3, 0]\n[3, 0]\n[3, 0]\n[0, 3]\n[3, 0]\n[3, 0]\n[3, 0]]", fillcolor="#e58139"] ; 812 | 403 -> 404 ; 813 | 405 [label="gini = 0.0\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[0, 2]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#e58139"] ; 814 | 403 -> 405 ; 815 | 406 [label="x[6] <= 0.135\ngini = 0.102\nsamples = 85\nvalue = [[85, 0]\n[85, 0]\n[73, 12]\n[83, 2]\n[18, 67]\n[81, 4]\n[85, 0]]", fillcolor="#f0b78e"] ; 816 | 344 -> 406 ; 817 | 407 [label="x[21] <= 0.0\ngini = 0.056\nsamples = 75\nvalue = [[75, 0]\n[75, 0]\n[71, 4]\n[74, 1]\n[8, 67]\n[72, 3]\n[75, 0]]", fillcolor="#eb9f68"] ; 818 | 406 -> 407 ; 819 | 408 [label="x[3] <= -1.818\ngini = 0.143\nsamples = 6\nvalue = [[6, 0]\n[6, 0]\n[3, 3]\n[6, 0]\n[6, 0]\n[3, 3]\n[6, 0]]", fillcolor="#f5cdb0"] ; 820 | 407 -> 408 ; 821 | 409 [label="gini = 0.0\nsamples = 3\nvalue = [[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]\n[0, 3]\n[3, 0]]", fillcolor="#e58139"] ; 822 | 408 -> 409 ; 823 | 410 [label="gini = 0.0\nsamples = 3\nvalue = [[3, 0]\n[3, 0]\n[0, 3]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]]", fillcolor="#e58139"] ; 824 | 408 -> 410 ; 825 | 411 [label="x[0] <= -2.378\ngini = 0.016\nsamples = 69\nvalue = [[69, 0]\n[69, 0]\n[68, 1]\n[68, 1]\n[2, 67]\n[69, 0]\n[69, 0]]", fillcolor="#e78a47"] ; 826 | 407 -> 411 ; 827 | 412 [label="gini = 0.0\nsamples = 67\nvalue = [[67, 0]\n[67, 0]\n[67, 0]\n[67, 0]\n[0, 67]\n[67, 0]\n[67, 0]]", fillcolor="#e58139"] ; 828 | 411 -> 412 ; 829 | 413 [label="x[11] <= 0.004\ngini = 0.143\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[1, 1]\n[1, 1]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#f5cdb0"] ; 830 | 411 -> 413 ; 831 | 414 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 832 | 413 -> 414 ; 833 | 415 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 834 | 413 -> 415 ; 835 | 416 [label="x[1] <= 0.141\ngini = 0.097\nsamples = 10\nvalue = [[10, 0]\n[10, 0]\n[2, 8]\n[9, 1]\n[10, 0]\n[9, 1]\n[10, 0]]", fillcolor="#f0b58a"] ; 836 | 406 -> 416 ; 837 | 417 [label="x[7] <= -0.112\ngini = 0.056\nsamples = 9\nvalue = [[9, 0]\n[9, 0]\n[1, 8]\n[9, 0]\n[9, 0]\n[8, 1]\n[9, 0]]", fillcolor="#eb9f68"] ; 838 | 416 -> 417 ; 839 | 418 [label="gini = 0.0\nsamples = 5\nvalue = [[5, 0]\n[5, 0]\n[0, 5]\n[5, 0]\n[5, 0]\n[5, 0]\n[5, 0]]", fillcolor="#e58139"] ; 840 | 417 -> 418 ; 841 | 419 [label="x[12] <= 0.001\ngini = 0.107\nsamples = 4\nvalue = [[4, 0]\n[4, 0]\n[1, 3]\n[4, 0]\n[4, 0]\n[3, 1]\n[4, 0]]", fillcolor="#f1ba92"] ; 842 | 417 -> 419 ; 843 | 420 [label="gini = 0.0\nsamples = 3\nvalue = [[3, 0]\n[3, 0]\n[0, 3]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]]", fillcolor="#e58139"] ; 844 | 419 -> 420 ; 845 | 421 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]]", fillcolor="#e58139"] ; 846 | 419 -> 421 ; 847 | 422 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 848 | 416 -> 422 ; 849 | 423 [label="x[16] <= 0.004\ngini = 0.185\nsamples = 1517\nvalue = [[914.0, 603.0]\n[1426.0, 91.0]\n[1478.0, 39.0]\n[1453.0, 64.0]\n[859.0, 658.0]\n[1470.0, 47.0]\n[1502.0, 15.0]]", fillcolor="#f9e3d3"] ; 850 | 283 -> 423 ; 851 | 424 [label="x[4] <= -0.374\ngini = 0.182\nsamples = 1027\nvalue = [[479, 548]\n[947, 80]\n[991, 36]\n[963, 64]\n[765, 262]\n[1005, 22]\n[1012, 15]]", fillcolor="#f9e2d1"] ; 852 | 423 -> 424 ; 853 | 425 [label="x[17] <= -0.0\ngini = 0.156\nsamples = 136\nvalue = [[129, 7]\n[121, 15]\n[133, 3]\n[129, 7]\n[47, 89]\n[124, 12]\n[133, 3]]", fillcolor="#f6d4bb"] ; 854 | 424 -> 425 ; 855 | 426 [label="x[20] <= 0.001\ngini = 0.224\nsamples = 66\nvalue = [[60, 6]\n[55, 11]\n[63, 3]\n[59, 7]\n[42, 24]\n[54, 12]\n[63, 3]]", fillcolor="#fef8f4"] ; 856 | 425 -> 426 ; 857 | 427 [label="x[6] <= -0.055\ngini = 0.231\nsamples = 44\nvalue = [[38, 6]\n[33, 11]\n[41, 3]\n[37, 7]\n[42, 2]\n[32, 12]\n[41, 3]]", fillcolor="#fefcfa"] ; 858 | 426 -> 427 ; 859 | 428 [label="x[16] <= 0.002\ngini = 0.225\nsamples = 31\nvalue = [[29, 2]\n[20, 11]\n[28, 3]\n[24, 7]\n[29, 2]\n[28, 3]\n[28, 3]]", fillcolor="#fef8f5"] ; 860 | 427 -> 428 ; 861 | 429 [label="x[9] <= -0.017\ngini = 0.231\nsamples = 21\nvalue = [[20, 1]\n[18, 3]\n[18, 3]\n[14, 7]\n[19, 2]\n[19, 2]\n[18, 3]]", fillcolor="#fefcfa"] ; 862 | 428 -> 429 ; 863 | 430 [label="x[13] <= 0.001\ngini = 0.201\nsamples = 15\nvalue = [[14, 1]\n[15, 0]\n[12, 3]\n[8, 7]\n[13, 2]\n[13, 2]\n[15, 0]]", fillcolor="#fbece0"] ; 864 | 429 -> 430 ; 865 | 431 [label="x[17] <= -0.001\ngini = 0.127\nsamples = 3\nvalue = [[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]\n[2, 1]\n[1, 2]\n[3, 0]]", fillcolor="#f3c4a3"] ; 866 | 430 -> 431 ; 867 | 432 [label="gini = 0.0\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[0, 2]\n[2, 0]]", fillcolor="#e58139"] ; 868 | 431 -> 432 ; 869 | 433 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 870 | 431 -> 433 ; 871 | 434 [label="x[14] <= -0.006\ngini = 0.167\nsamples = 12\nvalue = [[11, 1]\n[12, 0]\n[9, 3]\n[5, 7]\n[11, 1]\n[12, 0]\n[12, 0]]", fillcolor="#f7dac4"] ; 872 | 430 -> 434 ; 873 | 435 [label="gini = 0.179\nsamples = 4\nvalue = [[3, 1]\n[4, 0]\n[2, 2]\n[4, 0]\n[3, 1]\n[4, 0]\n[4, 0]]", fillcolor="#f9e0ce"] ; 874 | 434 -> 435 ; 875 | 436 [label="gini = 0.062\nsamples = 8\nvalue = [[8, 0]\n[8, 0]\n[7, 1]\n[1, 7]\n[8, 0]\n[8, 0]\n[8, 0]]", fillcolor="#eca26d"] ; 876 | 434 -> 436 ; 877 | 437 [label="x[21] <= 0.0\ngini = 0.143\nsamples = 6\nvalue = [[6, 0]\n[3, 3]\n[6, 0]\n[6, 0]\n[6, 0]\n[6, 0]\n[3, 3]]", fillcolor="#f5cdb0"] ; 878 | 429 -> 437 ; 879 | 438 [label="gini = 0.0\nsamples = 3\nvalue = [[3, 0]\n[0, 3]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]]", fillcolor="#e58139"] ; 880 | 437 -> 438 ; 881 | 439 [label="gini = 0.0\nsamples = 3\nvalue = [[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]\n[0, 3]]", fillcolor="#e58139"] ; 882 | 437 -> 439 ; 883 | 440 [label="x[2] <= -0.826\ngini = 0.097\nsamples = 10\nvalue = [[9, 1]\n[2, 8]\n[10, 0]\n[10, 0]\n[10, 0]\n[9, 1]\n[10, 0]]", fillcolor="#f0b58a"] ; 884 | 428 -> 440 ; 885 | 441 [label="gini = 0.0\nsamples = 8\nvalue = [[8, 0]\n[0, 8]\n[8, 0]\n[8, 0]\n[8, 0]\n[8, 0]\n[8, 0]]", fillcolor="#e58139"] ; 886 | 440 -> 441 ; 887 | 442 [label="x[5] <= -0.103\ngini = 0.143\nsamples = 2\nvalue = [[1, 1]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[1, 1]\n[2, 0]]", fillcolor="#f5cdb0"] ; 888 | 440 -> 442 ; 889 | 443 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]]", fillcolor="#e58139"] ; 890 | 442 -> 443 ; 891 | 444 [label="gini = 0.0\nsamples = 1\nvalue = [[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 892 | 442 -> 444 ; 893 | 445 [label="x[1] <= 0.368\ngini = 0.122\nsamples = 13\nvalue = [[9, 4]\n[13, 0]\n[13, 0]\n[13, 0]\n[13, 0]\n[4, 9]\n[13, 0]]", fillcolor="#f2c29f"] ; 894 | 427 -> 445 ; 895 | 446 [label="gini = 0.0\nsamples = 9\nvalue = [[9, 0]\n[9, 0]\n[9, 0]\n[9, 0]\n[9, 0]\n[0, 9]\n[9, 0]]", fillcolor="#e58139"] ; 896 | 445 -> 446 ; 897 | 447 [label="gini = 0.0\nsamples = 4\nvalue = [[0, 4]\n[4, 0]\n[4, 0]\n[4, 0]\n[4, 0]\n[4, 0]\n[4, 0]]", fillcolor="#e58139"] ; 898 | 445 -> 447 ; 899 | 448 [label="gini = 0.0\nsamples = 22\nvalue = [[22, 0]\n[22, 0]\n[22, 0]\n[22, 0]\n[0, 22]\n[22, 0]\n[22, 0]]", fillcolor="#e58139"] ; 900 | 426 -> 448 ; 901 | 449 [label="x[13] <= -0.001\ngini = 0.038\nsamples = 70\nvalue = [[69, 1]\n[66, 4]\n[70, 0]\n[70, 0]\n[5, 65]\n[70, 0]\n[70, 0]]", fillcolor="#e99559"] ; 902 | 425 -> 449 ; 903 | 450 [label="x[3] <= -0.47\ngini = 0.127\nsamples = 17\nvalue = [[16, 1]\n[13, 4]\n[17, 0]\n[17, 0]\n[5, 12]\n[17, 0]\n[17, 0]]", fillcolor="#f3c4a3"] ; 904 | 449 -> 450 ; 905 | 451 [label="x[9] <= 0.72\ngini = 0.047\nsamples = 11\nvalue = [[10, 1]\n[11, 0]\n[11, 0]\n[11, 0]\n[1, 10]\n[11, 0]\n[11, 0]]", fillcolor="#ea9a60"] ; 906 | 450 -> 451 ; 907 | 452 [label="gini = 0.0\nsamples = 10\nvalue = [[10, 0]\n[10, 0]\n[10, 0]\n[10, 0]\n[0, 10]\n[10, 0]\n[10, 0]]", fillcolor="#e58139"] ; 908 | 451 -> 452 ; 909 | 453 [label="gini = 0.0\nsamples = 1\nvalue = [[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 910 | 451 -> 453 ; 911 | 454 [label="x[6] <= -0.055\ngini = 0.127\nsamples = 6\nvalue = [[6, 0]\n[2, 4]\n[6, 0]\n[6, 0]\n[4, 2]\n[6, 0]\n[6, 0]]", fillcolor="#f3c4a3"] ; 912 | 450 -> 454 ; 913 | 455 [label="gini = 0.0\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[0, 2]\n[2, 0]\n[2, 0]]", fillcolor="#e58139"] ; 914 | 454 -> 455 ; 915 | 456 [label="gini = 0.0\nsamples = 4\nvalue = [[4, 0]\n[0, 4]\n[4, 0]\n[4, 0]\n[4, 0]\n[4, 0]\n[4, 0]]", fillcolor="#e58139"] ; 916 | 454 -> 456 ; 917 | 457 [label="gini = 0.0\nsamples = 53\nvalue = [[53, 0]\n[53, 0]\n[53, 0]\n[53, 0]\n[0, 53]\n[53, 0]\n[53, 0]]", fillcolor="#e58139"] ; 918 | 449 -> 457 ; 919 | 458 [label="x[1] <= 0.136\ngini = 0.166\nsamples = 891\nvalue = [[350, 541]\n[826, 65]\n[858, 33]\n[834, 57]\n[718, 173]\n[881, 10]\n[879, 12]]", fillcolor="#f7d9c4"] ; 920 | 424 -> 458 ; 921 | 459 [label="x[10] <= 0.029\ngini = 0.195\nsamples = 188\nvalue = [[138.0, 50.0]\n[187.0, 1.0]\n[177.0, 11.0]\n[154.0, 34.0]\n[102.0, 86.0]\n[182.0, 6.0]\n[188.0, 0.0]]", fillcolor="#fae9dc"] ; 922 | 458 -> 459 ; 923 | 460 [label="x[14] <= -0.006\ngini = 0.084\nsamples = 99\nvalue = [[86.0, 13.0]\n[99.0, 0.0]\n[96.0, 3.0]\n[99.0, 0.0]\n[17.0, 82.0]\n[98.0, 1.0]\n[99.0, 0.0]]", fillcolor="#eeae80"] ; 924 | 459 -> 460 ; 925 | 461 [label="x[19] <= 0.003\ngini = 0.026\nsamples = 85\nvalue = [[82, 3]\n[85, 0]\n[84, 1]\n[85, 0]\n[4, 81]\n[85, 0]\n[85, 0]]", fillcolor="#e88f4f"] ; 926 | 460 -> 461 ; 927 | 462 [label="gini = 0.0\nsamples = 79\nvalue = [[79, 0]\n[79, 0]\n[79, 0]\n[79, 0]\n[0, 79]\n[79, 0]\n[79, 0]]", fillcolor="#e58139"] ; 928 | 461 -> 462 ; 929 | 463 [label="x[5] <= -0.131\ngini = 0.175\nsamples = 6\nvalue = [[3, 3]\n[6, 0]\n[5, 1]\n[6, 0]\n[4, 2]\n[6, 0]\n[6, 0]]", fillcolor="#f8decb"] ; 930 | 461 -> 463 ; 931 | 464 [label="x[14] <= -0.006\ngini = 0.137\nsamples = 5\nvalue = [[2, 3]\n[5, 0]\n[5, 0]\n[5, 0]\n[3, 2]\n[5, 0]\n[5, 0]]", fillcolor="#f4caab"] ; 932 | 463 -> 464 ; 933 | 465 [label="x[13] <= 0.002\ngini = 0.127\nsamples = 3\nvalue = [[2, 1]\n[3, 0]\n[3, 0]\n[3, 0]\n[1, 2]\n[3, 0]\n[3, 0]]", fillcolor="#f3c4a3"] ; 934 | 464 -> 465 ; 935 | 466 [label="gini = 0.0\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[0, 2]\n[2, 0]\n[2, 0]]", fillcolor="#e58139"] ; 936 | 465 -> 466 ; 937 | 467 [label="gini = 0.0\nsamples = 1\nvalue = [[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 938 | 465 -> 467 ; 939 | 468 [label="gini = 0.0\nsamples = 2\nvalue = [[0, 2]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#e58139"] ; 940 | 464 -> 468 ; 941 | 469 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 942 | 463 -> 469 ; 943 | 470 [label="x[15] <= -0.001\ngini = 0.131\nsamples = 14\nvalue = [[4, 10]\n[14, 0]\n[12, 2]\n[14, 0]\n[13, 1]\n[13, 1]\n[14, 0]]", fillcolor="#f3c7a7"] ; 944 | 460 -> 470 ; 945 | 471 [label="x[22] <= -0.003\ngini = 0.179\nsamples = 4\nvalue = [[4, 0]\n[4, 0]\n[2, 2]\n[4, 0]\n[3, 1]\n[3, 1]\n[4, 0]]", fillcolor="#f9e0ce"] ; 946 | 470 -> 471 ; 947 | 472 [label="gini = 0.0\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[0, 2]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#e58139"] ; 948 | 471 -> 472 ; 949 | 473 [label="x[0] <= -2.264\ngini = 0.143\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[1, 1]\n[1, 1]\n[2, 0]]", fillcolor="#f5cdb0"] ; 950 | 471 -> 473 ; 951 | 474 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]]", fillcolor="#e58139"] ; 952 | 473 -> 474 ; 953 | 475 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 954 | 473 -> 475 ; 955 | 476 [label="gini = 0.0\nsamples = 10\nvalue = [[0, 10]\n[10, 0]\n[10, 0]\n[10, 0]\n[10, 0]\n[10, 0]\n[10, 0]]", fillcolor="#e58139"] ; 956 | 470 -> 476 ; 957 | 477 [label="x[18] <= -0.001\ngini = 0.191\nsamples = 89\nvalue = [[52.0, 37.0]\n[88.0, 1.0]\n[81.0, 8.0]\n[55.0, 34.0]\n[85.0, 4.0]\n[84.0, 5.0]\n[89.0, 0.0]]", fillcolor="#fae6d8"] ; 958 | 459 -> 477 ; 959 | 478 [label="x[5] <= -0.146\ngini = 0.134\nsamples = 37\nvalue = [[11, 26]\n[37, 0]\n[31, 6]\n[37, 0]\n[34, 3]\n[35, 2]\n[37, 0]]", fillcolor="#f4c8a9"] ; 960 | 477 -> 478 ; 961 | 479 [label="x[13] <= -0.002\ngini = 0.093\nsamples = 32\nvalue = [[6, 26]\n[32, 0]\n[30, 2]\n[32, 0]\n[29, 3]\n[31, 1]\n[32, 0]]", fillcolor="#efb387"] ; 962 | 478 -> 479 ; 963 | 480 [label="x[2] <= -0.798\ngini = 0.19\nsamples = 6\nvalue = [[4, 2]\n[6, 0]\n[4, 2]\n[6, 0]\n[4, 2]\n[6, 0]\n[6, 0]]", fillcolor="#fae6d8"] ; 964 | 479 -> 480 ; 965 | 481 [label="x[17] <= -0.004\ngini = 0.143\nsamples = 4\nvalue = [[2, 2]\n[4, 0]\n[2, 2]\n[4, 0]\n[4, 0]\n[4, 0]\n[4, 0]]", fillcolor="#f5cdb0"] ; 966 | 480 -> 481 ; 967 | 482 [label="gini = 0.0\nsamples = 2\nvalue = [[0, 2]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#e58139"] ; 968 | 481 -> 482 ; 969 | 483 [label="gini = 0.0\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[0, 2]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#e58139"] ; 970 | 481 -> 483 ; 971 | 484 [label="gini = 0.0\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[0, 2]\n[2, 0]\n[2, 0]]", fillcolor="#e58139"] ; 972 | 480 -> 484 ; 973 | 485 [label="x[6] <= -0.093\ngini = 0.041\nsamples = 26\nvalue = [[2, 24]\n[26, 0]\n[26, 0]\n[26, 0]\n[25, 1]\n[25, 1]\n[26, 0]]", fillcolor="#ea975c"] ; 974 | 479 -> 485 ; 975 | 486 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]]", fillcolor="#e58139"] ; 976 | 485 -> 486 ; 977 | 487 [label="x[1] <= 0.136\ngini = 0.022\nsamples = 25\nvalue = [[1, 24]\n[25, 0]\n[25, 0]\n[25, 0]\n[24, 1]\n[25, 0]\n[25, 0]]", fillcolor="#e78d4b"] ; 978 | 485 -> 487 ; 979 | 488 [label="gini = 0.0\nsamples = 22\nvalue = [[0, 22]\n[22, 0]\n[22, 0]\n[22, 0]\n[22, 0]\n[22, 0]\n[22, 0]]", fillcolor="#e58139"] ; 980 | 487 -> 488 ; 981 | 489 [label="gini = 0.127\nsamples = 3\nvalue = [[1, 2]\n[3, 0]\n[3, 0]\n[3, 0]\n[2, 1]\n[3, 0]\n[3, 0]]", fillcolor="#f3c4a3"] ; 982 | 487 -> 489 ; 983 | 490 [label="x[4] <= 0.26\ngini = 0.091\nsamples = 5\nvalue = [[5, 0]\n[5, 0]\n[1, 4]\n[5, 0]\n[5, 0]\n[4, 1]\n[5, 0]]", fillcolor="#efb285"] ; 984 | 478 -> 490 ; 985 | 491 [label="gini = 0.0\nsamples = 4\nvalue = [[4, 0]\n[4, 0]\n[0, 4]\n[4, 0]\n[4, 0]\n[4, 0]\n[4, 0]]", fillcolor="#e58139"] ; 986 | 490 -> 491 ; 987 | 492 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]]", fillcolor="#e58139"] ; 988 | 490 -> 492 ; 989 | 493 [label="x[22] <= -0.003\ngini = 0.149\nsamples = 52\nvalue = [[41, 11]\n[51, 1]\n[50, 2]\n[18, 34]\n[51, 1]\n[49, 3]\n[52, 0]]", fillcolor="#f5d0b6"] ; 990 | 477 -> 493 ; 991 | 494 [label="x[4] <= -0.33\ngini = 0.087\nsamples = 41\nvalue = [[40.0, 1.0]\n[41.0, 0.0]\n[39.0, 2.0]\n[7.0, 34.0]\n[40.0, 1.0]\n[38.0, 3.0]\n[41.0, 0.0]]", fillcolor="#efaf81"] ; 992 | 493 -> 494 ; 993 | 495 [label="x[13] <= 0.001\ngini = 0.016\nsamples = 35\nvalue = [[34, 1]\n[35, 0]\n[35, 0]\n[1, 34]\n[35, 0]\n[35, 0]\n[35, 0]]", fillcolor="#e78946"] ; 994 | 494 -> 495 ; 995 | 496 [label="gini = 0.0\nsamples = 34\nvalue = [[34, 0]\n[34, 0]\n[34, 0]\n[0, 34]\n[34, 0]\n[34, 0]\n[34, 0]]", fillcolor="#e58139"] ; 996 | 495 -> 496 ; 997 | 497 [label="gini = 0.0\nsamples = 1\nvalue = [[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 998 | 495 -> 497 ; 999 | 498 [label="x[19] <= 0.008\ngini = 0.175\nsamples = 6\nvalue = [[6, 0]\n[6, 0]\n[4, 2]\n[6, 0]\n[5, 1]\n[3, 3]\n[6, 0]]", fillcolor="#f8decb"] ; 1000 | 494 -> 498 ; 1001 | 499 [label="gini = 0.0\nsamples = 3\nvalue = [[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]\n[0, 3]\n[3, 0]]", fillcolor="#e58139"] ; 1002 | 498 -> 499 ; 1003 | 500 [label="x[11] <= -0.004\ngini = 0.127\nsamples = 3\nvalue = [[3, 0]\n[3, 0]\n[1, 2]\n[3, 0]\n[2, 1]\n[3, 0]\n[3, 0]]", fillcolor="#f3c4a3"] ; 1004 | 498 -> 500 ; 1005 | 501 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 1006 | 500 -> 501 ; 1007 | 502 [label="gini = 0.0\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[0, 2]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#e58139"] ; 1008 | 500 -> 502 ; 1009 | 503 [label="x[6] <= -0.058\ngini = 0.047\nsamples = 11\nvalue = [[1, 10]\n[10, 1]\n[11, 0]\n[11, 0]\n[11, 0]\n[11, 0]\n[11, 0]]", fillcolor="#ea9a60"] ; 1010 | 493 -> 503 ; 1011 | 504 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 1012 | 503 -> 504 ; 1013 | 505 [label="gini = 0.0\nsamples = 10\nvalue = [[0, 10]\n[10, 0]\n[10, 0]\n[10, 0]\n[10, 0]\n[10, 0]\n[10, 0]]", fillcolor="#e58139"] ; 1014 | 503 -> 505 ; 1015 | 506 [label="x[14] <= 0.119\ngini = 0.139\nsamples = 703\nvalue = [[212.0, 491.0]\n[639.0, 64.0]\n[681.0, 22.0]\n[680.0, 23.0]\n[616.0, 87.0]\n[699.0, 4.0]\n[691.0, 12.0]]", fillcolor="#f4cbad"] ; 1016 | 458 -> 506 ; 1017 | 507 [label="x[2] <= -0.828\ngini = 0.117\nsamples = 647\nvalue = [[156, 491]\n[621, 26]\n[626, 21]\n[624, 23]\n[576, 71]\n[644, 3]\n[635, 12]]", fillcolor="#f2bf9a"] ; 1018 | 506 -> 507 ; 1019 | 508 [label="x[14] <= -0.006\ngini = 0.205\nsamples = 92\nvalue = [[52.0, 40.0]\n[80.0, 12.0]\n[82.0, 10.0]\n[69.0, 23.0]\n[90.0, 2.0]\n[90.0, 2.0]\n[89.0, 3.0]]", fillcolor="#fbeee4"] ; 1020 | 507 -> 508 ; 1021 | 509 [label="x[6] <= -0.055\ngini = 0.164\nsamples = 64\nvalue = [[25, 39]\n[52, 12]\n[55, 9]\n[64, 0]\n[62, 2]\n[63, 1]\n[63, 1]]", fillcolor="#f7d8c1"] ; 1022 | 508 -> 509 ; 1023 | 510 [label="x[10] <= 0.025\ngini = 0.108\nsamples = 49\nvalue = [[12.0, 37.0]\n[38.0, 11.0]\n[49.0, 0.0]\n[49.0, 0.0]\n[48.0, 1.0]\n[49.0, 0.0]\n[49.0, 0.0]]", fillcolor="#f1bb93"] ; 1024 | 509 -> 510 ; 1025 | 511 [label="x[1] <= 0.141\ngini = 0.127\nsamples = 15\nvalue = [[10, 5]\n[5, 10]\n[15, 0]\n[15, 0]\n[15, 0]\n[15, 0]\n[15, 0]]", fillcolor="#f3c4a3"] ; 1026 | 510 -> 511 ; 1027 | 512 [label="gini = 0.0\nsamples = 4\nvalue = [[0, 4]\n[4, 0]\n[4, 0]\n[4, 0]\n[4, 0]\n[4, 0]\n[4, 0]]", fillcolor="#e58139"] ; 1028 | 511 -> 512 ; 1029 | 513 [label="gini = 0.047\nsamples = 11\nvalue = [[10, 1]\n[1, 10]\n[11, 0]\n[11, 0]\n[11, 0]\n[11, 0]\n[11, 0]]", fillcolor="#ea9a60"] ; 1030 | 511 -> 513 ; 1031 | 514 [label="x[20] <= 0.001\ngini = 0.032\nsamples = 34\nvalue = [[2, 32]\n[33, 1]\n[34, 0]\n[34, 0]\n[33, 1]\n[34, 0]\n[34, 0]]", fillcolor="#e99254"] ; 1032 | 510 -> 514 ; 1033 | 515 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 1034 | 514 -> 515 ; 1035 | 516 [label="gini = 0.017\nsamples = 33\nvalue = [[1, 32]\n[32, 1]\n[33, 0]\n[33, 0]\n[33, 0]\n[33, 0]\n[33, 0]]", fillcolor="#e78a47"] ; 1036 | 514 -> 516 ; 1037 | 517 [label="x[5] <= -0.155\ngini = 0.173\nsamples = 15\nvalue = [[13, 2]\n[14, 1]\n[6, 9]\n[15, 0]\n[14, 1]\n[14, 1]\n[14, 1]]", fillcolor="#f8ddc9"] ; 1038 | 509 -> 517 ; 1039 | 518 [label="x[7] <= 0.867\ngini = 0.233\nsamples = 7\nvalue = [[5, 2]\n[6, 1]\n[6, 1]\n[7, 0]\n[6, 1]\n[6, 1]\n[6, 1]]", fillcolor="#fffdfc"] ; 1040 | 517 -> 518 ; 1041 | 519 [label="gini = 0.143\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[1, 1]\n[1, 1]\n[2, 0]]", fillcolor="#f5cdb0"] ; 1042 | 518 -> 519 ; 1043 | 520 [label="gini = 0.206\nsamples = 5\nvalue = [[3, 2]\n[4, 1]\n[4, 1]\n[5, 0]\n[5, 0]\n[5, 0]\n[4, 1]]", fillcolor="#fceee5"] ; 1044 | 518 -> 520 ; 1045 | 521 [label="gini = 0.0\nsamples = 8\nvalue = [[8, 0]\n[8, 0]\n[0, 8]\n[8, 0]\n[8, 0]\n[8, 0]\n[8, 0]]", fillcolor="#e58139"] ; 1046 | 517 -> 521 ; 1047 | 522 [label="x[5] <= -0.154\ngini = 0.09\nsamples = 28\nvalue = [[27, 1]\n[28, 0]\n[27, 1]\n[5, 23]\n[28, 0]\n[27, 1]\n[26, 2]]", fillcolor="#efb184"] ; 1048 | 508 -> 522 ; 1049 | 523 [label="gini = 0.0\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[0, 2]]", fillcolor="#e58139"] ; 1050 | 522 -> 523 ; 1051 | 524 [label="x[5] <= -0.154\ngini = 0.061\nsamples = 26\nvalue = [[25, 1]\n[26, 0]\n[25, 1]\n[3, 23]\n[26, 0]\n[25, 1]\n[26, 0]]", fillcolor="#eca16c"] ; 1052 | 522 -> 524 ; 1053 | 525 [label="gini = 0.0\nsamples = 23\nvalue = [[23, 0]\n[23, 0]\n[23, 0]\n[0, 23]\n[23, 0]\n[23, 0]\n[23, 0]]", fillcolor="#e58139"] ; 1054 | 524 -> 525 ; 1055 | 526 [label="x[19] <= 0.001\ngini = 0.19\nsamples = 3\nvalue = [[2, 1]\n[3, 0]\n[2, 1]\n[3, 0]\n[3, 0]\n[2, 1]\n[3, 0]]", fillcolor="#fae6d8"] ; 1056 | 524 -> 526 ; 1057 | 527 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]]", fillcolor="#e58139"] ; 1058 | 526 -> 527 ; 1059 | 528 [label="gini = 0.143\nsamples = 2\nvalue = [[1, 1]\n[2, 0]\n[1, 1]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#f5cdb0"] ; 1060 | 526 -> 528 ; 1061 | 529 [label="x[10] <= 0.027\ngini = 0.092\nsamples = 555\nvalue = [[104, 451]\n[541, 14]\n[544, 11]\n[555, 0]\n[486, 69]\n[554, 1]\n[546, 9]]", fillcolor="#efb286"] ; 1062 | 507 -> 529 ; 1063 | 530 [label="x[11] <= 0.005\ngini = 0.046\nsamples = 317\nvalue = [[27, 290]\n[311, 6]\n[313, 4]\n[317, 0]\n[301, 16]\n[316, 1]\n[317, 0]]", fillcolor="#ea995f"] ; 1064 | 529 -> 530 ; 1065 | 531 [label="x[14] <= -0.007\ngini = 0.032\nsamples = 308\nvalue = [[18, 290]\n[302, 6]\n[304, 4]\n[308, 0]\n[301, 7]\n[307, 1]\n[308, 0]]", fillcolor="#e99254"] ; 1066 | 530 -> 531 ; 1067 | 532 [label="gini = 0.0\nsamples = 5\nvalue = [[5, 0]\n[5, 0]\n[5, 0]\n[5, 0]\n[0, 5]\n[5, 0]\n[5, 0]]", fillcolor="#e58139"] ; 1068 | 531 -> 532 ; 1069 | 533 [label="x[7] <= -0.12\ngini = 0.024\nsamples = 303\nvalue = [[13, 290]\n[297, 6]\n[299, 4]\n[303, 0]\n[301, 2]\n[302, 1]\n[303, 0]]", fillcolor="#e88e4d"] ; 1070 | 531 -> 533 ; 1071 | 534 [label="gini = 0.02\nsamples = 301\nvalue = [[11.0, 290.0]\n[296.0, 5.0]\n[298.0, 3.0]\n[301.0, 0.0]\n[299.0, 2.0]\n[300.0, 1.0]\n[301.0, 0.0]]", fillcolor="#e78c4a"] ; 1072 | 533 -> 534 ; 1073 | 535 [label="gini = 0.143\nsamples = 2\nvalue = [[2, 0]\n[1, 1]\n[1, 1]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#f5cdb0"] ; 1074 | 533 -> 535 ; 1075 | 536 [label="gini = 0.0\nsamples = 9\nvalue = [[9, 0]\n[9, 0]\n[9, 0]\n[9, 0]\n[0, 9]\n[9, 0]\n[9, 0]]", fillcolor="#e58139"] ; 1076 | 530 -> 536 ; 1077 | 537 [label="x[21] <= -0.0\ngini = 0.14\nsamples = 238\nvalue = [[77, 161]\n[230, 8]\n[231, 7]\n[238, 0]\n[185, 53]\n[238, 0]\n[229, 9]]", fillcolor="#f4cbae"] ; 1078 | 529 -> 537 ; 1079 | 538 [label="x[21] <= -0.001\ngini = 0.106\nsamples = 156\nvalue = [[34, 122]\n[154, 2]\n[150, 6]\n[156, 0]\n[139, 17]\n[156, 0]\n[147, 9]]", fillcolor="#f1b992"] ; 1080 | 537 -> 538 ; 1081 | 539 [label="x[1] <= 0.146\ngini = 0.167\nsamples = 76\nvalue = [[31, 45]\n[74, 2]\n[73, 3]\n[76, 0]\n[59, 17]\n[76, 0]\n[67, 9]]", fillcolor="#f7dac4"] ; 1082 | 538 -> 539 ; 1083 | 540 [label="gini = 0.071\nsamples = 43\nvalue = [[6, 37]\n[43, 0]\n[40, 3]\n[43, 0]\n[40, 3]\n[43, 0]\n[43, 0]]", fillcolor="#eda775"] ; 1084 | 539 -> 540 ; 1085 | 541 [label="gini = 0.195\nsamples = 33\nvalue = [[25, 8]\n[31, 2]\n[33, 0]\n[33, 0]\n[19, 14]\n[33, 0]\n[24, 9]]", fillcolor="#fae9dc"] ; 1086 | 539 -> 541 ; 1087 | 542 [label="x[0] <= -2.367\ngini = 0.021\nsamples = 80\nvalue = [[3, 77]\n[80, 0]\n[77, 3]\n[80, 0]\n[80, 0]\n[80, 0]\n[80, 0]]", fillcolor="#e78c4a"] ; 1088 | 538 -> 542 ; 1089 | 543 [label="gini = 0.107\nsamples = 4\nvalue = [[3, 1]\n[4, 0]\n[1, 3]\n[4, 0]\n[4, 0]\n[4, 0]\n[4, 0]]", fillcolor="#f1ba92"] ; 1090 | 542 -> 543 ; 1091 | 544 [label="gini = 0.0\nsamples = 76\nvalue = [[0, 76]\n[76, 0]\n[76, 0]\n[76, 0]\n[76, 0]\n[76, 0]\n[76, 0]]", fillcolor="#e58139"] ; 1092 | 542 -> 544 ; 1093 | 545 [label="x[18] <= -0.002\ngini = 0.164\nsamples = 82\nvalue = [[43.0, 39.0]\n[76.0, 6.0]\n[81.0, 1.0]\n[82.0, 0.0]\n[46.0, 36.0]\n[82.0, 0.0]\n[82.0, 0.0]]", fillcolor="#f7d8c2"] ; 1094 | 537 -> 545 ; 1095 | 546 [label="x[4] <= -0.138\ngini = 0.036\nsamples = 30\nvalue = [[28, 2]\n[30, 0]\n[30, 0]\n[30, 0]\n[2, 28]\n[30, 0]\n[30, 0]]", fillcolor="#e99457"] ; 1096 | 545 -> 546 ; 1097 | 547 [label="gini = 0.0\nsamples = 28\nvalue = [[28, 0]\n[28, 0]\n[28, 0]\n[28, 0]\n[0, 28]\n[28, 0]\n[28, 0]]", fillcolor="#e58139"] ; 1098 | 546 -> 547 ; 1099 | 548 [label="gini = 0.0\nsamples = 2\nvalue = [[0, 2]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#e58139"] ; 1100 | 546 -> 548 ; 1101 | 549 [label="x[8] <= 0.002\ngini = 0.13\nsamples = 52\nvalue = [[15.0, 37.0]\n[46.0, 6.0]\n[51.0, 1.0]\n[52.0, 0.0]\n[44.0, 8.0]\n[52.0, 0.0]\n[52.0, 0.0]]", fillcolor="#f3c6a6"] ; 1102 | 545 -> 549 ; 1103 | 550 [label="gini = 0.199\nsamples = 20\nvalue = [[14, 6]\n[14, 6]\n[19, 1]\n[20, 0]\n[13, 7]\n[20, 0]\n[20, 0]]", fillcolor="#fbeadf"] ; 1104 | 549 -> 550 ; 1105 | 551 [label="gini = 0.017\nsamples = 32\nvalue = [[1, 31]\n[32, 0]\n[32, 0]\n[32, 0]\n[31, 1]\n[32, 0]\n[32, 0]]", fillcolor="#e78a47"] ; 1106 | 549 -> 551 ; 1107 | 552 [label="x[22] <= 0.0\ngini = 0.131\nsamples = 56\nvalue = [[56, 0]\n[18, 38]\n[55, 1]\n[56, 0]\n[40, 16]\n[55, 1]\n[56, 0]]", fillcolor="#f3c6a6"] ; 1108 | 506 -> 552 ; 1109 | 553 [label="x[16] <= -0.472\ngini = 0.133\nsamples = 23\nvalue = [[23, 0]\n[18, 5]\n[22, 1]\n[23, 0]\n[7, 16]\n[22, 1]\n[23, 0]]", fillcolor="#f4c8a8"] ; 1110 | 552 -> 553 ; 1111 | 554 [label="gini = 0.0\nsamples = 3\nvalue = [[3, 0]\n[0, 3]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]]", fillcolor="#e58139"] ; 1112 | 553 -> 554 ; 1113 | 555 [label="x[15] <= 0.014\ngini = 0.099\nsamples = 20\nvalue = [[20, 0]\n[18, 2]\n[19, 1]\n[20, 0]\n[4, 16]\n[19, 1]\n[20, 0]]", fillcolor="#f0b58b"] ; 1114 | 553 -> 555 ; 1115 | 556 [label="x[1] <= 4.096\ngini = 0.061\nsamples = 17\nvalue = [[17, 0]\n[17, 0]\n[16, 1]\n[17, 0]\n[2, 15]\n[16, 1]\n[17, 0]]", fillcolor="#eca26c"] ; 1116 | 555 -> 556 ; 1117 | 557 [label="x[13] <= -0.041\ngini = 0.033\nsamples = 16\nvalue = [[16, 0]\n[16, 0]\n[15, 1]\n[16, 0]\n[1, 15]\n[16, 0]\n[16, 0]]", fillcolor="#e99355"] ; 1118 | 556 -> 557 ; 1119 | 558 [label="gini = 0.0\nsamples = 11\nvalue = [[11, 0]\n[11, 0]\n[11, 0]\n[11, 0]\n[0, 11]\n[11, 0]\n[11, 0]]", fillcolor="#e58139"] ; 1120 | 557 -> 558 ; 1121 | 559 [label="gini = 0.091\nsamples = 5\nvalue = [[5, 0]\n[5, 0]\n[4, 1]\n[5, 0]\n[1, 4]\n[5, 0]\n[5, 0]]", fillcolor="#efb285"] ; 1122 | 557 -> 559 ; 1123 | 560 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]]", fillcolor="#e58139"] ; 1124 | 556 -> 560 ; 1125 | 561 [label="x[4] <= -0.121\ngini = 0.127\nsamples = 3\nvalue = [[3, 0]\n[1, 2]\n[3, 0]\n[3, 0]\n[2, 1]\n[3, 0]\n[3, 0]]", fillcolor="#f3c4a3"] ; 1126 | 555 -> 561 ; 1127 | 562 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 1128 | 561 -> 562 ; 1129 | 563 [label="gini = 0.0\nsamples = 2\nvalue = [[2, 0]\n[0, 2]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#e58139"] ; 1130 | 561 -> 563 ; 1131 | 564 [label="gini = 0.0\nsamples = 33\nvalue = [[33, 0]\n[0, 33]\n[33, 0]\n[33, 0]\n[33, 0]\n[33, 0]\n[33, 0]]", fillcolor="#e58139"] ; 1132 | 552 -> 564 ; 1133 | 565 [label="x[12] <= 0.013\ngini = 0.095\nsamples = 490\nvalue = [[435, 55]\n[479, 11]\n[487, 3]\n[490, 0]\n[94, 396]\n[465, 25]\n[490, 0]]", fillcolor="#efb388"] ; 1134 | 423 -> 565 ; 1135 | 566 [label="x[7] <= 0.294\ngini = 0.054\nsamples = 434\nvalue = [[428, 6]\n[423, 11]\n[432, 2]\n[434, 0]\n[44, 390]\n[409, 25]\n[434, 0]]", fillcolor="#eb9e66"] ; 1136 | 565 -> 566 ; 1137 | 567 [label="x[10] <= 0.037\ngini = 0.034\nsamples = 408\nvalue = [[402.0, 6.0]\n[398.0, 10.0]\n[406.0, 2.0]\n[408.0, 0.0]\n[25.0, 383.0]\n[401.0, 7.0]\n[408.0, 0.0]]", fillcolor="#e99355"] ; 1138 | 566 -> 567 ; 1139 | 568 [label="x[22] <= 0.001\ngini = 0.027\nsamples = 403\nvalue = [[402, 1]\n[393, 10]\n[401, 2]\n[403, 0]\n[20, 383]\n[396, 7]\n[403, 0]]", fillcolor="#e89050"] ; 1140 | 567 -> 568 ; 1141 | 569 [label="x[5] <= 2.889\ngini = 0.024\nsamples = 400\nvalue = [[400.0, 0.0]\n[392.0, 8.0]\n[398.0, 2.0]\n[400.0, 0.0]\n[17.0, 383.0]\n[393.0, 7.0]\n[400.0, 0.0]]", fillcolor="#e88e4d"] ; 1142 | 568 -> 569 ; 1143 | 570 [label="x[19] <= -0.094\ngini = 0.02\nsamples = 395\nvalue = [[395, 0]\n[387, 8]\n[393, 2]\n[395, 0]\n[14, 381]\n[391, 4]\n[395, 0]]", fillcolor="#e78b49"] ; 1144 | 569 -> 570 ; 1145 | 571 [label="x[19] <= -0.249\ngini = 0.143\nsamples = 2\nvalue = [[2, 0]\n[1, 1]\n[2, 0]\n[2, 0]\n[2, 0]\n[1, 1]\n[2, 0]]", fillcolor="#f5cdb0"] ; 1146 | 570 -> 571 ; 1147 | 572 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 1148 | 571 -> 572 ; 1149 | 573 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]]", fillcolor="#e58139"] ; 1150 | 571 -> 573 ; 1151 | 574 [label="x[21] <= -0.004\ngini = 0.017\nsamples = 393\nvalue = [[393, 0]\n[386, 7]\n[391, 2]\n[393, 0]\n[12, 381]\n[390, 3]\n[393, 0]]", fillcolor="#e78a47"] ; 1152 | 570 -> 574 ; 1153 | 575 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]]", fillcolor="#e58139"] ; 1154 | 574 -> 575 ; 1155 | 576 [label="x[21] <= 0.001\ngini = 0.016\nsamples = 392\nvalue = [[392.0, 0.0]\n[385.0, 7.0]\n[390.0, 2.0]\n[392.0, 0.0]\n[11.0, 381.0]\n[390.0, 2.0]\n[392.0, 0.0]]", fillcolor="#e78946"] ; 1156 | 574 -> 576 ; 1157 | 577 [label="gini = 0.008\nsamples = 360\nvalue = [[360, 0]\n[358, 2]\n[359, 1]\n[360, 0]\n[5, 355]\n[358, 2]\n[360, 0]]", fillcolor="#e68540"] ; 1158 | 576 -> 577 ; 1159 | 578 [label="gini = 0.09\nsamples = 32\nvalue = [[32, 0]\n[27, 5]\n[31, 1]\n[32, 0]\n[6, 26]\n[32, 0]\n[32, 0]]", fillcolor="#efb184"] ; 1160 | 576 -> 578 ; 1161 | 579 [label="x[9] <= -0.091\ngini = 0.137\nsamples = 5\nvalue = [[5, 0]\n[5, 0]\n[5, 0]\n[5, 0]\n[3, 2]\n[2, 3]\n[5, 0]]", fillcolor="#f4caab"] ; 1162 | 569 -> 579 ; 1163 | 580 [label="gini = 0.0\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[0, 2]\n[2, 0]\n[2, 0]]", fillcolor="#e58139"] ; 1164 | 579 -> 580 ; 1165 | 581 [label="gini = 0.0\nsamples = 3\nvalue = [[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]\n[0, 3]\n[3, 0]]", fillcolor="#e58139"] ; 1166 | 579 -> 581 ; 1167 | 582 [label="x[2] <= -0.826\ngini = 0.127\nsamples = 3\nvalue = [[2, 1]\n[1, 2]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]\n[3, 0]]", fillcolor="#f3c4a3"] ; 1168 | 568 -> 582 ; 1169 | 583 [label="gini = 0.0\nsamples = 2\nvalue = [[2, 0]\n[0, 2]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#e58139"] ; 1170 | 582 -> 583 ; 1171 | 584 [label="gini = 0.0\nsamples = 1\nvalue = [[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 1172 | 582 -> 584 ; 1173 | 585 [label="gini = 0.0\nsamples = 5\nvalue = [[0, 5]\n[5, 0]\n[5, 0]\n[5, 0]\n[5, 0]\n[5, 0]\n[5, 0]]", fillcolor="#e58139"] ; 1174 | 567 -> 585 ; 1175 | 586 [label="x[16] <= 0.122\ngini = 0.128\nsamples = 26\nvalue = [[26, 0]\n[25, 1]\n[26, 0]\n[26, 0]\n[19, 7]\n[8, 18]\n[26, 0]]", fillcolor="#f3c5a4"] ; 1176 | 566 -> 586 ; 1177 | 587 [label="x[22] <= 0.001\ngini = 0.051\nsamples = 20\nvalue = [[20, 0]\n[20, 0]\n[20, 0]\n[20, 0]\n[18, 2]\n[2, 18]\n[20, 0]]", fillcolor="#eb9c64"] ; 1178 | 586 -> 587 ; 1179 | 588 [label="gini = 0.0\nsamples = 18\nvalue = [[18, 0]\n[18, 0]\n[18, 0]\n[18, 0]\n[18, 0]\n[0, 18]\n[18, 0]]", fillcolor="#e58139"] ; 1180 | 587 -> 588 ; 1181 | 589 [label="gini = 0.0\nsamples = 2\nvalue = [[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]\n[0, 2]\n[2, 0]\n[2, 0]]", fillcolor="#e58139"] ; 1182 | 587 -> 589 ; 1183 | 590 [label="x[19] <= -0.041\ngini = 0.079\nsamples = 6\nvalue = [[6, 0]\n[5, 1]\n[6, 0]\n[6, 0]\n[1, 5]\n[6, 0]\n[6, 0]]", fillcolor="#eeab7b"] ; 1184 | 586 -> 590 ; 1185 | 591 [label="gini = 0.0\nsamples = 5\nvalue = [[5, 0]\n[5, 0]\n[5, 0]\n[5, 0]\n[0, 5]\n[5, 0]\n[5, 0]]", fillcolor="#e58139"] ; 1186 | 590 -> 591 ; 1187 | 592 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 1188 | 590 -> 592 ; 1189 | 593 [label="x[3] <= -2.015\ngini = 0.064\nsamples = 56\nvalue = [[7, 49]\n[56, 0]\n[55, 1]\n[56, 0]\n[50, 6]\n[56, 0]\n[56, 0]]", fillcolor="#eca36e"] ; 1190 | 565 -> 593 ; 1191 | 594 [label="x[14] <= -0.025\ngini = 0.07\nsamples = 7\nvalue = [[7, 0]\n[7, 0]\n[6, 1]\n[7, 0]\n[1, 6]\n[7, 0]\n[7, 0]]", fillcolor="#eda673"] ; 1192 | 593 -> 594 ; 1193 | 595 [label="gini = 0.0\nsamples = 6\nvalue = [[6, 0]\n[6, 0]\n[6, 0]\n[6, 0]\n[0, 6]\n[6, 0]\n[6, 0]]", fillcolor="#e58139"] ; 1194 | 594 -> 595 ; 1195 | 596 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 1196 | 594 -> 596 ; 1197 | 597 [label="gini = 0.0\nsamples = 49\nvalue = [[0, 49]\n[49, 0]\n[49, 0]\n[49, 0]\n[49, 0]\n[49, 0]\n[49, 0]]", fillcolor="#e58139"] ; 1198 | 593 -> 597 ; 1199 | 598 [label="x[4] <= 0.657\ngini = 0.017\nsamples = 270\nvalue = [[269, 1]\n[270, 0]\n[269, 1]\n[270, 0]\n[270, 0]\n[264, 6]\n[8, 262]]", fillcolor="#e78a47"] ; 1200 | 0 -> 598 [labeldistance=2.5, labelangle=-45, headlabel="False"] ; 1201 | 599 [label="gini = 0.0\nsamples = 262\nvalue = [[262, 0]\n[262, 0]\n[262, 0]\n[262, 0]\n[262, 0]\n[262, 0]\n[0, 262]]", fillcolor="#e58139"] ; 1202 | 598 -> 599 ; 1203 | 600 [label="x[3] <= 2.305\ngini = 0.116\nsamples = 8\nvalue = [[7, 1]\n[8, 0]\n[7, 1]\n[8, 0]\n[8, 0]\n[2, 6]\n[8, 0]]", fillcolor="#f2bf9a"] ; 1204 | 598 -> 600 ; 1205 | 601 [label="x[19] <= 0.002\ngini = 0.143\nsamples = 2\nvalue = [[1, 1]\n[2, 0]\n[1, 1]\n[2, 0]\n[2, 0]\n[2, 0]\n[2, 0]]", fillcolor="#f5cdb0"] ; 1206 | 600 -> 601 ; 1207 | 602 [label="gini = 0.0\nsamples = 1\nvalue = [[1, 0]\n[1, 0]\n[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 1208 | 601 -> 602 ; 1209 | 603 [label="gini = 0.0\nsamples = 1\nvalue = [[0, 1]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]]", fillcolor="#e58139"] ; 1210 | 601 -> 603 ; 1211 | 604 [label="gini = 0.0\nsamples = 6\nvalue = [[6, 0]\n[6, 0]\n[6, 0]\n[6, 0]\n[6, 0]\n[0, 6]\n[6, 0]]", fillcolor="#e58139"] ; 1212 | 600 -> 604 ; 1213 | } --------------------------------------------------------------------------------