machinelearning

Machine learning code
git clone git://git.laack.co/machinelearning.git
Log | Files | Refs

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) &lt;= 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&#45;&gt;139951656820624 -->\n",
    257        "<g id=\"edge1\" class=\"edge\">\n",
    258        "<title>139950436257360&#45;&gt;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) &lt;= 4.05</text>\n",
    267        "</g>\n",
    268        "<!-- 139950436257360&#45;&gt;139950430599056 -->\n",
    269        "<g id=\"edge2\" class=\"edge\">\n",
    270        "<title>139950436257360&#45;&gt;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&#45;&gt;139950430590416 -->\n",
    281        "<g id=\"edge3\" class=\"edge\">\n",
    282        "<title>139950430599056&#45;&gt;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) &lt;= 2.55</text>\n",
    291        "</g>\n",
    292        "<!-- 139950430599056&#45;&gt;139950430594832 -->\n",
    293        "<g id=\"edge4\" class=\"edge\">\n",
    294        "<title>139950430599056&#45;&gt;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) &lt;= 2.4</text>\n",
    303        "</g>\n",
    304        "<!-- 139950430594832&#45;&gt;139950430587152 -->\n",
    305        "<g id=\"edge5\" class=\"edge\">\n",
    306        "<title>139950430594832&#45;&gt;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) &lt;= 2.75</text>\n",
    315        "</g>\n",
    316        "<!-- 139950430594832&#45;&gt;139950430589776 -->\n",
    317        "<g id=\"edge12\" class=\"edge\">\n",
    318        "<title>139950430594832&#45;&gt;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) &lt;= 6.1</text>\n",
    327        "</g>\n",
    328        "<!-- 139950430587152&#45;&gt;139950430590160 -->\n",
    329        "<g id=\"edge6\" class=\"edge\">\n",
    330        "<title>139950430587152&#45;&gt;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) &lt;= 1.6</text>\n",
    339        "</g>\n",
    340        "<!-- 139950430587152&#45;&gt;139950430598416 -->\n",
    341        "<g id=\"edge9\" class=\"edge\">\n",
    342        "<title>139950430587152&#45;&gt;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&#45;&gt;139950430591632 -->\n",
    353        "<g id=\"edge7\" class=\"edge\">\n",
    354        "<title>139950430590160&#45;&gt;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&#45;&gt;139950430599952 -->\n",
    365        "<g id=\"edge8\" class=\"edge\">\n",
    366        "<title>139950430590160&#45;&gt;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&#45;&gt;139950430590352 -->\n",
    377        "<g id=\"edge10\" class=\"edge\">\n",
    378        "<title>139950430598416&#45;&gt;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&#45;&gt;139950430594960 -->\n",
    389        "<g id=\"edge11\" class=\"edge\">\n",
    390        "<title>139950430598416&#45;&gt;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) &lt;= 2.65</text>\n",
    399        "</g>\n",
    400        "<!-- 139950430589776&#45;&gt;139950430597904 -->\n",
    401        "<g id=\"edge13\" class=\"edge\">\n",
    402        "<title>139950430589776&#45;&gt;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) &lt;= 5.95</text>\n",
    411        "</g>\n",
    412        "<!-- 139950430589776&#45;&gt;139950430629264 -->\n",
    413        "<g id=\"edge24\" class=\"edge\">\n",
    414        "<title>139950430589776&#45;&gt;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) &lt;= 5.8</text>\n",
    423        "</g>\n",
    424        "<!-- 139950430597904&#45;&gt;139950430600336 -->\n",
    425        "<g id=\"edge14\" class=\"edge\">\n",
    426        "<title>139950430597904&#45;&gt;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) &lt;= 5.9</text>\n",
    435        "</g>\n",
    436        "<!-- 139950430597904&#45;&gt;139950430626064 -->\n",
    437        "<g id=\"edge17\" class=\"edge\">\n",
    438        "<title>139950430597904&#45;&gt;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&#45;&gt;139951644649808 -->\n",
    449        "<g id=\"edge15\" class=\"edge\">\n",
    450        "<title>139950430600336&#45;&gt;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&#45;&gt;139951644654416 -->\n",
    461        "<g id=\"edge16\" class=\"edge\">\n",
    462        "<title>139950430600336&#45;&gt;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) &lt;= 5.7</text>\n",
    471        "</g>\n",
    472        "<!-- 139950430626064&#45;&gt;139950430632976 -->\n",
    473        "<g id=\"edge18\" class=\"edge\">\n",
    474        "<title>139950430626064&#45;&gt;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) &lt;= 6.15</text>\n",
    483        "</g>\n",
    484        "<!-- 139950430626064&#45;&gt;139950430625168 -->\n",
    485        "<g id=\"edge21\" class=\"edge\">\n",
    486        "<title>139950430626064&#45;&gt;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&#45;&gt;139950430625808 -->\n",
    497        "<g id=\"edge19\" class=\"edge\">\n",
    498        "<title>139950430632976&#45;&gt;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&#45;&gt;139950430632784 -->\n",
    509        "<g id=\"edge20\" class=\"edge\">\n",
    510        "<title>139950430632976&#45;&gt;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&#45;&gt;139950430621584 -->\n",
    521        "<g id=\"edge22\" class=\"edge\">\n",
    522        "<title>139950430625168&#45;&gt;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&#45;&gt;139950430633680 -->\n",
    533        "<g id=\"edge23\" class=\"edge\">\n",
    534        "<title>139950430625168&#45;&gt;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) &lt;= 2.35</text>\n",
    543        "</g>\n",
    544        "<!-- 139950430629264&#45;&gt;139950430620176 -->\n",
    545        "<g id=\"edge25\" class=\"edge\">\n",
    546        "<title>139950430629264&#45;&gt;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&#45;&gt;139950430565584 -->\n",
    557        "<g id=\"edge44\" class=\"edge\">\n",
    558        "<title>139950430629264&#45;&gt;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) &lt;= 6.45</text>\n",
    567        "</g>\n",
    568        "<!-- 139950430620176&#45;&gt;139950430623248 -->\n",
    569        "<g id=\"edge26\" class=\"edge\">\n",
    570        "<title>139950430620176&#45;&gt;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&#45;&gt;139951644460752 -->\n",
    581        "<g id=\"edge43\" class=\"edge\">\n",
    582        "<title>139950430620176&#45;&gt;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) &lt;= 4.6</text>\n",
    591        "</g>\n",
    592        "<!-- 139950430623248&#45;&gt;139950430631952 -->\n",
    593        "<g id=\"edge27\" class=\"edge\">\n",
    594        "<title>139950430623248&#45;&gt;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) &lt;= 5.15</text>\n",
    603        "</g>\n",
    604        "<!-- 139950430623248&#45;&gt;139950430624400 -->\n",
    605        "<g id=\"edge36\" class=\"edge\">\n",
    606        "<title>139950430623248&#45;&gt;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&#45;&gt;139950430630928 -->\n",
    617        "<g id=\"edge28\" class=\"edge\">\n",
    618        "<title>139950430631952&#45;&gt;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) &lt;= 5.45</text>\n",
    627        "</g>\n",
    628        "<!-- 139950430631952&#45;&gt;139950430633296 -->\n",
    629        "<g id=\"edge29\" class=\"edge\">\n",
    630        "<title>139950430631952&#45;&gt;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) &lt;= 4.85</text>\n",
    639        "</g>\n",
    640        "<!-- 139950430633296&#45;&gt;139950430632912 -->\n",
    641        "<g id=\"edge30\" class=\"edge\">\n",
    642        "<title>139950430633296&#45;&gt;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&#45;&gt;139950430632592 -->\n",
    653        "<g id=\"edge35\" class=\"edge\">\n",
    654        "<title>139950430633296&#45;&gt;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) &lt;= 6.05</text>\n",
    663        "</g>\n",
    664        "<!-- 139950430632912&#45;&gt;139950430627792 -->\n",
    665        "<g id=\"edge31\" class=\"edge\">\n",
    666        "<title>139950430632912&#45;&gt;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&#45;&gt;139950430617808 -->\n",
    677        "<g id=\"edge34\" class=\"edge\">\n",
    678        "<title>139950430632912&#45;&gt;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&#45;&gt;139950430624144 -->\n",
    689        "<g id=\"edge32\" class=\"edge\">\n",
    690        "<title>139950430627792&#45;&gt;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&#45;&gt;139950430633104 -->\n",
    701        "<g id=\"edge33\" class=\"edge\">\n",
    702        "<title>139950430627792&#45;&gt;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) &lt;= 1.45</text>\n",
    711        "</g>\n",
    712        "<!-- 139950430624400&#45;&gt;139950430620752 -->\n",
    713        "<g id=\"edge37\" class=\"edge\">\n",
    714        "<title>139950430624400&#45;&gt;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&#45;&gt;139951644472592 -->\n",
    725        "<g id=\"edge42\" class=\"edge\">\n",
    726        "<title>139950430624400&#45;&gt;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&#45;&gt;139950430624464 -->\n",
    737        "<g id=\"edge38\" class=\"edge\">\n",
    738        "<title>139950430620752&#45;&gt;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) &lt;= 5.05</text>\n",
    747        "</g>\n",
    748        "<!-- 139950430620752&#45;&gt;139950430621968 -->\n",
    749        "<g id=\"edge39\" class=\"edge\">\n",
    750        "<title>139950430620752&#45;&gt;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&#45;&gt;139950430619472 -->\n",
    761        "<g id=\"edge40\" class=\"edge\">\n",
    762        "<title>139950430621968&#45;&gt;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&#45;&gt;139950430633936 -->\n",
    773        "<g id=\"edge41\" class=\"edge\">\n",
    774        "<title>139950430621968&#45;&gt;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 }