CustomDecisionTree.ipynb (45045B)
1 { 2 "cells": [ 3 { 4 "cell_type": "code", 5 "execution_count": 1, 6 "metadata": {}, 7 "outputs": [], 8 "source": [ 9 "from sklearn.datasets import load_iris\n", 10 "\n", 11 "iris = load_iris(as_frame=True)\n", 12 "X = iris.data.values\n", 13 "y = iris.target\n", 14 "\n", 15 "columnNames = iris.data.columns.to_list()" 16 ] 17 }, 18 { 19 "cell_type": "code", 20 "execution_count": 2, 21 "metadata": {}, 22 "outputs": [ 23 { 24 "name": "stdout", 25 "output_type": "stream", 26 "text": [ 27 "(112, 4)\n", 28 "(38, 4)\n" 29 ] 30 } 31 ], 32 "source": [ 33 "from sklearn.model_selection import train_test_split\n", 34 "\n", 35 "X_train, X_test, y_train, y_test = train_test_split(X,y)\n", 36 "\n", 37 "print(X_train.shape)\n", 38 "print(X_test.shape)" 39 ] 40 }, 41 { 42 "cell_type": "code", 43 "execution_count": 3, 44 "metadata": {}, 45 "outputs": [], 46 "source": [ 47 "import numpy as np\n", 48 "\n", 49 "class Node:\n", 50 "\n", 51 " left = None\n", 52 " right = None\n", 53 " def __init__(self, splitOn=None,colName=None, splitVal=None):\n", 54 " self.splitVal = splitVal\n", 55 " self.splitOn = splitOn\n", 56 " self.colName = colName\n", 57 "\n", 58 "\n", 59 "# Pass in a list of the class membership for each element in the list\n", 60 "def giniImpurity(classList):\n", 61 " \n", 62 " # Get counts\n", 63 " counts = {}\n", 64 " for i in classList:\n", 65 " if i in counts:\n", 66 " counts[i] += 1\n", 67 " else:\n", 68 " counts[i] = 1\n", 69 " \n", 70 " # Calculate impurity\n", 71 " sumProbabilities = 0\n", 72 " totalElements = len(classList)\n", 73 "\n", 74 " for i in counts:\n", 75 " sumProbabilities += (counts[i] / totalElements)**2\n", 76 " \n", 77 " impurity = 1 - sumProbabilities\n", 78 " return impurity\n", 79 "\n", 80 "\n", 81 "# Pass in x values (one feature only) and classes\n", 82 "def bestSplit(x_vals, classes):\n", 83 "\n", 84 " sorted = np.sort(x_vals) \n", 85 " count = 1\n", 86 "\n", 87 " # Find pivot values (average between adjacent values)\n", 88 " pivots = []\n", 89 " while count < len(sorted):\n", 90 "\n", 91 " if sorted[count - 1] != sorted[count]: \n", 92 " pivots.append((sorted[count - 1] + sorted[count])/2)\n", 93 " count += 1\n", 94 "\n", 95 " optimalSplit = None\n", 96 " minWeightedImpurity = 10\n", 97 "u\n", 98 " # Iterate through keys\n", 99 " for pivot in pivots:\n", 100 "\n", 101 " left = []\n", 102 " right = []\n", 103 "\n", 104 " # Create left and right lists\n", 105 "\n", 106 " itr = 0\n", 107 " for x in x_vals:\n", 108 " if x <= pivot:\n", 109 " left.append(classes[itr])\n", 110 " else:\n", 111 " right.append(classes[itr]) \n", 112 " itr += 1\n", 113 "\n", 114 " weightedLeft = giniImpurity(left) * (len(left) / len(x_vals))\n", 115 " weightedRight = giniImpurity(right) * (len(right) / len(x_vals))\n", 116 "\n", 117 " weightedImpurity = weightedLeft + weightedRight\n", 118 " \n", 119 " if weightedImpurity < minWeightedImpurity:\n", 120 " minWeightedImpurity = weightedImpurity\n", 121 " optimalSplit = pivot\n", 122 "\n", 123 " return optimalSplit, minWeightedImpurity" 124 ] 125 }, 126 { 127 "cell_type": "code", 128 "execution_count": 4, 129 "metadata": {}, 130 "outputs": [], 131 "source": [ 132 "import numpy as np\n", 133 "\n", 134 "# Iterate through the columns and find the best one to minimize impurity\n", 135 "def split(x_vals, classes, columnNames):\n", 136 "\n", 137 " count = 0\n", 138 " optimalImpurity = 3\n", 139 " optimalSplitVal = 0\n", 140 " optimalIndex = 0\n", 141 "\n", 142 " while count < len(x_vals[0]):\n", 143 " split, impurity = bestSplit(x_vals[:,count], y)\n", 144 " if impurity < optimalImpurity:\n", 145 " optimalImpurity = impurity\n", 146 " optimalIndex = count\n", 147 " optimalSplitVal = split\n", 148 " count += 1\n", 149 " \n", 150 " # Create node\n", 151 " curNode = Node(colName=columnNames[optimalIndex], splitOn=optimalIndex, splitVal=optimalSplitVal)\n", 152 "\n", 153 " leftX = []\n", 154 " rightX = []\n", 155 " leftClass = []\n", 156 " rightClass = []\n", 157 "\n", 158 " for i in range(0, len(x_vals)):\n", 159 " if x_vals[i][optimalIndex] < optimalSplitVal:\n", 160 " leftX.append(x_vals[i])\n", 161 " leftClass.append(classes[i])\n", 162 " else:\n", 163 " rightX.append(x_vals[i])\n", 164 " rightClass.append(classes[i])\n", 165 "\n", 166 " if(len(leftX) == 0 or len(rightX) == 0):\n", 167 " return None,None,None,None,None\n", 168 " \n", 169 " return curNode,leftX, rightX, leftClass, rightClass \n", 170 "\n" 171 ] 172 }, 173 { 174 "cell_type": "code", 175 "execution_count": 5, 176 "metadata": {}, 177 "outputs": [], 178 "source": [ 179 "from graphviz import Digraph\n", 180 "\n", 181 "def recurse(ls, y,columnNames):\n", 182 " node, leftX, rightX, leftClass, rightClass = split(ls, y, columnNames)\n", 183 "\n", 184 " leftX = np.array(leftX)\n", 185 " leftClass = np.array(leftClass)\n", 186 " rightClass = np.array(rightClass)\n", 187 " rightX = np.array(rightX)\n", 188 " \n", 189 " if(node == None):\n", 190 " return Node()\n", 191 "\n", 192 " if(giniImpurity(leftClass) > 0):\n", 193 " node.left = recurse(np.array(leftX), np.array(leftClass), columnNames)\n", 194 " else:\n", 195 " node.left = Node()\n", 196 " \n", 197 " if(giniImpurity(rightClass) > 0):\n", 198 " node.right = recurse(np.array(rightX), np.array(rightClass), columnNames)\n", 199 " else:\n", 200 " node.right = Node()\n", 201 "\n", 202 " return node\n", 203 "\n", 204 "\n", 205 "graph = Digraph()\n", 206 "def graphTree(node):\n", 207 "\n", 208 " label = ''\n", 209 " if(node.colName != None):\n", 210 " label = str(node.colName) + ' <= ' + str(round(node.splitVal,2))\n", 211 " else:\n", 212 " label = 'Leaf'\n", 213 "\n", 214 "\n", 215 " graph.node(name=str(id(node)) , label=label)\n", 216 " if(node.left != None):\n", 217 " graph.edge(str(id(node)) , str(id(node.left)))\n", 218 " graphTree(node.left)\n", 219 "\n", 220 " if(node.right != None):\n", 221 " graph.edge(str(id(node)) , str(id(node.right)))\n", 222 " graphTree(node.right)\n" 223 ] 224 }, 225 { 226 "cell_type": "code", 227 "execution_count": 6, 228 "metadata": {}, 229 "outputs": [ 230 { 231 "data": { 232 "image/svg+xml": [ 233 "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n", 234 "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n", 235 " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n", 236 "<!-- Generated by graphviz version 2.43.0 (0)\n", 237 " -->\n", 238 "<!-- Title: %3 Pages: 1 -->\n", 239 "<svg width=\"1786pt\" height=\"836pt\"\n", 240 " viewBox=\"0.00 0.00 1786.33 836.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n", 241 "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 832)\">\n", 242 "<title>%3</title>\n", 243 "<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-832 1782.33,-832 1782.33,4 -4,4\"/>\n", 244 "<!-- 139950436257360 -->\n", 245 "<g id=\"node1\" class=\"node\">\n", 246 "<title>139950436257360</title>\n", 247 "<ellipse fill=\"none\" stroke=\"black\" cx=\"395.39\" cy=\"-810\" rx=\"131.88\" ry=\"18\"/>\n", 248 "<text text-anchor=\"middle\" x=\"395.39\" y=\"-806.3\" font-family=\"Times,serif\" font-size=\"14.00\">petal length (cm) <= 2.45</text>\n", 249 "</g>\n", 250 "<!-- 139951656820624 -->\n", 251 "<g id=\"node2\" class=\"node\">\n", 252 "<title>139951656820624</title>\n", 253 "<ellipse fill=\"none\" stroke=\"black\" cx=\"305.39\" cy=\"-738\" rx=\"30.59\" ry=\"18\"/>\n", 254 "<text text-anchor=\"middle\" x=\"305.39\" y=\"-734.3\" font-family=\"Times,serif\" font-size=\"14.00\">Leaf</text>\n", 255 "</g>\n", 256 "<!-- 139950436257360->139951656820624 -->\n", 257 "<g id=\"edge1\" class=\"edge\">\n", 258 "<title>139950436257360->139951656820624</title>\n", 259 "<path fill=\"none\" stroke=\"black\" d=\"M373.6,-792.05C360.76,-782.07 344.45,-769.38 331,-758.92\"/>\n", 260 "<polygon fill=\"black\" stroke=\"black\" points=\"333.09,-756.12 323.05,-752.74 328.8,-761.64 333.09,-756.12\"/>\n", 261 "</g>\n", 262 "<!-- 139950430599056 -->\n", 263 "<g id=\"node3\" class=\"node\">\n", 264 "<title>139950430599056</title>\n", 265 "<ellipse fill=\"none\" stroke=\"black\" cx=\"485.39\" cy=\"-738\" rx=\"131.88\" ry=\"18\"/>\n", 266 "<text text-anchor=\"middle\" x=\"485.39\" y=\"-734.3\" font-family=\"Times,serif\" font-size=\"14.00\">petal length (cm) <= 4.05</text>\n", 267 "</g>\n", 268 "<!-- 139950436257360->139950430599056 -->\n", 269 "<g id=\"edge2\" class=\"edge\">\n", 270 "<title>139950436257360->139950430599056</title>\n", 271 "<path fill=\"none\" stroke=\"black\" d=\"M417.18,-792.05C428.78,-783.03 443.23,-771.79 455.83,-761.99\"/>\n", 272 "<polygon fill=\"black\" stroke=\"black\" points=\"458.06,-764.69 463.8,-755.79 453.76,-759.17 458.06,-764.69\"/>\n", 273 "</g>\n", 274 "<!-- 139950430590416 -->\n", 275 "<g id=\"node4\" class=\"node\">\n", 276 "<title>139950430590416</title>\n", 277 "<ellipse fill=\"none\" stroke=\"black\" cx=\"396.39\" cy=\"-666\" rx=\"30.59\" ry=\"18\"/>\n", 278 "<text text-anchor=\"middle\" x=\"396.39\" y=\"-662.3\" font-family=\"Times,serif\" font-size=\"14.00\">Leaf</text>\n", 279 "</g>\n", 280 "<!-- 139950430599056->139950430590416 -->\n", 281 "<g id=\"edge3\" class=\"edge\">\n", 282 "<title>139950430599056->139950430590416</title>\n", 283 "<path fill=\"none\" stroke=\"black\" d=\"M463.84,-720.05C451.35,-710.23 435.54,-697.79 422.36,-687.43\"/>\n", 284 "<polygon fill=\"black\" stroke=\"black\" points=\"424.17,-684.4 414.15,-680.97 419.84,-689.9 424.17,-684.4\"/>\n", 285 "</g>\n", 286 "<!-- 139950430594832 -->\n", 287 "<g id=\"node5\" class=\"node\">\n", 288 "<title>139950430594832</title>\n", 289 "<ellipse fill=\"none\" stroke=\"black\" cx=\"575.39\" cy=\"-666\" rx=\"129.98\" ry=\"18\"/>\n", 290 "<text text-anchor=\"middle\" x=\"575.39\" y=\"-662.3\" font-family=\"Times,serif\" font-size=\"14.00\">sepal width (cm) <= 2.55</text>\n", 291 "</g>\n", 292 "<!-- 139950430599056->139950430594832 -->\n", 293 "<g id=\"edge4\" class=\"edge\">\n", 294 "<title>139950430599056->139950430594832</title>\n", 295 "<path fill=\"none\" stroke=\"black\" d=\"M507.18,-720.05C518.78,-711.03 533.23,-699.79 545.83,-689.99\"/>\n", 296 "<polygon fill=\"black\" stroke=\"black\" points=\"548.06,-692.69 553.8,-683.79 543.76,-687.17 548.06,-692.69\"/>\n", 297 "</g>\n", 298 "<!-- 139950430587152 -->\n", 299 "<g id=\"node6\" class=\"node\">\n", 300 "<title>139950430587152</title>\n", 301 "<ellipse fill=\"none\" stroke=\"black\" cx=\"395.39\" cy=\"-594\" rx=\"124.28\" ry=\"18\"/>\n", 302 "<text text-anchor=\"middle\" x=\"395.39\" y=\"-590.3\" font-family=\"Times,serif\" font-size=\"14.00\">sepal width (cm) <= 2.4</text>\n", 303 "</g>\n", 304 "<!-- 139950430594832->139950430587152 -->\n", 305 "<g id=\"edge5\" class=\"edge\">\n", 306 "<title>139950430594832->139950430587152</title>\n", 307 "<path fill=\"none\" stroke=\"black\" d=\"M533.64,-648.76C507.54,-638.61 473.74,-625.47 446.1,-614.72\"/>\n", 308 "<polygon fill=\"black\" stroke=\"black\" points=\"447.19,-611.39 436.6,-611.03 444.65,-617.91 447.19,-611.39\"/>\n", 309 "</g>\n", 310 "<!-- 139950430589776 -->\n", 311 "<g id=\"node13\" class=\"node\">\n", 312 "<title>139950430589776</title>\n", 313 "<ellipse fill=\"none\" stroke=\"black\" cx=\"756.39\" cy=\"-594\" rx=\"129.98\" ry=\"18\"/>\n", 314 "<text text-anchor=\"middle\" x=\"756.39\" y=\"-590.3\" font-family=\"Times,serif\" font-size=\"14.00\">sepal width (cm) <= 2.75</text>\n", 315 "</g>\n", 316 "<!-- 139950430594832->139950430589776 -->\n", 317 "<g id=\"edge12\" class=\"edge\">\n", 318 "<title>139950430594832->139950430589776</title>\n", 319 "<path fill=\"none\" stroke=\"black\" d=\"M616.91,-648.94C643.15,-638.79 677.24,-625.61 705.15,-614.82\"/>\n", 320 "<polygon fill=\"black\" stroke=\"black\" points=\"706.68,-617.98 714.74,-611.11 704.15,-611.45 706.68,-617.98\"/>\n", 321 "</g>\n", 322 "<!-- 139950430590160 -->\n", 323 "<g id=\"node7\" class=\"node\">\n", 324 "<title>139950430590160</title>\n", 325 "<ellipse fill=\"none\" stroke=\"black\" cx=\"127.39\" cy=\"-522\" rx=\"127.28\" ry=\"18\"/>\n", 326 "<text text-anchor=\"middle\" x=\"127.39\" y=\"-518.3\" font-family=\"Times,serif\" font-size=\"14.00\">sepal length (cm) <= 6.1</text>\n", 327 "</g>\n", 328 "<!-- 139950430587152->139950430590160 -->\n", 329 "<g id=\"edge6\" class=\"edge\">\n", 330 "<title>139950430587152->139950430590160</title>\n", 331 "<path fill=\"none\" stroke=\"black\" d=\"M337.9,-577.98C296,-567.04 239.1,-552.18 195.02,-540.66\"/>\n", 332 "<polygon fill=\"black\" stroke=\"black\" points=\"195.81,-537.25 185.25,-538.11 194.04,-544.03 195.81,-537.25\"/>\n", 333 "</g>\n", 334 "<!-- 139950430598416 -->\n", 335 "<g id=\"node10\" class=\"node\">\n", 336 "<title>139950430598416</title>\n", 337 "<ellipse fill=\"none\" stroke=\"black\" cx=\"395.39\" cy=\"-522\" rx=\"122.68\" ry=\"18\"/>\n", 338 "<text text-anchor=\"middle\" x=\"395.39\" y=\"-518.3\" font-family=\"Times,serif\" font-size=\"14.00\">petal width (cm) <= 1.6</text>\n", 339 "</g>\n", 340 "<!-- 139950430587152->139950430598416 -->\n", 341 "<g id=\"edge9\" class=\"edge\">\n", 342 "<title>139950430587152->139950430598416</title>\n", 343 "<path fill=\"none\" stroke=\"black\" d=\"M395.39,-575.7C395.39,-567.98 395.39,-558.71 395.39,-550.11\"/>\n", 344 "<polygon fill=\"black\" stroke=\"black\" points=\"398.89,-550.1 395.39,-540.1 391.89,-550.1 398.89,-550.1\"/>\n", 345 "</g>\n", 346 "<!-- 139950430591632 -->\n", 347 "<g id=\"node8\" class=\"node\">\n", 348 "<title>139950430591632</title>\n", 349 "<ellipse fill=\"none\" stroke=\"black\" cx=\"88.39\" cy=\"-450\" rx=\"30.59\" ry=\"18\"/>\n", 350 "<text text-anchor=\"middle\" x=\"88.39\" y=\"-446.3\" font-family=\"Times,serif\" font-size=\"14.00\">Leaf</text>\n", 351 "</g>\n", 352 "<!-- 139950430590160->139950430591632 -->\n", 353 "<g id=\"edge7\" class=\"edge\">\n", 354 "<title>139950430590160->139950430591632</title>\n", 355 "<path fill=\"none\" stroke=\"black\" d=\"M117.75,-503.7C113.19,-495.52 107.67,-485.6 102.64,-476.58\"/>\n", 356 "<polygon fill=\"black\" stroke=\"black\" points=\"105.57,-474.65 97.65,-467.62 99.46,-478.06 105.57,-474.65\"/>\n", 357 "</g>\n", 358 "<!-- 139950430599952 -->\n", 359 "<g id=\"node9\" class=\"node\">\n", 360 "<title>139950430599952</title>\n", 361 "<ellipse fill=\"none\" stroke=\"black\" cx=\"167.39\" cy=\"-450\" rx=\"30.59\" ry=\"18\"/>\n", 362 "<text text-anchor=\"middle\" x=\"167.39\" y=\"-446.3\" font-family=\"Times,serif\" font-size=\"14.00\">Leaf</text>\n", 363 "</g>\n", 364 "<!-- 139950430590160->139950430599952 -->\n", 365 "<g id=\"edge8\" class=\"edge\">\n", 366 "<title>139950430590160->139950430599952</title>\n", 367 "<path fill=\"none\" stroke=\"black\" d=\"M137.28,-503.7C141.95,-495.52 147.62,-485.6 152.77,-476.58\"/>\n", 368 "<polygon fill=\"black\" stroke=\"black\" points=\"155.97,-478.04 157.89,-467.62 149.89,-474.57 155.97,-478.04\"/>\n", 369 "</g>\n", 370 "<!-- 139950430590352 -->\n", 371 "<g id=\"node11\" class=\"node\">\n", 372 "<title>139950430590352</title>\n", 373 "<ellipse fill=\"none\" stroke=\"black\" cx=\"316.39\" cy=\"-450\" rx=\"30.59\" ry=\"18\"/>\n", 374 "<text text-anchor=\"middle\" x=\"316.39\" y=\"-446.3\" font-family=\"Times,serif\" font-size=\"14.00\">Leaf</text>\n", 375 "</g>\n", 376 "<!-- 139950430598416->139950430590352 -->\n", 377 "<g id=\"edge10\" class=\"edge\">\n", 378 "<title>139950430598416->139950430590352</title>\n", 379 "<path fill=\"none\" stroke=\"black\" d=\"M376.27,-504.05C365.43,-494.46 351.78,-482.36 340.25,-472.14\"/>\n", 380 "<polygon fill=\"black\" stroke=\"black\" points=\"342.47,-469.44 332.67,-465.42 337.83,-474.68 342.47,-469.44\"/>\n", 381 "</g>\n", 382 "<!-- 139950430594960 -->\n", 383 "<g id=\"node12\" class=\"node\">\n", 384 "<title>139950430594960</title>\n", 385 "<ellipse fill=\"none\" stroke=\"black\" cx=\"395.39\" cy=\"-450\" rx=\"30.59\" ry=\"18\"/>\n", 386 "<text text-anchor=\"middle\" x=\"395.39\" y=\"-446.3\" font-family=\"Times,serif\" font-size=\"14.00\">Leaf</text>\n", 387 "</g>\n", 388 "<!-- 139950430598416->139950430594960 -->\n", 389 "<g id=\"edge11\" class=\"edge\">\n", 390 "<title>139950430598416->139950430594960</title>\n", 391 "<path fill=\"none\" stroke=\"black\" d=\"M395.39,-503.7C395.39,-495.98 395.39,-486.71 395.39,-478.11\"/>\n", 392 "<polygon fill=\"black\" stroke=\"black\" points=\"398.89,-478.1 395.39,-468.1 391.89,-478.1 398.89,-478.1\"/>\n", 393 "</g>\n", 394 "<!-- 139950430597904 -->\n", 395 "<g id=\"node14\" class=\"node\">\n", 396 "<title>139950430597904</title>\n", 397 "<ellipse fill=\"none\" stroke=\"black\" cx=\"756.39\" cy=\"-522\" rx=\"129.98\" ry=\"18\"/>\n", 398 "<text text-anchor=\"middle\" x=\"756.39\" y=\"-518.3\" font-family=\"Times,serif\" font-size=\"14.00\">sepal width (cm) <= 2.65</text>\n", 399 "</g>\n", 400 "<!-- 139950430589776->139950430597904 -->\n", 401 "<g id=\"edge13\" class=\"edge\">\n", 402 "<title>139950430589776->139950430597904</title>\n", 403 "<path fill=\"none\" stroke=\"black\" d=\"M756.39,-575.7C756.39,-567.98 756.39,-558.71 756.39,-550.11\"/>\n", 404 "<polygon fill=\"black\" stroke=\"black\" points=\"759.89,-550.1 756.39,-540.1 752.89,-550.1 759.89,-550.1\"/>\n", 405 "</g>\n", 406 "<!-- 139950430629264 -->\n", 407 "<g id=\"node25\" class=\"node\">\n", 408 "<title>139950430629264</title>\n", 409 "<ellipse fill=\"none\" stroke=\"black\" cx=\"1310.39\" cy=\"-522\" rx=\"131.88\" ry=\"18\"/>\n", 410 "<text text-anchor=\"middle\" x=\"1310.39\" y=\"-518.3\" font-family=\"Times,serif\" font-size=\"14.00\">petal length (cm) <= 5.95</text>\n", 411 "</g>\n", 412 "<!-- 139950430589776->139950430629264 -->\n", 413 "<g id=\"edge24\" class=\"edge\">\n", 414 "<title>139950430589776->139950430629264</title>\n", 415 "<path fill=\"none\" stroke=\"black\" d=\"M848.8,-581.32C947.72,-568.82 1104.26,-549.04 1207.15,-536.04\"/>\n", 416 "<polygon fill=\"black\" stroke=\"black\" points=\"1207.77,-539.49 1217.25,-534.77 1206.89,-532.55 1207.77,-539.49\"/>\n", 417 "</g>\n", 418 "<!-- 139950430600336 -->\n", 419 "<g id=\"node15\" class=\"node\">\n", 420 "<title>139950430600336</title>\n", 421 "<ellipse fill=\"none\" stroke=\"black\" cx=\"571.39\" cy=\"-450\" rx=\"127.28\" ry=\"18\"/>\n", 422 "<text text-anchor=\"middle\" x=\"571.39\" y=\"-446.3\" font-family=\"Times,serif\" font-size=\"14.00\">sepal length (cm) <= 5.8</text>\n", 423 "</g>\n", 424 "<!-- 139950430597904->139950430600336 -->\n", 425 "<g id=\"edge14\" class=\"edge\">\n", 426 "<title>139950430597904->139950430600336</title>\n", 427 "<path fill=\"none\" stroke=\"black\" d=\"M713.95,-504.94C686.92,-494.71 651.73,-481.4 623.08,-470.56\"/>\n", 428 "<polygon fill=\"black\" stroke=\"black\" points=\"624.23,-467.25 613.63,-466.98 621.75,-473.8 624.23,-467.25\"/>\n", 429 "</g>\n", 430 "<!-- 139950430626064 -->\n", 431 "<g id=\"node18\" class=\"node\">\n", 432 "<title>139950430626064</title>\n", 433 "<ellipse fill=\"none\" stroke=\"black\" cx=\"844.39\" cy=\"-450\" rx=\"127.28\" ry=\"18\"/>\n", 434 "<text text-anchor=\"middle\" x=\"844.39\" y=\"-446.3\" font-family=\"Times,serif\" font-size=\"14.00\">sepal length (cm) <= 5.9</text>\n", 435 "</g>\n", 436 "<!-- 139950430597904->139950430626064 -->\n", 437 "<g id=\"edge17\" class=\"edge\">\n", 438 "<title>139950430597904->139950430626064</title>\n", 439 "<path fill=\"none\" stroke=\"black\" d=\"M777.69,-504.05C788.93,-495.11 802.9,-484.01 815.14,-474.27\"/>\n", 440 "<polygon fill=\"black\" stroke=\"black\" points=\"817.64,-476.75 823.28,-467.79 813.28,-471.28 817.64,-476.75\"/>\n", 441 "</g>\n", 442 "<!-- 139951644649808 -->\n", 443 "<g id=\"node16\" class=\"node\">\n", 444 "<title>139951644649808</title>\n", 445 "<ellipse fill=\"none\" stroke=\"black\" cx=\"492.39\" cy=\"-378\" rx=\"30.59\" ry=\"18\"/>\n", 446 "<text text-anchor=\"middle\" x=\"492.39\" y=\"-374.3\" font-family=\"Times,serif\" font-size=\"14.00\">Leaf</text>\n", 447 "</g>\n", 448 "<!-- 139950430600336->139951644649808 -->\n", 449 "<g id=\"edge15\" class=\"edge\">\n", 450 "<title>139950430600336->139951644649808</title>\n", 451 "<path fill=\"none\" stroke=\"black\" d=\"M552.27,-432.05C541.43,-422.46 527.78,-410.36 516.25,-400.14\"/>\n", 452 "<polygon fill=\"black\" stroke=\"black\" points=\"518.47,-397.44 508.67,-393.42 513.83,-402.68 518.47,-397.44\"/>\n", 453 "</g>\n", 454 "<!-- 139951644654416 -->\n", 455 "<g id=\"node17\" class=\"node\">\n", 456 "<title>139951644654416</title>\n", 457 "<ellipse fill=\"none\" stroke=\"black\" cx=\"571.39\" cy=\"-378\" rx=\"30.59\" ry=\"18\"/>\n", 458 "<text text-anchor=\"middle\" x=\"571.39\" y=\"-374.3\" font-family=\"Times,serif\" font-size=\"14.00\">Leaf</text>\n", 459 "</g>\n", 460 "<!-- 139950430600336->139951644654416 -->\n", 461 "<g id=\"edge16\" class=\"edge\">\n", 462 "<title>139950430600336->139951644654416</title>\n", 463 "<path fill=\"none\" stroke=\"black\" d=\"M571.39,-431.7C571.39,-423.98 571.39,-414.71 571.39,-406.11\"/>\n", 464 "<polygon fill=\"black\" stroke=\"black\" points=\"574.89,-406.1 571.39,-396.1 567.89,-406.1 574.89,-406.1\"/>\n", 465 "</g>\n", 466 "<!-- 139950430632976 -->\n", 467 "<g id=\"node19\" class=\"node\">\n", 468 "<title>139950430632976</title>\n", 469 "<ellipse fill=\"none\" stroke=\"black\" cx=\"747.39\" cy=\"-378\" rx=\"127.28\" ry=\"18\"/>\n", 470 "<text text-anchor=\"middle\" x=\"747.39\" y=\"-374.3\" font-family=\"Times,serif\" font-size=\"14.00\">sepal length (cm) <= 5.7</text>\n", 471 "</g>\n", 472 "<!-- 139950430626064->139950430632976 -->\n", 473 "<g id=\"edge18\" class=\"edge\">\n", 474 "<title>139950430626064->139950430632976</title>\n", 475 "<path fill=\"none\" stroke=\"black\" d=\"M820.91,-432.05C808.28,-422.94 792.53,-411.58 778.86,-401.71\"/>\n", 476 "<polygon fill=\"black\" stroke=\"black\" points=\"780.81,-398.8 770.65,-395.79 776.71,-404.48 780.81,-398.8\"/>\n", 477 "</g>\n", 478 "<!-- 139950430625168 -->\n", 479 "<g id=\"node22\" class=\"node\">\n", 480 "<title>139950430625168</title>\n", 481 "<ellipse fill=\"none\" stroke=\"black\" cx=\"1026.39\" cy=\"-378\" rx=\"133.48\" ry=\"18\"/>\n", 482 "<text text-anchor=\"middle\" x=\"1026.39\" y=\"-374.3\" font-family=\"Times,serif\" font-size=\"14.00\">sepal length (cm) <= 6.15</text>\n", 483 "</g>\n", 484 "<!-- 139950430626064->139950430625168 -->\n", 485 "<g id=\"edge21\" class=\"edge\">\n", 486 "<title>139950430626064->139950430625168</title>\n", 487 "<path fill=\"none\" stroke=\"black\" d=\"M886.14,-432.94C912.52,-422.79 946.8,-409.61 974.87,-398.82\"/>\n", 488 "<polygon fill=\"black\" stroke=\"black\" points=\"976.44,-401.96 984.51,-395.11 973.92,-395.43 976.44,-401.96\"/>\n", 489 "</g>\n", 490 "<!-- 139950430625808 -->\n", 491 "<g id=\"node20\" class=\"node\">\n", 492 "<title>139950430625808</title>\n", 493 "<ellipse fill=\"none\" stroke=\"black\" cx=\"708.39\" cy=\"-306\" rx=\"30.59\" ry=\"18\"/>\n", 494 "<text text-anchor=\"middle\" x=\"708.39\" y=\"-302.3\" font-family=\"Times,serif\" font-size=\"14.00\">Leaf</text>\n", 495 "</g>\n", 496 "<!-- 139950430632976->139950430625808 -->\n", 497 "<g id=\"edge19\" class=\"edge\">\n", 498 "<title>139950430632976->139950430625808</title>\n", 499 "<path fill=\"none\" stroke=\"black\" d=\"M737.75,-359.7C733.19,-351.52 727.67,-341.6 722.64,-332.58\"/>\n", 500 "<polygon fill=\"black\" stroke=\"black\" points=\"725.57,-330.65 717.65,-323.62 719.46,-334.06 725.57,-330.65\"/>\n", 501 "</g>\n", 502 "<!-- 139950430632784 -->\n", 503 "<g id=\"node21\" class=\"node\">\n", 504 "<title>139950430632784</title>\n", 505 "<ellipse fill=\"none\" stroke=\"black\" cx=\"787.39\" cy=\"-306\" rx=\"30.59\" ry=\"18\"/>\n", 506 "<text text-anchor=\"middle\" x=\"787.39\" y=\"-302.3\" font-family=\"Times,serif\" font-size=\"14.00\">Leaf</text>\n", 507 "</g>\n", 508 "<!-- 139950430632976->139950430632784 -->\n", 509 "<g id=\"edge20\" class=\"edge\">\n", 510 "<title>139950430632976->139950430632784</title>\n", 511 "<path fill=\"none\" stroke=\"black\" d=\"M757.28,-359.7C761.95,-351.52 767.62,-341.6 772.77,-332.58\"/>\n", 512 "<polygon fill=\"black\" stroke=\"black\" points=\"775.97,-334.04 777.89,-323.62 769.89,-330.57 775.97,-334.04\"/>\n", 513 "</g>\n", 514 "<!-- 139950430621584 -->\n", 515 "<g id=\"node23\" class=\"node\">\n", 516 "<title>139950430621584</title>\n", 517 "<ellipse fill=\"none\" stroke=\"black\" cx=\"974.39\" cy=\"-306\" rx=\"30.59\" ry=\"18\"/>\n", 518 "<text text-anchor=\"middle\" x=\"974.39\" y=\"-302.3\" font-family=\"Times,serif\" font-size=\"14.00\">Leaf</text>\n", 519 "</g>\n", 520 "<!-- 139950430625168->139950430621584 -->\n", 521 "<g id=\"edge22\" class=\"edge\">\n", 522 "<title>139950430625168->139950430621584</title>\n", 523 "<path fill=\"none\" stroke=\"black\" d=\"M1013.8,-360.05C1007.36,-351.38 999.4,-340.67 992.33,-331.15\"/>\n", 524 "<polygon fill=\"black\" stroke=\"black\" points=\"994.92,-328.77 986.15,-322.83 989.3,-332.94 994.92,-328.77\"/>\n", 525 "</g>\n", 526 "<!-- 139950430633680 -->\n", 527 "<g id=\"node24\" class=\"node\">\n", 528 "<title>139950430633680</title>\n", 529 "<ellipse fill=\"none\" stroke=\"black\" cx=\"1053.39\" cy=\"-306\" rx=\"30.59\" ry=\"18\"/>\n", 530 "<text text-anchor=\"middle\" x=\"1053.39\" y=\"-302.3\" font-family=\"Times,serif\" font-size=\"14.00\">Leaf</text>\n", 531 "</g>\n", 532 "<!-- 139950430625168->139950430633680 -->\n", 533 "<g id=\"edge23\" class=\"edge\">\n", 534 "<title>139950430625168->139950430633680</title>\n", 535 "<path fill=\"none\" stroke=\"black\" d=\"M1033.06,-359.7C1036.15,-351.7 1039.88,-342.02 1043.3,-333.15\"/>\n", 536 "<polygon fill=\"black\" stroke=\"black\" points=\"1046.64,-334.21 1046.98,-323.62 1040.11,-331.69 1046.64,-334.21\"/>\n", 537 "</g>\n", 538 "<!-- 139950430620176 -->\n", 539 "<g id=\"node26\" class=\"node\">\n", 540 "<title>139950430620176</title>\n", 541 "<ellipse fill=\"none\" stroke=\"black\" cx=\"1310.39\" cy=\"-450\" rx=\"128.88\" ry=\"18\"/>\n", 542 "<text text-anchor=\"middle\" x=\"1310.39\" y=\"-446.3\" font-family=\"Times,serif\" font-size=\"14.00\">petal width (cm) <= 2.35</text>\n", 543 "</g>\n", 544 "<!-- 139950430629264->139950430620176 -->\n", 545 "<g id=\"edge25\" class=\"edge\">\n", 546 "<title>139950430629264->139950430620176</title>\n", 547 "<path fill=\"none\" stroke=\"black\" d=\"M1310.39,-503.7C1310.39,-495.98 1310.39,-486.71 1310.39,-478.11\"/>\n", 548 "<polygon fill=\"black\" stroke=\"black\" points=\"1313.89,-478.1 1310.39,-468.1 1306.89,-478.1 1313.89,-478.1\"/>\n", 549 "</g>\n", 550 "<!-- 139950430565584 -->\n", 551 "<g id=\"node45\" class=\"node\">\n", 552 "<title>139950430565584</title>\n", 553 "<ellipse fill=\"none\" stroke=\"black\" cx=\"1487.39\" cy=\"-450\" rx=\"30.59\" ry=\"18\"/>\n", 554 "<text text-anchor=\"middle\" x=\"1487.39\" y=\"-446.3\" font-family=\"Times,serif\" font-size=\"14.00\">Leaf</text>\n", 555 "</g>\n", 556 "<!-- 139950430629264->139950430565584 -->\n", 557 "<g id=\"edge44\" class=\"edge\">\n", 558 "<title>139950430629264->139950430565584</title>\n", 559 "<path fill=\"none\" stroke=\"black\" d=\"M1353.78,-504.9C1381.06,-494.64 1416.92,-480.89 1448.39,-468 1450.23,-467.24 1452.12,-466.46 1454.03,-465.66\"/>\n", 560 "<polygon fill=\"black\" stroke=\"black\" points=\"1455.71,-468.74 1463.53,-461.6 1452.96,-462.31 1455.71,-468.74\"/>\n", 561 "</g>\n", 562 "<!-- 139950430623248 -->\n", 563 "<g id=\"node27\" class=\"node\">\n", 564 "<title>139950430623248</title>\n", 565 "<ellipse fill=\"none\" stroke=\"black\" cx=\"1310.39\" cy=\"-378\" rx=\"133.48\" ry=\"18\"/>\n", 566 "<text text-anchor=\"middle\" x=\"1310.39\" y=\"-374.3\" font-family=\"Times,serif\" font-size=\"14.00\">sepal length (cm) <= 6.45</text>\n", 567 "</g>\n", 568 "<!-- 139950430620176->139950430623248 -->\n", 569 "<g id=\"edge26\" class=\"edge\">\n", 570 "<title>139950430620176->139950430623248</title>\n", 571 "<path fill=\"none\" stroke=\"black\" d=\"M1310.39,-431.7C1310.39,-423.98 1310.39,-414.71 1310.39,-406.11\"/>\n", 572 "<polygon fill=\"black\" stroke=\"black\" points=\"1313.89,-406.1 1310.39,-396.1 1306.89,-406.1 1313.89,-406.1\"/>\n", 573 "</g>\n", 574 "<!-- 139951644460752 -->\n", 575 "<g id=\"node44\" class=\"node\">\n", 576 "<title>139951644460752</title>\n", 577 "<ellipse fill=\"none\" stroke=\"black\" cx=\"1492.39\" cy=\"-378\" rx=\"30.59\" ry=\"18\"/>\n", 578 "<text text-anchor=\"middle\" x=\"1492.39\" y=\"-374.3\" font-family=\"Times,serif\" font-size=\"14.00\">Leaf</text>\n", 579 "</g>\n", 580 "<!-- 139950430620176->139951644460752 -->\n", 581 "<g id=\"edge43\" class=\"edge\">\n", 582 "<title>139950430620176->139951644460752</title>\n", 583 "<path fill=\"none\" stroke=\"black\" d=\"M1354.72,-433.03C1382.82,-422.77 1419.88,-408.97 1452.39,-396 1454.58,-395.13 1456.83,-394.21 1459.09,-393.28\"/>\n", 584 "<polygon fill=\"black\" stroke=\"black\" points=\"1460.47,-396.5 1468.35,-389.42 1457.77,-390.04 1460.47,-396.5\"/>\n", 585 "</g>\n", 586 "<!-- 139950430631952 -->\n", 587 "<g id=\"node28\" class=\"node\">\n", 588 "<title>139950430631952</title>\n", 589 "<ellipse fill=\"none\" stroke=\"black\" cx=\"1282.39\" cy=\"-306\" rx=\"126.18\" ry=\"18\"/>\n", 590 "<text text-anchor=\"middle\" x=\"1282.39\" y=\"-302.3\" font-family=\"Times,serif\" font-size=\"14.00\">petal length (cm) <= 4.6</text>\n", 591 "</g>\n", 592 "<!-- 139950430623248->139950430631952 -->\n", 593 "<g id=\"edge27\" class=\"edge\">\n", 594 "<title>139950430623248->139950430631952</title>\n", 595 "<path fill=\"none\" stroke=\"black\" d=\"M1303.47,-359.7C1300.31,-351.81 1296.51,-342.3 1293.01,-333.55\"/>\n", 596 "<polygon fill=\"black\" stroke=\"black\" points=\"1296.19,-332.09 1289.23,-324.1 1289.69,-334.69 1296.19,-332.09\"/>\n", 597 "</g>\n", 598 "<!-- 139950430624400 -->\n", 599 "<g id=\"node37\" class=\"node\">\n", 600 "<title>139950430624400</title>\n", 601 "<ellipse fill=\"none\" stroke=\"black\" cx=\"1561.39\" cy=\"-306\" rx=\"131.88\" ry=\"18\"/>\n", 602 "<text text-anchor=\"middle\" x=\"1561.39\" y=\"-302.3\" font-family=\"Times,serif\" font-size=\"14.00\">petal length (cm) <= 5.15</text>\n", 603 "</g>\n", 604 "<!-- 139950430623248->139950430624400 -->\n", 605 "<g id=\"edge36\" class=\"edge\">\n", 606 "<title>139950430623248->139950430624400</title>\n", 607 "<path fill=\"none\" stroke=\"black\" d=\"M1365.78,-361.55C1404.33,-350.8 1455.86,-336.43 1496.36,-325.14\"/>\n", 608 "<polygon fill=\"black\" stroke=\"black\" points=\"1497.44,-328.47 1506.14,-322.41 1495.56,-321.72 1497.44,-328.47\"/>\n", 609 "</g>\n", 610 "<!-- 139950430630928 -->\n", 611 "<g id=\"node29\" class=\"node\">\n", 612 "<title>139950430630928</title>\n", 613 "<ellipse fill=\"none\" stroke=\"black\" cx=\"1102.39\" cy=\"-234\" rx=\"30.59\" ry=\"18\"/>\n", 614 "<text text-anchor=\"middle\" x=\"1102.39\" y=\"-230.3\" font-family=\"Times,serif\" font-size=\"14.00\">Leaf</text>\n", 615 "</g>\n", 616 "<!-- 139950430631952->139950430630928 -->\n", 617 "<g id=\"edge28\" class=\"edge\">\n", 618 "<title>139950430631952->139950430630928</title>\n", 619 "<path fill=\"none\" stroke=\"black\" d=\"M1238.34,-289.11C1210.42,-278.87 1173.62,-265.07 1141.39,-252 1139.54,-251.25 1137.65,-250.47 1135.74,-249.67\"/>\n", 620 "<polygon fill=\"black\" stroke=\"black\" points=\"1136.8,-246.32 1126.23,-245.62 1134.06,-252.76 1136.8,-246.32\"/>\n", 621 "</g>\n", 622 "<!-- 139950430633296 -->\n", 623 "<g id=\"node30\" class=\"node\">\n", 624 "<title>139950430633296</title>\n", 625 "<ellipse fill=\"none\" stroke=\"black\" cx=\"1282.39\" cy=\"-234\" rx=\"131.88\" ry=\"18\"/>\n", 626 "<text text-anchor=\"middle\" x=\"1282.39\" y=\"-230.3\" font-family=\"Times,serif\" font-size=\"14.00\">petal length (cm) <= 5.45</text>\n", 627 "</g>\n", 628 "<!-- 139950430631952->139950430633296 -->\n", 629 "<g id=\"edge29\" class=\"edge\">\n", 630 "<title>139950430631952->139950430633296</title>\n", 631 "<path fill=\"none\" stroke=\"black\" d=\"M1282.39,-287.7C1282.39,-279.98 1282.39,-270.71 1282.39,-262.11\"/>\n", 632 "<polygon fill=\"black\" stroke=\"black\" points=\"1285.89,-262.1 1282.39,-252.1 1278.89,-262.1 1285.89,-262.1\"/>\n", 633 "</g>\n", 634 "<!-- 139950430632912 -->\n", 635 "<g id=\"node31\" class=\"node\">\n", 636 "<title>139950430632912</title>\n", 637 "<ellipse fill=\"none\" stroke=\"black\" cx=\"1197.39\" cy=\"-162\" rx=\"131.88\" ry=\"18\"/>\n", 638 "<text text-anchor=\"middle\" x=\"1197.39\" y=\"-158.3\" font-family=\"Times,serif\" font-size=\"14.00\">petal length (cm) <= 4.85</text>\n", 639 "</g>\n", 640 "<!-- 139950430633296->139950430632912 -->\n", 641 "<g id=\"edge30\" class=\"edge\">\n", 642 "<title>139950430633296->139950430632912</title>\n", 643 "<path fill=\"none\" stroke=\"black\" d=\"M1261.81,-216.05C1250.95,-207.11 1237.47,-196.01 1225.64,-186.27\"/>\n", 644 "<polygon fill=\"black\" stroke=\"black\" points=\"1227.72,-183.44 1217.78,-179.79 1223.27,-188.85 1227.72,-183.44\"/>\n", 645 "</g>\n", 646 "<!-- 139950430632592 -->\n", 647 "<g id=\"node36\" class=\"node\">\n", 648 "<title>139950430632592</title>\n", 649 "<ellipse fill=\"none\" stroke=\"black\" cx=\"1377.39\" cy=\"-162\" rx=\"30.59\" ry=\"18\"/>\n", 650 "<text text-anchor=\"middle\" x=\"1377.39\" y=\"-158.3\" font-family=\"Times,serif\" font-size=\"14.00\">Leaf</text>\n", 651 "</g>\n", 652 "<!-- 139950430633296->139950430632592 -->\n", 653 "<g id=\"edge35\" class=\"edge\">\n", 654 "<title>139950430633296->139950430632592</title>\n", 655 "<path fill=\"none\" stroke=\"black\" d=\"M1305.39,-216.05C1319.03,-206 1336.38,-193.21 1350.64,-182.71\"/>\n", 656 "<polygon fill=\"black\" stroke=\"black\" points=\"1353.08,-185.26 1359.05,-176.51 1348.92,-179.63 1353.08,-185.26\"/>\n", 657 "</g>\n", 658 "<!-- 139950430627792 -->\n", 659 "<g id=\"node32\" class=\"node\">\n", 660 "<title>139950430627792</title>\n", 661 "<ellipse fill=\"none\" stroke=\"black\" cx=\"1106.39\" cy=\"-90\" rx=\"133.48\" ry=\"18\"/>\n", 662 "<text text-anchor=\"middle\" x=\"1106.39\" y=\"-86.3\" font-family=\"Times,serif\" font-size=\"14.00\">sepal length (cm) <= 6.05</text>\n", 663 "</g>\n", 664 "<!-- 139950430632912->139950430627792 -->\n", 665 "<g id=\"edge31\" class=\"edge\">\n", 666 "<title>139950430632912->139950430627792</title>\n", 667 "<path fill=\"none\" stroke=\"black\" d=\"M1175.36,-144.05C1163.62,-135.03 1149.02,-123.79 1136.27,-113.99\"/>\n", 668 "<polygon fill=\"black\" stroke=\"black\" points=\"1138.27,-111.11 1128.21,-107.79 1134.01,-116.66 1138.27,-111.11\"/>\n", 669 "</g>\n", 670 "<!-- 139950430617808 -->\n", 671 "<g id=\"node35\" class=\"node\">\n", 672 "<title>139950430617808</title>\n", 673 "<ellipse fill=\"none\" stroke=\"black\" cx=\"1288.39\" cy=\"-90\" rx=\"30.59\" ry=\"18\"/>\n", 674 "<text text-anchor=\"middle\" x=\"1288.39\" y=\"-86.3\" font-family=\"Times,serif\" font-size=\"14.00\">Leaf</text>\n", 675 "</g>\n", 676 "<!-- 139950430632912->139950430617808 -->\n", 677 "<g id=\"edge34\" class=\"edge\">\n", 678 "<title>139950430632912->139950430617808</title>\n", 679 "<path fill=\"none\" stroke=\"black\" d=\"M1219.42,-144.05C1232.4,-134.07 1248.89,-121.38 1262.49,-110.92\"/>\n", 680 "<polygon fill=\"black\" stroke=\"black\" points=\"1264.74,-113.61 1270.53,-104.74 1260.47,-108.06 1264.74,-113.61\"/>\n", 681 "</g>\n", 682 "<!-- 139950430624144 -->\n", 683 "<g id=\"node33\" class=\"node\">\n", 684 "<title>139950430624144</title>\n", 685 "<ellipse fill=\"none\" stroke=\"black\" cx=\"1067.39\" cy=\"-18\" rx=\"30.59\" ry=\"18\"/>\n", 686 "<text text-anchor=\"middle\" x=\"1067.39\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">Leaf</text>\n", 687 "</g>\n", 688 "<!-- 139950430627792->139950430624144 -->\n", 689 "<g id=\"edge32\" class=\"edge\">\n", 690 "<title>139950430627792->139950430624144</title>\n", 691 "<path fill=\"none\" stroke=\"black\" d=\"M1096.75,-71.7C1092.19,-63.52 1086.67,-53.6 1081.64,-44.58\"/>\n", 692 "<polygon fill=\"black\" stroke=\"black\" points=\"1084.57,-42.65 1076.65,-35.62 1078.46,-46.06 1084.57,-42.65\"/>\n", 693 "</g>\n", 694 "<!-- 139950430633104 -->\n", 695 "<g id=\"node34\" class=\"node\">\n", 696 "<title>139950430633104</title>\n", 697 "<ellipse fill=\"none\" stroke=\"black\" cx=\"1146.39\" cy=\"-18\" rx=\"30.59\" ry=\"18\"/>\n", 698 "<text text-anchor=\"middle\" x=\"1146.39\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">Leaf</text>\n", 699 "</g>\n", 700 "<!-- 139950430627792->139950430633104 -->\n", 701 "<g id=\"edge33\" class=\"edge\">\n", 702 "<title>139950430627792->139950430633104</title>\n", 703 "<path fill=\"none\" stroke=\"black\" d=\"M1116.28,-71.7C1120.95,-63.52 1126.62,-53.6 1131.77,-44.58\"/>\n", 704 "<polygon fill=\"black\" stroke=\"black\" points=\"1134.97,-46.04 1136.89,-35.62 1128.89,-42.57 1134.97,-46.04\"/>\n", 705 "</g>\n", 706 "<!-- 139950430620752 -->\n", 707 "<g id=\"node38\" class=\"node\">\n", 708 "<title>139950430620752</title>\n", 709 "<ellipse fill=\"none\" stroke=\"black\" cx=\"1561.39\" cy=\"-234\" rx=\"128.88\" ry=\"18\"/>\n", 710 "<text text-anchor=\"middle\" x=\"1561.39\" y=\"-230.3\" font-family=\"Times,serif\" font-size=\"14.00\">petal width (cm) <= 1.45</text>\n", 711 "</g>\n", 712 "<!-- 139950430624400->139950430620752 -->\n", 713 "<g id=\"edge37\" class=\"edge\">\n", 714 "<title>139950430624400->139950430620752</title>\n", 715 "<path fill=\"none\" stroke=\"black\" d=\"M1561.39,-287.7C1561.39,-279.98 1561.39,-270.71 1561.39,-262.11\"/>\n", 716 "<polygon fill=\"black\" stroke=\"black\" points=\"1564.89,-262.1 1561.39,-252.1 1557.89,-262.1 1564.89,-262.1\"/>\n", 717 "</g>\n", 718 "<!-- 139951644472592 -->\n", 719 "<g id=\"node43\" class=\"node\">\n", 720 "<title>139951644472592</title>\n", 721 "<ellipse fill=\"none\" stroke=\"black\" cx=\"1738.39\" cy=\"-234\" rx=\"30.59\" ry=\"18\"/>\n", 722 "<text text-anchor=\"middle\" x=\"1738.39\" y=\"-230.3\" font-family=\"Times,serif\" font-size=\"14.00\">Leaf</text>\n", 723 "</g>\n", 724 "<!-- 139950430624400->139951644472592 -->\n", 725 "<g id=\"edge42\" class=\"edge\">\n", 726 "<title>139950430624400->139951644472592</title>\n", 727 "<path fill=\"none\" stroke=\"black\" d=\"M1604.78,-288.9C1632.06,-278.64 1667.92,-264.89 1699.39,-252 1701.23,-251.24 1703.12,-250.46 1705.03,-249.66\"/>\n", 728 "<polygon fill=\"black\" stroke=\"black\" points=\"1706.71,-252.74 1714.53,-245.6 1703.96,-246.31 1706.71,-252.74\"/>\n", 729 "</g>\n", 730 "<!-- 139950430624464 -->\n", 731 "<g id=\"node39\" class=\"node\">\n", 732 "<title>139950430624464</title>\n", 733 "<ellipse fill=\"none\" stroke=\"black\" cx=\"1466.39\" cy=\"-162\" rx=\"30.59\" ry=\"18\"/>\n", 734 "<text text-anchor=\"middle\" x=\"1466.39\" y=\"-158.3\" font-family=\"Times,serif\" font-size=\"14.00\">Leaf</text>\n", 735 "</g>\n", 736 "<!-- 139950430620752->139950430624464 -->\n", 737 "<g id=\"edge38\" class=\"edge\">\n", 738 "<title>139950430620752->139950430624464</title>\n", 739 "<path fill=\"none\" stroke=\"black\" d=\"M1538.39,-216.05C1524.75,-206 1507.39,-193.21 1493.14,-182.71\"/>\n", 740 "<polygon fill=\"black\" stroke=\"black\" points=\"1494.85,-179.63 1484.73,-176.51 1490.7,-185.26 1494.85,-179.63\"/>\n", 741 "</g>\n", 742 "<!-- 139950430621968 -->\n", 743 "<g id=\"node40\" class=\"node\">\n", 744 "<title>139950430621968</title>\n", 745 "<ellipse fill=\"none\" stroke=\"black\" cx=\"1646.39\" cy=\"-162\" rx=\"131.88\" ry=\"18\"/>\n", 746 "<text text-anchor=\"middle\" x=\"1646.39\" y=\"-158.3\" font-family=\"Times,serif\" font-size=\"14.00\">petal length (cm) <= 5.05</text>\n", 747 "</g>\n", 748 "<!-- 139950430620752->139950430621968 -->\n", 749 "<g id=\"edge39\" class=\"edge\">\n", 750 "<title>139950430620752->139950430621968</title>\n", 751 "<path fill=\"none\" stroke=\"black\" d=\"M1581.96,-216.05C1592.82,-207.11 1606.31,-196.01 1618.13,-186.27\"/>\n", 752 "<polygon fill=\"black\" stroke=\"black\" points=\"1620.51,-188.85 1626,-179.79 1616.06,-183.44 1620.51,-188.85\"/>\n", 753 "</g>\n", 754 "<!-- 139950430619472 -->\n", 755 "<g id=\"node41\" class=\"node\">\n", 756 "<title>139950430619472</title>\n", 757 "<ellipse fill=\"none\" stroke=\"black\" cx=\"1606.39\" cy=\"-90\" rx=\"30.59\" ry=\"18\"/>\n", 758 "<text text-anchor=\"middle\" x=\"1606.39\" y=\"-86.3\" font-family=\"Times,serif\" font-size=\"14.00\">Leaf</text>\n", 759 "</g>\n", 760 "<!-- 139950430621968->139950430619472 -->\n", 761 "<g id=\"edge40\" class=\"edge\">\n", 762 "<title>139950430621968->139950430619472</title>\n", 763 "<path fill=\"none\" stroke=\"black\" d=\"M1636.5,-143.7C1631.83,-135.52 1626.16,-125.6 1621.01,-116.58\"/>\n", 764 "<polygon fill=\"black\" stroke=\"black\" points=\"1623.89,-114.57 1615.89,-107.62 1617.81,-118.04 1623.89,-114.57\"/>\n", 765 "</g>\n", 766 "<!-- 139950430633936 -->\n", 767 "<g id=\"node42\" class=\"node\">\n", 768 "<title>139950430633936</title>\n", 769 "<ellipse fill=\"none\" stroke=\"black\" cx=\"1685.39\" cy=\"-90\" rx=\"30.59\" ry=\"18\"/>\n", 770 "<text text-anchor=\"middle\" x=\"1685.39\" y=\"-86.3\" font-family=\"Times,serif\" font-size=\"14.00\">Leaf</text>\n", 771 "</g>\n", 772 "<!-- 139950430621968->139950430633936 -->\n", 773 "<g id=\"edge41\" class=\"edge\">\n", 774 "<title>139950430621968->139950430633936</title>\n", 775 "<path fill=\"none\" stroke=\"black\" d=\"M1656.03,-143.7C1660.58,-135.52 1666.11,-125.6 1671.13,-116.58\"/>\n", 776 "<polygon fill=\"black\" stroke=\"black\" points=\"1674.32,-118.06 1676.13,-107.62 1668.2,-114.65 1674.32,-118.06\"/>\n", 777 "</g>\n", 778 "</g>\n", 779 "</svg>\n" 780 ], 781 "text/plain": [ 782 "<graphviz.graphs.Digraph at 0x7f48bfb3d250>" 783 ] 784 }, 785 "execution_count": 6, 786 "metadata": {}, 787 "output_type": "execute_result" 788 } 789 ], 790 "source": [ 791 "\n", 792 "X = X_train\n", 793 "y = y_train.to_list()\n", 794 "\n", 795 "node = recurse(X,y,columnNames)\n", 796 "graphTree(node)\n", 797 "graph" 798 ] 799 }, 800 { 801 "cell_type": "markdown", 802 "metadata": {}, 803 "source": [ 804 "Evaluate!!!" 805 ] 806 } 807 ], 808 "metadata": { 809 "kernelspec": { 810 "display_name": ".venv", 811 "language": "python", 812 "name": "python3" 813 }, 814 "language_info": { 815 "codemirror_mode": { 816 "name": "ipython", 817 "version": 3 818 }, 819 "file_extension": ".py", 820 "mimetype": "text/x-python", 821 "name": "python", 822 "nbconvert_exporter": "python", 823 "pygments_lexer": "ipython3", 824 "version": "3.11.2" 825 } 826 }, 827 "nbformat": 4, 828 "nbformat_minor": 2 829 }