Skip to content

Instantly share code, notes, and snippets.

@takuti
Created October 21, 2019 06:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save takuti/59bc761543786112a86528f61bbae67c to your computer and use it in GitHub Desktop.
Save takuti/59bc761543786112a86528f61bbae67c to your computer and use it in GitHub Desktop.
hivemall-pyspark.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "hivemall-pyspark.ipynb",
"provenance": [],
"collapsed_sections": [],
"toc_visible": true,
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/takuti/59bc761543786112a86528f61bbae67c/hivemall-pyspark.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "WyH7JUqhF8sY",
"colab_type": "text"
},
"source": [
"# Hivemall with PySpark"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "vcaAkopVGAYG",
"colab_type": "text"
},
"source": [
"## Installation\n",
"\n",
"Prepare Spark environment for Google Colabo:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "Qc84kbLXx2kg",
"colab_type": "code",
"colab": {}
},
"source": [
"!apt-get install openjdk-8-jdk-headless -qq > /dev/null\n",
"!wget -q http://mirror.checkdomain.de/apache/spark/spark-2.3.4/spark-2.3.4-bin-hadoop2.7.tgz\n",
"!tar xf spark-2.3.4-bin-hadoop2.7.tgz\n",
"!pip install -q findspark"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "sG8vZYpp7JC7",
"colab_type": "code",
"colab": {}
},
"source": [
"import os\n",
"\n",
"os.environ[\"JAVA_HOME\"] = \"/usr/lib/jvm/java-8-openjdk-amd64\"\n",
"os.environ[\"SPARK_HOME\"] = \"/content/spark-2.3.4-bin-hadoop2.7\""
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "pIQZ4AcY7NwO",
"colab_type": "code",
"colab": {}
},
"source": [
"import findspark\n",
"findspark.init()"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "I-TF5acLIauO",
"colab_type": "text"
},
"source": [
"Download Hivemall JAR from the [releases](https://incubator.apache.org/clutch/hivemall.html):"
]
},
{
"cell_type": "code",
"metadata": {
"id": "CmL20W6k1zmB",
"colab_type": "code",
"colab": {}
},
"source": [
"!wget -q http://mirror.reverse.net/pub/apache/incubator/hivemall/0.5.2-incubating/hivemall-spark2.3-0.5.2-incubating-with-dependencies.jar"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "5s-BUNcNGECk",
"colab_type": "text"
},
"source": [
"## Basic Usage \n",
"\n",
"Create `SparkSession` with the Hivemall JAR:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "sptUhAvix4aP",
"colab_type": "code",
"colab": {}
},
"source": [
"from pyspark.sql import SparkSession\n",
"\n",
"spark = SparkSession \\\n",
" .builder \\\n",
" .master('local[*]') \\\n",
" .config('spark.jars', \\\n",
" 'hivemall-spark2.3-0.5.2-incubating-with-dependencies.jar') \\\n",
" .enableHiveSupport() \\\n",
" .getOrCreate()"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "s4_GFJYnTcWE",
"colab_type": "text"
},
"source": [
"`local[*]` runs Spark locally with as many worker threads as logical cores on this environment, and the number is:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "j8LwdUx6TwG4",
"colab_type": "code",
"outputId": "9aa11e90-8622-475c-ffce-90a9f6cd0d75",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"!grep -c ^processor /proc/cpuinfo"
],
"execution_count": 6,
"outputs": [
{
"output_type": "stream",
"text": [
"2\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "H8VpiD1BGIWy",
"colab_type": "text"
},
"source": [
"Register Hive(mall) UDFs to the session:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "DdkQpqHW0xJD",
"colab_type": "code",
"colab": {}
},
"source": [
"spark.sql(\"CREATE TEMPORARY FUNCTION hivemall_version AS 'hivemall.HivemallVersionUDF'\");"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "LxLfhUgYKCaj",
"colab_type": "text"
},
"source": [
"Use the functions in SQL context:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "Nv4qpJVkKAT4",
"colab_type": "code",
"outputId": "f0cdf012-8f8c-4342-fc4e-fc6fc611f6b0",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 119
}
},
"source": [
"spark.sql(\"SELECT hivemall_version()\").show()"
],
"execution_count": 8,
"outputs": [
{
"output_type": "stream",
"text": [
"+------------------+\n",
"|hivemall_version()|\n",
"+------------------+\n",
"| 0.5.2-incubating|\n",
"+------------------+\n",
"\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "64wPO26FGNMJ",
"colab_type": "text"
},
"source": [
"## Example: Binary Classification"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Nac0TWOzGUNf",
"colab_type": "text"
},
"source": [
"### Load data\n",
"\n",
"Use a [public dataset](https://aws.amazon.com/blogs/machine-learning/predicting-customer-churn-with-amazon-machine-learning/) that contains customers churn history from a telecom company:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "D6_zNAxK_IVf",
"colab_type": "code",
"outputId": "2ed48c56-8814-41b2-9d68-33732faa1d93",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 51
}
},
"source": [
"!wget -q http://dataminingconsultant.com/DKD2e_data_sets.zip\n",
"!unzip -j DKD2e_data_sets.zip \"**/churn.txt\""
],
"execution_count": 9,
"outputs": [
{
"output_type": "stream",
"text": [
"Archive: DKD2e_data_sets.zip\n",
" inflating: churn.txt \n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "AImzvOJuLoxm",
"colab_type": "text"
},
"source": [
"Normalize column names, and load data as a Pandas DataFrame:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "SgvGtW8n_MEi",
"colab_type": "code",
"outputId": "d973d38d-9660-4228-dbf1-fc20f8f7c8c9",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 309
}
},
"source": [
"import re\n",
"import pandas as pd\n",
"\n",
"pddf = pd.read_csv('churn.txt') \\\n",
" .rename(lambda c: re.sub(r'[^a-zA-Z0-9 ]', '', str(c)).lower().replace(' ', '_'), axis='columns')\n",
"pddf.head()"
],
"execution_count": 10,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>state</th>\n",
" <th>account_length</th>\n",
" <th>area_code</th>\n",
" <th>phone</th>\n",
" <th>intl_plan</th>\n",
" <th>vmail_plan</th>\n",
" <th>vmail_message</th>\n",
" <th>day_mins</th>\n",
" <th>day_calls</th>\n",
" <th>day_charge</th>\n",
" <th>eve_mins</th>\n",
" <th>eve_calls</th>\n",
" <th>eve_charge</th>\n",
" <th>night_mins</th>\n",
" <th>night_calls</th>\n",
" <th>night_charge</th>\n",
" <th>intl_mins</th>\n",
" <th>intl_calls</th>\n",
" <th>intl_charge</th>\n",
" <th>custserv_calls</th>\n",
" <th>churn</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>KS</td>\n",
" <td>128</td>\n",
" <td>415</td>\n",
" <td>382-4657</td>\n",
" <td>no</td>\n",
" <td>yes</td>\n",
" <td>25</td>\n",
" <td>265.1</td>\n",
" <td>110</td>\n",
" <td>45.07</td>\n",
" <td>197.4</td>\n",
" <td>99</td>\n",
" <td>16.78</td>\n",
" <td>244.7</td>\n",
" <td>91</td>\n",
" <td>11.01</td>\n",
" <td>10.0</td>\n",
" <td>3</td>\n",
" <td>2.70</td>\n",
" <td>1</td>\n",
" <td>False.</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>OH</td>\n",
" <td>107</td>\n",
" <td>415</td>\n",
" <td>371-7191</td>\n",
" <td>no</td>\n",
" <td>yes</td>\n",
" <td>26</td>\n",
" <td>161.6</td>\n",
" <td>123</td>\n",
" <td>27.47</td>\n",
" <td>195.5</td>\n",
" <td>103</td>\n",
" <td>16.62</td>\n",
" <td>254.4</td>\n",
" <td>103</td>\n",
" <td>11.45</td>\n",
" <td>13.7</td>\n",
" <td>3</td>\n",
" <td>3.70</td>\n",
" <td>1</td>\n",
" <td>False.</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>NJ</td>\n",
" <td>137</td>\n",
" <td>415</td>\n",
" <td>358-1921</td>\n",
" <td>no</td>\n",
" <td>no</td>\n",
" <td>0</td>\n",
" <td>243.4</td>\n",
" <td>114</td>\n",
" <td>41.38</td>\n",
" <td>121.2</td>\n",
" <td>110</td>\n",
" <td>10.30</td>\n",
" <td>162.6</td>\n",
" <td>104</td>\n",
" <td>7.32</td>\n",
" <td>12.2</td>\n",
" <td>5</td>\n",
" <td>3.29</td>\n",
" <td>0</td>\n",
" <td>False.</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>OH</td>\n",
" <td>84</td>\n",
" <td>408</td>\n",
" <td>375-9999</td>\n",
" <td>yes</td>\n",
" <td>no</td>\n",
" <td>0</td>\n",
" <td>299.4</td>\n",
" <td>71</td>\n",
" <td>50.90</td>\n",
" <td>61.9</td>\n",
" <td>88</td>\n",
" <td>5.26</td>\n",
" <td>196.9</td>\n",
" <td>89</td>\n",
" <td>8.86</td>\n",
" <td>6.6</td>\n",
" <td>7</td>\n",
" <td>1.78</td>\n",
" <td>2</td>\n",
" <td>False.</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>OK</td>\n",
" <td>75</td>\n",
" <td>415</td>\n",
" <td>330-6626</td>\n",
" <td>yes</td>\n",
" <td>no</td>\n",
" <td>0</td>\n",
" <td>166.7</td>\n",
" <td>113</td>\n",
" <td>28.34</td>\n",
" <td>148.3</td>\n",
" <td>122</td>\n",
" <td>12.61</td>\n",
" <td>186.9</td>\n",
" <td>121</td>\n",
" <td>8.41</td>\n",
" <td>10.1</td>\n",
" <td>3</td>\n",
" <td>2.73</td>\n",
" <td>3</td>\n",
" <td>False.</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" state account_length area_code ... intl_charge custserv_calls churn\n",
"0 KS 128 415 ... 2.70 1 False.\n",
"1 OH 107 415 ... 3.70 1 False.\n",
"2 NJ 137 415 ... 3.29 0 False.\n",
"3 OH 84 408 ... 1.78 2 False.\n",
"4 OK 75 415 ... 2.73 3 False.\n",
"\n",
"[5 rows x 21 columns]"
]
},
"metadata": {
"tags": []
},
"execution_count": 10
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "TeKfonPVMVSP",
"colab_type": "text"
},
"source": [
"Convert into a Spark DataFrame:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "p4Urhba2MddQ",
"colab_type": "code",
"outputId": "43a9b1e0-baf1-4ff8-ebdd-3c91c8c03aa3",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 408
}
},
"source": [
"df = spark.createDataFrame(pddf)\n",
"df.printSchema()"
],
"execution_count": 11,
"outputs": [
{
"output_type": "stream",
"text": [
"root\n",
" |-- state: string (nullable = true)\n",
" |-- account_length: long (nullable = true)\n",
" |-- area_code: long (nullable = true)\n",
" |-- phone: string (nullable = true)\n",
" |-- intl_plan: string (nullable = true)\n",
" |-- vmail_plan: string (nullable = true)\n",
" |-- vmail_message: long (nullable = true)\n",
" |-- day_mins: double (nullable = true)\n",
" |-- day_calls: long (nullable = true)\n",
" |-- day_charge: double (nullable = true)\n",
" |-- eve_mins: double (nullable = true)\n",
" |-- eve_calls: long (nullable = true)\n",
" |-- eve_charge: double (nullable = true)\n",
" |-- night_mins: double (nullable = true)\n",
" |-- night_calls: long (nullable = true)\n",
" |-- night_charge: double (nullable = true)\n",
" |-- intl_mins: double (nullable = true)\n",
" |-- intl_calls: long (nullable = true)\n",
" |-- intl_charge: double (nullable = true)\n",
" |-- custserv_calls: long (nullable = true)\n",
" |-- churn: string (nullable = true)\n",
"\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "q8V-2bF1Qity",
"colab_type": "text"
},
"source": [
"### Preprocessing"
]
},
{
"cell_type": "code",
"metadata": {
"id": "iHM3tj5GVgg2",
"colab_type": "code",
"colab": {}
},
"source": [
"spark.sql(\"CREATE TEMPORARY FUNCTION array_concat AS 'hivemall.tools.array.ArrayConcatUDF'\")\n",
"spark.sql(\"CREATE TEMPORARY FUNCTION categorical_features AS 'hivemall.ftvec.trans.CategoricalFeaturesUDF'\")\n",
"spark.sql(\"CREATE TEMPORARY FUNCTION quantitative_features AS 'hivemall.ftvec.trans.QuantitativeFeaturesUDF'\")\n",
"spark.sql(\"CREATE TEMPORARY FUNCTION rescale AS 'hivemall.ftvec.scaling.RescaleUDF'\");"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "-rDg3uwSUHVU",
"colab_type": "text"
},
"source": [
"Create a view on the original DataFrame:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "qyhaKRS4UAS8",
"colab_type": "code",
"colab": {}
},
"source": [
"df.createOrReplaceTempView('churn')"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "AjS-mwtxU_Aa",
"colab_type": "text"
},
"source": [
"Query the view:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "zyD0a-lST_t_",
"colab_type": "code",
"outputId": "4e6e6852-df4c-4d63-b890-3eac343168be",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 204
}
},
"source": [
"df_preprocessed = spark.sql(\"\"\"\n",
"SELECT\n",
" phone,\n",
" array_concat(\n",
" categorical_features(\n",
" array('intl_plan', 'state', 'area_code', 'vmail_plan'),\n",
" intl_plan, state, area_code, vmail_plan\n",
" ),\n",
" quantitative_features(\n",
" array(\n",
" 'night_charge', 'day_charge', 'custserv_calls', \n",
" 'intl_charge', 'eve_charge', 'vmail_message'\n",
" ),\n",
" night_charge, day_charge, custserv_calls,\n",
" intl_charge, eve_charge, vmail_message\n",
" )\n",
" ) as features,\n",
" if(churn = 'True.', 1, 0) as label\n",
"FROM\n",
" churn\n",
"\"\"\")\n",
"df_preprocessed.toPandas().head()"
],
"execution_count": 14,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>phone</th>\n",
" <th>features</th>\n",
" <th>label</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>382-4657</td>\n",
" <td>[intl_plan#no, state#KS, area_code#415, vmail_...</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>371-7191</td>\n",
" <td>[intl_plan#no, state#OH, area_code#415, vmail_...</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>358-1921</td>\n",
" <td>[intl_plan#no, state#NJ, area_code#415, vmail_...</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>375-9999</td>\n",
" <td>[intl_plan#yes, state#OH, area_code#408, vmail...</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>330-6626</td>\n",
" <td>[intl_plan#yes, state#OK, area_code#415, vmail...</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" phone features label\n",
"0 382-4657 [intl_plan#no, state#KS, area_code#415, vmail_... 0\n",
"1 371-7191 [intl_plan#no, state#OH, area_code#415, vmail_... 0\n",
"2 358-1921 [intl_plan#no, state#NJ, area_code#415, vmail_... 0\n",
"3 375-9999 [intl_plan#yes, state#OH, area_code#408, vmail... 0\n",
"4 330-6626 [intl_plan#yes, state#OK, area_code#415, vmail... 0"
]
},
"metadata": {
"tags": []
},
"execution_count": 14
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "AfGRPa2ZWRoQ",
"colab_type": "text"
},
"source": [
"We can of course run Spark DataFrame operations:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "RrW1sluxV5YV",
"colab_type": "code",
"outputId": "c03425a9-9562-4070-df29-0c5aac0be539",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 136
}
},
"source": [
"df_preprocessed.groupby('label').count().show()"
],
"execution_count": 15,
"outputs": [
{
"output_type": "stream",
"text": [
"+-----+-----+\n",
"|label|count|\n",
"+-----+-----+\n",
"| 1| 483|\n",
"| 0| 2850|\n",
"+-----+-----+\n",
"\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "zNO7bKHTWZWW",
"colab_type": "text"
},
"source": [
"Split records into 80% train and 20% test set:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "SCap59YLBxr1",
"colab_type": "code",
"outputId": "406dfefe-a6ac-4f80-87d9-13000637f5de",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"df_train, df_test = df_preprocessed.randomSplit([0.8, 0.2], seed=31)\n",
"df_train.count(), df_test.count()"
],
"execution_count": 16,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(2658, 675)"
]
},
"metadata": {
"tags": []
},
"execution_count": 16
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Due2pk_GGYfu",
"colab_type": "text"
},
"source": [
"### Training"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "i9cDb0SaBVFn",
"colab_type": "text"
},
"source": [
"Use `train_classifier` UDF to build a liner classifier:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "hfBOFHHYWmgO",
"colab_type": "code",
"colab": {}
},
"source": [
"spark.sql(\"CREATE TEMPORARY FUNCTION train_classifier AS 'hivemall.classifier.GeneralClassifierUDTF'\");"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "8NpNjX1DFqB1",
"colab_type": "text"
},
"source": [
"Usage can be found by `-help` option:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "PePisTqXBkR0",
"colab_type": "code",
"outputId": "7b33d796-6f11-44d8-bf3b-969635521807",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
}
},
"source": [
"spark.sql(\"SELECT train_classifier(array(), 0, '-help')\")"
],
"execution_count": 18,
"outputs": [
{
"output_type": "error",
"ename": "AnalysisException",
"evalue": "ignored",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mPy4JJavaError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m/content/spark-2.3.4-bin-hadoop2.7/python/pyspark/sql/utils.py\u001b[0m in \u001b[0;36mdeco\u001b[0;34m(*a, **kw)\u001b[0m\n\u001b[1;32m 62\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 63\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkw\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 64\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mpy4j\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mprotocol\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mPy4JJavaError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/content/spark-2.3.4-bin-hadoop2.7/python/lib/py4j-0.10.7-src.zip/py4j/protocol.py\u001b[0m in \u001b[0;36mget_return_value\u001b[0;34m(answer, gateway_client, target_id, name)\u001b[0m\n\u001b[1;32m 327\u001b[0m \u001b[0;34m\"An error occurred while calling {0}{1}{2}.\\n\"\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 328\u001b[0;31m format(target_id, \".\", name), value)\n\u001b[0m\u001b[1;32m 329\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mPy4JJavaError\u001b[0m: An error occurred while calling o28.sql.\n: org.apache.spark.sql.AnalysisException: No handler for UDF/UDAF/UDTF 'hivemall.classifier.GeneralClassifierUDTF': org.apache.hadoop.hive.ql.exec.UDFArgumentException: \nusage: train_classifier(list<string|int|bigint> features, int label [,\n const string options]) - Returns a relation consists of\n <string|int|bigint feature, float weight> [-cv_rate <arg>] [-dense]\n [-dims <arg>] [-disable_cv] [-disable_halffloat] [-eps <arg>] [-eta\n <arg>] [-eta0 <arg>] [-help] [-iter <arg>] [-iters <arg>]\n [-l1_ratio <arg>] [-lambda <arg>] [-loss <arg>] [-mini_batch <arg>]\n [-mix <arg>] [-mix_cancel] [-mix_session <arg>] [-mix_threshold\n <arg>] [-opt <arg>] [-power_t <arg>] [-reg <arg>] [-rho <arg>]\n [-scale <arg>] [-ssl] [-t <arg>]\n -cv_rate,--convergence_rate <arg> Threshold to determine\n convergence [default: 0.005]\n -dense,--densemodel Use dense model or not\n -dims,--feature_dimensions <arg> The dimension of model [default:\n 16777216 (2^24)]\n -disable_cv,--disable_cvtest Whether to disable convergence\n check [default: OFF]\n -disable_halffloat Toggle this option to disable the\n use of SpaceEfficientDenseModel\n -eps <arg> Denominator value of\n AdaDelta/AdaGrad [default 1e-6]\n -eta <arg> Learning rate scheme [default:\n inverse/inv, fixed, simple]\n -eta0 <arg> The initial learning rate\n [default 0.1]\n -help Show function help\n -iter,--iterations <arg> The maximum number of iterations\n [default: 10]\n -iters,--iterations <arg> The maximum number of iterations\n [default: 10]\n -l1_ratio <arg> Ratio of L1 regularizer as a part\n of Elastic Net regularization\n [default: 0.5]\n -lambda <arg> Regularization term [default\n 0.0001]\n -loss,--loss_function <arg> Loss function [HingeLoss\n (default), LogLoss,\n SquaredHingeLoss,\n ModifiedHuberLoss, or\n a regression loss: SquaredLoss,\n QuantileLoss,\n EpsilonInsensitiveLoss,\n SquaredEpsilonInsensitiveLoss,\n HuberLoss]\n -mini_batch,--mini_batch_size <arg> Mini batch size [default: 1].\n Expecting the value in range\n [1,100] or so.\n -mix,--mix_servers <arg> Comma separated list of MIX\n servers\n -mix_cancel,--enable_mix_canceling Enable mix cancel requests\n -mix_session,--mix_session_name <arg> Mix session name [default:\n ${mapred.job.id}]\n -mix_threshold <arg> Threshold to mix local updates in\n range (0,127] [default: 3]\n -opt,--optimizer <arg> Optimizer to update weights\n [default: adagrad, sgd, adadelta,\n adam]\n -power_t <arg> The exponent for inverse scaling\n learning rate [default 0.1]\n -reg,--regularization <arg> Regularization type [default:\n rda, l1, l2, elasticnet]\n -rho,--decay <arg> Decay rate of AdaDelta [default\n 0.95]\n -scale <arg> Scaling factor for cumulative\n weights [100.0]\n -ssl Use SSL for the communication\n with mix servers\n -t,--total_steps <arg> a total of n_samples * epochs\n time steps\n\nPlease make sure your function overrides `public StructObjectInspector initialize(ObjectInspector[] args)`.; line 1 pos 7\n\tat hivemall.UDTFWithOptions.parseOptions(UDTFWithOptions.java:117)\n\tat hivemall.LearnerBaseUDTF.processOptions(LearnerBaseUDTF.java:121)\n\tat hivemall.GeneralLearnerBaseUDTF.processOptions(GeneralLearnerBaseUDTF.java:186)\n\tat hivemall.GeneralLearnerBaseUDTF.initialize(GeneralLearnerBaseUDTF.java:151)\n\tat org.apache.spark.sql.hive.HiveGenericUDTF.outputInspector$lzycompute(hiveUDFs.scala:215)\n\tat org.apache.spark.sql.hive.HiveGenericUDTF.outputInspector(hiveUDFs.scala:215)\n\tat org.apache.spark.sql.hive.HiveGenericUDTF.elementSchema$lzycompute(hiveUDFs.scala:223)\n\tat org.apache.spark.sql.hive.HiveGenericUDTF.elementSchema(hiveUDFs.scala:223)\n\tat org.apache.spark.sql.hive.HiveSessionCatalog$$anonfun$makeFunctionExpression$2.apply(HiveSessionCatalog.scala:93)\n\tat org.apache.spark.sql.hive.HiveSessionCatalog$$anonfun$makeFunctionExpression$2.apply(HiveSessionCatalog.scala:69)\n\tat scala.util.Try.getOrElse(Try.scala:79)\n\tat org.apache.spark.sql.hive.HiveSessionCatalog.makeFunctionExpression(HiveSessionCatalog.scala:69)\n\tat org.apache.spark.sql.catalyst.catalog.SessionCatalog$$anonfun$org$apache$spark$sql$catalyst$catalog$SessionCatalog$$makeFunctionBuilder$1.apply(SessionCatalog.scala:1090)\n\tat org.apache.spark.sql.catalyst.catalog.SessionCatalog$$anonfun$org$apache$spark$sql$catalyst$catalog$SessionCatalog$$makeFunctionBuilder$1.apply(SessionCatalog.scala:1090)\n\tat org.apache.spark.sql.catalyst.analysis.SimpleFunctionRegistry.lookupFunction(FunctionRegistry.scala:115)\n\tat org.apache.spark.sql.catalyst.catalog.SessionCatalog.lookupFunction(SessionCatalog.scala:1221)\n\tat org.apache.spark.sql.hive.HiveSessionCatalog.org$apache$spark$sql$hive$HiveSessionCatalog$$super$lookupFunction(HiveSessionCatalog.scala:131)\n\tat org.apache.spark.sql.hive.HiveSessionCatalog$$anonfun$3.apply(HiveSessionCatalog.scala:131)\n\tat org.apache.spark.sql.hive.HiveSessionCatalog$$anonfun$3.apply(HiveSessionCatalog.scala:131)\n\tat scala.util.Try$.apply(Try.scala:192)\n\tat org.apache.spark.sql.hive.HiveSessionCatalog.lookupFunction0(HiveSessionCatalog.scala:131)\n\tat org.apache.spark.sql.hive.HiveSessionCatalog.lookupFunction(HiveSessionCatalog.scala:124)\n\tat org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveFunctions$$anonfun$apply$16$$anonfun$applyOrElse$6$$anonfun$applyOrElse$53.apply(Analyzer.scala:1242)\n\tat org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveFunctions$$anonfun$apply$16$$anonfun$applyOrElse$6$$anonfun$applyOrElse$53.apply(Analyzer.scala:1242)\n\tat org.apache.spark.sql.catalyst.analysis.package$.withPosition(package.scala:53)\n\tat org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveFunctions$$anonfun$apply$16$$anonfun$applyOrElse$6.applyOrElse(Analyzer.scala:1241)\n\tat org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveFunctions$$anonfun$apply$16$$anonfun$applyOrElse$6.applyOrElse(Analyzer.scala:1225)\n\tat org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$2.apply(TreeNode.scala:267)\n\tat org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$2.apply(TreeNode.scala:267)\n\tat org.apache.spark.sql.catalyst.trees.CurrentOrigin$.withOrigin(TreeNode.scala:70)\n\tat org.apache.spark.sql.catalyst.trees.TreeNode.transformDown(TreeNode.scala:266)\n\tat org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$transformDown$1.apply(TreeNode.scala:272)\n\tat org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$transformDown$1.apply(TreeNode.scala:272)\n\tat org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$4.apply(TreeNode.scala:306)\n\tat org.apache.spark.sql.catalyst.trees.TreeNode.mapProductIterator(TreeNode.scala:187)\n\tat org.apache.spark.sql.catalyst.trees.TreeNode.mapChildren(TreeNode.scala:304)\n\tat org.apache.spark.sql.catalyst.trees.TreeNode.transformDown(TreeNode.scala:272)\n\tat org.apache.spark.sql.catalyst.plans.QueryPlan$$anonfun$transformExpressionsDown$1.apply(QueryPlan.scala:85)\n\tat org.apache.spark.sql.catalyst.plans.QueryPlan$$anonfun$transformExpressionsDown$1.apply(QueryPlan.scala:85)\n\tat org.apache.spark.sql.catalyst.plans.QueryPlan$$anonfun$1.apply(QueryPlan.scala:107)\n\tat org.apache.spark.sql.catalyst.plans.QueryPlan$$anonfun$1.apply(QueryPlan.scala:107)\n\tat org.apache.spark.sql.catalyst.trees.CurrentOrigin$.withOrigin(TreeNode.scala:70)\n\tat org.apache.spark.sql.catalyst.plans.QueryPlan.transformExpression$1(QueryPlan.scala:106)\n\tat org.apache.spark.sql.catalyst.plans.QueryPlan.org$apache$spark$sql$catalyst$plans$QueryPlan$$recursiveTransform$1(QueryPlan.scala:118)\n\tat org.apache.spark.sql.catalyst.plans.QueryPlan$$anonfun$org$apache$spark$sql$catalyst$plans$QueryPlan$$recursiveTransform$1$1.apply(QueryPlan.scala:122)\n\tat scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)\n\tat scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)\n\tat scala.collection.immutable.List.foreach(List.scala:381)\n\tat scala.collection.TraversableLike$class.map(TraversableLike.scala:234)\n\tat scala.collection.immutable.List.map(List.scala:285)\n\tat org.apache.spark.sql.catalyst.plans.QueryPlan.org$apache$spark$sql$catalyst$plans$QueryPlan$$recursiveTransform$1(QueryPlan.scala:122)\n\tat org.apache.spark.sql.catalyst.plans.QueryPlan$$anonfun$2.apply(QueryPlan.scala:127)\n\tat org.apache.spark.sql.catalyst.trees.TreeNode.mapProductIterator(TreeNode.scala:187)\n\tat org.apache.spark.sql.catalyst.plans.QueryPlan.mapExpressions(QueryPlan.scala:127)\n\tat org.apache.spark.sql.catalyst.plans.QueryPlan.transformExpressionsDown(QueryPlan.scala:85)\n\tat org.apache.spark.sql.catalyst.plans.QueryPlan.transformExpressions(QueryPlan.scala:76)\n\tat org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveFunctions$$anonfun$apply$16.applyOrElse(Analyzer.scala:1225)\n\tat org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveFunctions$$anonfun$apply$16.applyOrElse(Analyzer.scala:1223)\n\tat org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$transformUp$1.apply(TreeNode.scala:289)\n\tat org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$transformUp$1.apply(TreeNode.scala:289)\n\tat org.apache.spark.sql.catalyst.trees.CurrentOrigin$.withOrigin(TreeNode.scala:70)\n\tat org.apache.spark.sql.catalyst.trees.TreeNode.transformUp(TreeNode.scala:288)\n\tat org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveFunctions$.apply(Analyzer.scala:1223)\n\tat org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveFunctions$.apply(Analyzer.scala:1222)\n\tat org.apache.spark.sql.catalyst.rules.RuleExecutor$$anonfun$execute$1$$anonfun$apply$1.apply(RuleExecutor.scala:87)\n\tat org.apache.spark.sql.catalyst.rules.RuleExecutor$$anonfun$execute$1$$anonfun$apply$1.apply(RuleExecutor.scala:84)\n\tat scala.collection.LinearSeqOptimized$class.foldLeft(LinearSeqOptimized.scala:124)\n\tat scala.collection.immutable.List.foldLeft(List.scala:84)\n\tat org.apache.spark.sql.catalyst.rules.RuleExecutor$$anonfun$execute$1.apply(RuleExecutor.scala:84)\n\tat org.apache.spark.sql.catalyst.rules.RuleExecutor$$anonfun$execute$1.apply(RuleExecutor.scala:76)\n\tat scala.collection.immutable.List.foreach(List.scala:381)\n\tat org.apache.spark.sql.catalyst.rules.RuleExecutor.execute(RuleExecutor.scala:76)\n\tat org.apache.spark.sql.catalyst.analysis.Analyzer.org$apache$spark$sql$catalyst$analysis$Analyzer$$executeSameContext(Analyzer.scala:124)\n\tat org.apache.spark.sql.catalyst.analysis.Analyzer.execute(Analyzer.scala:118)\n\tat org.apache.spark.sql.catalyst.analysis.Analyzer.executeAndCheck(Analyzer.scala:103)\n\tat org.apache.spark.sql.execution.QueryExecution.analyzed$lzycompute(QueryExecution.scala:57)\n\tat org.apache.spark.sql.execution.QueryExecution.analyzed(QueryExecution.scala:55)\n\tat org.apache.spark.sql.execution.QueryExecution.assertAnalyzed(QueryExecution.scala:47)\n\tat org.apache.spark.sql.Dataset$.ofRows(Dataset.scala:74)\n\tat org.apache.spark.sql.SparkSession.sql(SparkSession.scala:642)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.lang.reflect.Method.invoke(Method.java:498)\n\tat py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)\n\tat py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)\n\tat py4j.Gateway.invoke(Gateway.java:282)\n\tat py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)\n\tat py4j.commands.CallCommand.execute(CallCommand.java:79)\n\tat py4j.GatewayConnection.run(GatewayConnection.java:238)\n\tat java.lang.Thread.run(Thread.java:748)\n",
"\nDuring handling of the above exception, another exception occurred:\n",
"\u001b[0;31mAnalysisException\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-18-2244f8a1acb3>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mspark\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msql\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"SELECT train_classifier(array(), 0, '-help')\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m/content/spark-2.3.4-bin-hadoop2.7/python/pyspark/sql/session.py\u001b[0m in \u001b[0;36msql\u001b[0;34m(self, sqlQuery)\u001b[0m\n\u001b[1;32m 708\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mRow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mf1\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mf2\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34mu'row1'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mRow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mf1\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mf2\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34mu'row2'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mRow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mf1\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mf2\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34mu'row3'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 709\u001b[0m \"\"\"\n\u001b[0;32m--> 710\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mDataFrame\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_jsparkSession\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msql\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msqlQuery\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_wrapped\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 711\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 712\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0msince\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m2.0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/content/spark-2.3.4-bin-hadoop2.7/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, *args)\u001b[0m\n\u001b[1;32m 1255\u001b[0m \u001b[0manswer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgateway_client\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend_command\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcommand\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1256\u001b[0m return_value = get_return_value(\n\u001b[0;32m-> 1257\u001b[0;31m answer, self.gateway_client, self.target_id, self.name)\n\u001b[0m\u001b[1;32m 1258\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1259\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mtemp_arg\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mtemp_args\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/content/spark-2.3.4-bin-hadoop2.7/python/pyspark/sql/utils.py\u001b[0m in \u001b[0;36mdeco\u001b[0;34m(*a, **kw)\u001b[0m\n\u001b[1;32m 67\u001b[0m e.java_exception.getStackTrace()))\n\u001b[1;32m 68\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0ms\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstartswith\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'org.apache.spark.sql.AnalysisException: '\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 69\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mAnalysisException\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ms\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msplit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m': '\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstackTrace\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 70\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0ms\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstartswith\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'org.apache.spark.sql.catalyst.analysis'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 71\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mAnalysisException\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ms\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msplit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m': '\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstackTrace\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mAnalysisException\u001b[0m: \"No handler for UDF/UDAF/UDTF 'hivemall.classifier.GeneralClassifierUDTF': org.apache.hadoop.hive.ql.exec.UDFArgumentException: \\nusage: train_classifier(list<string|int|bigint> features, int label [,\\n const string options]) - Returns a relation consists of\\n <string|int|bigint feature, float weight> [-cv_rate <arg>] [-dense]\\n [-dims <arg>] [-disable_cv] [-disable_halffloat] [-eps <arg>] [-eta\\n <arg>] [-eta0 <arg>] [-help] [-iter <arg>] [-iters <arg>]\\n [-l1_ratio <arg>] [-lambda <arg>] [-loss <arg>] [-mini_batch <arg>]\\n [-mix <arg>] [-mix_cancel] [-mix_session <arg>] [-mix_threshold\\n <arg>] [-opt <arg>] [-power_t <arg>] [-reg <arg>] [-rho <arg>]\\n [-scale <arg>] [-ssl] [-t <arg>]\\n -cv_rate,--convergence_rate <arg> Threshold to determine\\n convergence [default: 0.005]\\n -dense,--densemodel Use dense model or not\\n -dims,--feature_dimensions <arg> The dimension of model [default:\\n 16777216 (2^24)]\\n -disable_cv,--disable_cvtest Whether to disable convergence\\n check [default: OFF]\\n -disable_halffloat Toggle this option to disable the\\n use of SpaceEfficientDenseModel\\n -eps <arg> Denominator value of\\n ..."
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "K43cGiLpFvwo",
"colab_type": "text"
},
"source": [
"Train a model in the distributed manner by leveraging the available workers:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "DeqpkSBDCabD",
"colab_type": "code",
"outputId": "621c8bae-7737-4684-8a29-318e65fff50e",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 359
}
},
"source": [
"df_train.createOrReplaceTempView('train')\n",
"\n",
"df_model = spark.sql(\"\"\"\n",
"SELECT\n",
" feature,\n",
" avg(weight) as weight\n",
"FROM (\n",
" SELECT\n",
" train_classifier(\n",
" features, \n",
" label,\n",
" '-loss logloss -opt SGD -reg l1 -lambda 0.03 -eta0 0.01'\n",
" ) as (feature, weight)\n",
" FROM\n",
" train\n",
") t\n",
"GROUP BY 1\n",
"\"\"\")\n",
"df_model.toPandas().head(10)"
],
"execution_count": 19,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>feature</th>\n",
" <th>weight</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>state#TX</td>\n",
" <td>0.088104</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>state#MN</td>\n",
" <td>0.024230</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>state#LA</td>\n",
" <td>-0.024339</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>area_code#408</td>\n",
" <td>-0.006044</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>night_charge</td>\n",
" <td>-0.194483</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>state#ND</td>\n",
" <td>-0.066669</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>state#VT</td>\n",
" <td>-0.063177</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>state#MA</td>\n",
" <td>0.000016</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>state#OH</td>\n",
" <td>0.031865</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>state#MD</td>\n",
" <td>0.038399</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" feature weight\n",
"0 state#TX 0.088104\n",
"1 state#MN 0.024230\n",
"2 state#LA -0.024339\n",
"3 area_code#408 -0.006044\n",
"4 night_charge -0.194483\n",
"5 state#ND -0.066669\n",
"6 state#VT -0.063177\n",
"7 state#MA 0.000016\n",
"8 state#OH 0.031865\n",
"9 state#MD 0.038399"
]
},
"metadata": {
"tags": []
},
"execution_count": 19
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "HsQsS02eBxtd",
"colab_type": "text"
},
"source": [
"Model parameters can be easily visualized as:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "7EaqBaMIDTm7",
"colab_type": "code",
"outputId": "7fa82e34-ec07-4a25-cd21-bdca62766830",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 269
}
},
"source": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"import pyspark.sql.functions as F\n",
"\n",
"m = df_model.orderBy(F.abs(df_model.weight).desc()).limit(10).toPandas()\n",
"\n",
"x = range(m.shape[0])\n",
"plt.barh(x, m['weight'], align='center')\n",
"plt.yticks(x, m['feature'])\n",
"\n",
"plt.gca().invert_yaxis()\n",
"plt.gca().xaxis.grid(True)\n",
"\n",
"fig = plt.gcf()\n",
"fig.set_size_inches((8, 4))\n",
" \n",
"plt.show()"
],
"execution_count": 20,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\nSeYAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 576x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "gXrgBjpUGbAG",
"colab_type": "text"
},
"source": [
"### Prediction"
]
},
{
"cell_type": "code",
"metadata": {
"id": "xUtbR1bB0_ZY",
"colab_type": "code",
"colab": {}
},
"source": [
"spark.sql(\"CREATE TEMPORARY FUNCTION sigmoid AS 'hivemall.tools.math.SigmoidGenericUDF'\")\n",
"spark.sql(\"CREATE TEMPORARY FUNCTION extract_feature AS 'hivemall.ftvec.ExtractFeatureUDFWrapper'\")\n",
"spark.sql(\"CREATE TEMPORARY FUNCTION extract_weight AS 'hivemall.ftvec.ExtractWeightUDFWrapper'\");"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "oPXKfK8rF4HZ",
"colab_type": "text"
},
"source": [
"Join over features, compute weighted sum of them, and take sigmoid:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "grOFSn13D_KU",
"colab_type": "code",
"outputId": "80b4bbaf-d541-44b3-d2f4-304285b3180f",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 359
}
},
"source": [
"df_test.createOrReplaceTempView('test')\n",
"df_model.createOrReplaceTempView('model')\n",
"\n",
"df_prediction = spark.sql(\"\"\"\n",
"SELECT\n",
" phone,\n",
" label as expected,\n",
" sigmoid(sum(weight * value)) as prob\n",
"FROM ( \n",
" SELECT\n",
" phone,\n",
" label,\n",
" extract_feature(fv) AS feature,\n",
" extract_weight(fv) AS value\n",
" FROM \n",
" test\n",
" LATERAL VIEW explode(features) t2 AS fv\n",
") t \n",
"LEFT OUTER JOIN model m \n",
" ON t.feature = m.feature\n",
"GROUP BY 1, 2\n",
"\"\"\")\n",
"df_prediction.toPandas().head(10)"
],
"execution_count": 22,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>phone</th>\n",
" <th>expected</th>\n",
" <th>prob</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>375-3003</td>\n",
" <td>0</td>\n",
" <td>0.043165</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>344-4022</td>\n",
" <td>0</td>\n",
" <td>0.032754</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>356-2992</td>\n",
" <td>0</td>\n",
" <td>0.000035</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>420-3028</td>\n",
" <td>0</td>\n",
" <td>0.009459</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>354-9062</td>\n",
" <td>0</td>\n",
" <td>0.128704</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>360-6024</td>\n",
" <td>0</td>\n",
" <td>0.000029</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>376-4705</td>\n",
" <td>1</td>\n",
" <td>0.019202</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>373-1448</td>\n",
" <td>1</td>\n",
" <td>0.007880</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>349-2157</td>\n",
" <td>0</td>\n",
" <td>0.009182</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>337-9569</td>\n",
" <td>0</td>\n",
" <td>0.052731</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" phone expected prob\n",
"0 375-3003 0 0.043165\n",
"1 344-4022 0 0.032754\n",
"2 356-2992 0 0.000035\n",
"3 420-3028 0 0.009459\n",
"4 354-9062 0 0.128704\n",
"5 360-6024 0 0.000029\n",
"6 376-4705 1 0.019202\n",
"7 373-1448 1 0.007880\n",
"8 349-2157 0 0.009182\n",
"9 337-9569 0 0.052731"
]
},
"metadata": {
"tags": []
},
"execution_count": 22
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "0vVGn7f4Gd-3",
"colab_type": "text"
},
"source": [
"### Evaluation"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "akplzrCbGFa3",
"colab_type": "text"
},
"source": [
"For binary classification, Hivemall offers [Log Loss](http://wiki.fast.ai/index.php/Log_Loss) and [AUC](http://gim.unmc.edu/dxtests/ROC3.htm) metric:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "uin0QSgo1dMk",
"colab_type": "code",
"colab": {}
},
"source": [
"spark.sql(\"CREATE TEMPORARY FUNCTION logloss AS 'hivemall.evaluation.LogarithmicLossUDAF'\")\n",
"spark.sql(\"CREATE TEMPORARY FUNCTION auc AS 'hivemall.evaluation.AUCUDAF'\");"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "kJ23r1fvEIUI",
"colab_type": "code",
"outputId": "693d0c11-2b60-495e-bc4f-741eabe46758",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 119
}
},
"source": [
"df_prediction.createOrReplaceTempView('prediction')\n",
"\n",
"spark.sql(\"\"\"\n",
"SELECT\n",
" auc(prob, expected) AS auc,\n",
" logloss(prob, expected) AS logloss\n",
"FROM (\n",
" SELECT prob, expected\n",
" FROM prediction\n",
" ORDER BY prob DESC\n",
") t\n",
"\"\"\").show()"
],
"execution_count": 24,
"outputs": [
{
"output_type": "stream",
"text": [
"+------------------+------------------+\n",
"| auc| logloss|\n",
"+------------------+------------------+\n",
"|0.6360049076499652|0.6456736373258979|\n",
"+------------------+------------------+\n",
"\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "OEC49sOFo44O",
"colab_type": "text"
},
"source": [
"## Other Classifiers"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "3NbgswUPxTq4",
"colab_type": "text"
},
"source": [
"### Factorization Machines"
]
},
{
"cell_type": "code",
"metadata": {
"id": "TKhSEc3FpUww",
"colab_type": "code",
"colab": {}
},
"source": [
"spark.sql(\"CREATE TEMPORARY FUNCTION train_fm AS 'hivemall.fm.FactorizationMachineUDTF'\");"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "PVQb92jVo-fa",
"colab_type": "code",
"outputId": "cb5beffd-0ece-4da5-fa97-30a3d0ce4ecc",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 359
}
},
"source": [
"spark.sql(\"\"\"\n",
"SELECT\n",
" train_fm(\n",
" features, \n",
" label,\n",
" '-classification -factor 30 -eta 0.001'\n",
" ) as (feature, Wi, Vij)\n",
"FROM\n",
" train\n",
"\"\"\").toPandas().head(10)"
],
"execution_count": 26,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>feature</th>\n",
" <th>Wi</th>\n",
" <th>Vij</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>-0.125796</td>\n",
" <td>None</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>state#SC</td>\n",
" <td>-0.002943</td>\n",
" <td>[-0.0018758076475933194, 0.06696834415197372, ...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>area_code#408</td>\n",
" <td>-0.043842</td>\n",
" <td>[-0.022054938599467278, 0.007548300549387932, ...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>vmail_message</td>\n",
" <td>-0.070304</td>\n",
" <td>[0.013247097842395306, 0.005205452907830477, 0...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>state#WV</td>\n",
" <td>-0.033708</td>\n",
" <td>[-0.07025326788425446, -0.14394021034240723, -...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>state#NC</td>\n",
" <td>0.002798</td>\n",
" <td>[0.06377897411584854, -0.09058145433664322, -0...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>state#KY</td>\n",
" <td>0.002730</td>\n",
" <td>[0.06627880781888962, -0.14982153475284576, -0...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>intl_charge</td>\n",
" <td>-0.042286</td>\n",
" <td>[-0.06048768013715744, 0.018183737993240356, 0...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>state#CO</td>\n",
" <td>0.019807</td>\n",
" <td>[0.03619685024023056, 0.09739864617586136, -0....</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>state#VA</td>\n",
" <td>-0.019707</td>\n",
" <td>[-0.09031106531620026, 0.14337880909442902, -0...</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" feature Wi Vij\n",
"0 0 -0.125796 None\n",
"1 state#SC -0.002943 [-0.0018758076475933194, 0.06696834415197372, ...\n",
"2 area_code#408 -0.043842 [-0.022054938599467278, 0.007548300549387932, ...\n",
"3 vmail_message -0.070304 [0.013247097842395306, 0.005205452907830477, 0...\n",
"4 state#WV -0.033708 [-0.07025326788425446, -0.14394021034240723, -...\n",
"5 state#NC 0.002798 [0.06377897411584854, -0.09058145433664322, -0...\n",
"6 state#KY 0.002730 [0.06627880781888962, -0.14982153475284576, -0...\n",
"7 intl_charge -0.042286 [-0.06048768013715744, 0.018183737993240356, 0...\n",
"8 state#CO 0.019807 [0.03619685024023056, 0.09739864617586136, -0....\n",
"9 state#VA -0.019707 [-0.09031106531620026, 0.14337880909442902, -0..."
]
},
"metadata": {
"tags": []
},
"execution_count": 26
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "YpnpPcmKrVSG",
"colab_type": "text"
},
"source": [
"### RandomFores"
]
},
{
"cell_type": "code",
"metadata": {
"id": "FDm4vJj-rYJl",
"colab_type": "code",
"colab": {}
},
"source": [
"spark.sql(\"CREATE TEMPORARY FUNCTION feature_hashing AS 'hivemall.ftvec.hashing.FeatureHashingUDF'\")\n",
"spark.sql(\"CREATE TEMPORARY FUNCTION tree_predict AS 'hivemall.smile.tools.TreePredictUDF'\")\n",
"spark.sql(\"CREATE TEMPORARY FUNCTION rf_ensemble AS 'hivemall.smile.tools.RandomForestEnsembleUDAF'\")\n",
"spark.sql(\"CREATE TEMPORARY FUNCTION train_randomforest_classifier AS 'hivemall.smile.classification.RandomForestClassifierUDTF'\")\n",
"spark.sql(\"CREATE TEMPORARY FUNCTION tree_export AS 'hivemall.smile.tools.TreeExportUDF'\");"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "Zwkh8N9CxlcB",
"colab_type": "text"
},
"source": [
"Training:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "Et3De7pwrX5w",
"colab_type": "code",
"outputId": "d74801ed-f71a-430a-f6fd-aeee1348baee",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 374
}
},
"source": [
"df_rf_model = spark.sql(\"\"\"\n",
"SELECT\n",
" train_randomforest_classifier(\n",
" feature_hashing(features),\n",
" label,\n",
" '-trees 50 -seed 71' -- hyperparameters\n",
" ) as (model_id, model_weight, model, var_importance, oob_errors, oob_tests)\n",
"FROM\n",
" train\n",
"\"\"\")\n",
"\n",
"df_rf_model.toPandas().head()"
],
"execution_count": 28,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>model_id</th>\n",
" <th>model_weight</th>\n",
" <th>model</th>\n",
" <th>var_importance</th>\n",
" <th>oob_errors</th>\n",
" <th>oob_tests</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>a3967714-914e-4267-b3f0-788fbef8225a</td>\n",
" <td>0.837838</td>\n",
" <td>I?XPI/%dsLd{LdDfaZTPM:)_@^i12w&lt;Ba)_j40icEw3jYE...</td>\n",
" <td>{15900165: 1.8062073885289325}</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>814a7805-f1b2-4799-a66a-722f96233bc5</td>\n",
" <td>0.816498</td>\n",
" <td>I?{Pt:IYsLd{3Ze;DYt:3%}g`]F:N}gYMLrRqViFPHu._X...</td>\n",
" <td>{15900165: 2.7499708167499106}</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>bea6eef6-d8d8-43ba-861e-217386e32be4</td>\n",
" <td>0.851724</td>\n",
" <td>I?{PI/%dsLd{2Yw+&lt;LzSF`agXnUPzzou^7Yl[Pws[y~yzD...</td>\n",
" <td>{15900165: 2.4154606004599684}</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>cfb19b11-4afb-4d5a-a2de-b3d1e940a098</td>\n",
" <td>0.807692</td>\n",
" <td>I?{P)`IYwL$|yz6!AGW.%p~UV=-B)WoH=;0c8uOOj+{BiM...</td>\n",
" <td>{15900165: 3.886217162213024}</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>efe91459-c0d5-4acf-953a-3c62c35f8f0d</td>\n",
" <td>0.824503</td>\n",
" <td>I?hRO|IYsL$|+Z&gt;ZwzRhE`&gt;&lt;L`+-vZ&gt;D]1UblfV48c=Cl4...</td>\n",
" <td>{15900165: 3.422917848419591}</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" model_id model_weight ... oob_errors oob_tests\n",
"0 a3967714-914e-4267-b3f0-788fbef8225a 0.837838 ... 0 0\n",
"1 814a7805-f1b2-4799-a66a-722f96233bc5 0.816498 ... 0 0\n",
"2 bea6eef6-d8d8-43ba-861e-217386e32be4 0.851724 ... 0 0\n",
"3 cfb19b11-4afb-4d5a-a2de-b3d1e940a098 0.807692 ... 0 0\n",
"4 efe91459-c0d5-4acf-953a-3c62c35f8f0d 0.824503 ... 0 0\n",
"\n",
"[5 rows x 6 columns]"
]
},
"metadata": {
"tags": []
},
"execution_count": 28
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "MXMqyYVVxoFS",
"colab_type": "text"
},
"source": [
"Prediction:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "z8klFXa9wJv8",
"colab_type": "code",
"outputId": "c23c354d-f18e-42d6-bc18-8f910259f5fb",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 359
}
},
"source": [
"df_rf_model.createOrReplaceTempView('rf_model')\n",
"\n",
"spark.sql(\"\"\"\n",
"SELECT\n",
" phone,\n",
" rf_ensemble(predicted.value, predicted.posteriori, model_weight) as predicted\n",
"FROM (\n",
" SELECT\n",
" t.phone,\n",
" m.model_weight,\n",
" tree_predict(m.model_id, m.model, feature_hashing(t.features), true) as predicted\n",
" FROM\n",
" test t\n",
" CROSS JOIN\n",
" rf_model m\n",
") t1\n",
"GROUP BY\n",
" 1\n",
"\"\"\").toPandas().head(10)"
],
"execution_count": 29,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>phone</th>\n",
" <th>predicted</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>366-3944</td>\n",
" <td>(0, 1.0, [1.0, 0.0])</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>378-4013</td>\n",
" <td>(0, 0.9572407298262462, [0.9572407298262462, 0...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>385-9744</td>\n",
" <td>(0, 1.0, [1.0, 0.0])</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>408-4529</td>\n",
" <td>(0, 0.8680956719420105, [0.8680956719420105, 0...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>355-6422</td>\n",
" <td>(0, 1.0, [1.0, 0.0])</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>373-2053</td>\n",
" <td>(0, 0.803639476792548, [0.803639476792548, 0.1...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>341-1916</td>\n",
" <td>(0, 0.9793229251609381, [0.9793229251609381, 0...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>368-8972</td>\n",
" <td>(0, 1.0, [1.0, 0.0])</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>383-4641</td>\n",
" <td>(0, 1.0, [1.0, 0.0])</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>386-3796</td>\n",
" <td>(0, 0.6022822895905967, [0.6022822895905967, 0...</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" phone predicted\n",
"0 366-3944 (0, 1.0, [1.0, 0.0])\n",
"1 378-4013 (0, 0.9572407298262462, [0.9572407298262462, 0...\n",
"2 385-9744 (0, 1.0, [1.0, 0.0])\n",
"3 408-4529 (0, 0.8680956719420105, [0.8680956719420105, 0...\n",
"4 355-6422 (0, 1.0, [1.0, 0.0])\n",
"5 373-2053 (0, 0.803639476792548, [0.803639476792548, 0.1...\n",
"6 341-1916 (0, 0.9793229251609381, [0.9793229251609381, 0...\n",
"7 368-8972 (0, 1.0, [1.0, 0.0])\n",
"8 383-4641 (0, 1.0, [1.0, 0.0])\n",
"9 386-3796 (0, 0.6022822895905967, [0.6022822895905967, 0..."
]
},
"metadata": {
"tags": []
},
"execution_count": 29
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "LOOELmsox29k",
"colab_type": "text"
},
"source": [
"Visualization:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "Etxef4Ryx36_",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 204
},
"outputId": "5e0d39e0-1197-40ec-978d-03b1003f5c1f"
},
"source": [
"df_rf_model_viz = spark.sql(\"\"\"\n",
"SELECT\n",
" tree_export(model, '-type javascript') as js,\n",
" tree_export(model, '-type graphviz') as dot\n",
"FROM\n",
" rf_model\n",
"\"\"\")\n",
"\n",
"df_rf_model_viz.toPandas().head()"
],
"execution_count": 30,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>js</th>\n",
" <th>dot</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>if( x[15900165] &lt;= 6.225 ) {\\n if( x[15900165...</td>\n",
" <td>digraph Tree {\\n node [shape=box, style=\"fille...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>if( x[15900165] &lt;= 5.755 ) {\\n if( x[15900165...</td>\n",
" <td>digraph Tree {\\n node [shape=box, style=\"fille...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>if( x[15900165] &lt;= 5.395 ) {\\n if( x[15900165...</td>\n",
" <td>digraph Tree {\\n node [shape=box, style=\"fille...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>if( x[15900165] &lt;= 3.74 ) {\\n if( x[15900165]...</td>\n",
" <td>digraph Tree {\\n node [shape=box, style=\"fille...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>if( x[15900165] &lt;= 6.015 ) {\\n if( x[15900165...</td>\n",
" <td>digraph Tree {\\n node [shape=box, style=\"fille...</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" js dot\n",
"0 if( x[15900165] <= 6.225 ) {\\n if( x[15900165... digraph Tree {\\n node [shape=box, style=\"fille...\n",
"1 if( x[15900165] <= 5.755 ) {\\n if( x[15900165... digraph Tree {\\n node [shape=box, style=\"fille...\n",
"2 if( x[15900165] <= 5.395 ) {\\n if( x[15900165... digraph Tree {\\n node [shape=box, style=\"fille...\n",
"3 if( x[15900165] <= 3.74 ) {\\n if( x[15900165]... digraph Tree {\\n node [shape=box, style=\"fille...\n",
"4 if( x[15900165] <= 6.015 ) {\\n if( x[15900165... digraph Tree {\\n node [shape=box, style=\"fille..."
]
},
"metadata": {
"tags": []
},
"execution_count": 30
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "jQ54LDQlyHxN",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"outputId": "f169373a-bab3-49a2-c37a-c9bd67932b24"
},
"source": [
"viz_sample_row = df_rf_model_viz.limit(1).collect()[0]\n",
"\n",
"print(viz_sample_row.js)"
],
"execution_count": 31,
"outputs": [
{
"output_type": "stream",
"text": [
"if( x[15900165] <= 6.225 ) {\n",
" if( x[15900165] <= 5.425000000000001 ) {\n",
" if( x[15900165] <= 4.85 ) {\n",
" if( x[15900165] <= 3.3499999999999996 ) {\n",
" 0;\n",
" } else {\n",
" 0;\n",
" }\n",
" } else {\n",
" 0;\n",
" }\n",
" } else {\n",
" if( x[15900165] <= 6.02 ) {\n",
" 0;\n",
" } else {\n",
" 0;\n",
" }\n",
" }\n",
"} else {\n",
" if( x[15900165] <= 6.25 ) {\n",
" 1;\n",
" } else {\n",
" if( x[15900165] <= 8.41 ) {\n",
" if( x[15900165] <= 8.395 ) {\n",
" if( x[15900165] <= 6.359999999999999 ) {\n",
" 0;\n",
" } else {\n",
" if( x[15900165] <= 6.445 ) {\n",
" 0;\n",
" } else {\n",
" if( x[15900165] <= 6.735 ) {\n",
" if( x[15900165] <= 6.615 ) {\n",
" 0;\n",
" } else {\n",
" 0;\n",
" }\n",
" } else {\n",
" if( x[15900165] <= 6.745 ) {\n",
" 1;\n",
" } else {\n",
" if( x[15900165] <= 6.825 ) {\n",
" 0;\n",
" } else {\n",
" if( x[15900165] <= 6.835 ) {\n",
" 1;\n",
" } else {\n",
" if( x[15900165] <= 7.545 ) {\n",
" if( x[15900165] <= 6.904999999999999 ) {\n",
" if( x[15900165] <= 6.85 ) {\n",
" 0;\n",
" } else {\n",
" 0;\n",
" }\n",
" } else {\n",
" if( x[15900165] <= 7.3100000000000005 ) {\n",
" if( x[15900165] <= 7.215 ) {\n",
" 0;\n",
" } else {\n",
" 0;\n",
" }\n",
" } else {\n",
" if( x[15900165] <= 7.345 ) {\n",
" 0;\n",
" } else {\n",
" if( x[15900165] <= 7.505 ) {\n",
" 0;\n",
" } else {\n",
" 0;\n",
" }\n",
" }\n",
" }\n",
" }\n",
" } else {\n",
" if( x[15900165] <= 7.555 ) {\n",
" 1;\n",
" } else {\n",
" if( x[15900165] <= 7.63 ) {\n",
" 0;\n",
" } else {\n",
" if( x[15900165] <= 7.655 ) {\n",
" 1;\n",
" } else {\n",
" if( x[15900165] <= 7.755 ) {\n",
" if( x[15900165] <= 7.7 ) {\n",
" if( x[15900165] <= 7.6850000000000005 ) {\n",
" 0;\n",
" } else {\n",
" 0;\n",
" }\n",
" } else {\n",
" if( x[15900165] <= 7.725 ) {\n",
" 0;\n",
" } else {\n",
" 0;\n",
" }\n",
" }\n",
" } else {\n",
" if( x[15900165] <= 7.955 ) {\n",
" if( x[15900165] <= 7.795 ) {\n",
" 0;\n",
" } else {\n",
" 0;\n",
" }\n",
" } else {\n",
" if( x[15900165] <= 8.245000000000001 ) {\n",
" if( x[15900165] <= 8.065000000000001 ) {\n",
" 0;\n",
" } else {\n",
" if( x[15900165] <= 8.16 ) {\n",
" 0;\n",
" } else {\n",
" 0;\n",
" }\n",
" }\n",
" } else {\n",
" if( x[15900165] <= 8.285 ) {\n",
" 0;\n",
" } else {\n",
" 0;\n",
" }\n",
" }\n",
" }\n",
" }\n",
" }\n",
" }\n",
" }\n",
" }\n",
" }\n",
" }\n",
" }\n",
" }\n",
" }\n",
" }\n",
" } else {\n",
" 1;\n",
" }\n",
" } else {\n",
" if( x[15900165] <= 8.635000000000002 ) {\n",
" if( x[15900165] <= 8.535 ) {\n",
" 0;\n",
" } else {\n",
" 0;\n",
" }\n",
" } else {\n",
" if( x[15900165] <= 11.605 ) {\n",
" if( x[15900165] <= 11.465 ) {\n",
" if( x[15900165] <= 11.065000000000001 ) {\n",
" if( x[15900165] <= 10.085 ) {\n",
" if( x[15900165] <= 10.065000000000001 ) {\n",
" if( x[15900165] <= 9.745000000000001 ) {\n",
" if( x[15900165] <= 9.735 ) {\n",
" if( x[15900165] <= 9.195 ) {\n",
" if( x[15900165] <= 8.955 ) {\n",
" if( x[15900165] <= 8.875 ) {\n",
" if( x[15900165] <= 8.735 ) {\n",
" if( x[15900165] <= 8.684999999999999 ) {\n",
" if( x[15900165] <= 8.655000000000001 ) {\n",
" 0;\n",
" } else {\n",
" 0;\n",
" }\n",
" } else {\n",
" if( x[15900165] <= 8.695 ) {\n",
" 1;\n",
" } else {\n",
" if( x[15900165] <= 8.705 ) {\n",
" 0;\n",
" } else {\n",
" if( x[15900165] <= 8.715 ) {\n",
" 0;\n",
" } else {\n",
" 0;\n",
" }\n",
" }\n",
" }\n",
" }\n",
" } else {\n",
" if( x[15900165] <= 8.774999999999999 ) {\n",
" 0;\n",
" } else {\n",
" 0;\n",
" }\n",
" }\n",
" } else {\n",
" if( x[15900165] <= 8.94 ) {\n",
" 0;\n",
" } else {\n",
" 0;\n",
" }\n",
" }\n",
" } else {\n",
" 0;\n",
" }\n",
" } else {\n",
" if( x[15900165] <= 9.225000000000001 ) {\n",
" 0;\n",
" } else {\n",
" if( x[15900165] <= 9.385000000000002 ) {\n",
" if( x[15900165] <= 9.364999999999998 ) {\n",
" if( x[15900165] <= 9.24 ) {\n",
" 0;\n",
" } else {\n",
" 0;\n",
" }\n",
" } else {\n",
" 0;\n",
" }\n",
" } else {\n",
" if( x[15900165] <= 9.415 ) {\n",
" 1;\n",
" } else {\n",
" if( x[15900165] <= 9.44 ) {\n",
" 0;\n",
" } else {\n",
" if( x[15900165] <= 9.71 ) {\n",
" if( x[15900165] <= 9.645 ) {\n",
" if( x[15900165] <= 9.455 ) {\n",
" 0;\n",
" } else {\n",
" 0;\n",
" }\n",
" } else {\n",
" 0;\n",
" }\n",
" } else {\n",
" 0;\n",
" }\n",
" }\n",
" }\n",
" }\n",
" }\n",
" }\n",
" } else {\n",
" 1;\n",
" }\n",
" } else {\n",
" if( x[15900165] <= 9.865 ) {\n",
" 0;\n",
" } else {\n",
" if( x[15900165] <= 10.024999999999999 ) {\n",
" if( x[15900165] <= 9.945 ) {\n",
" 0;\n",
" } else {\n",
" 0;\n",
" }\n",
" } else {\n",
" 0;\n",
" }\n",
" }\n",
" }\n",
" } else {\n",
" 1;\n",
" }\n",
" } else {\n",
" if( x[15900165] <= 10.295 ) {\n",
" 0;\n",
" } else {\n",
" if( x[15900165] <= 10.305 ) {\n",
" 1;\n",
" } else {\n",
" if( x[15900165] <= 10.945 ) {\n",
" if( x[15900165] <= 10.93 ) {\n",
" if( x[15900165] <= 10.565000000000001 ) {\n",
" if( x[15900165] <= 10.375 ) {\n",
" 0;\n",
" } else {\n",
" if( x[15900165] <= 10.395 ) {\n",
" 1;\n",
" } else {\n",
" 0;\n",
" }\n",
" }\n",
" } else {\n",
" if( x[15900165] <= 10.72 ) {\n",
" 0;\n",
" } else {\n",
" if( x[15900165] <= 10.870000000000001 ) {\n",
" 0;\n",
" } else {\n",
" 0;\n",
" }\n",
" }\n",
" }\n",
" } else {\n",
" 1;\n",
" }\n",
" } else {\n",
" 0;\n",
" }\n",
" }\n",
" }\n",
" }\n",
" } else {\n",
" if( x[15900165] <= 11.075 ) {\n",
" 1;\n",
" } else {\n",
" if( x[15900165] <= 11.1 ) {\n",
" 0;\n",
" } else {\n",
" if( x[15900165] <= 11.165 ) {\n",
" 0;\n",
" } else {\n",
" if( x[15900165] <= 11.285 ) {\n",
" 0;\n",
" } else {\n",
" 0;\n",
" }\n",
" }\n",
" }\n",
" }\n",
" }\n",
" } else {\n",
" if( x[15900165] <= 11.51 ) {\n",
" 1;\n",
" } else {\n",
" 0;\n",
" }\n",
" }\n",
" } else {\n",
" if( x[15900165] <= 12.274999999999999 ) {\n",
" if( x[15900165] <= 11.934999999999999 ) {\n",
" if( x[15900165] <= 11.925 ) {\n",
" 0;\n",
" } else {\n",
" 1;\n",
" }\n",
" } else {\n",
" 0;\n",
" }\n",
" } else {\n",
" if( x[15900165] <= 12.575 ) {\n",
" if( x[15900165] <= 12.485 ) {\n",
" if( x[15900165] <= 12.415 ) {\n",
" 0;\n",
" } else {\n",
" 0;\n",
" }\n",
" } else {\n",
" 1;\n",
" }\n",
" } else {\n",
" if( x[15900165] <= 12.780000000000001 ) {\n",
" 0;\n",
" } else {\n",
" if( x[15900165] <= 13.43 ) {\n",
" if( x[15900165] <= 13.17 ) {\n",
" 0;\n",
" } else {\n",
" if( x[15900165] <= 13.254999999999999 ) {\n",
" 1;\n",
" } else {\n",
" if( x[15900165] <= 13.295 ) {\n",
" 0;\n",
" } else {\n",
" 1;\n",
" }\n",
" }\n",
" }\n",
" } else {\n",
" if( x[15900165] <= 13.645 ) {\n",
" 0;\n",
" } else {\n",
" if( x[15900165] <= 14.11 ) {\n",
" 0;\n",
" } else {\n",
" 0;\n",
" }\n",
" }\n",
" }\n",
" }\n",
" }\n",
" }\n",
" }\n",
" }\n",
" }\n",
" }\n",
"}\n",
"\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "sv3kat5YyjOi",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"outputId": "c3844389-4e2e-429f-f6af-c5d1d489cbd6"
},
"source": [
"from graphviz import Source\n",
"\n",
"Source(viz_sample_row.dot)"
],
"execution_count": 32,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<graphviz.files.Source at 0x7f4f020fee48>"
],
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n -->\n<!-- Title: Tree Pages: 1 -->\n<svg width=\"5077pt\" height=\"1412pt\"\n viewBox=\"0.00 0.00 5077.29 1412.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 1408)\">\n<title>Tree</title>\n<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-1408 5073.2884,-1408 5073.2884,4 -4,4\"/>\n<!-- 0 -->\n<g id=\"node1\" class=\"node\">\n<title>0</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M995.6442,-1404C995.6442,-1404 831.6442,-1404 831.6442,-1404 825.6442,-1404 819.6442,-1398 819.6442,-1392 819.6442,-1392 819.6442,-1380 819.6442,-1380 819.6442,-1374 825.6442,-1368 831.6442,-1368 831.6442,-1368 995.6442,-1368 995.6442,-1368 1001.6442,-1368 1007.6442,-1374 1007.6442,-1380 1007.6442,-1380 1007.6442,-1392 1007.6442,-1392 1007.6442,-1398 1001.6442,-1404 995.6442,-1404\"/>\n<text text-anchor=\"start\" x=\"827.6442\" y=\"-1382.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 6.225</text>\n</g>\n<!-- 1 -->\n<g id=\"node2\" class=\"node\">\n<title>1</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M920.1442,-1332C920.1442,-1332 657.1442,-1332 657.1442,-1332 651.1442,-1332 645.1442,-1326 645.1442,-1320 645.1442,-1320 645.1442,-1308 645.1442,-1308 645.1442,-1302 651.1442,-1296 657.1442,-1296 657.1442,-1296 920.1442,-1296 920.1442,-1296 926.1442,-1296 932.1442,-1302 932.1442,-1308 932.1442,-1308 932.1442,-1320 932.1442,-1320 932.1442,-1326 926.1442,-1332 920.1442,-1332\"/>\n<text text-anchor=\"start\" x=\"653.1442\" y=\"-1310.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 5.425000000000001</text>\n</g>\n<!-- 0&#45;&gt;1 -->\n<g id=\"edge1\" class=\"edge\">\n<title>0&#45;&gt;1</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M882.1014,-1367.8314C865.9651,-1358.5368 846.1456,-1347.1208 828.9169,-1337.1971\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"830.5891,-1334.1212 820.1769,-1332.1628 827.0952,-1340.187 830.5891,-1334.1212\"/>\n<text text-anchor=\"middle\" x=\"826.6718\" y=\"-1352.6044\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">True</text>\n</g>\n<!-- 10 -->\n<g id=\"node11\" class=\"node\">\n<title>10</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M1117.1442,-1332C1117.1442,-1332 962.1442,-1332 962.1442,-1332 956.1442,-1332 950.1442,-1326 950.1442,-1320 950.1442,-1320 950.1442,-1308 950.1442,-1308 950.1442,-1302 956.1442,-1296 962.1442,-1296 962.1442,-1296 1117.1442,-1296 1117.1442,-1296 1123.1442,-1296 1129.1442,-1302 1129.1442,-1308 1129.1442,-1308 1129.1442,-1320 1129.1442,-1320 1129.1442,-1326 1123.1442,-1332 1117.1442,-1332\"/>\n<text text-anchor=\"start\" x=\"958.1442\" y=\"-1310.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 6.25</text>\n</g>\n<!-- 0&#45;&gt;10 -->\n<g id=\"edge10\" class=\"edge\">\n<title>0&#45;&gt;10</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M945.4393,-1367.8314C961.7047,-1358.5368 981.6828,-1347.1208 999.0492,-1337.1971\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1000.9133,-1340.1631 1007.8592,-1332.1628 997.4403,-1334.0854 1000.9133,-1340.1631\"/>\n<text text-anchor=\"middle\" x=\"1001.2813\" y=\"-1352.5819\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">False</text>\n</g>\n<!-- 2 -->\n<g id=\"node3\" class=\"node\">\n<title>2</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M708.1442,-1260C708.1442,-1260 553.1442,-1260 553.1442,-1260 547.1442,-1260 541.1442,-1254 541.1442,-1248 541.1442,-1248 541.1442,-1236 541.1442,-1236 541.1442,-1230 547.1442,-1224 553.1442,-1224 553.1442,-1224 708.1442,-1224 708.1442,-1224 714.1442,-1224 720.1442,-1230 720.1442,-1236 720.1442,-1236 720.1442,-1248 720.1442,-1248 720.1442,-1254 714.1442,-1260 708.1442,-1260\"/>\n<text text-anchor=\"start\" x=\"549.1442\" y=\"-1238.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 4.85</text>\n</g>\n<!-- 1&#45;&gt;2 -->\n<g id=\"edge2\" class=\"edge\">\n<title>1&#45;&gt;2</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M748.7741,-1295.8314C727.7365,-1286.2446 701.7459,-1274.4008 679.5046,-1264.2655\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"680.7786,-1260.9999 670.2275,-1260.038 677.8759,-1267.3697 680.7786,-1260.9999\"/>\n</g>\n<!-- 7 -->\n<g id=\"node8\" class=\"node\">\n<title>7</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M905.1442,-1260C905.1442,-1260 750.1442,-1260 750.1442,-1260 744.1442,-1260 738.1442,-1254 738.1442,-1248 738.1442,-1248 738.1442,-1236 738.1442,-1236 738.1442,-1230 744.1442,-1224 750.1442,-1224 750.1442,-1224 905.1442,-1224 905.1442,-1224 911.1442,-1224 917.1442,-1230 917.1442,-1236 917.1442,-1236 917.1442,-1248 917.1442,-1248 917.1442,-1254 911.1442,-1260 905.1442,-1260\"/>\n<text text-anchor=\"start\" x=\"746.1442\" y=\"-1238.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 6.02</text>\n</g>\n<!-- 1&#45;&gt;7 -->\n<g id=\"edge7\" class=\"edge\">\n<title>1&#45;&gt;7</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M798.4855,-1295.8314C802.8399,-1287.7925 808.054,-1278.1666 812.8611,-1269.2918\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"815.985,-1270.8732 817.6703,-1260.4133 809.8299,-1267.5392 815.985,-1270.8732\"/>\n</g>\n<!-- 3 -->\n<g id=\"node4\" class=\"node\">\n<title>3</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M547.1442,-1188C547.1442,-1188 276.1442,-1188 276.1442,-1188 270.1442,-1188 264.1442,-1182 264.1442,-1176 264.1442,-1176 264.1442,-1164 264.1442,-1164 264.1442,-1158 270.1442,-1152 276.1442,-1152 276.1442,-1152 547.1442,-1152 547.1442,-1152 553.1442,-1152 559.1442,-1158 559.1442,-1164 559.1442,-1164 559.1442,-1176 559.1442,-1176 559.1442,-1182 553.1442,-1188 547.1442,-1188\"/>\n<text text-anchor=\"start\" x=\"272.1442\" y=\"-1166.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 3.3499999999999996</text>\n</g>\n<!-- 2&#45;&gt;3 -->\n<g id=\"edge3\" class=\"edge\">\n<title>2&#45;&gt;3</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M575.6639,-1223.9243C545.465,-1213.9959 507.8384,-1201.6255 476.2437,-1191.2382\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"477.24,-1187.8815 466.6471,-1188.0831 475.0537,-1194.5313 477.24,-1187.8815\"/>\n</g>\n<!-- 6 -->\n<g id=\"node7\" class=\"node\">\n<title>6</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"642.6442\" cy=\"-1170\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"600.1442\" y=\"-1166.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 2&#45;&gt;6 -->\n<g id=\"edge6\" class=\"edge\">\n<title>2&#45;&gt;6</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M633.6723,-1223.8314C634.9557,-1216.131 636.4818,-1206.9743 637.9081,-1198.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"641.3836,-1198.8526 639.5753,-1188.4133 634.4788,-1197.7018 641.3836,-1198.8526\"/>\n</g>\n<!-- 4 -->\n<g id=\"node5\" class=\"node\">\n<title>4</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"336.6442\" cy=\"-1098\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"294.1442\" y=\"-1094.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 3&#45;&gt;4 -->\n<g id=\"edge4\" class=\"edge\">\n<title>3&#45;&gt;4</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M392.7185,-1151.8314C383.451,-1142.9346 372.1587,-1132.0939 362.1431,-1122.4789\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"364.4254,-1119.8182 354.7876,-1115.4177 359.5777,-1124.8679 364.4254,-1119.8182\"/>\n</g>\n<!-- 5 -->\n<g id=\"node6\" class=\"node\">\n<title>5</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"485.6442\" cy=\"-1098\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"443.1442\" y=\"-1094.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 3&#45;&gt;5 -->\n<g id=\"edge5\" class=\"edge\">\n<title>3&#45;&gt;5</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M430.3175,-1151.8314C439.4614,-1142.9346 450.6032,-1132.0939 460.4853,-1122.4789\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"463.0161,-1124.8998 467.7426,-1115.4177 458.1346,-1119.8827 463.0161,-1124.8998\"/>\n</g>\n<!-- 8 -->\n<g id=\"node9\" class=\"node\">\n<title>8</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"815.6442\" cy=\"-1170\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"773.1442\" y=\"-1166.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 7&#45;&gt;8 -->\n<g id=\"edge8\" class=\"edge\">\n<title>7&#45;&gt;8</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M824.6161,-1223.8314C823.3327,-1216.131 821.8066,-1206.9743 820.3803,-1198.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"823.8095,-1197.7018 818.7131,-1188.4133 816.9047,-1198.8526 823.8095,-1197.7018\"/>\n</g>\n<!-- 9 -->\n<g id=\"node10\" class=\"node\">\n<title>9</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"964.6442\" cy=\"-1170\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"922.1442\" y=\"-1166.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 7&#45;&gt;9 -->\n<g id=\"edge9\" class=\"edge\">\n<title>7&#45;&gt;9</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M862.2151,-1223.8314C881.2387,-1213.8335 904.9332,-1201.3809 924.74,-1190.9715\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"926.6003,-1193.9479 933.824,-1186.1975 923.3437,-1187.7515 926.6003,-1193.9479\"/>\n</g>\n<!-- 11 -->\n<g id=\"node12\" class=\"node\">\n<title>11</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"1020.6442\" cy=\"-1242\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"978.1442\" y=\"-1238.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 1</text>\n</g>\n<!-- 10&#45;&gt;11 -->\n<g id=\"edge11\" class=\"edge\">\n<title>10&#45;&gt;11</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M1034.8497,-1295.8314C1032.7953,-1288.0463 1030.3481,-1278.7729 1028.0686,-1270.1347\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1031.439,-1269.1892 1025.5032,-1260.4133 1024.6707,-1270.9753 1031.439,-1269.1892\"/>\n</g>\n<!-- 12 -->\n<g id=\"node13\" class=\"node\">\n<title>12</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M1271.1442,-1260C1271.1442,-1260 1116.1442,-1260 1116.1442,-1260 1110.1442,-1260 1104.1442,-1254 1104.1442,-1248 1104.1442,-1248 1104.1442,-1236 1104.1442,-1236 1104.1442,-1230 1110.1442,-1224 1116.1442,-1224 1116.1442,-1224 1271.1442,-1224 1271.1442,-1224 1277.1442,-1224 1283.1442,-1230 1283.1442,-1236 1283.1442,-1236 1283.1442,-1248 1283.1442,-1248 1283.1442,-1254 1277.1442,-1260 1271.1442,-1260\"/>\n<text text-anchor=\"start\" x=\"1112.1442\" y=\"-1238.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 8.41</text>\n</g>\n<!-- 10&#45;&gt;12 -->\n<g id=\"edge12\" class=\"edge\">\n<title>10&#45;&gt;12</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M1078.5049,-1295.8314C1098.9184,-1286.2874 1124.1165,-1274.5065 1145.7302,-1264.4013\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1147.4865,-1267.4439 1155.0629,-1260.038 1144.5217,-1261.1027 1147.4865,-1267.4439\"/>\n</g>\n<!-- 13 -->\n<g id=\"node14\" class=\"node\">\n<title>13</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M1250.6442,-1188C1250.6442,-1188 1086.6442,-1188 1086.6442,-1188 1080.6442,-1188 1074.6442,-1182 1074.6442,-1176 1074.6442,-1176 1074.6442,-1164 1074.6442,-1164 1074.6442,-1158 1080.6442,-1152 1086.6442,-1152 1086.6442,-1152 1250.6442,-1152 1250.6442,-1152 1256.6442,-1152 1262.6442,-1158 1262.6442,-1164 1262.6442,-1164 1262.6442,-1176 1262.6442,-1176 1262.6442,-1182 1256.6442,-1188 1250.6442,-1188\"/>\n<text text-anchor=\"start\" x=\"1082.6442\" y=\"-1166.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 8.395</text>\n</g>\n<!-- 12&#45;&gt;13 -->\n<g id=\"edge13\" class=\"edge\">\n<title>12&#45;&gt;13</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M1187.3356,-1223.8314C1184.6325,-1216.0463 1181.4126,-1206.7729 1178.4132,-1198.1347\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1181.6242,-1196.7119 1175.0377,-1188.4133 1175.0115,-1199.0081 1181.6242,-1196.7119\"/>\n</g>\n<!-- 70 -->\n<g id=\"node71\" class=\"node\">\n<title>70</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M2420.1442,-1188C2420.1442,-1188 2157.1442,-1188 2157.1442,-1188 2151.1442,-1188 2145.1442,-1182 2145.1442,-1176 2145.1442,-1176 2145.1442,-1164 2145.1442,-1164 2145.1442,-1158 2151.1442,-1152 2157.1442,-1152 2157.1442,-1152 2420.1442,-1152 2420.1442,-1152 2426.1442,-1152 2432.1442,-1158 2432.1442,-1164 2432.1442,-1164 2432.1442,-1176 2432.1442,-1176 2432.1442,-1182 2426.1442,-1188 2420.1442,-1188\"/>\n<text text-anchor=\"start\" x=\"2153.1442\" y=\"-1166.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 8.635000000000002</text>\n</g>\n<!-- 12&#45;&gt;70 -->\n<g id=\"edge70\" class=\"edge\">\n<title>12&#45;&gt;70</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M1283.2526,-1236.1079C1469.9752,-1223.8303 1902.5972,-1195.3839 2134.7876,-1180.1166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2135.2599,-1183.5932 2145.0086,-1179.4445 2134.8005,-1176.6083 2135.2599,-1183.5932\"/>\n</g>\n<!-- 14 -->\n<g id=\"node15\" class=\"node\">\n<title>14</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M962.1442,-1116C962.1442,-1116 699.1442,-1116 699.1442,-1116 693.1442,-1116 687.1442,-1110 687.1442,-1104 687.1442,-1104 687.1442,-1092 687.1442,-1092 687.1442,-1086 693.1442,-1080 699.1442,-1080 699.1442,-1080 962.1442,-1080 962.1442,-1080 968.1442,-1080 974.1442,-1086 974.1442,-1092 974.1442,-1092 974.1442,-1104 974.1442,-1104 974.1442,-1110 968.1442,-1116 962.1442,-1116\"/>\n<text text-anchor=\"start\" x=\"695.1442\" y=\"-1094.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 6.359999999999999</text>\n</g>\n<!-- 13&#45;&gt;14 -->\n<g id=\"edge14\" class=\"edge\">\n<title>13&#45;&gt;14</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M1083.7888,-1151.9243C1035.4816,-1141.634 974.8597,-1128.7205 925.0518,-1118.1105\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"925.7511,-1114.681 915.2413,-1116.0207 924.2926,-1121.5274 925.7511,-1114.681\"/>\n</g>\n<!-- 69 -->\n<g id=\"node70\" class=\"node\">\n<title>69</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"1168.6442\" cy=\"-1098\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"1126.1442\" y=\"-1094.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 1</text>\n</g>\n<!-- 13&#45;&gt;69 -->\n<g id=\"edge69\" class=\"edge\">\n<title>13&#45;&gt;69</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M1168.6442,-1151.8314C1168.6442,-1144.131 1168.6442,-1134.9743 1168.6442,-1126.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1172.1443,-1126.4132 1168.6442,-1116.4133 1165.1443,-1126.4133 1172.1443,-1126.4132\"/>\n</g>\n<!-- 15 -->\n<g id=\"node16\" class=\"node\">\n<title>15</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"652.6442\" cy=\"-1026\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"610.1442\" y=\"-1022.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 14&#45;&gt;15 -->\n<g id=\"edge15\" class=\"edge\">\n<title>14&#45;&gt;15</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M785.7273,-1079.8314C759.3102,-1069.1458 725.961,-1055.6562 699.2553,-1044.854\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"700.3249,-1041.5112 689.7421,-1041.0059 697.7,-1048.0004 700.3249,-1041.5112\"/>\n</g>\n<!-- 16 -->\n<g id=\"node17\" class=\"node\">\n<title>16</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M912.6442,-1044C912.6442,-1044 748.6442,-1044 748.6442,-1044 742.6442,-1044 736.6442,-1038 736.6442,-1032 736.6442,-1032 736.6442,-1020 736.6442,-1020 736.6442,-1014 742.6442,-1008 748.6442,-1008 748.6442,-1008 912.6442,-1008 912.6442,-1008 918.6442,-1008 924.6442,-1014 924.6442,-1020 924.6442,-1020 924.6442,-1032 924.6442,-1032 924.6442,-1038 918.6442,-1044 912.6442,-1044\"/>\n<text text-anchor=\"start\" x=\"744.6442\" y=\"-1022.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 6.445</text>\n</g>\n<!-- 14&#45;&gt;16 -->\n<g id=\"edge16\" class=\"edge\">\n<title>14&#45;&gt;16</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M830.6442,-1079.8314C830.6442,-1072.131 830.6442,-1062.9743 830.6442,-1054.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"834.1443,-1054.4132 830.6442,-1044.4133 827.1443,-1054.4133 834.1443,-1054.4132\"/>\n</g>\n<!-- 17 -->\n<g id=\"node18\" class=\"node\">\n<title>17</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"652.6442\" cy=\"-954\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"610.1442\" y=\"-950.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 16&#45;&gt;17 -->\n<g id=\"edge17\" class=\"edge\">\n<title>16&#45;&gt;17</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M785.7273,-1007.8314C759.3102,-997.1458 725.961,-983.6562 699.2553,-972.854\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"700.3249,-969.5112 689.7421,-969.0059 697.7,-976.0004 700.3249,-969.5112\"/>\n</g>\n<!-- 18 -->\n<g id=\"node19\" class=\"node\">\n<title>18</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M912.6442,-972C912.6442,-972 748.6442,-972 748.6442,-972 742.6442,-972 736.6442,-966 736.6442,-960 736.6442,-960 736.6442,-948 736.6442,-948 736.6442,-942 742.6442,-936 748.6442,-936 748.6442,-936 912.6442,-936 912.6442,-936 918.6442,-936 924.6442,-942 924.6442,-948 924.6442,-948 924.6442,-960 924.6442,-960 924.6442,-966 918.6442,-972 912.6442,-972\"/>\n<text text-anchor=\"start\" x=\"744.6442\" y=\"-950.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 6.735</text>\n</g>\n<!-- 16&#45;&gt;18 -->\n<g id=\"edge18\" class=\"edge\">\n<title>16&#45;&gt;18</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M830.6442,-1007.8314C830.6442,-1000.131 830.6442,-990.9743 830.6442,-982.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"834.1443,-982.4132 830.6442,-972.4133 827.1443,-982.4133 834.1443,-982.4132\"/>\n</g>\n<!-- 19 -->\n<g id=\"node20\" class=\"node\">\n<title>19</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M645.6442,-900C645.6442,-900 481.6442,-900 481.6442,-900 475.6442,-900 469.6442,-894 469.6442,-888 469.6442,-888 469.6442,-876 469.6442,-876 469.6442,-870 475.6442,-864 481.6442,-864 481.6442,-864 645.6442,-864 645.6442,-864 651.6442,-864 657.6442,-870 657.6442,-876 657.6442,-876 657.6442,-888 657.6442,-888 657.6442,-894 651.6442,-900 645.6442,-900\"/>\n<text text-anchor=\"start\" x=\"477.6442\" y=\"-878.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 6.615</text>\n</g>\n<!-- 18&#45;&gt;19 -->\n<g id=\"edge19\" class=\"edge\">\n<title>18&#45;&gt;19</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M763.6134,-935.9243C726.1608,-925.8247 679.3375,-913.1982 640.4168,-902.7027\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"641.2689,-899.3076 630.7025,-900.0831 639.4463,-906.0661 641.2689,-899.3076\"/>\n</g>\n<!-- 22 -->\n<g id=\"node23\" class=\"node\">\n<title>22</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M912.6442,-900C912.6442,-900 748.6442,-900 748.6442,-900 742.6442,-900 736.6442,-894 736.6442,-888 736.6442,-888 736.6442,-876 736.6442,-876 736.6442,-870 742.6442,-864 748.6442,-864 748.6442,-864 912.6442,-864 912.6442,-864 918.6442,-864 924.6442,-870 924.6442,-876 924.6442,-876 924.6442,-888 924.6442,-888 924.6442,-894 918.6442,-900 912.6442,-900\"/>\n<text text-anchor=\"start\" x=\"744.6442\" y=\"-878.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 6.745</text>\n</g>\n<!-- 18&#45;&gt;22 -->\n<g id=\"edge22\" class=\"edge\">\n<title>18&#45;&gt;22</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M830.6442,-935.8314C830.6442,-928.131 830.6442,-918.9743 830.6442,-910.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"834.1443,-910.4132 830.6442,-900.4133 827.1443,-910.4133 834.1443,-910.4132\"/>\n</g>\n<!-- 20 -->\n<g id=\"node21\" class=\"node\">\n<title>20</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"414.6442\" cy=\"-810\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"372.1442\" y=\"-806.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 19&#45;&gt;20 -->\n<g id=\"edge20\" class=\"edge\">\n<title>19&#45;&gt;20</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M526.0452,-863.8314C504.7726,-853.552 478.13,-840.6777 456.2341,-830.0971\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"457.697,-826.9169 447.1702,-825.7173 454.6513,-833.2196 457.697,-826.9169\"/>\n</g>\n<!-- 21 -->\n<g id=\"node22\" class=\"node\">\n<title>21</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"563.6442\" cy=\"-810\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"521.1442\" y=\"-806.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 19&#45;&gt;21 -->\n<g id=\"edge21\" class=\"edge\">\n<title>19&#45;&gt;21</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M563.6442,-863.8314C563.6442,-856.131 563.6442,-846.9743 563.6442,-838.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"567.1443,-838.4132 563.6442,-828.4133 560.1443,-838.4133 567.1443,-838.4132\"/>\n</g>\n<!-- 23 -->\n<g id=\"node24\" class=\"node\">\n<title>23</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"712.6442\" cy=\"-810\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"670.1442\" y=\"-806.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 1</text>\n</g>\n<!-- 22&#45;&gt;23 -->\n<g id=\"edge23\" class=\"edge\">\n<title>22&#45;&gt;23</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M800.8678,-863.8314C784.9684,-854.13 765.281,-842.1174 748.5406,-831.9029\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"749.9458,-828.6602 739.5863,-826.4393 746.2997,-834.6357 749.9458,-828.6602\"/>\n</g>\n<!-- 24 -->\n<g id=\"node25\" class=\"node\">\n<title>24</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M972.6442,-828C972.6442,-828 808.6442,-828 808.6442,-828 802.6442,-828 796.6442,-822 796.6442,-816 796.6442,-816 796.6442,-804 796.6442,-804 796.6442,-798 802.6442,-792 808.6442,-792 808.6442,-792 972.6442,-792 972.6442,-792 978.6442,-792 984.6442,-798 984.6442,-804 984.6442,-804 984.6442,-816 984.6442,-816 984.6442,-822 978.6442,-828 972.6442,-828\"/>\n<text text-anchor=\"start\" x=\"804.6442\" y=\"-806.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 6.825</text>\n</g>\n<!-- 22&#45;&gt;24 -->\n<g id=\"edge24\" class=\"edge\">\n<title>22&#45;&gt;24</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M845.7847,-863.8314C852.7658,-855.454 861.1832,-845.3531 868.8317,-836.1749\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"871.5867,-838.3362 875.2998,-828.4133 866.2091,-833.8548 871.5867,-838.3362\"/>\n</g>\n<!-- 25 -->\n<g id=\"node26\" class=\"node\">\n<title>25</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"712.6442\" cy=\"-738\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"670.1442\" y=\"-734.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 24&#45;&gt;25 -->\n<g id=\"edge25\" class=\"edge\">\n<title>24&#45;&gt;25</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M845.7273,-791.8314C819.3102,-781.1458 785.961,-767.6562 759.2553,-756.854\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"760.3249,-753.5112 749.7421,-753.0059 757.7,-760.0004 760.3249,-753.5112\"/>\n</g>\n<!-- 26 -->\n<g id=\"node27\" class=\"node\">\n<title>26</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M972.6442,-756C972.6442,-756 808.6442,-756 808.6442,-756 802.6442,-756 796.6442,-750 796.6442,-744 796.6442,-744 796.6442,-732 796.6442,-732 796.6442,-726 802.6442,-720 808.6442,-720 808.6442,-720 972.6442,-720 972.6442,-720 978.6442,-720 984.6442,-726 984.6442,-732 984.6442,-732 984.6442,-744 984.6442,-744 984.6442,-750 978.6442,-756 972.6442,-756\"/>\n<text text-anchor=\"start\" x=\"804.6442\" y=\"-734.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 6.835</text>\n</g>\n<!-- 24&#45;&gt;26 -->\n<g id=\"edge26\" class=\"edge\">\n<title>24&#45;&gt;26</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M890.6442,-791.8314C890.6442,-784.131 890.6442,-774.9743 890.6442,-766.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"894.1443,-766.4132 890.6442,-756.4133 887.1443,-766.4133 894.1443,-766.4132\"/>\n</g>\n<!-- 27 -->\n<g id=\"node28\" class=\"node\">\n<title>27</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"712.6442\" cy=\"-666\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"670.1442\" y=\"-662.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 1</text>\n</g>\n<!-- 26&#45;&gt;27 -->\n<g id=\"edge27\" class=\"edge\">\n<title>26&#45;&gt;27</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M845.7273,-719.8314C819.3102,-709.1458 785.961,-695.6562 759.2553,-684.854\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"760.3249,-681.5112 749.7421,-681.0059 757.7,-688.0004 760.3249,-681.5112\"/>\n</g>\n<!-- 28 -->\n<g id=\"node29\" class=\"node\">\n<title>28</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M972.6442,-684C972.6442,-684 808.6442,-684 808.6442,-684 802.6442,-684 796.6442,-678 796.6442,-672 796.6442,-672 796.6442,-660 796.6442,-660 796.6442,-654 802.6442,-648 808.6442,-648 808.6442,-648 972.6442,-648 972.6442,-648 978.6442,-648 984.6442,-654 984.6442,-660 984.6442,-660 984.6442,-672 984.6442,-672 984.6442,-678 978.6442,-684 972.6442,-684\"/>\n<text text-anchor=\"start\" x=\"804.6442\" y=\"-662.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 7.545</text>\n</g>\n<!-- 26&#45;&gt;28 -->\n<g id=\"edge28\" class=\"edge\">\n<title>26&#45;&gt;28</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M890.6442,-719.8314C890.6442,-712.131 890.6442,-702.9743 890.6442,-694.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"894.1443,-694.4132 890.6442,-684.4133 887.1443,-694.4133 894.1443,-694.4132\"/>\n</g>\n<!-- 29 -->\n<g id=\"node30\" class=\"node\">\n<title>29</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M665.1442,-612C665.1442,-612 402.1442,-612 402.1442,-612 396.1442,-612 390.1442,-606 390.1442,-600 390.1442,-600 390.1442,-588 390.1442,-588 390.1442,-582 396.1442,-576 402.1442,-576 402.1442,-576 665.1442,-576 665.1442,-576 671.1442,-576 677.1442,-582 677.1442,-588 677.1442,-588 677.1442,-600 677.1442,-600 677.1442,-606 671.1442,-612 665.1442,-612\"/>\n<text text-anchor=\"start\" x=\"398.1442\" y=\"-590.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 6.904999999999999</text>\n</g>\n<!-- 28&#45;&gt;29 -->\n<g id=\"edge29\" class=\"edge\">\n<title>28&#45;&gt;29</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M801.0188,-647.9243C749.8898,-637.6126 685.6996,-624.6666 633.0301,-614.0442\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"633.4913,-610.5668 622.9967,-612.0207 632.1074,-617.4287 633.4913,-610.5668\"/>\n</g>\n<!-- 42 -->\n<g id=\"node43\" class=\"node\">\n<title>42</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M972.6442,-612C972.6442,-612 808.6442,-612 808.6442,-612 802.6442,-612 796.6442,-606 796.6442,-600 796.6442,-600 796.6442,-588 796.6442,-588 796.6442,-582 802.6442,-576 808.6442,-576 808.6442,-576 972.6442,-576 972.6442,-576 978.6442,-576 984.6442,-582 984.6442,-588 984.6442,-588 984.6442,-600 984.6442,-600 984.6442,-606 978.6442,-612 972.6442,-612\"/>\n<text text-anchor=\"start\" x=\"804.6442\" y=\"-590.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 7.555</text>\n</g>\n<!-- 28&#45;&gt;42 -->\n<g id=\"edge42\" class=\"edge\">\n<title>28&#45;&gt;42</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M890.6442,-647.8314C890.6442,-640.131 890.6442,-630.9743 890.6442,-622.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"894.1443,-622.4132 890.6442,-612.4133 887.1443,-622.4133 894.1443,-622.4132\"/>\n</g>\n<!-- 30 -->\n<g id=\"node31\" class=\"node\">\n<title>30</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M292.1442,-540C292.1442,-540 137.1442,-540 137.1442,-540 131.1442,-540 125.1442,-534 125.1442,-528 125.1442,-528 125.1442,-516 125.1442,-516 125.1442,-510 131.1442,-504 137.1442,-504 137.1442,-504 292.1442,-504 292.1442,-504 298.1442,-504 304.1442,-510 304.1442,-516 304.1442,-516 304.1442,-528 304.1442,-528 304.1442,-534 298.1442,-540 292.1442,-540\"/>\n<text text-anchor=\"start\" x=\"133.1442\" y=\"-518.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 6.85</text>\n</g>\n<!-- 29&#45;&gt;30 -->\n<g id=\"edge30\" class=\"edge\">\n<title>29&#45;&gt;30</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M453.5588,-575.9243C408.157,-565.6769 351.2295,-552.828 304.333,-542.2432\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"305.011,-538.8083 294.4858,-540.0207 303.4698,-545.6365 305.011,-538.8083\"/>\n</g>\n<!-- 33 -->\n<g id=\"node34\" class=\"node\">\n<title>33</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M669.1442,-540C669.1442,-540 398.1442,-540 398.1442,-540 392.1442,-540 386.1442,-534 386.1442,-528 386.1442,-528 386.1442,-516 386.1442,-516 386.1442,-510 392.1442,-504 398.1442,-504 398.1442,-504 669.1442,-504 669.1442,-504 675.1442,-504 681.1442,-510 681.1442,-516 681.1442,-516 681.1442,-528 681.1442,-528 681.1442,-534 675.1442,-540 669.1442,-540\"/>\n<text text-anchor=\"start\" x=\"394.1442\" y=\"-518.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 7.3100000000000005</text>\n</g>\n<!-- 29&#45;&gt;33 -->\n<g id=\"edge33\" class=\"edge\">\n<title>29&#45;&gt;33</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M533.6442,-575.8314C533.6442,-568.131 533.6442,-558.9743 533.6442,-550.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"537.1443,-550.4132 533.6442,-540.4133 530.1443,-550.4133 537.1443,-550.4132\"/>\n</g>\n<!-- 31 -->\n<g id=\"node32\" class=\"node\">\n<title>31</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"65.6442\" cy=\"-450\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"23.1442\" y=\"-446.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 30&#45;&gt;31 -->\n<g id=\"edge31\" class=\"edge\">\n<title>30&#45;&gt;31</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M177.0452,-503.8314C155.7726,-493.552 129.13,-480.6777 107.2341,-470.0971\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"108.697,-466.9169 98.1702,-465.7173 105.6513,-473.2196 108.697,-466.9169\"/>\n</g>\n<!-- 32 -->\n<g id=\"node33\" class=\"node\">\n<title>32</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"214.6442\" cy=\"-450\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"172.1442\" y=\"-446.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 30&#45;&gt;32 -->\n<g id=\"edge32\" class=\"edge\">\n<title>30&#45;&gt;32</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M214.6442,-503.8314C214.6442,-496.131 214.6442,-486.9743 214.6442,-478.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"218.1443,-478.4132 214.6442,-468.4133 211.1443,-478.4133 218.1443,-478.4132\"/>\n</g>\n<!-- 34 -->\n<g id=\"node35\" class=\"node\">\n<title>34</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M474.6442,-468C474.6442,-468 310.6442,-468 310.6442,-468 304.6442,-468 298.6442,-462 298.6442,-456 298.6442,-456 298.6442,-444 298.6442,-444 298.6442,-438 304.6442,-432 310.6442,-432 310.6442,-432 474.6442,-432 474.6442,-432 480.6442,-432 486.6442,-438 486.6442,-444 486.6442,-444 486.6442,-456 486.6442,-456 486.6442,-462 480.6442,-468 474.6442,-468\"/>\n<text text-anchor=\"start\" x=\"306.6442\" y=\"-446.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 7.215</text>\n</g>\n<!-- 33&#45;&gt;34 -->\n<g id=\"edge34\" class=\"edge\">\n<title>33&#45;&gt;34</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M498.0639,-503.8314C479.6117,-494.4089 456.8897,-482.8062 437.2712,-472.7883\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"438.7108,-469.5935 428.213,-468.1628 435.5274,-475.8278 438.7108,-469.5935\"/>\n</g>\n<!-- 37 -->\n<g id=\"node38\" class=\"node\">\n<title>37</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M680.6442,-468C680.6442,-468 516.6442,-468 516.6442,-468 510.6442,-468 504.6442,-462 504.6442,-456 504.6442,-456 504.6442,-444 504.6442,-444 504.6442,-438 510.6442,-432 516.6442,-432 516.6442,-432 680.6442,-432 680.6442,-432 686.6442,-432 692.6442,-438 692.6442,-444 692.6442,-444 692.6442,-456 692.6442,-456 692.6442,-462 686.6442,-468 680.6442,-468\"/>\n<text text-anchor=\"start\" x=\"512.6442\" y=\"-446.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 7.345</text>\n</g>\n<!-- 33&#45;&gt;37 -->\n<g id=\"edge37\" class=\"edge\">\n<title>33&#45;&gt;37</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M550.0464,-503.8314C557.6857,-495.3694 566.9125,-485.1489 575.2649,-475.8971\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"577.918,-478.1813 582.0211,-468.4133 572.7221,-473.4906 577.918,-478.1813\"/>\n</g>\n<!-- 35 -->\n<g id=\"node36\" class=\"node\">\n<title>35</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"243.6442\" cy=\"-378\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"201.1442\" y=\"-374.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 34&#45;&gt;35 -->\n<g id=\"edge35\" class=\"edge\">\n<title>34&#45;&gt;35</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M355.0452,-431.8314C333.7726,-421.552 307.13,-408.6777 285.2341,-398.0971\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"286.697,-394.9169 276.1702,-393.7173 283.6513,-401.2196 286.697,-394.9169\"/>\n</g>\n<!-- 36 -->\n<g id=\"node37\" class=\"node\">\n<title>36</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"392.6442\" cy=\"-378\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"350.1442\" y=\"-374.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 34&#45;&gt;36 -->\n<g id=\"edge36\" class=\"edge\">\n<title>34&#45;&gt;36</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M392.6442,-431.8314C392.6442,-424.131 392.6442,-414.9743 392.6442,-406.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"396.1443,-406.4132 392.6442,-396.4133 389.1443,-406.4133 396.1443,-406.4132\"/>\n</g>\n<!-- 38 -->\n<g id=\"node39\" class=\"node\">\n<title>38</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"541.6442\" cy=\"-378\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"499.1442\" y=\"-374.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 37&#45;&gt;38 -->\n<g id=\"edge38\" class=\"edge\">\n<title>37&#45;&gt;38</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M584.2607,-431.8314C577.5946,-423.411 569.55,-413.2495 562.2543,-404.0338\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"564.7769,-401.5814 555.8256,-395.9134 559.2885,-405.9264 564.7769,-401.5814\"/>\n</g>\n<!-- 39 -->\n<g id=\"node40\" class=\"node\">\n<title>39</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M801.6442,-396C801.6442,-396 637.6442,-396 637.6442,-396 631.6442,-396 625.6442,-390 625.6442,-384 625.6442,-384 625.6442,-372 625.6442,-372 625.6442,-366 631.6442,-360 637.6442,-360 637.6442,-360 801.6442,-360 801.6442,-360 807.6442,-360 813.6442,-366 813.6442,-372 813.6442,-372 813.6442,-384 813.6442,-384 813.6442,-390 807.6442,-396 801.6442,-396\"/>\n<text text-anchor=\"start\" x=\"633.6442\" y=\"-374.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 7.505</text>\n</g>\n<!-- 37&#45;&gt;39 -->\n<g id=\"edge39\" class=\"edge\">\n<title>37&#45;&gt;39</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M629.1776,-431.8314C644.6542,-422.6221 663.6311,-411.3301 680.2005,-401.4706\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"682.3166,-404.2843 689.1205,-396.1628 678.7371,-398.2687 682.3166,-404.2843\"/>\n</g>\n<!-- 40 -->\n<g id=\"node41\" class=\"node\">\n<title>40</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"570.6442\" cy=\"-306\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"528.1442\" y=\"-302.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 39&#45;&gt;40 -->\n<g id=\"edge40\" class=\"edge\">\n<title>39&#45;&gt;40</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M682.0452,-359.8314C660.7726,-349.552 634.13,-336.6777 612.2341,-326.0971\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"613.697,-322.9169 603.1702,-321.7173 610.6513,-329.2196 613.697,-322.9169\"/>\n</g>\n<!-- 41 -->\n<g id=\"node42\" class=\"node\">\n<title>41</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"719.6442\" cy=\"-306\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"677.1442\" y=\"-302.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 39&#45;&gt;41 -->\n<g id=\"edge41\" class=\"edge\">\n<title>39&#45;&gt;41</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M719.6442,-359.8314C719.6442,-352.131 719.6442,-342.9743 719.6442,-334.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"723.1443,-334.4132 719.6442,-324.4133 716.1443,-334.4133 723.1443,-334.4132\"/>\n</g>\n<!-- 43 -->\n<g id=\"node44\" class=\"node\">\n<title>43</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"803.6442\" cy=\"-522\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"761.1442\" y=\"-518.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 1</text>\n</g>\n<!-- 42&#45;&gt;43 -->\n<g id=\"edge43\" class=\"edge\">\n<title>42&#45;&gt;43</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M868.6904,-575.8314C857.6475,-566.6924 844.1262,-555.5024 832.2776,-545.6967\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"834.3285,-542.8508 824.393,-539.1715 829.8655,-548.2436 834.3285,-542.8508\"/>\n</g>\n<!-- 44 -->\n<g id=\"node45\" class=\"node\">\n<title>44</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M1054.1442,-540C1054.1442,-540 899.1442,-540 899.1442,-540 893.1442,-540 887.1442,-534 887.1442,-528 887.1442,-528 887.1442,-516 887.1442,-516 887.1442,-510 893.1442,-504 899.1442,-504 899.1442,-504 1054.1442,-504 1054.1442,-504 1060.1442,-504 1066.1442,-510 1066.1442,-516 1066.1442,-516 1066.1442,-528 1066.1442,-528 1066.1442,-534 1060.1442,-540 1054.1442,-540\"/>\n<text text-anchor=\"start\" x=\"895.1442\" y=\"-518.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 7.63</text>\n</g>\n<!-- 42&#45;&gt;44 -->\n<g id=\"edge44\" class=\"edge\">\n<title>42&#45;&gt;44</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M912.3456,-575.8314C922.8363,-567.0485 935.5897,-556.3712 946.9636,-546.8489\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"949.5289,-549.2659 954.9497,-540.1628 945.0353,-543.8986 949.5289,-549.2659\"/>\n</g>\n<!-- 45 -->\n<g id=\"node46\" class=\"node\">\n<title>45</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"836.6442\" cy=\"-450\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"794.1442\" y=\"-446.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 44&#45;&gt;45 -->\n<g id=\"edge45\" class=\"edge\">\n<title>44&#45;&gt;45</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M941.3163,-503.8314C921.6476,-493.716 897.0929,-481.0879 876.7102,-470.6054\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"878.1649,-467.4178 867.6713,-465.9568 874.9634,-473.6428 878.1649,-467.4178\"/>\n</g>\n<!-- 46 -->\n<g id=\"node47\" class=\"node\">\n<title>46</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M1096.6442,-468C1096.6442,-468 932.6442,-468 932.6442,-468 926.6442,-468 920.6442,-462 920.6442,-456 920.6442,-456 920.6442,-444 920.6442,-444 920.6442,-438 926.6442,-432 932.6442,-432 932.6442,-432 1096.6442,-432 1096.6442,-432 1102.6442,-432 1108.6442,-438 1108.6442,-444 1108.6442,-444 1108.6442,-456 1108.6442,-456 1108.6442,-462 1102.6442,-468 1096.6442,-468\"/>\n<text text-anchor=\"start\" x=\"928.6442\" y=\"-446.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 7.655</text>\n</g>\n<!-- 44&#45;&gt;46 -->\n<g id=\"edge46\" class=\"edge\">\n<title>44&#45;&gt;46</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M986.2332,-503.8314C990.4759,-495.7925 995.5563,-486.1666 1000.2402,-477.2918\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1003.3538,-478.8908 1004.9261,-468.4133 997.1631,-475.6235 1003.3538,-478.8908\"/>\n</g>\n<!-- 47 -->\n<g id=\"node48\" class=\"node\">\n<title>47</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"912.6442\" cy=\"-378\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"870.1442\" y=\"-374.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 1</text>\n</g>\n<!-- 46&#45;&gt;47 -->\n<g id=\"edge47\" class=\"edge\">\n<title>46&#45;&gt;47</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M988.9053,-431.8314C975.6117,-422.4477 959.2547,-410.9016 945.1027,-400.9119\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"946.8112,-397.8338 936.6231,-394.9263 942.7744,-403.5526 946.8112,-397.8338\"/>\n</g>\n<!-- 48 -->\n<g id=\"node49\" class=\"node\">\n<title>48</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M1172.6442,-396C1172.6442,-396 1008.6442,-396 1008.6442,-396 1002.6442,-396 996.6442,-390 996.6442,-384 996.6442,-384 996.6442,-372 996.6442,-372 996.6442,-366 1002.6442,-360 1008.6442,-360 1008.6442,-360 1172.6442,-360 1172.6442,-360 1178.6442,-360 1184.6442,-366 1184.6442,-372 1184.6442,-372 1184.6442,-384 1184.6442,-384 1184.6442,-390 1178.6442,-396 1172.6442,-396\"/>\n<text text-anchor=\"start\" x=\"1004.6442\" y=\"-374.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 7.755</text>\n</g>\n<!-- 46&#45;&gt;48 -->\n<g id=\"edge48\" class=\"edge\">\n<title>46&#45;&gt;48</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M1033.8222,-431.8314C1043.003,-423.1337 1054.1448,-412.5783 1064.1217,-403.1265\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1066.6199,-405.5811 1071.4723,-396.1628 1061.8056,-400.4995 1066.6199,-405.5811\"/>\n</g>\n<!-- 49 -->\n<g id=\"node50\" class=\"node\">\n<title>49</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M962.1442,-324C962.1442,-324 815.1442,-324 815.1442,-324 809.1442,-324 803.1442,-318 803.1442,-312 803.1442,-312 803.1442,-300 803.1442,-300 803.1442,-294 809.1442,-288 815.1442,-288 815.1442,-288 962.1442,-288 962.1442,-288 968.1442,-288 974.1442,-294 974.1442,-300 974.1442,-300 974.1442,-312 974.1442,-312 974.1442,-318 968.1442,-324 962.1442,-324\"/>\n<text text-anchor=\"start\" x=\"811.1442\" y=\"-302.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 7.7</text>\n</g>\n<!-- 48&#45;&gt;49 -->\n<g id=\"edge49\" class=\"edge\">\n<title>48&#45;&gt;49</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M1039.9318,-359.9243C1012.3172,-350.0815 977.9691,-337.8386 948.9841,-327.5073\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"949.9721,-324.1438 939.3774,-324.0831 947.6218,-330.7375 949.9721,-324.1438\"/>\n</g>\n<!-- 56 -->\n<g id=\"node57\" class=\"node\">\n<title>56</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M1188.6442,-324C1188.6442,-324 1024.6442,-324 1024.6442,-324 1018.6442,-324 1012.6442,-318 1012.6442,-312 1012.6442,-312 1012.6442,-300 1012.6442,-300 1012.6442,-294 1018.6442,-288 1024.6442,-288 1024.6442,-288 1188.6442,-288 1188.6442,-288 1194.6442,-288 1200.6442,-294 1200.6442,-300 1200.6442,-300 1200.6442,-312 1200.6442,-312 1200.6442,-318 1194.6442,-324 1188.6442,-324\"/>\n<text text-anchor=\"start\" x=\"1020.6442\" y=\"-302.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 7.955</text>\n</g>\n<!-- 48&#45;&gt;56 -->\n<g id=\"edge56\" class=\"edge\">\n<title>48&#45;&gt;56</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M1094.6817,-359.8314C1096.3929,-352.131 1098.4277,-342.9743 1100.3294,-334.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1103.7996,-334.9344 1102.5523,-324.4133 1096.9663,-333.4159 1103.7996,-334.9344\"/>\n</g>\n<!-- 50 -->\n<g id=\"node51\" class=\"node\">\n<title>50</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M706.1442,-252C706.1442,-252 435.1442,-252 435.1442,-252 429.1442,-252 423.1442,-246 423.1442,-240 423.1442,-240 423.1442,-228 423.1442,-228 423.1442,-222 429.1442,-216 435.1442,-216 435.1442,-216 706.1442,-216 706.1442,-216 712.1442,-216 718.1442,-222 718.1442,-228 718.1442,-228 718.1442,-240 718.1442,-240 718.1442,-246 712.1442,-252 706.1442,-252\"/>\n<text text-anchor=\"start\" x=\"431.1442\" y=\"-230.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 7.6850000000000005</text>\n</g>\n<!-- 49&#45;&gt;50 -->\n<g id=\"edge50\" class=\"edge\">\n<title>49&#45;&gt;50</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M808.8098,-287.9243C763.5504,-277.6769 706.8013,-264.828 660.0518,-254.2432\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"660.7616,-250.8154 650.2355,-252.0207 659.2157,-257.6426 660.7616,-250.8154\"/>\n</g>\n<!-- 53 -->\n<g id=\"node54\" class=\"node\">\n<title>53</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M950.6442,-252C950.6442,-252 786.6442,-252 786.6442,-252 780.6442,-252 774.6442,-246 774.6442,-240 774.6442,-240 774.6442,-228 774.6442,-228 774.6442,-222 780.6442,-216 786.6442,-216 786.6442,-216 950.6442,-216 950.6442,-216 956.6442,-216 962.6442,-222 962.6442,-228 962.6442,-228 962.6442,-240 962.6442,-240 962.6442,-246 956.6442,-252 950.6442,-252\"/>\n<text text-anchor=\"start\" x=\"782.6442\" y=\"-230.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 7.725</text>\n</g>\n<!-- 49&#45;&gt;53 -->\n<g id=\"edge53\" class=\"edge\">\n<title>49&#45;&gt;53</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M883.5973,-287.8314C881.4348,-280.0463 878.8589,-270.7729 876.4594,-262.1347\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"879.8078,-261.1117 873.759,-252.4133 873.0632,-262.9852 879.8078,-261.1117\"/>\n</g>\n<!-- 51 -->\n<g id=\"node52\" class=\"node\">\n<title>51</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"421.6442\" cy=\"-162\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"379.1442\" y=\"-158.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 50&#45;&gt;51 -->\n<g id=\"edge51\" class=\"edge\">\n<title>50&#45;&gt;51</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M533.0452,-215.8314C511.7726,-205.552 485.13,-192.6777 463.2341,-182.0971\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"464.697,-178.9169 454.1702,-177.7173 461.6513,-185.2196 464.697,-178.9169\"/>\n</g>\n<!-- 52 -->\n<g id=\"node53\" class=\"node\">\n<title>52</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"570.6442\" cy=\"-162\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"528.1442\" y=\"-158.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 50&#45;&gt;52 -->\n<g id=\"edge52\" class=\"edge\">\n<title>50&#45;&gt;52</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M570.6442,-215.8314C570.6442,-208.131 570.6442,-198.9743 570.6442,-190.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"574.1443,-190.4132 570.6442,-180.4133 567.1443,-190.4133 574.1443,-190.4132\"/>\n</g>\n<!-- 54 -->\n<g id=\"node55\" class=\"node\">\n<title>54</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"719.6442\" cy=\"-162\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"677.1442\" y=\"-158.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 53&#45;&gt;54 -->\n<g id=\"edge54\" class=\"edge\">\n<title>53&#45;&gt;54</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M831.0452,-215.8314C809.7726,-205.552 783.13,-192.6777 761.2341,-182.0971\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"762.697,-178.9169 752.1702,-177.7173 759.6513,-185.2196 762.697,-178.9169\"/>\n</g>\n<!-- 55 -->\n<g id=\"node56\" class=\"node\">\n<title>55</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"868.6442\" cy=\"-162\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"826.1442\" y=\"-158.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 53&#45;&gt;55 -->\n<g id=\"edge55\" class=\"edge\">\n<title>53&#45;&gt;55</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M868.6442,-215.8314C868.6442,-208.131 868.6442,-198.9743 868.6442,-190.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"872.1443,-190.4132 868.6442,-180.4133 865.1443,-190.4133 872.1443,-190.4132\"/>\n</g>\n<!-- 57 -->\n<g id=\"node58\" class=\"node\">\n<title>57</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M1188.6442,-252C1188.6442,-252 1024.6442,-252 1024.6442,-252 1018.6442,-252 1012.6442,-246 1012.6442,-240 1012.6442,-240 1012.6442,-228 1012.6442,-228 1012.6442,-222 1018.6442,-216 1024.6442,-216 1024.6442,-216 1188.6442,-216 1188.6442,-216 1194.6442,-216 1200.6442,-222 1200.6442,-228 1200.6442,-228 1200.6442,-240 1200.6442,-240 1200.6442,-246 1194.6442,-252 1188.6442,-252\"/>\n<text text-anchor=\"start\" x=\"1020.6442\" y=\"-230.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 7.795</text>\n</g>\n<!-- 56&#45;&gt;57 -->\n<g id=\"edge57\" class=\"edge\">\n<title>56&#45;&gt;57</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M1106.6442,-287.8314C1106.6442,-280.131 1106.6442,-270.9743 1106.6442,-262.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1110.1443,-262.4132 1106.6442,-252.4133 1103.1443,-262.4133 1110.1443,-262.4132\"/>\n</g>\n<!-- 60 -->\n<g id=\"node61\" class=\"node\">\n<title>60</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M1525.1442,-252C1525.1442,-252 1262.1442,-252 1262.1442,-252 1256.1442,-252 1250.1442,-246 1250.1442,-240 1250.1442,-240 1250.1442,-228 1250.1442,-228 1250.1442,-222 1256.1442,-216 1262.1442,-216 1262.1442,-216 1525.1442,-216 1525.1442,-216 1531.1442,-216 1537.1442,-222 1537.1442,-228 1537.1442,-228 1537.1442,-240 1537.1442,-240 1537.1442,-246 1531.1442,-252 1525.1442,-252\"/>\n<text text-anchor=\"start\" x=\"1258.1442\" y=\"-230.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 8.245000000000001</text>\n</g>\n<!-- 56&#45;&gt;60 -->\n<g id=\"edge60\" class=\"edge\">\n<title>56&#45;&gt;60</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M1178.6959,-287.9243C1219.1246,-277.7819 1269.7114,-265.0912 1311.6521,-254.5694\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1312.715,-257.9113 1321.5628,-252.0831 1311.0116,-251.1217 1312.715,-257.9113\"/>\n</g>\n<!-- 58 -->\n<g id=\"node59\" class=\"node\">\n<title>58</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"1017.6442\" cy=\"-162\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"975.1442\" y=\"-158.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 57&#45;&gt;58 -->\n<g id=\"edge58\" class=\"edge\">\n<title>57&#45;&gt;58</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M1084.1857,-215.8314C1072.889,-206.6924 1059.0568,-195.5024 1046.9359,-185.6967\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1048.8458,-182.7399 1038.87,-179.1715 1044.4432,-188.182 1048.8458,-182.7399\"/>\n</g>\n<!-- 59 -->\n<g id=\"node60\" class=\"node\">\n<title>59</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"1166.6442\" cy=\"-162\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"1124.1442\" y=\"-158.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 57&#45;&gt;59 -->\n<g id=\"edge59\" class=\"edge\">\n<title>57&#45;&gt;59</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M1121.7847,-215.8314C1128.8732,-207.3251 1137.4426,-197.0419 1145.1842,-187.752\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1148.0032,-189.8363 1151.7163,-179.9134 1142.6257,-185.355 1148.0032,-189.8363\"/>\n</g>\n<!-- 61 -->\n<g id=\"node62\" class=\"node\">\n<title>61</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M1525.1442,-180C1525.1442,-180 1262.1442,-180 1262.1442,-180 1256.1442,-180 1250.1442,-174 1250.1442,-168 1250.1442,-168 1250.1442,-156 1250.1442,-156 1250.1442,-150 1256.1442,-144 1262.1442,-144 1262.1442,-144 1525.1442,-144 1525.1442,-144 1531.1442,-144 1537.1442,-150 1537.1442,-156 1537.1442,-156 1537.1442,-168 1537.1442,-168 1537.1442,-174 1531.1442,-180 1525.1442,-180\"/>\n<text text-anchor=\"start\" x=\"1258.1442\" y=\"-158.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 8.065000000000001</text>\n</g>\n<!-- 60&#45;&gt;61 -->\n<g id=\"edge61\" class=\"edge\">\n<title>60&#45;&gt;61</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M1393.6442,-215.8314C1393.6442,-208.131 1393.6442,-198.9743 1393.6442,-190.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1397.1443,-190.4132 1393.6442,-180.4133 1390.1443,-190.4133 1397.1443,-190.4132\"/>\n</g>\n<!-- 66 -->\n<g id=\"node67\" class=\"node\">\n<title>66</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M1731.6442,-180C1731.6442,-180 1567.6442,-180 1567.6442,-180 1561.6442,-180 1555.6442,-174 1555.6442,-168 1555.6442,-168 1555.6442,-156 1555.6442,-156 1555.6442,-150 1561.6442,-144 1567.6442,-144 1567.6442,-144 1731.6442,-144 1731.6442,-144 1737.6442,-144 1743.6442,-150 1743.6442,-156 1743.6442,-156 1743.6442,-168 1743.6442,-168 1743.6442,-174 1737.6442,-180 1731.6442,-180\"/>\n<text text-anchor=\"start\" x=\"1563.6442\" y=\"-158.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 8.285</text>\n</g>\n<!-- 60&#45;&gt;66 -->\n<g id=\"edge66\" class=\"edge\">\n<title>60&#45;&gt;66</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M1457.9133,-215.9243C1493.6708,-205.8675 1538.3369,-193.3052 1575.5597,-182.8363\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1576.6697,-186.1599 1585.3486,-180.0831 1574.7744,-179.4214 1576.6697,-186.1599\"/>\n</g>\n<!-- 62 -->\n<g id=\"node63\" class=\"node\">\n<title>62</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"1241.6442\" cy=\"-90\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"1199.1442\" y=\"-86.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 61&#45;&gt;62 -->\n<g id=\"edge62\" class=\"edge\">\n<title>61&#45;&gt;62</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M1355.2882,-143.8314C1333.5103,-133.5156 1306.2154,-120.5864 1283.834,-109.9847\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1285.109,-106.7158 1274.5732,-105.598 1282.1123,-113.042 1285.109,-106.7158\"/>\n</g>\n<!-- 63 -->\n<g id=\"node64\" class=\"node\">\n<title>63</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M1492.1442,-108C1492.1442,-108 1337.1442,-108 1337.1442,-108 1331.1442,-108 1325.1442,-102 1325.1442,-96 1325.1442,-96 1325.1442,-84 1325.1442,-84 1325.1442,-78 1331.1442,-72 1337.1442,-72 1337.1442,-72 1492.1442,-72 1492.1442,-72 1498.1442,-72 1504.1442,-78 1504.1442,-84 1504.1442,-84 1504.1442,-96 1504.1442,-96 1504.1442,-102 1498.1442,-108 1492.1442,-108\"/>\n<text text-anchor=\"start\" x=\"1333.1442\" y=\"-86.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 8.16</text>\n</g>\n<!-- 61&#45;&gt;63 -->\n<g id=\"edge63\" class=\"edge\">\n<title>61&#45;&gt;63</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M1398.9434,-143.8314C1401.214,-136.0463 1403.9187,-126.7729 1406.4382,-118.1347\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1409.8336,-118.9933 1409.2736,-108.4133 1403.1136,-117.0332 1409.8336,-118.9933\"/>\n</g>\n<!-- 64 -->\n<g id=\"node65\" class=\"node\">\n<title>64</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"1340.6442\" cy=\"-18\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"1298.1442\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 63&#45;&gt;64 -->\n<g id=\"edge64\" class=\"edge\">\n<title>63&#45;&gt;64</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M1395.9709,-71.8314C1386.8269,-62.9346 1375.6851,-52.0939 1365.8031,-42.4789\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1368.1538,-39.8827 1358.5457,-35.4177 1363.2722,-44.8998 1368.1538,-39.8827\"/>\n</g>\n<!-- 65 -->\n<g id=\"node66\" class=\"node\">\n<title>65</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"1489.6442\" cy=\"-18\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"1447.1442\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 63&#45;&gt;65 -->\n<g id=\"edge65\" class=\"edge\">\n<title>63&#45;&gt;65</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M1433.5698,-71.8314C1442.8373,-62.9346 1454.1297,-52.0939 1464.1453,-42.4789\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1466.7107,-44.8679 1471.5007,-35.4177 1461.863,-39.8182 1466.7107,-44.8679\"/>\n</g>\n<!-- 67 -->\n<g id=\"node68\" class=\"node\">\n<title>67</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"1628.6442\" cy=\"-90\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"1586.1442\" y=\"-86.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 66&#45;&gt;67 -->\n<g id=\"edge67\" class=\"edge\">\n<title>66&#45;&gt;67</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M1644.345,-143.8314C1642.0744,-136.0463 1639.3696,-126.7729 1636.8501,-118.1347\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1640.1748,-117.0332 1634.0147,-108.4133 1633.4548,-118.9933 1640.1748,-117.0332\"/>\n</g>\n<!-- 68 -->\n<g id=\"node69\" class=\"node\">\n<title>68</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"1777.6442\" cy=\"-90\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"1735.1442\" y=\"-86.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 66&#45;&gt;68 -->\n<g id=\"edge68\" class=\"edge\">\n<title>66&#45;&gt;68</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M1681.944,-143.8314C1699.6375,-133.8788 1721.6556,-121.4936 1740.11,-111.1129\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1741.8489,-114.1506 1748.8487,-106.1975 1738.417,-108.0496 1741.8489,-114.1506\"/>\n</g>\n<!-- 71 -->\n<g id=\"node72\" class=\"node\">\n<title>71</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M2370.6442,-1116C2370.6442,-1116 2206.6442,-1116 2206.6442,-1116 2200.6442,-1116 2194.6442,-1110 2194.6442,-1104 2194.6442,-1104 2194.6442,-1092 2194.6442,-1092 2194.6442,-1086 2200.6442,-1080 2206.6442,-1080 2206.6442,-1080 2370.6442,-1080 2370.6442,-1080 2376.6442,-1080 2382.6442,-1086 2382.6442,-1092 2382.6442,-1092 2382.6442,-1104 2382.6442,-1104 2382.6442,-1110 2376.6442,-1116 2370.6442,-1116\"/>\n<text text-anchor=\"start\" x=\"2202.6442\" y=\"-1094.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 8.535</text>\n</g>\n<!-- 70&#45;&gt;71 -->\n<g id=\"edge71\" class=\"edge\">\n<title>70&#45;&gt;71</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2288.6442,-1151.8314C2288.6442,-1144.131 2288.6442,-1134.9743 2288.6442,-1126.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2292.1443,-1126.4132 2288.6442,-1116.4133 2285.1443,-1126.4133 2292.1443,-1126.4132\"/>\n</g>\n<!-- 74 -->\n<g id=\"node75\" class=\"node\">\n<title>74</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M3527.6442,-1116C3527.6442,-1116 3355.6442,-1116 3355.6442,-1116 3349.6442,-1116 3343.6442,-1110 3343.6442,-1104 3343.6442,-1104 3343.6442,-1092 3343.6442,-1092 3343.6442,-1086 3349.6442,-1080 3355.6442,-1080 3355.6442,-1080 3527.6442,-1080 3527.6442,-1080 3533.6442,-1080 3539.6442,-1086 3539.6442,-1092 3539.6442,-1092 3539.6442,-1104 3539.6442,-1104 3539.6442,-1110 3533.6442,-1116 3527.6442,-1116\"/>\n<text text-anchor=\"start\" x=\"3351.6442\" y=\"-1094.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 11.605</text>\n</g>\n<!-- 70&#45;&gt;74 -->\n<g id=\"edge74\" class=\"edge\">\n<title>70&#45;&gt;74</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2432.3411,-1161.0267C2666.3569,-1146.4134 3124.5924,-1117.7986 3333.3708,-1104.7612\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3333.6632,-1108.2499 3343.4256,-1104.1333 3333.2269,-1101.2635 3333.6632,-1108.2499\"/>\n</g>\n<!-- 72 -->\n<g id=\"node73\" class=\"node\">\n<title>72</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"2214.6442\" cy=\"-1026\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"2172.1442\" y=\"-1022.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 71&#45;&gt;72 -->\n<g id=\"edge72\" class=\"edge\">\n<title>71&#45;&gt;72</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2269.9709,-1079.8314C2260.8269,-1070.9346 2249.6851,-1060.0939 2239.8031,-1050.4789\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2242.1538,-1047.8827 2232.5457,-1043.4177 2237.2722,-1052.8998 2242.1538,-1047.8827\"/>\n</g>\n<!-- 73 -->\n<g id=\"node74\" class=\"node\">\n<title>73</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"2363.6442\" cy=\"-1026\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"2321.1442\" y=\"-1022.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 71&#45;&gt;73 -->\n<g id=\"edge73\" class=\"edge\">\n<title>71&#45;&gt;73</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2307.5698,-1079.8314C2316.8373,-1070.9346 2328.1297,-1060.0939 2338.1453,-1050.4789\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2340.7107,-1052.8679 2345.5007,-1043.4177 2335.863,-1047.8182 2340.7107,-1052.8679\"/>\n</g>\n<!-- 75 -->\n<g id=\"node76\" class=\"node\">\n<title>75</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M3527.6442,-1044C3527.6442,-1044 3355.6442,-1044 3355.6442,-1044 3349.6442,-1044 3343.6442,-1038 3343.6442,-1032 3343.6442,-1032 3343.6442,-1020 3343.6442,-1020 3343.6442,-1014 3349.6442,-1008 3355.6442,-1008 3355.6442,-1008 3527.6442,-1008 3527.6442,-1008 3533.6442,-1008 3539.6442,-1014 3539.6442,-1020 3539.6442,-1020 3539.6442,-1032 3539.6442,-1032 3539.6442,-1038 3533.6442,-1044 3527.6442,-1044\"/>\n<text text-anchor=\"start\" x=\"3351.6442\" y=\"-1022.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 11.465</text>\n</g>\n<!-- 74&#45;&gt;75 -->\n<g id=\"edge75\" class=\"edge\">\n<title>74&#45;&gt;75</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3441.6442,-1079.8314C3441.6442,-1072.131 3441.6442,-1062.9743 3441.6442,-1054.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3445.1443,-1054.4132 3441.6442,-1044.4133 3438.1443,-1054.4133 3445.1443,-1054.4132\"/>\n</g>\n<!-- 162 -->\n<g id=\"node163\" class=\"node\">\n<title>162</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M4053.1442,-1044C4053.1442,-1044 3782.1442,-1044 3782.1442,-1044 3776.1442,-1044 3770.1442,-1038 3770.1442,-1032 3770.1442,-1032 3770.1442,-1020 3770.1442,-1020 3770.1442,-1014 3776.1442,-1008 3782.1442,-1008 3782.1442,-1008 4053.1442,-1008 4053.1442,-1008 4059.1442,-1008 4065.1442,-1014 4065.1442,-1020 4065.1442,-1020 4065.1442,-1032 4065.1442,-1032 4065.1442,-1038 4059.1442,-1044 4053.1442,-1044\"/>\n<text text-anchor=\"start\" x=\"3778.1442\" y=\"-1022.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 12.274999999999999</text>\n</g>\n<!-- 74&#45;&gt;162 -->\n<g id=\"edge162\" class=\"edge\">\n<title>74&#45;&gt;162</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3539.6945,-1083.1689C3611.5976,-1072.2928 3709.932,-1057.4186 3788.2739,-1045.5686\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3788.8486,-1049.0216 3798.2126,-1044.0653 3787.8016,-1042.1003 3788.8486,-1049.0216\"/>\n</g>\n<!-- 76 -->\n<g id=\"node77\" class=\"node\">\n<title>76</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M3447.1442,-972C3447.1442,-972 3176.1442,-972 3176.1442,-972 3170.1442,-972 3164.1442,-966 3164.1442,-960 3164.1442,-960 3164.1442,-948 3164.1442,-948 3164.1442,-942 3170.1442,-936 3176.1442,-936 3176.1442,-936 3447.1442,-936 3447.1442,-936 3453.1442,-936 3459.1442,-942 3459.1442,-948 3459.1442,-948 3459.1442,-960 3459.1442,-960 3459.1442,-966 3453.1442,-972 3447.1442,-972\"/>\n<text text-anchor=\"start\" x=\"3172.1442\" y=\"-950.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 11.065000000000001</text>\n</g>\n<!-- 75&#45;&gt;76 -->\n<g id=\"edge76\" class=\"edge\">\n<title>75&#45;&gt;76</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3408.8397,-1007.8314C3392.0579,-998.5368 3371.4456,-987.1208 3353.5278,-977.1971\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3354.8819,-973.9461 3344.4382,-972.1628 3351.4903,-980.0696 3354.8819,-973.9461\"/>\n</g>\n<!-- 159 -->\n<g id=\"node160\" class=\"node\">\n<title>159</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M3653.6442,-972C3653.6442,-972 3489.6442,-972 3489.6442,-972 3483.6442,-972 3477.6442,-966 3477.6442,-960 3477.6442,-960 3477.6442,-948 3477.6442,-948 3477.6442,-942 3483.6442,-936 3489.6442,-936 3489.6442,-936 3653.6442,-936 3653.6442,-936 3659.6442,-936 3665.6442,-942 3665.6442,-948 3665.6442,-948 3665.6442,-960 3665.6442,-960 3665.6442,-966 3659.6442,-972 3653.6442,-972\"/>\n<text text-anchor=\"start\" x=\"3485.6442\" y=\"-950.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 11.51</text>\n</g>\n<!-- 75&#45;&gt;159 -->\n<g id=\"edge159\" class=\"edge\">\n<title>75&#45;&gt;159</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3474.4487,-1007.8314C3491.2304,-998.5368 3511.8427,-987.1208 3529.7605,-977.1971\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3531.798,-980.0696 3538.8502,-972.1628 3528.4065,-973.9461 3531.798,-980.0696\"/>\n</g>\n<!-- 77 -->\n<g id=\"node78\" class=\"node\">\n<title>77</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M3226.6442,-900C3226.6442,-900 3054.6442,-900 3054.6442,-900 3048.6442,-900 3042.6442,-894 3042.6442,-888 3042.6442,-888 3042.6442,-876 3042.6442,-876 3042.6442,-870 3048.6442,-864 3054.6442,-864 3054.6442,-864 3226.6442,-864 3226.6442,-864 3232.6442,-864 3238.6442,-870 3238.6442,-876 3238.6442,-876 3238.6442,-888 3238.6442,-888 3238.6442,-894 3232.6442,-900 3226.6442,-900\"/>\n<text text-anchor=\"start\" x=\"3050.6442\" y=\"-878.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 10.085</text>\n</g>\n<!-- 76&#45;&gt;77 -->\n<g id=\"edge77\" class=\"edge\">\n<title>76&#45;&gt;77</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3268.4937,-935.8314C3245.5218,-926.159 3217.0933,-914.1891 3192.881,-903.9944\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3194.059,-900.6929 3183.4844,-900.038 3191.3425,-907.1443 3194.059,-900.6929\"/>\n</g>\n<!-- 150 -->\n<g id=\"node151\" class=\"node\">\n<title>150</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M3440.6442,-900C3440.6442,-900 3268.6442,-900 3268.6442,-900 3262.6442,-900 3256.6442,-894 3256.6442,-888 3256.6442,-888 3256.6442,-876 3256.6442,-876 3256.6442,-870 3262.6442,-864 3268.6442,-864 3268.6442,-864 3440.6442,-864 3440.6442,-864 3446.6442,-864 3452.6442,-870 3452.6442,-876 3452.6442,-876 3452.6442,-888 3452.6442,-888 3452.6442,-894 3446.6442,-900 3440.6442,-900\"/>\n<text text-anchor=\"start\" x=\"3264.6442\" y=\"-878.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 11.075</text>\n</g>\n<!-- 76&#45;&gt;150 -->\n<g id=\"edge150\" class=\"edge\">\n<title>76&#45;&gt;150</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3322.4949,-935.8314C3327.3464,-927.7079 3333.1658,-917.9637 3338.5121,-909.0118\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3341.5248,-910.7933 3343.6474,-900.4133 3335.515,-907.2041 3341.5248,-910.7933\"/>\n</g>\n<!-- 78 -->\n<g id=\"node79\" class=\"node\">\n<title>78</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M3040.1442,-828C3040.1442,-828 2769.1442,-828 2769.1442,-828 2763.1442,-828 2757.1442,-822 2757.1442,-816 2757.1442,-816 2757.1442,-804 2757.1442,-804 2757.1442,-798 2763.1442,-792 2769.1442,-792 2769.1442,-792 3040.1442,-792 3040.1442,-792 3046.1442,-792 3052.1442,-798 3052.1442,-804 3052.1442,-804 3052.1442,-816 3052.1442,-816 3052.1442,-822 3046.1442,-828 3040.1442,-828\"/>\n<text text-anchor=\"start\" x=\"2765.1442\" y=\"-806.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 10.065000000000001</text>\n</g>\n<!-- 77&#45;&gt;78 -->\n<g id=\"edge78\" class=\"edge\">\n<title>77&#45;&gt;78</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3081.396,-863.9243C3048.7126,-853.9531 3007.9558,-841.5188 2973.8184,-831.104\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2974.5028,-827.6536 2963.9167,-828.0831 2972.4601,-834.3489 2974.5028,-827.6536\"/>\n</g>\n<!-- 131 -->\n<g id=\"node132\" class=\"node\">\n<title>131</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M3254.6442,-828C3254.6442,-828 3082.6442,-828 3082.6442,-828 3076.6442,-828 3070.6442,-822 3070.6442,-816 3070.6442,-816 3070.6442,-804 3070.6442,-804 3070.6442,-798 3076.6442,-792 3082.6442,-792 3082.6442,-792 3254.6442,-792 3254.6442,-792 3260.6442,-792 3266.6442,-798 3266.6442,-804 3266.6442,-804 3266.6442,-816 3266.6442,-816 3266.6442,-822 3260.6442,-828 3254.6442,-828\"/>\n<text text-anchor=\"start\" x=\"3078.6442\" y=\"-806.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 10.295</text>\n</g>\n<!-- 77&#45;&gt;131 -->\n<g id=\"edge131\" class=\"edge\">\n<title>77&#45;&gt;131</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3147.7098,-863.8314C3150.7702,-855.9617 3154.4221,-846.5712 3157.8123,-837.8533\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3161.121,-839.0019 3161.4835,-828.4133 3154.5969,-836.4647 3161.121,-839.0019\"/>\n</g>\n<!-- 79 -->\n<g id=\"node80\" class=\"node\">\n<title>79</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M2902.1442,-756C2902.1442,-756 2639.1442,-756 2639.1442,-756 2633.1442,-756 2627.1442,-750 2627.1442,-744 2627.1442,-744 2627.1442,-732 2627.1442,-732 2627.1442,-726 2633.1442,-720 2639.1442,-720 2639.1442,-720 2902.1442,-720 2902.1442,-720 2908.1442,-720 2914.1442,-726 2914.1442,-732 2914.1442,-732 2914.1442,-744 2914.1442,-744 2914.1442,-750 2908.1442,-756 2902.1442,-756\"/>\n<text text-anchor=\"start\" x=\"2635.1442\" y=\"-734.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 9.745000000000001</text>\n</g>\n<!-- 78&#45;&gt;79 -->\n<g id=\"edge79\" class=\"edge\">\n<title>78&#45;&gt;79</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2870.8303,-791.8314C2853.3735,-782.4516 2831.8955,-770.9112 2813.309,-760.9244\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2814.9128,-757.8129 2804.4472,-756.1628 2811.5995,-763.9792 2814.9128,-757.8129\"/>\n</g>\n<!-- 130 -->\n<g id=\"node131\" class=\"node\">\n<title>130</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"2997.6442\" cy=\"-738\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"2955.1442\" y=\"-734.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 1</text>\n</g>\n<!-- 78&#45;&gt;130 -->\n<g id=\"edge130\" class=\"edge\">\n<title>78&#45;&gt;130</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2928.112,-791.8314C2940.03,-782.6045 2954.6485,-771.287 2967.4009,-761.4142\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2969.6997,-764.0608 2975.4644,-755.1715 2965.4145,-758.5257 2969.6997,-764.0608\"/>\n</g>\n<!-- 80 -->\n<g id=\"node81\" class=\"node\">\n<title>80</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M2799.6442,-684C2799.6442,-684 2635.6442,-684 2635.6442,-684 2629.6442,-684 2623.6442,-678 2623.6442,-672 2623.6442,-672 2623.6442,-660 2623.6442,-660 2623.6442,-654 2629.6442,-648 2635.6442,-648 2635.6442,-648 2799.6442,-648 2799.6442,-648 2805.6442,-648 2811.6442,-654 2811.6442,-660 2811.6442,-660 2811.6442,-672 2811.6442,-672 2811.6442,-678 2805.6442,-684 2799.6442,-684\"/>\n<text text-anchor=\"start\" x=\"2631.6442\" y=\"-662.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 9.735</text>\n</g>\n<!-- 79&#45;&gt;80 -->\n<g id=\"edge80\" class=\"edge\">\n<title>79&#45;&gt;80</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2757.27,-719.8314C2751.2279,-711.6232 2743.9679,-701.7606 2737.3221,-692.7323\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2739.9453,-690.3918 2731.1984,-684.4133 2734.3079,-694.5415 2739.9453,-690.3918\"/>\n</g>\n<!-- 123 -->\n<g id=\"node124\" class=\"node\">\n<title>123</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M3005.6442,-684C3005.6442,-684 2841.6442,-684 2841.6442,-684 2835.6442,-684 2829.6442,-678 2829.6442,-672 2829.6442,-672 2829.6442,-660 2829.6442,-660 2829.6442,-654 2835.6442,-648 2841.6442,-648 2841.6442,-648 3005.6442,-648 3005.6442,-648 3011.6442,-648 3017.6442,-654 3017.6442,-660 3017.6442,-660 3017.6442,-672 3017.6442,-672 3017.6442,-678 3011.6442,-684 3005.6442,-684\"/>\n<text text-anchor=\"start\" x=\"2837.6442\" y=\"-662.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 9.865</text>\n</g>\n<!-- 79&#45;&gt;123 -->\n<g id=\"edge123\" class=\"edge\">\n<title>79&#45;&gt;123</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2809.2525,-719.8314C2829.5335,-710.2874 2854.5679,-698.5065 2876.0413,-688.4013\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2877.7556,-691.4629 2885.3134,-684.038 2874.7749,-685.1291 2877.7556,-691.4629\"/>\n</g>\n<!-- 81 -->\n<g id=\"node82\" class=\"node\">\n<title>81</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M2636.6442,-612C2636.6442,-612 2472.6442,-612 2472.6442,-612 2466.6442,-612 2460.6442,-606 2460.6442,-600 2460.6442,-600 2460.6442,-588 2460.6442,-588 2460.6442,-582 2466.6442,-576 2472.6442,-576 2472.6442,-576 2636.6442,-576 2636.6442,-576 2642.6442,-576 2648.6442,-582 2648.6442,-588 2648.6442,-588 2648.6442,-600 2648.6442,-600 2648.6442,-606 2642.6442,-612 2636.6442,-612\"/>\n<text text-anchor=\"start\" x=\"2468.6442\" y=\"-590.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 9.195</text>\n</g>\n<!-- 80&#45;&gt;81 -->\n<g id=\"edge81\" class=\"edge\">\n<title>80&#45;&gt;81</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2676.5124,-647.8314C2654.7121,-638.2018 2627.7564,-626.295 2604.7437,-616.1299\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2606.0418,-612.877 2595.4802,-612.038 2603.2133,-619.2802 2606.0418,-612.877\"/>\n</g>\n<!-- 122 -->\n<g id=\"node123\" class=\"node\">\n<title>122</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"2732.6442\" cy=\"-594\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"2690.1442\" y=\"-590.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 1</text>\n</g>\n<!-- 80&#45;&gt;122 -->\n<g id=\"edge122\" class=\"edge\">\n<title>80&#45;&gt;122</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2721.4293,-647.8314C2723.0336,-640.131 2724.9412,-630.9743 2726.724,-622.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2730.1949,-622.9169 2728.8081,-612.4133 2723.342,-621.4892 2730.1949,-622.9169\"/>\n</g>\n<!-- 82 -->\n<g id=\"node83\" class=\"node\">\n<title>82</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M2537.6442,-540C2537.6442,-540 2373.6442,-540 2373.6442,-540 2367.6442,-540 2361.6442,-534 2361.6442,-528 2361.6442,-528 2361.6442,-516 2361.6442,-516 2361.6442,-510 2367.6442,-504 2373.6442,-504 2373.6442,-504 2537.6442,-504 2537.6442,-504 2543.6442,-504 2549.6442,-510 2549.6442,-516 2549.6442,-516 2549.6442,-528 2549.6442,-528 2549.6442,-534 2543.6442,-540 2537.6442,-540\"/>\n<text text-anchor=\"start\" x=\"2369.6442\" y=\"-518.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 8.955</text>\n</g>\n<!-- 81&#45;&gt;82 -->\n<g id=\"edge82\" class=\"edge\">\n<title>81&#45;&gt;82</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2529.6623,-575.8314C2517.3513,-566.8779 2502.3334,-555.9558 2489.0505,-546.2955\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2490.7641,-543.214 2480.6181,-540.1628 2486.6468,-548.8752 2490.7641,-543.214\"/>\n</g>\n<!-- 103 -->\n<g id=\"node104\" class=\"node\">\n<title>103</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M2843.1442,-540C2843.1442,-540 2580.1442,-540 2580.1442,-540 2574.1442,-540 2568.1442,-534 2568.1442,-528 2568.1442,-528 2568.1442,-516 2568.1442,-516 2568.1442,-510 2574.1442,-504 2580.1442,-504 2580.1442,-504 2843.1442,-504 2843.1442,-504 2849.1442,-504 2855.1442,-510 2855.1442,-516 2855.1442,-516 2855.1442,-528 2855.1442,-528 2855.1442,-534 2849.1442,-540 2843.1442,-540\"/>\n<text text-anchor=\"start\" x=\"2576.1442\" y=\"-518.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 9.225000000000001</text>\n</g>\n<!-- 81&#45;&gt;103 -->\n<g id=\"edge103\" class=\"edge\">\n<title>81&#45;&gt;103</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2594.2619,-575.8314C2615.1664,-566.2446 2640.9925,-554.4008 2663.093,-544.2655\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2664.6806,-547.388 2672.3113,-540.038 2661.7626,-541.0252 2664.6806,-547.388\"/>\n</g>\n<!-- 83 -->\n<g id=\"node84\" class=\"node\">\n<title>83</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M2404.6442,-468C2404.6442,-468 2240.6442,-468 2240.6442,-468 2234.6442,-468 2228.6442,-462 2228.6442,-456 2228.6442,-456 2228.6442,-444 2228.6442,-444 2228.6442,-438 2234.6442,-432 2240.6442,-432 2240.6442,-432 2404.6442,-432 2404.6442,-432 2410.6442,-432 2416.6442,-438 2416.6442,-444 2416.6442,-444 2416.6442,-456 2416.6442,-456 2416.6442,-462 2410.6442,-468 2404.6442,-468\"/>\n<text text-anchor=\"start\" x=\"2236.6442\" y=\"-446.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 8.875</text>\n</g>\n<!-- 82&#45;&gt;83 -->\n<g id=\"edge83\" class=\"edge\">\n<title>82&#45;&gt;83</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2422.0827,-503.8314C2404.7561,-494.4516 2383.4384,-482.9112 2364.9906,-472.9244\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2366.6553,-469.8457 2356.195,-468.1628 2363.3228,-476.0015 2366.6553,-469.8457\"/>\n</g>\n<!-- 102 -->\n<g id=\"node103\" class=\"node\">\n<title>102</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"2500.6442\" cy=\"-450\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"2458.1442\" y=\"-446.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 82&#45;&gt;102 -->\n<g id=\"edge102\" class=\"edge\">\n<title>82&#45;&gt;102</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2466.9996,-503.8314C2472.1549,-495.5829 2478.3545,-485.6635 2484.0197,-476.5992\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2487.1163,-478.2484 2489.4483,-467.9134 2481.1803,-474.5384 2487.1163,-478.2484\"/>\n</g>\n<!-- 84 -->\n<g id=\"node85\" class=\"node\">\n<title>84</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M2385.6442,-396C2385.6442,-396 2221.6442,-396 2221.6442,-396 2215.6442,-396 2209.6442,-390 2209.6442,-384 2209.6442,-384 2209.6442,-372 2209.6442,-372 2209.6442,-366 2215.6442,-360 2221.6442,-360 2221.6442,-360 2385.6442,-360 2385.6442,-360 2391.6442,-360 2397.6442,-366 2397.6442,-372 2397.6442,-372 2397.6442,-384 2397.6442,-384 2397.6442,-390 2391.6442,-396 2385.6442,-396\"/>\n<text text-anchor=\"start\" x=\"2217.6442\" y=\"-374.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 8.735</text>\n</g>\n<!-- 83&#45;&gt;84 -->\n<g id=\"edge84\" class=\"edge\">\n<title>83&#45;&gt;84</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2317.8497,-431.8314C2315.7953,-424.0463 2313.3481,-414.7729 2311.0686,-406.1347\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2314.439,-405.1892 2308.5032,-396.4133 2307.6707,-406.9753 2314.439,-405.1892\"/>\n</g>\n<!-- 99 -->\n<g id=\"node100\" class=\"node\">\n<title>99</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M2608.1442,-396C2608.1442,-396 2453.1442,-396 2453.1442,-396 2447.1442,-396 2441.1442,-390 2441.1442,-384 2441.1442,-384 2441.1442,-372 2441.1442,-372 2441.1442,-366 2447.1442,-360 2453.1442,-360 2453.1442,-360 2608.1442,-360 2608.1442,-360 2614.1442,-360 2620.1442,-366 2620.1442,-372 2620.1442,-372 2620.1442,-384 2620.1442,-384 2620.1442,-390 2614.1442,-396 2608.1442,-396\"/>\n<text text-anchor=\"start\" x=\"2449.1442\" y=\"-374.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 8.94</text>\n</g>\n<!-- 83&#45;&gt;99 -->\n<g id=\"edge99\" class=\"edge\">\n<title>83&#45;&gt;99</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2374.8629,-431.9243C2403.4213,-422.0387 2438.9737,-409.7321 2468.901,-399.3726\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2470.099,-402.6618 2478.404,-396.0831 2467.8092,-396.0469 2470.099,-402.6618\"/>\n</g>\n<!-- 85 -->\n<g id=\"node86\" class=\"node\">\n<title>85</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M2130.1442,-324C2130.1442,-324 1867.1442,-324 1867.1442,-324 1861.1442,-324 1855.1442,-318 1855.1442,-312 1855.1442,-312 1855.1442,-300 1855.1442,-300 1855.1442,-294 1861.1442,-288 1867.1442,-288 1867.1442,-288 2130.1442,-288 2130.1442,-288 2136.1442,-288 2142.1442,-294 2142.1442,-300 2142.1442,-300 2142.1442,-312 2142.1442,-312 2142.1442,-318 2136.1442,-324 2130.1442,-324\"/>\n<text text-anchor=\"start\" x=\"1863.1442\" y=\"-302.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 8.684999999999999</text>\n</g>\n<!-- 84&#45;&gt;85 -->\n<g id=\"edge85\" class=\"edge\">\n<title>84&#45;&gt;85</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2227.0735,-359.9243C2183.8459,-349.7198 2129.6904,-336.9355 2084.9601,-326.3762\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2085.5184,-322.9119 2074.9818,-324.0207 2083.9101,-329.7246 2085.5184,-322.9119\"/>\n</g>\n<!-- 96 -->\n<g id=\"node97\" class=\"node\">\n<title>96</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M2435.1442,-324C2435.1442,-324 2172.1442,-324 2172.1442,-324 2166.1442,-324 2160.1442,-318 2160.1442,-312 2160.1442,-312 2160.1442,-300 2160.1442,-300 2160.1442,-294 2166.1442,-288 2172.1442,-288 2172.1442,-288 2435.1442,-288 2435.1442,-288 2441.1442,-288 2447.1442,-294 2447.1442,-300 2447.1442,-300 2447.1442,-312 2447.1442,-312 2447.1442,-318 2441.1442,-324 2435.1442,-324\"/>\n<text text-anchor=\"start\" x=\"2168.1442\" y=\"-302.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 8.774999999999999</text>\n</g>\n<!-- 84&#45;&gt;96 -->\n<g id=\"edge96\" class=\"edge\">\n<title>84&#45;&gt;96</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2303.6442,-359.8314C2303.6442,-352.131 2303.6442,-342.9743 2303.6442,-334.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2307.1443,-334.4132 2303.6442,-324.4133 2300.1443,-334.4133 2307.1443,-334.4132\"/>\n</g>\n<!-- 86 -->\n<g id=\"node87\" class=\"node\">\n<title>86</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M2001.1442,-252C2001.1442,-252 1738.1442,-252 1738.1442,-252 1732.1442,-252 1726.1442,-246 1726.1442,-240 1726.1442,-240 1726.1442,-228 1726.1442,-228 1726.1442,-222 1732.1442,-216 1738.1442,-216 1738.1442,-216 2001.1442,-216 2001.1442,-216 2007.1442,-216 2013.1442,-222 2013.1442,-228 2013.1442,-228 2013.1442,-240 2013.1442,-240 2013.1442,-246 2007.1442,-252 2001.1442,-252\"/>\n<text text-anchor=\"start\" x=\"1734.1442\" y=\"-230.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 8.655000000000001</text>\n</g>\n<!-- 85&#45;&gt;86 -->\n<g id=\"edge86\" class=\"edge\">\n<title>85&#45;&gt;86</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M1966.092,-287.8314C1949.4394,-278.5368 1928.9856,-267.1208 1911.2057,-257.1971\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1912.6237,-253.9803 1902.1859,-252.1628 1909.2121,-260.0927 1912.6237,-253.9803\"/>\n</g>\n<!-- 89 -->\n<g id=\"node90\" class=\"node\">\n<title>89</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M2207.6442,-252C2207.6442,-252 2043.6442,-252 2043.6442,-252 2037.6442,-252 2031.6442,-246 2031.6442,-240 2031.6442,-240 2031.6442,-228 2031.6442,-228 2031.6442,-222 2037.6442,-216 2043.6442,-216 2043.6442,-216 2207.6442,-216 2207.6442,-216 2213.6442,-216 2219.6442,-222 2219.6442,-228 2219.6442,-228 2219.6442,-240 2219.6442,-240 2219.6442,-246 2213.6442,-252 2207.6442,-252\"/>\n<text text-anchor=\"start\" x=\"2039.6442\" y=\"-230.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 8.695</text>\n</g>\n<!-- 85&#45;&gt;89 -->\n<g id=\"edge89\" class=\"edge\">\n<title>85&#45;&gt;89</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2030.6916,-287.8314C2047.0861,-278.5368 2067.2227,-267.1208 2084.727,-257.1971\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2086.6339,-260.1395 2093.607,-252.1628 2083.1815,-254.05 2086.6339,-260.1395\"/>\n</g>\n<!-- 87 -->\n<g id=\"node88\" class=\"node\">\n<title>87</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"1827.6442\" cy=\"-162\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"1785.1442\" y=\"-158.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 86&#45;&gt;87 -->\n<g id=\"edge87\" class=\"edge\">\n<title>86&#45;&gt;87</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M1859.0458,-215.8314C1854.2342,-207.5829 1848.4479,-197.6635 1843.1604,-188.5992\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1846.1557,-186.7876 1838.0937,-179.9134 1840.1092,-190.3148 1846.1557,-186.7876\"/>\n</g>\n<!-- 88 -->\n<g id=\"node89\" class=\"node\">\n<title>88</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"1976.6442\" cy=\"-162\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"1934.1442\" y=\"-158.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 86&#45;&gt;88 -->\n<g id=\"edge88\" class=\"edge\">\n<title>86&#45;&gt;88</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M1896.6448,-215.8314C1910.8251,-206.2895 1928.3282,-194.5117 1943.3433,-184.4081\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1945.5099,-187.1688 1951.8525,-178.6822 1941.602,-181.3612 1945.5099,-187.1688\"/>\n</g>\n<!-- 90 -->\n<g id=\"node91\" class=\"node\">\n<title>90</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"2125.6442\" cy=\"-162\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"2083.1442\" y=\"-158.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 1</text>\n</g>\n<!-- 89&#45;&gt;90 -->\n<g id=\"edge90\" class=\"edge\">\n<title>89&#45;&gt;90</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2125.6442,-215.8314C2125.6442,-208.131 2125.6442,-198.9743 2125.6442,-190.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2129.1443,-190.4132 2125.6442,-180.4133 2122.1443,-190.4133 2129.1443,-190.4132\"/>\n</g>\n<!-- 91 -->\n<g id=\"node92\" class=\"node\">\n<title>91</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M2385.6442,-180C2385.6442,-180 2221.6442,-180 2221.6442,-180 2215.6442,-180 2209.6442,-174 2209.6442,-168 2209.6442,-168 2209.6442,-156 2209.6442,-156 2209.6442,-150 2215.6442,-144 2221.6442,-144 2221.6442,-144 2385.6442,-144 2385.6442,-144 2391.6442,-144 2397.6442,-150 2397.6442,-156 2397.6442,-156 2397.6442,-168 2397.6442,-168 2397.6442,-174 2391.6442,-180 2385.6442,-180\"/>\n<text text-anchor=\"start\" x=\"2217.6442\" y=\"-158.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 8.705</text>\n</g>\n<!-- 89&#45;&gt;91 -->\n<g id=\"edge91\" class=\"edge\">\n<title>89&#45;&gt;91</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2170.5611,-215.8314C2194.5792,-206.1162 2224.3276,-194.0831 2249.6033,-183.8592\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2251.0924,-187.0325 2259.0503,-180.038 2248.4675,-180.5432 2251.0924,-187.0325\"/>\n</g>\n<!-- 92 -->\n<g id=\"node93\" class=\"node\">\n<title>92</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"2214.6442\" cy=\"-90\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"2172.1442\" y=\"-86.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 91&#45;&gt;92 -->\n<g id=\"edge92\" class=\"edge\">\n<title>91&#45;&gt;92</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2281.1857,-143.8314C2269.889,-134.6924 2256.0568,-123.5024 2243.9359,-113.6967\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2245.8458,-110.7399 2235.87,-107.1715 2241.4432,-116.182 2245.8458,-110.7399\"/>\n</g>\n<!-- 93 -->\n<g id=\"node94\" class=\"node\">\n<title>93</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M2474.6442,-108C2474.6442,-108 2310.6442,-108 2310.6442,-108 2304.6442,-108 2298.6442,-102 2298.6442,-96 2298.6442,-96 2298.6442,-84 2298.6442,-84 2298.6442,-78 2304.6442,-72 2310.6442,-72 2310.6442,-72 2474.6442,-72 2474.6442,-72 2480.6442,-72 2486.6442,-78 2486.6442,-84 2486.6442,-84 2486.6442,-96 2486.6442,-96 2486.6442,-102 2480.6442,-108 2474.6442,-108\"/>\n<text text-anchor=\"start\" x=\"2306.6442\" y=\"-86.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 8.715</text>\n</g>\n<!-- 91&#45;&gt;93 -->\n<g id=\"edge93\" class=\"edge\">\n<title>91&#45;&gt;93</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2326.1026,-143.8314C2337.0647,-134.9632 2350.4141,-124.1637 2362.2707,-114.5718\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2364.6197,-117.1734 2370.1929,-108.1628 2360.2171,-111.7313 2364.6197,-117.1734\"/>\n</g>\n<!-- 94 -->\n<g id=\"node95\" class=\"node\">\n<title>94</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"2318.6442\" cy=\"-18\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"2276.1442\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 93&#45;&gt;94 -->\n<g id=\"edge94\" class=\"edge\">\n<title>93&#45;&gt;94</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2373.9709,-71.8314C2364.8269,-62.9346 2353.6851,-52.0939 2343.8031,-42.4789\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2346.1538,-39.8827 2336.5457,-35.4177 2341.2722,-44.8998 2346.1538,-39.8827\"/>\n</g>\n<!-- 95 -->\n<g id=\"node96\" class=\"node\">\n<title>95</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"2467.6442\" cy=\"-18\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"2425.1442\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 93&#45;&gt;95 -->\n<g id=\"edge95\" class=\"edge\">\n<title>93&#45;&gt;95</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2411.5698,-71.8314C2420.8373,-62.9346 2432.1297,-52.0939 2442.1453,-42.4789\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2444.7107,-44.8679 2449.5007,-35.4177 2439.863,-39.8182 2444.7107,-44.8679\"/>\n</g>\n<!-- 97 -->\n<g id=\"node98\" class=\"node\">\n<title>97</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"2303.6442\" cy=\"-234\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"2261.1442\" y=\"-230.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 96&#45;&gt;97 -->\n<g id=\"edge97\" class=\"edge\">\n<title>96&#45;&gt;97</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2303.6442,-287.8314C2303.6442,-280.131 2303.6442,-270.9743 2303.6442,-262.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2307.1443,-262.4132 2303.6442,-252.4133 2300.1443,-262.4133 2307.1443,-262.4132\"/>\n</g>\n<!-- 98 -->\n<g id=\"node99\" class=\"node\">\n<title>98</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"2452.6442\" cy=\"-234\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"2410.1442\" y=\"-230.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 96&#45;&gt;98 -->\n<g id=\"edge98\" class=\"edge\">\n<title>96&#45;&gt;98</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2341.2432,-287.8314C2362.5157,-277.552 2389.1584,-264.6777 2411.0543,-254.0971\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2412.637,-257.2196 2420.1181,-249.7173 2409.5914,-250.9169 2412.637,-257.2196\"/>\n</g>\n<!-- 100 -->\n<g id=\"node101\" class=\"node\">\n<title>100</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"2530.6442\" cy=\"-306\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"2488.1442\" y=\"-302.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 99&#45;&gt;100 -->\n<g id=\"edge100\" class=\"edge\">\n<title>99&#45;&gt;100</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2530.6442,-359.8314C2530.6442,-352.131 2530.6442,-342.9743 2530.6442,-334.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2534.1443,-334.4132 2530.6442,-324.4133 2527.1443,-334.4133 2534.1443,-334.4132\"/>\n</g>\n<!-- 101 -->\n<g id=\"node102\" class=\"node\">\n<title>101</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"2679.6442\" cy=\"-306\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"2637.1442\" y=\"-302.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 99&#45;&gt;101 -->\n<g id=\"edge101\" class=\"edge\">\n<title>99&#45;&gt;101</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2568.2432,-359.8314C2589.5157,-349.552 2616.1584,-336.6777 2638.0543,-326.0971\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2639.637,-329.2196 2647.1181,-321.7173 2636.5914,-322.9169 2639.637,-329.2196\"/>\n</g>\n<!-- 104 -->\n<g id=\"node105\" class=\"node\">\n<title>104</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"2667.6442\" cy=\"-450\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"2625.1442\" y=\"-446.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 103&#45;&gt;104 -->\n<g id=\"edge104\" class=\"edge\">\n<title>103&#45;&gt;104</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2700.5411,-503.8314C2695.5004,-495.5829 2689.4386,-485.6635 2683.8992,-476.5992\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2686.7923,-474.6212 2678.5913,-467.9134 2680.8193,-478.2713 2686.7923,-474.6212\"/>\n</g>\n<!-- 105 -->\n<g id=\"node106\" class=\"node\">\n<title>105</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M3026.1442,-468C3026.1442,-468 2763.1442,-468 2763.1442,-468 2757.1442,-468 2751.1442,-462 2751.1442,-456 2751.1442,-456 2751.1442,-444 2751.1442,-444 2751.1442,-438 2757.1442,-432 2763.1442,-432 2763.1442,-432 3026.1442,-432 3026.1442,-432 3032.1442,-432 3038.1442,-438 3038.1442,-444 3038.1442,-444 3038.1442,-456 3038.1442,-456 3038.1442,-462 3032.1442,-468 3026.1442,-468\"/>\n<text text-anchor=\"start\" x=\"2759.1442\" y=\"-446.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 9.385000000000002</text>\n</g>\n<!-- 103&#45;&gt;105 -->\n<g id=\"edge105\" class=\"edge\">\n<title>103&#45;&gt;105</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2757.8228,-503.8314C2782.6243,-494.0734 2813.3692,-481.977 2839.4285,-471.7242\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2840.7734,-474.9563 2848.7976,-468.038 2838.2105,-468.4423 2840.7734,-474.9563\"/>\n</g>\n<!-- 106 -->\n<g id=\"node107\" class=\"node\">\n<title>106</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M3026.1442,-396C3026.1442,-396 2763.1442,-396 2763.1442,-396 2757.1442,-396 2751.1442,-390 2751.1442,-384 2751.1442,-384 2751.1442,-372 2751.1442,-372 2751.1442,-366 2757.1442,-360 2763.1442,-360 2763.1442,-360 3026.1442,-360 3026.1442,-360 3032.1442,-360 3038.1442,-366 3038.1442,-372 3038.1442,-372 3038.1442,-384 3038.1442,-384 3038.1442,-390 3032.1442,-396 3026.1442,-396\"/>\n<text text-anchor=\"start\" x=\"2759.1442\" y=\"-374.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 9.364999999999998</text>\n</g>\n<!-- 105&#45;&gt;106 -->\n<g id=\"edge106\" class=\"edge\">\n<title>105&#45;&gt;106</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2894.6442,-431.8314C2894.6442,-424.131 2894.6442,-414.9743 2894.6442,-406.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2898.1443,-406.4132 2894.6442,-396.4133 2891.1443,-406.4133 2898.1443,-406.4132\"/>\n</g>\n<!-- 111 -->\n<g id=\"node112\" class=\"node\">\n<title>111</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M3256.6442,-396C3256.6442,-396 3092.6442,-396 3092.6442,-396 3086.6442,-396 3080.6442,-390 3080.6442,-384 3080.6442,-384 3080.6442,-372 3080.6442,-372 3080.6442,-366 3086.6442,-360 3092.6442,-360 3092.6442,-360 3256.6442,-360 3256.6442,-360 3262.6442,-360 3268.6442,-366 3268.6442,-372 3268.6442,-372 3268.6442,-384 3268.6442,-384 3268.6442,-390 3262.6442,-396 3256.6442,-396\"/>\n<text text-anchor=\"start\" x=\"3088.6442\" y=\"-374.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 9.415</text>\n</g>\n<!-- 105&#45;&gt;111 -->\n<g id=\"edge111\" class=\"edge\">\n<title>105&#45;&gt;111</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2964.9386,-431.9243C3004.298,-421.8033 3053.5259,-409.1447 3094.3929,-398.6361\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3095.5076,-401.9634 3104.3208,-396.0831 3093.7642,-395.1839 3095.5076,-401.9634\"/>\n</g>\n<!-- 107 -->\n<g id=\"node108\" class=\"node\">\n<title>107</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M2930.1442,-324C2930.1442,-324 2775.1442,-324 2775.1442,-324 2769.1442,-324 2763.1442,-318 2763.1442,-312 2763.1442,-312 2763.1442,-300 2763.1442,-300 2763.1442,-294 2769.1442,-288 2775.1442,-288 2775.1442,-288 2930.1442,-288 2930.1442,-288 2936.1442,-288 2942.1442,-294 2942.1442,-300 2942.1442,-300 2942.1442,-312 2942.1442,-312 2942.1442,-318 2936.1442,-324 2930.1442,-324\"/>\n<text text-anchor=\"start\" x=\"2771.1442\" y=\"-302.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 9.24</text>\n</g>\n<!-- 106&#45;&gt;107 -->\n<g id=\"edge107\" class=\"edge\">\n<title>106&#45;&gt;107</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2884.0458,-359.8314C2879.3565,-351.7925 2873.7413,-342.1666 2868.5644,-333.2918\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2871.4472,-331.2875 2863.3852,-324.4133 2865.4008,-334.8146 2871.4472,-331.2875\"/>\n</g>\n<!-- 110 -->\n<g id=\"node111\" class=\"node\">\n<title>110</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"3025.6442\" cy=\"-306\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"2983.1442\" y=\"-302.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 106&#45;&gt;110 -->\n<g id=\"edge110\" class=\"edge\">\n<title>106&#45;&gt;110</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2927.701,-359.8314C2945.8092,-349.8788 2968.3433,-337.4936 2987.2303,-327.1129\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2989.096,-330.0814 2996.1738,-322.1975 2985.7244,-323.9469 2989.096,-330.0814\"/>\n</g>\n<!-- 108 -->\n<g id=\"node109\" class=\"node\">\n<title>108</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"2777.6442\" cy=\"-234\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"2735.1442\" y=\"-230.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 107&#45;&gt;108 -->\n<g id=\"edge108\" class=\"edge\">\n<title>107&#45;&gt;108</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2833.7185,-287.8314C2824.451,-278.9346 2813.1587,-268.0939 2803.1431,-258.4789\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2805.4254,-255.8182 2795.7876,-251.4177 2800.5777,-260.8679 2805.4254,-255.8182\"/>\n</g>\n<!-- 109 -->\n<g id=\"node110\" class=\"node\">\n<title>109</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"2926.6442\" cy=\"-234\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"2884.1442\" y=\"-230.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 107&#45;&gt;109 -->\n<g id=\"edge109\" class=\"edge\">\n<title>107&#45;&gt;109</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2871.3175,-287.8314C2880.4614,-278.9346 2891.6032,-268.0939 2901.4853,-258.4789\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2904.0161,-260.8998 2908.7426,-251.4177 2899.1346,-255.8827 2904.0161,-260.8998\"/>\n</g>\n<!-- 112 -->\n<g id=\"node113\" class=\"node\">\n<title>112</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"3174.6442\" cy=\"-306\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"3132.1442\" y=\"-302.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 1</text>\n</g>\n<!-- 111&#45;&gt;112 -->\n<g id=\"edge112\" class=\"edge\">\n<title>111&#45;&gt;112</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3174.6442,-359.8314C3174.6442,-352.131 3174.6442,-342.9743 3174.6442,-334.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3178.1443,-334.4132 3174.6442,-324.4133 3171.1443,-334.4133 3178.1443,-334.4132\"/>\n</g>\n<!-- 113 -->\n<g id=\"node114\" class=\"node\">\n<title>113</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M3425.1442,-324C3425.1442,-324 3270.1442,-324 3270.1442,-324 3264.1442,-324 3258.1442,-318 3258.1442,-312 3258.1442,-312 3258.1442,-300 3258.1442,-300 3258.1442,-294 3264.1442,-288 3270.1442,-288 3270.1442,-288 3425.1442,-288 3425.1442,-288 3431.1442,-288 3437.1442,-294 3437.1442,-300 3437.1442,-300 3437.1442,-312 3437.1442,-312 3437.1442,-318 3431.1442,-324 3425.1442,-324\"/>\n<text text-anchor=\"start\" x=\"3266.1442\" y=\"-302.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 9.44</text>\n</g>\n<!-- 111&#45;&gt;113 -->\n<g id=\"edge113\" class=\"edge\">\n<title>111&#45;&gt;113</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3218.2994,-359.8314C3241.5399,-350.159 3270.301,-338.1891 3294.7964,-327.9944\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3296.4154,-331.1117 3304.3029,-324.038 3293.7257,-324.6491 3296.4154,-331.1117\"/>\n</g>\n<!-- 114 -->\n<g id=\"node115\" class=\"node\">\n<title>114</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"3260.6442\" cy=\"-234\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"3218.1442\" y=\"-230.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 113&#45;&gt;114 -->\n<g id=\"edge114\" class=\"edge\">\n<title>113&#45;&gt;114</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3325.6904,-287.8314C3314.6475,-278.6924 3301.1262,-267.5024 3289.2776,-257.6967\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3291.3285,-254.8508 3281.393,-251.1715 3286.8655,-260.2436 3291.3285,-254.8508\"/>\n</g>\n<!-- 115 -->\n<g id=\"node116\" class=\"node\">\n<title>115</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M3511.1442,-252C3511.1442,-252 3356.1442,-252 3356.1442,-252 3350.1442,-252 3344.1442,-246 3344.1442,-240 3344.1442,-240 3344.1442,-228 3344.1442,-228 3344.1442,-222 3350.1442,-216 3356.1442,-216 3356.1442,-216 3511.1442,-216 3511.1442,-216 3517.1442,-216 3523.1442,-222 3523.1442,-228 3523.1442,-228 3523.1442,-240 3523.1442,-240 3523.1442,-246 3517.1442,-252 3511.1442,-252\"/>\n<text text-anchor=\"start\" x=\"3352.1442\" y=\"-230.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 9.71</text>\n</g>\n<!-- 113&#45;&gt;115 -->\n<g id=\"edge115\" class=\"edge\">\n<title>113&#45;&gt;115</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3369.3456,-287.8314C3379.8363,-279.0485 3392.5897,-268.3712 3403.9636,-258.8489\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3406.5289,-261.2659 3411.9497,-252.1628 3402.0353,-255.8986 3406.5289,-261.2659\"/>\n</g>\n<!-- 116 -->\n<g id=\"node117\" class=\"node\">\n<title>116</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M3426.6442,-180C3426.6442,-180 3262.6442,-180 3262.6442,-180 3256.6442,-180 3250.6442,-174 3250.6442,-168 3250.6442,-168 3250.6442,-156 3250.6442,-156 3250.6442,-150 3256.6442,-144 3262.6442,-144 3262.6442,-144 3426.6442,-144 3426.6442,-144 3432.6442,-144 3438.6442,-150 3438.6442,-156 3438.6442,-156 3438.6442,-168 3438.6442,-168 3438.6442,-174 3432.6442,-180 3426.6442,-180\"/>\n<text text-anchor=\"start\" x=\"3258.6442\" y=\"-158.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 9.645</text>\n</g>\n<!-- 115&#45;&gt;116 -->\n<g id=\"edge116\" class=\"edge\">\n<title>115&#45;&gt;116</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3411.1857,-215.8314C3400.2237,-206.9632 3386.8743,-196.1637 3375.0177,-186.5718\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3377.0713,-183.7313 3367.0954,-180.1628 3372.6686,-189.1734 3377.0713,-183.7313\"/>\n</g>\n<!-- 121 -->\n<g id=\"node122\" class=\"node\">\n<title>121</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"3522.6442\" cy=\"-162\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"3480.1442\" y=\"-158.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 115&#45;&gt;121 -->\n<g id=\"edge121\" class=\"edge\">\n<title>115&#45;&gt;121</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3456.1026,-215.8314C3467.3994,-206.6924 3481.2315,-195.5024 3493.3525,-185.6967\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3495.8452,-188.182 3501.4183,-179.1715 3491.4425,-182.7399 3495.8452,-188.182\"/>\n</g>\n<!-- 117 -->\n<g id=\"node118\" class=\"node\">\n<title>117</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M3337.6442,-108C3337.6442,-108 3173.6442,-108 3173.6442,-108 3167.6442,-108 3161.6442,-102 3161.6442,-96 3161.6442,-96 3161.6442,-84 3161.6442,-84 3161.6442,-78 3167.6442,-72 3173.6442,-72 3173.6442,-72 3337.6442,-72 3337.6442,-72 3343.6442,-72 3349.6442,-78 3349.6442,-84 3349.6442,-84 3349.6442,-96 3349.6442,-96 3349.6442,-102 3343.6442,-108 3337.6442,-108\"/>\n<text text-anchor=\"start\" x=\"3169.6442\" y=\"-86.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 9.455</text>\n</g>\n<!-- 116&#45;&gt;117 -->\n<g id=\"edge117\" class=\"edge\">\n<title>116&#45;&gt;117</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3322.1857,-143.8314C3311.2237,-134.9632 3297.8743,-124.1637 3286.0177,-114.5718\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3288.0713,-111.7313 3278.0954,-108.1628 3283.6686,-117.1734 3288.0713,-111.7313\"/>\n</g>\n<!-- 120 -->\n<g id=\"node121\" class=\"node\">\n<title>120</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"3433.6442\" cy=\"-90\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"3391.1442\" y=\"-86.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 116&#45;&gt;120 -->\n<g id=\"edge120\" class=\"edge\">\n<title>116&#45;&gt;120</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3367.1026,-143.8314C3378.3994,-134.6924 3392.2315,-123.5024 3404.3525,-113.6967\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3406.8452,-116.182 3412.4183,-107.1715 3402.4425,-110.7399 3406.8452,-116.182\"/>\n</g>\n<!-- 118 -->\n<g id=\"node119\" class=\"node\">\n<title>118</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"3180.6442\" cy=\"-18\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"3138.1442\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 117&#45;&gt;118 -->\n<g id=\"edge118\" class=\"edge\">\n<title>117&#45;&gt;118</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3236.7185,-71.8314C3227.451,-62.9346 3216.1587,-52.0939 3206.1431,-42.4789\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3208.4254,-39.8182 3198.7876,-35.4177 3203.5777,-44.8679 3208.4254,-39.8182\"/>\n</g>\n<!-- 119 -->\n<g id=\"node120\" class=\"node\">\n<title>119</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"3329.6442\" cy=\"-18\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"3287.1442\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 117&#45;&gt;119 -->\n<g id=\"edge119\" class=\"edge\">\n<title>117&#45;&gt;119</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3274.3175,-71.8314C3283.4614,-62.9346 3294.6032,-52.0939 3304.4853,-42.4789\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3307.0161,-44.8998 3311.7426,-35.4177 3302.1346,-39.8827 3307.0161,-44.8998\"/>\n</g>\n<!-- 124 -->\n<g id=\"node125\" class=\"node\">\n<title>124</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"2909.6442\" cy=\"-594\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"2867.1442\" y=\"-590.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 123&#45;&gt;124 -->\n<g id=\"edge124\" class=\"edge\">\n<title>123&#45;&gt;124</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2920.1114,-647.8314C2918.6141,-640.131 2916.8336,-630.9743 2915.1696,-622.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"2918.569,-621.5614 2913.2245,-612.4133 2911.6977,-622.8975 2918.569,-621.5614\"/>\n</g>\n<!-- 125 -->\n<g id=\"node126\" class=\"node\">\n<title>125</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M3276.1442,-612C3276.1442,-612 3005.1442,-612 3005.1442,-612 2999.1442,-612 2993.1442,-606 2993.1442,-600 2993.1442,-600 2993.1442,-588 2993.1442,-588 2993.1442,-582 2999.1442,-576 3005.1442,-576 3005.1442,-576 3276.1442,-576 3276.1442,-576 3282.1442,-576 3288.1442,-582 3288.1442,-588 3288.1442,-588 3288.1442,-600 3288.1442,-600 3288.1442,-606 3282.1442,-612 3276.1442,-612\"/>\n<text text-anchor=\"start\" x=\"3001.1442\" y=\"-590.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 10.024999999999999</text>\n</g>\n<!-- 123&#45;&gt;125 -->\n<g id=\"edge125\" class=\"edge\">\n<title>123&#45;&gt;125</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M2978.1223,-647.9243C3008.0455,-637.9959 3045.3284,-625.6255 3076.6346,-615.2382\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3077.7546,-618.5543 3086.1436,-612.0831 3075.5502,-611.9104 3077.7546,-618.5543\"/>\n</g>\n<!-- 126 -->\n<g id=\"node127\" class=\"node\">\n<title>126</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M3203.6442,-540C3203.6442,-540 3039.6442,-540 3039.6442,-540 3033.6442,-540 3027.6442,-534 3027.6442,-528 3027.6442,-528 3027.6442,-516 3027.6442,-516 3027.6442,-510 3033.6442,-504 3039.6442,-504 3039.6442,-504 3203.6442,-504 3203.6442,-504 3209.6442,-504 3215.6442,-510 3215.6442,-516 3215.6442,-516 3215.6442,-528 3215.6442,-528 3215.6442,-534 3209.6442,-540 3203.6442,-540\"/>\n<text text-anchor=\"start\" x=\"3035.6442\" y=\"-518.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 9.945</text>\n</g>\n<!-- 125&#45;&gt;126 -->\n<g id=\"edge126\" class=\"edge\">\n<title>125&#45;&gt;126</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3135.8497,-575.8314C3133.7953,-568.0463 3131.3481,-558.7729 3129.0686,-550.1347\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3132.439,-549.1892 3126.5032,-540.4133 3125.6707,-550.9753 3132.439,-549.1892\"/>\n</g>\n<!-- 129 -->\n<g id=\"node130\" class=\"node\">\n<title>129</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"3299.6442\" cy=\"-522\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"3257.1442\" y=\"-518.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 125&#45;&gt;129 -->\n<g id=\"edge129\" class=\"edge\">\n<title>125&#45;&gt;129</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3180.7666,-575.8314C3203.7299,-565.4329 3232.5573,-552.379 3256.0732,-541.7302\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3257.7957,-544.7924 3265.4615,-537.479 3254.9081,-538.4158 3257.7957,-544.7924\"/>\n</g>\n<!-- 127 -->\n<g id=\"node128\" class=\"node\">\n<title>127</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"3121.6442\" cy=\"-450\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"3079.1442\" y=\"-446.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 126&#45;&gt;127 -->\n<g id=\"edge127\" class=\"edge\">\n<title>126&#45;&gt;127</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3121.6442,-503.8314C3121.6442,-496.131 3121.6442,-486.9743 3121.6442,-478.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3125.1443,-478.4132 3121.6442,-468.4133 3118.1443,-478.4133 3125.1443,-478.4132\"/>\n</g>\n<!-- 128 -->\n<g id=\"node129\" class=\"node\">\n<title>128</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"3270.6442\" cy=\"-450\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"3228.1442\" y=\"-446.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 126&#45;&gt;128 -->\n<g id=\"edge128\" class=\"edge\">\n<title>126&#45;&gt;128</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3159.2432,-503.8314C3180.5157,-493.552 3207.1584,-480.6777 3229.0543,-470.0971\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3230.637,-473.2196 3238.1181,-465.7173 3227.5914,-466.9169 3230.637,-473.2196\"/>\n</g>\n<!-- 132 -->\n<g id=\"node133\" class=\"node\">\n<title>132</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"3166.6442\" cy=\"-738\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"3124.1442\" y=\"-734.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 131&#45;&gt;132 -->\n<g id=\"edge132\" class=\"edge\">\n<title>131&#45;&gt;132</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3168.1395,-791.8314C3167.9256,-784.131 3167.6712,-774.9743 3167.4335,-766.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3170.9321,-766.3122 3167.1557,-756.4133 3163.9348,-766.5066 3170.9321,-766.3122\"/>\n</g>\n<!-- 133 -->\n<g id=\"node134\" class=\"node\">\n<title>133</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M3434.6442,-756C3434.6442,-756 3262.6442,-756 3262.6442,-756 3256.6442,-756 3250.6442,-750 3250.6442,-744 3250.6442,-744 3250.6442,-732 3250.6442,-732 3250.6442,-726 3256.6442,-720 3262.6442,-720 3262.6442,-720 3434.6442,-720 3434.6442,-720 3440.6442,-720 3446.6442,-726 3446.6442,-732 3446.6442,-732 3446.6442,-744 3446.6442,-744 3446.6442,-750 3440.6442,-756 3434.6442,-756\"/>\n<text text-anchor=\"start\" x=\"3258.6442\" y=\"-734.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 10.305</text>\n</g>\n<!-- 131&#45;&gt;133 -->\n<g id=\"edge133\" class=\"edge\">\n<title>131&#45;&gt;133</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3214.0658,-791.8314C3238.3537,-782.1162 3268.4364,-770.0831 3293.9961,-759.8592\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3295.5643,-763.0016 3303.5492,-756.038 3292.9645,-756.5023 3295.5643,-763.0016\"/>\n</g>\n<!-- 134 -->\n<g id=\"node135\" class=\"node\">\n<title>134</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"3348.6442\" cy=\"-666\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"3306.1442\" y=\"-662.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 1</text>\n</g>\n<!-- 133&#45;&gt;134 -->\n<g id=\"edge134\" class=\"edge\">\n<title>133&#45;&gt;134</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3348.6442,-719.8314C3348.6442,-712.131 3348.6442,-702.9743 3348.6442,-694.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3352.1443,-694.4132 3348.6442,-684.4133 3345.1443,-694.4133 3352.1443,-694.4132\"/>\n</g>\n<!-- 135 -->\n<g id=\"node136\" class=\"node\">\n<title>135</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M3616.6442,-684C3616.6442,-684 3444.6442,-684 3444.6442,-684 3438.6442,-684 3432.6442,-678 3432.6442,-672 3432.6442,-672 3432.6442,-660 3432.6442,-660 3432.6442,-654 3438.6442,-648 3444.6442,-648 3444.6442,-648 3616.6442,-648 3616.6442,-648 3622.6442,-648 3628.6442,-654 3628.6442,-660 3628.6442,-660 3628.6442,-672 3628.6442,-672 3628.6442,-678 3622.6442,-684 3616.6442,-684\"/>\n<text text-anchor=\"start\" x=\"3440.6442\" y=\"-662.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 10.945</text>\n</g>\n<!-- 133&#45;&gt;135 -->\n<g id=\"edge135\" class=\"edge\">\n<title>133&#45;&gt;135</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3394.5705,-719.8314C3419.2364,-710.0734 3449.8133,-697.977 3475.7302,-687.7242\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3477.0369,-690.9713 3485.0481,-684.038 3474.4618,-684.4621 3477.0369,-690.9713\"/>\n</g>\n<!-- 136 -->\n<g id=\"node137\" class=\"node\">\n<title>136</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M3612.6442,-612C3612.6442,-612 3448.6442,-612 3448.6442,-612 3442.6442,-612 3436.6442,-606 3436.6442,-600 3436.6442,-600 3436.6442,-588 3436.6442,-588 3436.6442,-582 3442.6442,-576 3448.6442,-576 3448.6442,-576 3612.6442,-576 3612.6442,-576 3618.6442,-576 3624.6442,-582 3624.6442,-588 3624.6442,-588 3624.6442,-600 3624.6442,-600 3624.6442,-606 3618.6442,-612 3612.6442,-612\"/>\n<text text-anchor=\"start\" x=\"3444.6442\" y=\"-590.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 10.93</text>\n</g>\n<!-- 135&#45;&gt;136 -->\n<g id=\"edge136\" class=\"edge\">\n<title>135&#45;&gt;136</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3530.6442,-647.8314C3530.6442,-640.131 3530.6442,-630.9743 3530.6442,-622.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3534.1443,-622.4132 3530.6442,-612.4133 3527.1443,-622.4133 3534.1443,-622.4132\"/>\n</g>\n<!-- 149 -->\n<g id=\"node150\" class=\"node\">\n<title>149</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"3708.6442\" cy=\"-594\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"3666.1442\" y=\"-590.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 135&#45;&gt;149 -->\n<g id=\"edge149\" class=\"edge\">\n<title>135&#45;&gt;149</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3575.5611,-647.8314C3601.9781,-637.1458 3635.3274,-623.6562 3662.033,-612.854\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3663.5883,-616.0004 3671.5462,-609.0059 3660.9634,-609.5112 3663.5883,-616.0004\"/>\n</g>\n<!-- 137 -->\n<g id=\"node138\" class=\"node\">\n<title>137</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M3666.1442,-540C3666.1442,-540 3395.1442,-540 3395.1442,-540 3389.1442,-540 3383.1442,-534 3383.1442,-528 3383.1442,-528 3383.1442,-516 3383.1442,-516 3383.1442,-510 3389.1442,-504 3395.1442,-504 3395.1442,-504 3666.1442,-504 3666.1442,-504 3672.1442,-504 3678.1442,-510 3678.1442,-516 3678.1442,-516 3678.1442,-528 3678.1442,-528 3678.1442,-534 3672.1442,-540 3666.1442,-540\"/>\n<text text-anchor=\"start\" x=\"3391.1442\" y=\"-518.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 10.565000000000001</text>\n</g>\n<!-- 136&#45;&gt;137 -->\n<g id=\"edge137\" class=\"edge\">\n<title>136&#45;&gt;137</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3530.6442,-575.8314C3530.6442,-568.131 3530.6442,-558.9743 3530.6442,-550.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3534.1443,-550.4132 3530.6442,-540.4133 3527.1443,-550.4133 3534.1443,-550.4132\"/>\n</g>\n<!-- 148 -->\n<g id=\"node149\" class=\"node\">\n<title>148</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"3761.6442\" cy=\"-522\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"3719.1442\" y=\"-518.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 1</text>\n</g>\n<!-- 136&#45;&gt;148 -->\n<g id=\"edge148\" class=\"edge\">\n<title>136&#45;&gt;148</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3588.6371,-575.9243C3625.4074,-564.4634 3672.6177,-549.7485 3708.4298,-538.5863\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3709.7047,-541.8551 3718.2102,-535.5379 3707.6217,-535.1722 3709.7047,-541.8551\"/>\n</g>\n<!-- 138 -->\n<g id=\"node139\" class=\"node\">\n<title>138</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M3613.6442,-468C3613.6442,-468 3441.6442,-468 3441.6442,-468 3435.6442,-468 3429.6442,-462 3429.6442,-456 3429.6442,-456 3429.6442,-444 3429.6442,-444 3429.6442,-438 3435.6442,-432 3441.6442,-432 3441.6442,-432 3613.6442,-432 3613.6442,-432 3619.6442,-432 3625.6442,-438 3625.6442,-444 3625.6442,-444 3625.6442,-456 3625.6442,-456 3625.6442,-462 3619.6442,-468 3613.6442,-468\"/>\n<text text-anchor=\"start\" x=\"3437.6442\" y=\"-446.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 10.375</text>\n</g>\n<!-- 137&#45;&gt;138 -->\n<g id=\"edge138\" class=\"edge\">\n<title>137&#45;&gt;138</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3529.8871,-503.8314C3529.5663,-496.131 3529.1848,-486.9743 3528.8282,-478.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3532.3248,-478.2589 3528.4114,-468.4133 3525.3308,-478.5503 3532.3248,-478.2589\"/>\n</g>\n<!-- 143 -->\n<g id=\"node144\" class=\"node\">\n<title>143</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M3819.6442,-468C3819.6442,-468 3655.6442,-468 3655.6442,-468 3649.6442,-468 3643.6442,-462 3643.6442,-456 3643.6442,-456 3643.6442,-444 3643.6442,-444 3643.6442,-438 3649.6442,-432 3655.6442,-432 3655.6442,-432 3819.6442,-432 3819.6442,-432 3825.6442,-432 3831.6442,-438 3831.6442,-444 3831.6442,-444 3831.6442,-456 3831.6442,-456 3831.6442,-462 3825.6442,-468 3819.6442,-468\"/>\n<text text-anchor=\"start\" x=\"3651.6442\" y=\"-446.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 10.72</text>\n</g>\n<!-- 137&#45;&gt;143 -->\n<g id=\"edge143\" class=\"edge\">\n<title>137&#45;&gt;143</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3582.6118,-503.9243C3611.033,-494.0387 3646.4144,-481.7321 3676.1978,-471.3726\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3677.36,-474.6742 3685.6551,-468.0831 3675.0603,-468.0627 3677.36,-474.6742\"/>\n</g>\n<!-- 139 -->\n<g id=\"node140\" class=\"node\">\n<title>139</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"3364.6442\" cy=\"-378\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"3322.1442\" y=\"-374.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 138&#45;&gt;139 -->\n<g id=\"edge139\" class=\"edge\">\n<title>138&#45;&gt;139</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3486.5124,-431.8314C3462.7835,-421.3499 3432.9467,-408.1704 3408.7351,-397.4757\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3409.9796,-394.1993 3399.4181,-393.3603 3407.1512,-400.6024 3409.9796,-394.1993\"/>\n</g>\n<!-- 140 -->\n<g id=\"node141\" class=\"node\">\n<title>140</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M3632.6442,-396C3632.6442,-396 3460.6442,-396 3460.6442,-396 3454.6442,-396 3448.6442,-390 3448.6442,-384 3448.6442,-384 3448.6442,-372 3448.6442,-372 3448.6442,-366 3454.6442,-360 3460.6442,-360 3460.6442,-360 3632.6442,-360 3632.6442,-360 3638.6442,-360 3644.6442,-366 3644.6442,-372 3644.6442,-372 3644.6442,-384 3644.6442,-384 3644.6442,-390 3638.6442,-396 3632.6442,-396\"/>\n<text text-anchor=\"start\" x=\"3456.6442\" y=\"-374.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 10.395</text>\n</g>\n<!-- 138&#45;&gt;140 -->\n<g id=\"edge140\" class=\"edge\">\n<title>138&#45;&gt;140</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3532.4387,-431.8314C3534.4931,-424.0463 3536.9402,-414.7729 3539.2197,-406.1347\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3542.6177,-406.9753 3541.7851,-396.4133 3535.8493,-405.1892 3542.6177,-406.9753\"/>\n</g>\n<!-- 141 -->\n<g id=\"node142\" class=\"node\">\n<title>141</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"3527.6442\" cy=\"-306\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"3485.1442\" y=\"-302.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 1</text>\n</g>\n<!-- 140&#45;&gt;141 -->\n<g id=\"edge141\" class=\"edge\">\n<title>140&#45;&gt;141</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3541.8497,-359.8314C3539.7953,-352.0463 3537.3481,-342.7729 3535.0686,-334.1347\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3538.439,-333.1892 3532.5032,-324.4133 3531.6707,-334.9753 3538.439,-333.1892\"/>\n</g>\n<!-- 142 -->\n<g id=\"node143\" class=\"node\">\n<title>142</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"3676.6442\" cy=\"-306\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"3634.1442\" y=\"-302.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 140&#45;&gt;142 -->\n<g id=\"edge142\" class=\"edge\">\n<title>140&#45;&gt;142</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3579.4487,-359.8314C3597.4186,-349.8788 3619.7808,-337.4936 3638.5236,-327.1129\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3640.3466,-330.1043 3647.3988,-322.1975 3636.9551,-323.9807 3640.3466,-330.1043\"/>\n</g>\n<!-- 144 -->\n<g id=\"node145\" class=\"node\">\n<title>144</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"3734.6442\" cy=\"-378\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"3692.1442\" y=\"-374.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 143&#45;&gt;144 -->\n<g id=\"edge144\" class=\"edge\">\n<title>143&#45;&gt;144</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3736.8871,-431.8314C3736.5663,-424.131 3736.1848,-414.9743 3735.8282,-406.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3739.3248,-406.2589 3735.4114,-396.4133 3732.3308,-406.5503 3739.3248,-406.2589\"/>\n</g>\n<!-- 145 -->\n<g id=\"node146\" class=\"node\">\n<title>145</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M4101.1442,-396C4101.1442,-396 3830.1442,-396 3830.1442,-396 3824.1442,-396 3818.1442,-390 3818.1442,-384 3818.1442,-384 3818.1442,-372 3818.1442,-372 3818.1442,-366 3824.1442,-360 3830.1442,-360 3830.1442,-360 4101.1442,-360 4101.1442,-360 4107.1442,-360 4113.1442,-366 4113.1442,-372 4113.1442,-372 4113.1442,-384 4113.1442,-384 4113.1442,-390 4107.1442,-396 4101.1442,-396\"/>\n<text text-anchor=\"start\" x=\"3826.1442\" y=\"-374.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 10.870000000000001</text>\n</g>\n<!-- 143&#45;&gt;145 -->\n<g id=\"edge145\" class=\"edge\">\n<title>143&#45;&gt;145</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3794.8839,-431.9243C3826.4594,-421.9531 3865.8346,-409.5188 3898.8148,-399.104\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3899.899,-402.4321 3908.3809,-396.0831 3897.7911,-395.757 3899.899,-402.4321\"/>\n</g>\n<!-- 146 -->\n<g id=\"node147\" class=\"node\">\n<title>146</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"3895.6442\" cy=\"-306\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"3853.1442\" y=\"-302.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 145&#45;&gt;146 -->\n<g id=\"edge146\" class=\"edge\">\n<title>145&#45;&gt;146</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3947.9802,-359.8314C3939.4154,-351.0218 3928.9975,-340.3063 3919.7184,-330.7621\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3922.0584,-328.1479 3912.5781,-323.4177 3917.0394,-333.0275 3922.0584,-328.1479\"/>\n</g>\n<!-- 147 -->\n<g id=\"node148\" class=\"node\">\n<title>147</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"4044.6442\" cy=\"-306\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"4002.1442\" y=\"-302.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 145&#45;&gt;147 -->\n<g id=\"edge147\" class=\"edge\">\n<title>145&#45;&gt;147</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3985.5792,-359.8314C3995.4367,-350.8473 4007.469,-339.8812 4018.0952,-330.1965\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"4020.4997,-332.7406 4025.5331,-323.4177 4015.7845,-327.5669 4020.4997,-332.7406\"/>\n</g>\n<!-- 151 -->\n<g id=\"node152\" class=\"node\">\n<title>151</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"3354.6442\" cy=\"-810\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"3312.1442\" y=\"-806.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 1</text>\n</g>\n<!-- 150&#45;&gt;151 -->\n<g id=\"edge151\" class=\"edge\">\n<title>150&#45;&gt;151</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3354.6442,-863.8314C3354.6442,-856.131 3354.6442,-846.9743 3354.6442,-838.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3358.1443,-838.4132 3354.6442,-828.4133 3351.1443,-838.4133 3358.1443,-838.4132\"/>\n</g>\n<!-- 152 -->\n<g id=\"node153\" class=\"node\">\n<title>152</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M3608.1442,-828C3608.1442,-828 3453.1442,-828 3453.1442,-828 3447.1442,-828 3441.1442,-822 3441.1442,-816 3441.1442,-816 3441.1442,-804 3441.1442,-804 3441.1442,-798 3447.1442,-792 3453.1442,-792 3453.1442,-792 3608.1442,-792 3608.1442,-792 3614.1442,-792 3620.1442,-798 3620.1442,-804 3620.1442,-804 3620.1442,-816 3620.1442,-816 3620.1442,-822 3614.1442,-828 3608.1442,-828\"/>\n<text text-anchor=\"start\" x=\"3449.1442\" y=\"-806.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 11.1</text>\n</g>\n<!-- 150&#45;&gt;152 -->\n<g id=\"edge152\" class=\"edge\">\n<title>150&#45;&gt;152</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3399.0564,-863.8314C3422.8046,-854.1162 3452.2188,-842.0831 3477.2105,-831.8592\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3478.6211,-835.0638 3486.5513,-828.038 3475.9706,-828.585 3478.6211,-835.0638\"/>\n</g>\n<!-- 153 -->\n<g id=\"node154\" class=\"node\">\n<title>153</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"3530.6442\" cy=\"-738\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"3488.1442\" y=\"-734.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 152&#45;&gt;153 -->\n<g id=\"edge153\" class=\"edge\">\n<title>152&#45;&gt;153</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3530.6442,-791.8314C3530.6442,-784.131 3530.6442,-774.9743 3530.6442,-766.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3534.1443,-766.4132 3530.6442,-756.4133 3527.1443,-766.4133 3534.1443,-766.4132\"/>\n</g>\n<!-- 154 -->\n<g id=\"node155\" class=\"node\">\n<title>154</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M3798.6442,-756C3798.6442,-756 3626.6442,-756 3626.6442,-756 3620.6442,-756 3614.6442,-750 3614.6442,-744 3614.6442,-744 3614.6442,-732 3614.6442,-732 3614.6442,-726 3620.6442,-720 3626.6442,-720 3626.6442,-720 3798.6442,-720 3798.6442,-720 3804.6442,-720 3810.6442,-726 3810.6442,-732 3810.6442,-732 3810.6442,-744 3810.6442,-744 3810.6442,-750 3804.6442,-756 3798.6442,-756\"/>\n<text text-anchor=\"start\" x=\"3622.6442\" y=\"-734.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 11.165</text>\n</g>\n<!-- 152&#45;&gt;154 -->\n<g id=\"edge154\" class=\"edge\">\n<title>152&#45;&gt;154</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3576.5705,-791.8314C3601.2364,-782.0734 3631.8133,-769.977 3657.7302,-759.7242\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3659.0369,-762.9713 3667.0481,-756.038 3656.4618,-756.4621 3659.0369,-762.9713\"/>\n</g>\n<!-- 155 -->\n<g id=\"node156\" class=\"node\">\n<title>155</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"3712.6442\" cy=\"-666\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"3670.1442\" y=\"-662.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 154&#45;&gt;155 -->\n<g id=\"edge155\" class=\"edge\">\n<title>154&#45;&gt;155</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3712.6442,-719.8314C3712.6442,-712.131 3712.6442,-702.9743 3712.6442,-694.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3716.1443,-694.4132 3712.6442,-684.4133 3709.1443,-694.4133 3716.1443,-694.4132\"/>\n</g>\n<!-- 156 -->\n<g id=\"node157\" class=\"node\">\n<title>156</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M3980.6442,-684C3980.6442,-684 3808.6442,-684 3808.6442,-684 3802.6442,-684 3796.6442,-678 3796.6442,-672 3796.6442,-672 3796.6442,-660 3796.6442,-660 3796.6442,-654 3802.6442,-648 3808.6442,-648 3808.6442,-648 3980.6442,-648 3980.6442,-648 3986.6442,-648 3992.6442,-654 3992.6442,-660 3992.6442,-660 3992.6442,-672 3992.6442,-672 3992.6442,-678 3986.6442,-684 3980.6442,-684\"/>\n<text text-anchor=\"start\" x=\"3804.6442\" y=\"-662.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 11.285</text>\n</g>\n<!-- 154&#45;&gt;156 -->\n<g id=\"edge156\" class=\"edge\">\n<title>154&#45;&gt;156</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3758.5705,-719.8314C3783.2364,-710.0734 3813.8133,-697.977 3839.7302,-687.7242\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3841.0369,-690.9713 3849.0481,-684.038 3838.4618,-684.4621 3841.0369,-690.9713\"/>\n</g>\n<!-- 157 -->\n<g id=\"node158\" class=\"node\">\n<title>157</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"3875.6442\" cy=\"-594\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"3833.1442\" y=\"-590.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 156&#45;&gt;157 -->\n<g id=\"edge157\" class=\"edge\">\n<title>156&#45;&gt;157</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3889.8497,-647.8314C3887.7953,-640.0463 3885.3481,-630.7729 3883.0686,-622.1347\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3886.439,-621.1892 3880.5032,-612.4133 3879.6707,-622.9753 3886.439,-621.1892\"/>\n</g>\n<!-- 158 -->\n<g id=\"node159\" class=\"node\">\n<title>158</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"4024.6442\" cy=\"-594\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"3982.1442\" y=\"-590.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 156&#45;&gt;158 -->\n<g id=\"edge158\" class=\"edge\">\n<title>156&#45;&gt;158</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3927.4487,-647.8314C3945.4186,-637.8788 3967.7808,-625.4936 3986.5236,-615.1129\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3988.3466,-618.1043 3995.3988,-610.1975 3984.9551,-611.9807 3988.3466,-618.1043\"/>\n</g>\n<!-- 160 -->\n<g id=\"node161\" class=\"node\">\n<title>160</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"3536.6442\" cy=\"-882\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"3494.1442\" y=\"-878.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 1</text>\n</g>\n<!-- 159&#45;&gt;160 -->\n<g id=\"edge160\" class=\"edge\">\n<title>159&#45;&gt;160</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3562.8122,-935.8314C3558.8861,-927.7547 3554.1812,-918.0761 3549.8503,-909.1668\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3552.8719,-907.3769 3545.3521,-899.9134 3546.5763,-910.4373 3552.8719,-907.3769\"/>\n</g>\n<!-- 161 -->\n<g id=\"node162\" class=\"node\">\n<title>161</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"3685.6442\" cy=\"-882\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"3643.1442\" y=\"-878.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 159&#45;&gt;161 -->\n<g id=\"edge161\" class=\"edge\">\n<title>159&#45;&gt;161</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3600.4112,-935.8314C3615.6603,-926.2003 3634.5162,-914.2913 3650.6126,-904.1252\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3652.6447,-906.9814 3659.2306,-898.6822 3648.9068,-901.063 3652.6447,-906.9814\"/>\n</g>\n<!-- 163 -->\n<g id=\"node164\" class=\"node\">\n<title>163</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M4053.1442,-972C4053.1442,-972 3782.1442,-972 3782.1442,-972 3776.1442,-972 3770.1442,-966 3770.1442,-960 3770.1442,-960 3770.1442,-948 3770.1442,-948 3770.1442,-942 3776.1442,-936 3782.1442,-936 3782.1442,-936 4053.1442,-936 4053.1442,-936 4059.1442,-936 4065.1442,-942 4065.1442,-948 4065.1442,-948 4065.1442,-960 4065.1442,-960 4065.1442,-966 4059.1442,-972 4053.1442,-972\"/>\n<text text-anchor=\"start\" x=\"3778.1442\" y=\"-950.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 11.934999999999999</text>\n</g>\n<!-- 162&#45;&gt;163 -->\n<g id=\"edge163\" class=\"edge\">\n<title>162&#45;&gt;163</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3917.6442,-1007.8314C3917.6442,-1000.131 3917.6442,-990.9743 3917.6442,-982.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3921.1443,-982.4132 3917.6442,-972.4133 3914.1443,-982.4133 3921.1443,-982.4132\"/>\n</g>\n<!-- 168 -->\n<g id=\"node169\" class=\"node\">\n<title>168</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M4317.6442,-972C4317.6442,-972 4145.6442,-972 4145.6442,-972 4139.6442,-972 4133.6442,-966 4133.6442,-960 4133.6442,-960 4133.6442,-948 4133.6442,-948 4133.6442,-942 4139.6442,-936 4145.6442,-936 4145.6442,-936 4317.6442,-936 4317.6442,-936 4323.6442,-936 4329.6442,-942 4329.6442,-948 4329.6442,-948 4329.6442,-960 4329.6442,-960 4329.6442,-966 4323.6442,-972 4317.6442,-972\"/>\n<text text-anchor=\"start\" x=\"4141.6442\" y=\"-950.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 12.575</text>\n</g>\n<!-- 162&#45;&gt;168 -->\n<g id=\"edge168\" class=\"edge\">\n<title>162&#45;&gt;168</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3996.4743,-1007.9243C4041.071,-997.6983 4096.9653,-984.8818 4143.0713,-974.3097\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"4144.0892,-977.6672 4153.054,-972.0207 4142.5247,-970.8443 4144.0892,-977.6672\"/>\n</g>\n<!-- 164 -->\n<g id=\"node165\" class=\"node\">\n<title>164</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M3953.6442,-900C3953.6442,-900 3781.6442,-900 3781.6442,-900 3775.6442,-900 3769.6442,-894 3769.6442,-888 3769.6442,-888 3769.6442,-876 3769.6442,-876 3769.6442,-870 3775.6442,-864 3781.6442,-864 3781.6442,-864 3953.6442,-864 3953.6442,-864 3959.6442,-864 3965.6442,-870 3965.6442,-876 3965.6442,-876 3965.6442,-888 3965.6442,-888 3965.6442,-894 3959.6442,-900 3953.6442,-900\"/>\n<text text-anchor=\"start\" x=\"3777.6442\" y=\"-878.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 11.925</text>\n</g>\n<!-- 163&#45;&gt;164 -->\n<g id=\"edge164\" class=\"edge\">\n<title>163&#45;&gt;164</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3905.0271,-935.8314C3899.327,-927.6232 3892.4779,-917.7606 3886.2083,-908.7323\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3889.01,-906.6306 3880.4312,-900.4133 3883.2604,-910.6234 3889.01,-906.6306\"/>\n</g>\n<!-- 167 -->\n<g id=\"node168\" class=\"node\">\n<title>167</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"4049.6442\" cy=\"-882\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"4007.1442\" y=\"-878.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 163&#45;&gt;167 -->\n<g id=\"edge167\" class=\"edge\">\n<title>163&#45;&gt;167</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3950.9533,-935.8314C3969.1998,-925.8788 3991.9059,-913.4936 4010.9371,-903.1129\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"4012.8459,-906.0587 4019.9488,-898.1975 4009.4939,-899.9134 4012.8459,-906.0587\"/>\n</g>\n<!-- 165 -->\n<g id=\"node166\" class=\"node\">\n<title>165</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"3731.6442\" cy=\"-810\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"3689.1442\" y=\"-806.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 164&#45;&gt;165 -->\n<g id=\"edge165\" class=\"edge\">\n<title>164&#45;&gt;165</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3833.3256,-863.8314C3814.4408,-853.8335 3790.9193,-841.3809 3771.257,-830.9715\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3772.7149,-827.7831 3762.2394,-826.1975 3769.4396,-833.9697 3772.7149,-827.7831\"/>\n</g>\n<!-- 166 -->\n<g id=\"node167\" class=\"node\">\n<title>166</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"3880.6442\" cy=\"-810\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"3838.1442\" y=\"-806.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 1</text>\n</g>\n<!-- 164&#45;&gt;166 -->\n<g id=\"edge166\" class=\"edge\">\n<title>164&#45;&gt;166</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M3870.9246,-863.8314C3872.315,-856.131 3873.9683,-846.9743 3875.5134,-838.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3878.987,-838.8761 3877.3196,-828.4133 3872.0983,-837.6322 3878.987,-838.8761\"/>\n</g>\n<!-- 169 -->\n<g id=\"node170\" class=\"node\">\n<title>169</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M4317.6442,-900C4317.6442,-900 4145.6442,-900 4145.6442,-900 4139.6442,-900 4133.6442,-894 4133.6442,-888 4133.6442,-888 4133.6442,-876 4133.6442,-876 4133.6442,-870 4139.6442,-864 4145.6442,-864 4145.6442,-864 4317.6442,-864 4317.6442,-864 4323.6442,-864 4329.6442,-870 4329.6442,-876 4329.6442,-876 4329.6442,-888 4329.6442,-888 4329.6442,-894 4323.6442,-900 4317.6442,-900\"/>\n<text text-anchor=\"start\" x=\"4141.6442\" y=\"-878.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 12.485</text>\n</g>\n<!-- 168&#45;&gt;169 -->\n<g id=\"edge169\" class=\"edge\">\n<title>168&#45;&gt;169</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M4231.6442,-935.8314C4231.6442,-928.131 4231.6442,-918.9743 4231.6442,-910.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"4235.1443,-910.4132 4231.6442,-900.4133 4228.1443,-910.4133 4235.1443,-910.4132\"/>\n</g>\n<!-- 174 -->\n<g id=\"node175\" class=\"node\">\n<title>174</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M4631.1442,-900C4631.1442,-900 4360.1442,-900 4360.1442,-900 4354.1442,-900 4348.1442,-894 4348.1442,-888 4348.1442,-888 4348.1442,-876 4348.1442,-876 4348.1442,-870 4354.1442,-864 4360.1442,-864 4360.1442,-864 4631.1442,-864 4631.1442,-864 4637.1442,-864 4643.1442,-870 4643.1442,-876 4643.1442,-876 4643.1442,-888 4643.1442,-888 4643.1442,-894 4637.1442,-900 4631.1442,-900\"/>\n<text text-anchor=\"start\" x=\"4356.1442\" y=\"-878.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 12.780000000000001</text>\n</g>\n<!-- 168&#45;&gt;174 -->\n<g id=\"edge174\" class=\"edge\">\n<title>168&#45;&gt;174</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M4297.9218,-935.9243C4334.7967,-925.8675 4380.8586,-913.3052 4419.2445,-902.8363\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"4420.6126,-906.0911 4429.3393,-900.0831 4418.7707,-899.3377 4420.6126,-906.0911\"/>\n</g>\n<!-- 170 -->\n<g id=\"node171\" class=\"node\">\n<title>170</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M4161.6442,-828C4161.6442,-828 3989.6442,-828 3989.6442,-828 3983.6442,-828 3977.6442,-822 3977.6442,-816 3977.6442,-816 3977.6442,-804 3977.6442,-804 3977.6442,-798 3983.6442,-792 3989.6442,-792 3989.6442,-792 4161.6442,-792 4161.6442,-792 4167.6442,-792 4173.6442,-798 4173.6442,-804 4173.6442,-804 4173.6442,-816 4173.6442,-816 4173.6442,-822 4167.6442,-828 4161.6442,-828\"/>\n<text text-anchor=\"start\" x=\"3985.6442\" y=\"-806.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 12.415</text>\n</g>\n<!-- 169&#45;&gt;170 -->\n<g id=\"edge170\" class=\"edge\">\n<title>169&#45;&gt;170</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M4192.2788,-863.8314C4171.5074,-854.2446 4145.8458,-842.4008 4123.8861,-832.2655\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"4125.2728,-829.0508 4114.7265,-828.038 4122.3394,-835.4065 4125.2728,-829.0508\"/>\n</g>\n<!-- 173 -->\n<g id=\"node174\" class=\"node\">\n<title>173</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"4257.6442\" cy=\"-810\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"4215.1442\" y=\"-806.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 1</text>\n</g>\n<!-- 169&#45;&gt;173 -->\n<g id=\"edge173\" class=\"edge\">\n<title>169&#45;&gt;173</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M4238.2051,-863.8314C4241.0906,-855.8406 4244.5424,-846.2819 4247.7312,-837.4514\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"4251.0709,-838.5077 4251.1754,-827.9134 4244.487,-836.1302 4251.0709,-838.5077\"/>\n</g>\n<!-- 171 -->\n<g id=\"node172\" class=\"node\">\n<title>171</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"3951.6442\" cy=\"-738\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"3909.1442\" y=\"-734.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 170&#45;&gt;171 -->\n<g id=\"edge171\" class=\"edge\">\n<title>170&#45;&gt;171</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M4044.3537,-791.8314C4027.4912,-782.0402 4006.574,-769.8947 3988.878,-759.6196\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"3990.3617,-756.4339 3979.9563,-754.4393 3986.8467,-762.4874 3990.3617,-756.4339\"/>\n</g>\n<!-- 172 -->\n<g id=\"node173\" class=\"node\">\n<title>172</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"4100.6442\" cy=\"-738\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"4058.1442\" y=\"-734.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 170&#45;&gt;172 -->\n<g id=\"edge172\" class=\"edge\">\n<title>170&#45;&gt;172</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M4081.9527,-791.8314C4084.6559,-784.0463 4087.8758,-774.7729 4090.8752,-766.1347\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"4094.2769,-767.0081 4094.2507,-756.4133 4087.6641,-764.7119 4094.2769,-767.0081\"/>\n</g>\n<!-- 175 -->\n<g id=\"node176\" class=\"node\">\n<title>175</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"4451.6442\" cy=\"-810\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"4409.1442\" y=\"-806.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 174&#45;&gt;175 -->\n<g id=\"edge175\" class=\"edge\">\n<title>174&#45;&gt;175</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M4484.5411,-863.8314C4479.5004,-855.5829 4473.4386,-845.6635 4467.8992,-836.5992\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"4470.7923,-834.6212 4462.5913,-827.9134 4464.8193,-838.2713 4470.7923,-834.6212\"/>\n</g>\n<!-- 176 -->\n<g id=\"node177\" class=\"node\">\n<title>176</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M4711.6442,-828C4711.6442,-828 4547.6442,-828 4547.6442,-828 4541.6442,-828 4535.6442,-822 4535.6442,-816 4535.6442,-816 4535.6442,-804 4535.6442,-804 4535.6442,-798 4541.6442,-792 4547.6442,-792 4547.6442,-792 4711.6442,-792 4711.6442,-792 4717.6442,-792 4723.6442,-798 4723.6442,-804 4723.6442,-804 4723.6442,-816 4723.6442,-816 4723.6442,-822 4717.6442,-828 4711.6442,-828\"/>\n<text text-anchor=\"start\" x=\"4543.6442\" y=\"-806.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 13.43</text>\n</g>\n<!-- 174&#45;&gt;176 -->\n<g id=\"edge176\" class=\"edge\">\n<title>174&#45;&gt;176</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M4529.458,-863.8314C4546.9149,-854.4516 4568.3928,-842.9112 4586.9794,-832.9244\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"4588.6888,-835.9792 4595.8411,-828.1628 4585.3756,-829.8129 4588.6888,-835.9792\"/>\n</g>\n<!-- 177 -->\n<g id=\"node178\" class=\"node\">\n<title>177</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M4595.6442,-756C4595.6442,-756 4431.6442,-756 4431.6442,-756 4425.6442,-756 4419.6442,-750 4419.6442,-744 4419.6442,-744 4419.6442,-732 4419.6442,-732 4419.6442,-726 4425.6442,-720 4431.6442,-720 4431.6442,-720 4595.6442,-720 4595.6442,-720 4601.6442,-720 4607.6442,-726 4607.6442,-732 4607.6442,-732 4607.6442,-744 4607.6442,-744 4607.6442,-750 4601.6442,-756 4595.6442,-756\"/>\n<text text-anchor=\"start\" x=\"4427.6442\" y=\"-734.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 13.17</text>\n</g>\n<!-- 176&#45;&gt;177 -->\n<g id=\"edge177\" class=\"edge\">\n<title>176&#45;&gt;177</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M4600.3725,-791.8314C4585.5354,-782.6221 4567.3427,-771.3301 4551.4579,-761.4706\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"4553.2487,-758.4628 4542.9065,-756.1628 4549.5571,-764.4102 4553.2487,-758.4628\"/>\n</g>\n<!-- 184 -->\n<g id=\"node185\" class=\"node\">\n<title>184</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M4830.6442,-756C4830.6442,-756 4658.6442,-756 4658.6442,-756 4652.6442,-756 4646.6442,-750 4646.6442,-744 4646.6442,-744 4646.6442,-732 4646.6442,-732 4646.6442,-726 4652.6442,-720 4658.6442,-720 4658.6442,-720 4830.6442,-720 4830.6442,-720 4836.6442,-720 4842.6442,-726 4842.6442,-732 4842.6442,-732 4842.6442,-744 4842.6442,-744 4842.6442,-750 4836.6442,-756 4830.6442,-756\"/>\n<text text-anchor=\"start\" x=\"4654.6442\" y=\"-734.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 13.645</text>\n</g>\n<!-- 176&#45;&gt;184 -->\n<g id=\"edge184\" class=\"edge\">\n<title>176&#45;&gt;184</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M4658.6635,-791.8314C4673.3727,-782.6221 4691.4086,-771.3301 4707.1564,-761.4706\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"4709.0156,-764.436 4715.6341,-756.1628 4705.3009,-758.5029 4709.0156,-764.436\"/>\n</g>\n<!-- 178 -->\n<g id=\"node179\" class=\"node\">\n<title>178</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"4282.6442\" cy=\"-666\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"4240.1442\" y=\"-662.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 177&#45;&gt;178 -->\n<g id=\"edge178\" class=\"edge\">\n<title>177&#45;&gt;178</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M4455.6513,-719.9243C4418.8809,-708.4634 4371.6706,-693.7485 4335.8586,-682.5863\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"4336.6667,-679.1722 4326.0781,-679.5379 4334.5836,-685.8551 4336.6667,-679.1722\"/>\n</g>\n<!-- 179 -->\n<g id=\"node180\" class=\"node\">\n<title>179</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M4649.1442,-684C4649.1442,-684 4378.1442,-684 4378.1442,-684 4372.1442,-684 4366.1442,-678 4366.1442,-672 4366.1442,-672 4366.1442,-660 4366.1442,-660 4366.1442,-654 4372.1442,-648 4378.1442,-648 4378.1442,-648 4649.1442,-648 4649.1442,-648 4655.1442,-648 4661.1442,-654 4661.1442,-660 4661.1442,-660 4661.1442,-672 4661.1442,-672 4661.1442,-678 4655.1442,-684 4649.1442,-684\"/>\n<text text-anchor=\"start\" x=\"4374.1442\" y=\"-662.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 13.254999999999999</text>\n</g>\n<!-- 177&#45;&gt;179 -->\n<g id=\"edge179\" class=\"edge\">\n<title>177&#45;&gt;179</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M4513.6442,-719.8314C4513.6442,-712.131 4513.6442,-702.9743 4513.6442,-694.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"4517.1443,-694.4132 4513.6442,-684.4133 4510.1443,-694.4133 4517.1443,-694.4132\"/>\n</g>\n<!-- 180 -->\n<g id=\"node181\" class=\"node\">\n<title>180</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"4422.6442\" cy=\"-594\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"4380.1442\" y=\"-590.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 1</text>\n</g>\n<!-- 179&#45;&gt;180 -->\n<g id=\"edge180\" class=\"edge\">\n<title>179&#45;&gt;180</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M4490.681,-647.8314C4479.0194,-638.6045 4464.7152,-627.287 4452.2371,-617.4142\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"4454.3609,-614.6315 4444.347,-611.1715 4450.0175,-620.1211 4454.3609,-614.6315\"/>\n</g>\n<!-- 181 -->\n<g id=\"node182\" class=\"node\">\n<title>181</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M4690.6442,-612C4690.6442,-612 4518.6442,-612 4518.6442,-612 4512.6442,-612 4506.6442,-606 4506.6442,-600 4506.6442,-600 4506.6442,-588 4506.6442,-588 4506.6442,-582 4512.6442,-576 4518.6442,-576 4518.6442,-576 4690.6442,-576 4690.6442,-576 4696.6442,-576 4702.6442,-582 4702.6442,-588 4702.6442,-588 4702.6442,-600 4702.6442,-600 4702.6442,-606 4696.6442,-612 4690.6442,-612\"/>\n<text text-anchor=\"start\" x=\"4514.6442\" y=\"-590.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 13.295</text>\n</g>\n<!-- 179&#45;&gt;181 -->\n<g id=\"edge181\" class=\"edge\">\n<title>179&#45;&gt;181</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M4536.6073,-647.8314C4547.8157,-638.9632 4561.4651,-628.1637 4573.5881,-618.5718\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"4576.0179,-621.1125 4581.6884,-612.1628 4571.6745,-615.6229 4576.0179,-621.1125\"/>\n</g>\n<!-- 182 -->\n<g id=\"node183\" class=\"node\">\n<title>182</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"4530.6442\" cy=\"-522\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"4488.1442\" y=\"-518.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 181&#45;&gt;182 -->\n<g id=\"edge182\" class=\"edge\">\n<title>181&#45;&gt;182</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M4585.9709,-575.8314C4576.8269,-566.9346 4565.6851,-556.0939 4555.8031,-546.4789\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"4558.1538,-543.8827 4548.5457,-539.4177 4553.2722,-548.8998 4558.1538,-543.8827\"/>\n</g>\n<!-- 183 -->\n<g id=\"node184\" class=\"node\">\n<title>183</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"4679.6442\" cy=\"-522\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"4637.1442\" y=\"-518.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 1</text>\n</g>\n<!-- 181&#45;&gt;183 -->\n<g id=\"edge183\" class=\"edge\">\n<title>181&#45;&gt;183</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M4623.5698,-575.8314C4632.8373,-566.9346 4644.1297,-556.0939 4654.1453,-546.4789\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"4656.7107,-548.8679 4661.5007,-539.4177 4651.863,-543.8182 4656.7107,-548.8679\"/>\n</g>\n<!-- 185 -->\n<g id=\"node186\" class=\"node\">\n<title>185</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"4744.6442\" cy=\"-666\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"4702.1442\" y=\"-662.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 184&#45;&gt;185 -->\n<g id=\"edge185\" class=\"edge\">\n<title>184&#45;&gt;185</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M4744.6442,-719.8314C4744.6442,-712.131 4744.6442,-702.9743 4744.6442,-694.4166\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"4748.1443,-694.4132 4744.6442,-684.4133 4741.1443,-694.4133 4748.1443,-694.4132\"/>\n</g>\n<!-- 186 -->\n<g id=\"node187\" class=\"node\">\n<title>186</title>\n<path fill=\"transparent\" stroke=\"#000000\" d=\"M5004.6442,-684C5004.6442,-684 4840.6442,-684 4840.6442,-684 4834.6442,-684 4828.6442,-678 4828.6442,-672 4828.6442,-672 4828.6442,-660 4828.6442,-660 4828.6442,-654 4834.6442,-648 4840.6442,-648 4840.6442,-648 5004.6442,-648 5004.6442,-648 5010.6442,-648 5016.6442,-654 5016.6442,-660 5016.6442,-660 5016.6442,-672 5016.6442,-672 5016.6442,-678 5010.6442,-684 5004.6442,-684\"/>\n<text text-anchor=\"start\" x=\"4836.6442\" y=\"-662.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">feature#15900165 ≤ 14.11</text>\n</g>\n<!-- 184&#45;&gt;186 -->\n<g id=\"edge186\" class=\"edge\">\n<title>184&#45;&gt;186</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M4789.5611,-719.8314C4813.5792,-710.1162 4843.3276,-698.0831 4868.6033,-687.8592\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"4870.0924,-691.0325 4878.0503,-684.038 4867.4675,-684.5432 4870.0924,-691.0325\"/>\n</g>\n<!-- 187 -->\n<g id=\"node188\" class=\"node\">\n<title>187</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"4854.6442\" cy=\"-594\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"4812.1442\" y=\"-590.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 186&#45;&gt;187 -->\n<g id=\"edge187\" class=\"edge\">\n<title>186&#45;&gt;187</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M4905.4849,-647.8314C4897.2889,-639.1533 4887.3463,-628.6257 4878.4349,-619.1902\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"4880.9732,-616.7804 4871.5624,-611.9134 4875.8841,-621.5868 4880.9732,-616.7804\"/>\n</g>\n<!-- 188 -->\n<g id=\"node189\" class=\"node\">\n<title>188</title>\n<ellipse fill=\"transparent\" stroke=\"#000000\" cx=\"5003.6442\" cy=\"-594\" rx=\"65.7887\" ry=\"18\"/>\n<text text-anchor=\"start\" x=\"4961.1442\" y=\"-590.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">predicted = 0</text>\n</g>\n<!-- 186&#45;&gt;188 -->\n<g id=\"edge188\" class=\"edge\">\n<title>186&#45;&gt;188</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M4943.0839,-647.8314C4953.1909,-638.8473 4965.5279,-627.8812 4976.4231,-618.1965\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"4978.9004,-620.6773 4984.0492,-611.4177 4974.2498,-615.4454 4978.9004,-620.6773\"/>\n</g>\n</g>\n</svg>\n"
},
"metadata": {
"tags": []
},
"execution_count": 32
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "IPORgFWz2N7N",
"colab_type": "text"
},
"source": [
"## Leveraging Python/PySpark More"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "q2TjtkX26L0s",
"colab_type": "text"
},
"source": [
"Preprocessing can be easy:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "KncPvJGR2bRB",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 459
},
"outputId": "fcb99fb2-e37a-4984-bc2f-3537b4d40162"
},
"source": [
"from pyspark.ml.feature import MinMaxScaler\n",
"from pyspark.ml import Pipeline\n",
"from pyspark.ml.feature import VectorAssembler\n",
"\n",
"assembler = VectorAssembler(\n",
" inputCols=['account_length'], \n",
" outputCol=\"account_length_vect\"\n",
")\n",
"scaler = MinMaxScaler(\n",
" inputCol=\"account_length_vect\", \n",
" outputCol=\"account_length_scaled\"\n",
")\n",
"\n",
"pipeline = Pipeline(stages=[assembler, scaler])\n",
"pipeline.fit(df) \\\n",
" .transform(df) \\\n",
" .select([\n",
" 'account_length', 'account_length_vect', \n",
" 'account_length_scaled'\n",
" ]).show()"
],
"execution_count": 33,
"outputs": [
{
"output_type": "stream",
"text": [
"+--------------+-------------------+---------------------+\n",
"|account_length|account_length_vect|account_length_scaled|\n",
"+--------------+-------------------+---------------------+\n",
"| 128| [128.0]| [0.5247933884297521]|\n",
"| 107| [107.0]| [0.4380165289256198]|\n",
"| 137| [137.0]| [0.5619834710743802]|\n",
"| 84| [84.0]| [0.34297520661157...|\n",
"| 75| [75.0]| [0.30578512396694...|\n",
"| 118| [118.0]| [0.4834710743801653]|\n",
"| 121| [121.0]| [0.49586776859504...|\n",
"| 147| [147.0]| [0.6033057851239669]|\n",
"| 117| [117.0]| [0.4793388429752066]|\n",
"| 141| [141.0]| [0.5785123966942148]|\n",
"| 65| [65.0]| [0.2644628099173554]|\n",
"| 74| [74.0]| [0.30165289256198...|\n",
"| 168| [168.0]| [0.6900826446280992]|\n",
"| 95| [95.0]| [0.3884297520661157]|\n",
"| 62| [62.0]| [0.25206611570247...|\n",
"| 161| [161.0]| [0.6611570247933884]|\n",
"| 85| [85.0]| [0.34710743801652...|\n",
"| 93| [93.0]| [0.38016528925619...|\n",
"| 76| [76.0]| [0.30991735537190...|\n",
"| 73| [73.0]| [0.2975206611570248]|\n",
"+--------------+-------------------+---------------------+\n",
"only showing top 20 rows\n",
"\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "vNh1msXA-ydR",
"colab_type": "text"
},
"source": [
"Dynamically generate the training query:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "SuSWMrFM-zVD",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"outputId": "58ef4990-fbdc-4336-a38c-75ecc603434e"
},
"source": [
"q = \"\"\"\n",
"SELECT\n",
" feature,\n",
" avg(weight) as weight\n",
"FROM (\n",
" SELECT\n",
" train_classifier(\n",
" features, \n",
" label,\n",
" '-loss logloss -opt SGD -reg l1 -lambda {0} -eta0 {1}'\n",
" ) as (feature, weight)\n",
" FROM\n",
" train\n",
") t\n",
"GROUP BY 1\n",
"\"\"\"\n",
"\n",
"hyperparams = [\n",
" (0.01, 0.01),\n",
" (0.03, 0.01),\n",
" (0.03, 0.03),\n",
" ( 0.1, 0.03)\n",
" # ...\n",
"]\n",
"\n",
"for reg_lambda, eta0 in hyperparams:\n",
" sql.spark(q.format(reg_lambda, eta0))"
],
"execution_count": 49,
"outputs": [
{
"output_type": "stream",
"text": [
"\n",
"SELECT\n",
" feature,\n",
" avg(weight) as weight\n",
"FROM (\n",
" SELECT\n",
" train_classifier(\n",
" features, \n",
" label,\n",
" '-loss logloss -opt SGD -reg l1 -lambda 0.01 -eta0 0.01'\n",
" ) as (feature, weight)\n",
" FROM\n",
" train\n",
") t\n",
"GROUP BY 1\n",
"\n",
"\n",
"SELECT\n",
" feature,\n",
" avg(weight) as weight\n",
"FROM (\n",
" SELECT\n",
" train_classifier(\n",
" features, \n",
" label,\n",
" '-loss logloss -opt SGD -reg l1 -lambda 0.03 -eta0 0.01'\n",
" ) as (feature, weight)\n",
" FROM\n",
" train\n",
") t\n",
"GROUP BY 1\n",
"\n",
"\n",
"SELECT\n",
" feature,\n",
" avg(weight) as weight\n",
"FROM (\n",
" SELECT\n",
" train_classifier(\n",
" features, \n",
" label,\n",
" '-loss logloss -opt SGD -reg l1 -lambda 0.03 -eta0 0.03'\n",
" ) as (feature, weight)\n",
" FROM\n",
" train\n",
") t\n",
"GROUP BY 1\n",
"\n",
"\n",
"SELECT\n",
" feature,\n",
" avg(weight) as weight\n",
"FROM (\n",
" SELECT\n",
" train_classifier(\n",
" features, \n",
" label,\n",
" '-loss logloss -opt SGD -reg l1 -lambda 0.1 -eta0 0.03'\n",
" ) as (feature, weight)\n",
" FROM\n",
" train\n",
") t\n",
"GROUP BY 1\n",
"\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "X9194RYS7qZz",
"colab_type": "text"
},
"source": [
"Many other evaluation metrics can be taken from MLlib:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "xcyIEmOu2cuj",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
},
"outputId": "7d49337c-7ed4-4a8c-ca3b-1c8f673c1cde"
},
"source": [
"from pyspark.mllib.evaluation import BinaryClassificationMetrics\n",
"\n",
"metrics = BinaryClassificationMetrics(\n",
" df_prediction.select(\n",
" df_prediction.prob, \n",
" df_prediction.expected.cast('float')\n",
" ).rdd.map(tuple)\n",
")\n",
"\n",
"metrics.areaUnderPR, metrics.areaUnderROC"
],
"execution_count": 34,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(0.25783248058994873, 0.6360049076499648)"
]
},
"metadata": {
"tags": []
},
"execution_count": 34
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "94SdN8JX5MVq",
"colab_type": "code",
"colab": {}
},
"source": [
""
],
"execution_count": 0,
"outputs": []
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment