{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Decision trees, overarching aims\n", "\n", "\n", "We start here with the most basic algorithm, the so-called decision\n", "tree. With this basic algorithm we can in turn build more complex\n", "networks, spanning from homogeneous and heterogenous forests (bagging,\n", "random forests and more) to one of the most popular supervised\n", "algorithms nowadays, the extreme gradient boosting, or just\n", "XGBoost. But let us start with the simplest possible ingredient.\n", "\n", "Decision trees are supervised learning algorithms used for both,\n", "classification and regression tasks.\n", "\n", "\n", "The main idea of decision trees\n", "is to find those descriptive features which contain the most\n", "**information** regarding the target feature and then split the dataset\n", "along the values of these features such that the target feature values\n", "for the resulting underlying datasets are as pure as possible.\n", "\n", "The descriptive features which reproduce best the target/output features are normally said\n", "to be the most informative ones. The process of finding the **most\n", "informative** feature is done until we accomplish a stopping criteria\n", "where we then finally end up in so called **leaf nodes**. \n", "\n", "## Basics of a tree\n", "\n", "A decision tree is typically divided into a **root node**, the **interior nodes**,\n", "and the final **leaf nodes** or just **leaves**. These entities are then connected by so-called **branches**.\n", "\n", "The leaf nodes\n", "contain the predictions we will make for new query instances presented\n", "to our trained model. This is possible since the model has \n", "learned the underlying structure of the training data and hence can,\n", "given some assumptions, make predictions about the target feature value\n", "(class) of unseen query instances.\n", "\n", "\n", "## General Features\n", "\n", "The overarching approach to decision trees is a top-down approach.\n", "\n", "* A leaf provides the classification of a given instance.\n", "\n", "* A node specifies a test of some attribute of the instance.\n", "\n", "* A branch corresponds to a possible values of an attribute.\n", "\n", "* An instance is classified by starting at the root node of the tree, testing the attribute specified by this node, then moving down the tree branch corresponding to the value of the attribute in the given example.\n", "\n", "This process is then repeated for the subtree rooted at the new\n", "node.\n", "\n", "\n", "\n", "In simplified terms, the process of training a decision tree and\n", "predicting the target features of query instances is as follows:\n", "\n", "1. Present a dataset containing of a number of training instances characterized by a number of descriptive features and a target feature\n", "\n", "2. Train the decision tree model by continuously splitting the target feature along the values of the descriptive features using a measure of information gain during the training process\n", "\n", "3. Grow the tree until we accomplish a stopping criteria create leaf nodes which represent the *predictions* we want to make for new query instances\n", "\n", "4. Show query instances to the tree and run down the tree until we arrive at leaf nodes\n", "\n", "Then we are essentially done!" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2nd degree coefficients:\n", "zero power: 0.18790439176058887\n", "first power: -0.014599964106338128\n", "second power: 0.00010403373827253124\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjUAAAHFCAYAAAAKbwgcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAAC+bklEQVR4nOydd3wU1fqHn81uyqY3QgtIIIh0pFlQEVGaIqhXsKGI5Spggfuz4LXrFfViL3gRxY6gYkGpUi2AiNJ7Dx3SyybZMr8/hhlmN7ub3c3W5Dx89kN26tk5c8585z3nfV+dJEkSAoFAIBAIBBFOVKgLIBAIBAKBQOAPhKgRCAQCgUBQLxCiRiAQCAQCQb1AiBqBQCAQCAT1AiFqBAKBQCAQ1AuEqBEIBAKBQFAvEKJGIBAIBAJBvUCIGoFAIBAIBPUCIWoEAoFAIBDUC4SoEQgCxEcffYROp1M/BoOB7Oxsbr/9dg4fPuz18S699FIuvfRS/xc0BCxfvhydTsfy5csDtq+ynfLR6/U0atSIoUOH8ueff/pW8AhEuQ/3798f6qIIBAHHEOoCCAT1nRkzZnDOOedgMplYuXIlkydPZsWKFWzatImEhIRQFy8kdO/enVWrVtGhQ4eAn+uFF16gX79+mM1m/v77b5555hn69u3L+vXradu2bcDPH2quvPJKVq1aRdOmTUNdFIEg4AhRIxAEmE6dOtGzZ08A+vXrh9Vq5bnnnuO7777j5ptvDnHpQkNycjLnn39+UM7Vtm1b9VwXX3wxqamp3HbbbXz22Wc888wzQSmDQkVFBfHx8UE9Z6NGjWjUqFFQzykQhAox/CQQBBnlAXvgwAEAKisrmTRpEjk5OcTExNC8eXPGjRtHUVGRy2NIkkTbtm0ZOHBgjXVlZWWkpKQwbtw44MwwzMyZM/n3v/9Ns2bNSE5O5vLLL2fHjh019v/www/p2rUrcXFxpKenc80117Bt2za7bUaPHk1iYiLbt29n4MCBJCQk0LRpU1588UUAVq9ezUUXXURCQgJnn302H3/8sd3+zoaQ/vzzT2644QZatWqF0WikVatW3Hjjjep18heKwDx+/Ljd8l27dnHTTTeRlZVFbGws7du355133qmx/5YtWxgwYADx8fE0atSIcePG8dNPP9X4PZdeeimdOnVi5cqVXHjhhcTHxzNmzBgASkpK+L//+z+7On/wwQcpLy+3O9dXX33FeeedR0pKCvHx8bRu3Vo9BoDNZuP555+nXbt2GI1GUlNT6dKlC2+88Ya6javhJ2/qeffu3QwZMoTExERatGjBv/71L6qqqjy/6AJBkBCiRiAIMrt37wbkN2hJkhg+fDhTpkxh1KhR/PTTT0ycOJGPP/6Yyy67zOWDQ6fTcd9997F48WJ27dplt+6TTz6hpKREFTUKjz32GAcOHGD69OlMmzaNXbt2MXToUKxWq7rN5MmTueOOO+jYsSNz5szhjTfeYOPGjVxwwQU1zmM2m7n22mu58sor+f777xk8eDCTJk3iscce47bbbmPMmDF8++23tGvXjtGjR7Nu3Tq312X//v20a9eO119/nYULF/LSSy9x9OhRevXqxalTpzy+vrWxb98+AM4++2x12datW+nVqxebN2/mlVde4ccff+TKK6/k/vvvt7PmHD16lL59+7Jjxw6mTp3KJ598QmlpKePHj3d6rqNHj3LLLbdw0003MW/ePMaOHUtFRQV9+/bl448/5v7772f+/Pk88sgjfPTRR1x99dVIkgTAqlWrGDlyJK1bt+bLL7/kp59+4sknn8RisajHf/nll3n66ae58cYb+emnn5g1axZ33HGHW0EM3tfz1VdfTf/+/fn+++8ZM2YMr732Gi+99JJX110gCAqSQCAICDNmzJAAafXq1ZLZbJZKS0ulH3/8UWrUqJGUlJQkHTt2TFqwYIEESC+//LLdvrNmzZIAadq0aeqyvn37Sn379lW/l5SUSElJSdIDDzxgt2+HDh2kfv36qd+XLVsmAdKQIUPstps9e7YESKtWrZIkSZIKCwslo9FYY7uDBw9KsbGx0k033aQuu+222yRA+uabb9RlZrNZatSokQRIf/31l7o8Pz9f0uv10sSJE2uUadmyZS6vn8VikcrKyqSEhATpjTfe8Gpf7XazZs2SzGazVFFRIf32229Su3btpA4dOkiFhYXqtgMHDpSys7Ol4uJiu2OMHz9eiouLkwoKCiRJkqSHHnpI0ul00pYtW+y2GzhwYI0y9e3bVwKkJUuW2G07efJkKSoqSlq7dq3d8q+//loCpHnz5kmSJElTpkyRAKmoqMjlb7zqqqukbt26ub0Oyn24b98+SZJ8q+fZs2fbbTtkyBCpXbt2bs8rEIQCYakRCALM+eefT3R0NElJSVx11VU0adKE+fPn07hxY5YuXQrIZn4t119/PQkJCSxZssTlcZOSkrj99tv56KOP1GGLpUuXsnXrVqeWg6uvvtrue5cuXYAzw2CrVq3CZDLVKEuLFi247LLLapRFp9MxZMgQ9bvBYCA3N5emTZty7rnnqsvT09PJysqqdRiprKyMRx55hNzcXAwGAwaDgcTERMrLy2sMi3jDyJEjiY6OJj4+nj59+lBSUsJPP/1EamoqIA//LVmyhGuuuYb4+HgsFov6GTJkCJWVlaxevRqAFStW0KlTpxoTnG+88Uan505LS+Oyyy6zW/bjjz/SqVMnunXrZneugQMH2g1h9erVC4ARI0Ywe/Zspx5zvXv3ZsOGDYwdO5aFCxdSUlJS6/XwpZ6HDh1qt6xLly5+HxYUCPyBEDUCQYD55JNPWLt2LX///TdHjhxh48aN9OnTB4D8/HwMBkONiZw6nY4mTZqQn5/v9tj33XcfpaWlfP755wC8/fbbZGdnM2zYsBrbZmRk2H2PjY0FwGQyqWUBnHrJNGvWrEZZ4uPjiYuLs1sWExNDenp6jf1jYmKorKx0+1tuuukm3n77be68804WLlzIH3/8wdq1a2nUqJFaRl946aWXWLt2LStWrODf//43x48fZ/jw4erQXn5+PhaLhbfeeovo6Gi7jyLalOGv/Px8GjduXOMczpaB82t5/PhxNm7cWONcSUlJSJKknuuSSy7hu+++w2KxcOutt5KdnU2nTp2YOXOmeqxJkyYxZcoUVq9ezeDBg8nIyKB///5uXdb9Uc+xsbG11qdAEAqE95NAEGDat2+vTk51JCMjA4vFwsmTJ+2EjSRJHDt2TH1bd0Vubi6DBw/mnXfeYfDgwfzwww8888wz6PV6r8upiJ6jR4/WWHfkyBEyMzO9PqanFBcX8+OPP/LUU0/x6KOPqsurqqooKCio07Fbt26tXv9LLrkEo9HI448/zltvvcX//d//kZaWhl6vZ9SoUTXmISnk5OQA8jVynGAMcOzYMaf76XS6GssyMzMxGo18+OGHTvfRXudhw4YxbNgwqqqqWL16NZMnT+amm26iVatWXHDBBRgMBiZOnMjEiRMpKiri559/5rHHHmPgwIHk5eU59bQKZT0LBIFGWGoEghDSv39/AD777DO75d988w3l5eXqenc88MADbNy4kdtuuw29Xs9dd93lU1kuuOACjEZjjbIcOnSIpUuXelQWX9HpdEiSpFqPFKZPn243kdkfPPzww+Tm5vLiiy9SWlpKfHw8/fr14++//6ZLly707NmzxkcRAn379mXz5s1s3brV7phffvmlx+e/6qqr2LNnDxkZGU7P1apVqxr7xMbG0rdvX3Vy7t9//11jm9TUVP7xj38wbtw4CgoKXAbbC2U9CwSBRlhqBIIQcsUVVzBw4EAeeeQRSkpK6NOnDxs3buSpp57i3HPPZdSoUR4do0OHDixbtoxbbrmFrKwsn8qSmprKE088wWOPPcatt97KjTfeSH5+Ps888wxxcXE89dRTPh3XE5KTk7nkkkv473//S2ZmJq1atWLFihV88MEH6twXfxEdHc0LL7zAiBEjeOONN3j88cd54403uOiii7j44ou59957adWqFaWlpezevZu5c+eqc58efPBBPvzwQwYPHsyzzz5L48aN+eKLL9i+fTsAUVG1vyc++OCDfPPNN1xyySVMmDCBLl26YLPZOHjwIIsWLeJf//oX5513Hk8++SSHDh2if//+ZGdnU1RUxBtvvEF0dDR9+/YFYOjQoWocpEaNGnHgwAFef/11zjrrLJeBBUNZzwJBoBGWGoEghOh0Or777jsmTpzIjBkzGDJkiOrevXTp0hqWC1eMGDECwKVrsadMmjSJ6dOns2HDBoYPH8748ePp2LEjv//+e8Cj737xxRf069ePhx9+mGuvvZY///yTxYsXk5KS4vdzXX/99Zx33nm8+uqrFBcX06FDB/766y86derE448/zoABA7jjjjv4+uuv7SwXzZo1Y8WKFZx99tncc8893HzzzcTExPDss88CeCTAEhIS+OWXXxg9ejTTpk3jyiuvZMSIEbz55ptkZ2erlprzzjuPY8eO8cgjjzBgwADuvvtujEYjS5cupWPHjoAczHHlypXcc889XHHFFTz++OP079+fFStWEB0d7bIMoaxngSCQ6CTpdFAEgUAQsfTs2ROdTsfatWtDXZQGyd13383MmTPJz88nJiYm1MURCBosYvhJIIhQSkpK2Lx5Mz/++CPr1q3j22+/DXWRGgTPPvsszZo1o3Xr1pSVlfHjjz8yffp0Hn/8cSFoBIIQI0SNQBCh/PXXX/Tr14+MjAyeeuophg8fHuoiNQiio6P573//y6FDh7BYLLRt25ZXX32VBx54INRFEwgaPGL4SSAQ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QgItWrRg7NixlJWVqeW+/fbbKS4uVi0/Tz/9NACfffYZPXv2JCkpiSZNmnDTTTepsWgCReTJMIEgQHgqapQ5N+ESu0TgG1qX7ki2vlWYK0icnBiSc5dNKiMhJsGnfffu3cuCBQuIjo5Wl9lsNrKzs5k9ezaZmZn8/vvv3H333TRt2pQRI0ao2y1btoymTZuybNkydu/ezciRI+nWrRt33XUXIAufvLw8li5dSkxMDPfff7/dw1SSJIYPH05CQgIrVqzAYrEwduxYRo4caSc09uzZw/z581mwYAF79uzhH//4B/v27ePss89mxYoV/P7774wZM4b+/ftz/vnnO/2d/fr14+uvv7Yr+6WXXorNZmPZsmXceeed6vKbb74ZgPLyciZOnEjnzp0pLy/nySef5JprrmH9+vVERbm3RRQXF3PVVVcRFxfHkiVLSEjwrn4uu+wyunbtypw5c9SyRUVF8eabb9KqVSv27dvH2LFjefjhh3n33Xe58MILef3113nyySfZsWMHIIs5gOrqap577jnatWvHiRMnmDBhAqNHj2bevHlelckbIlLUtGrVyus3BIGgNrwVNZH4ABScwamlRuRbCyg//vgjiYmJWK1WNYfTq6++qq6Pjo7mmWeeUb/n5OTw+++/M3v2bDtRk5aWxttvv41er+ecc87hyiuvZMmSJdx1113s3LmT+fPns3r1anV6wgcffED79u3V/X/++Wc2btzIvn371Lktn376KR07dmTt2rX06tULkEXWhx9+SFJSEh06dKBfv37s2LGDefPmERUVRbt27XjppZdYvny5S1Fz6aWX8sILL3D06FGaNm3KihUreOihh7DZbKoVKi8vj3379tGvXz8ArrvuOrtjfPDBB2RlZbF161Y6derk8voeP36ckSNH0qZNG2bOnElMjG/Rl8855xw2btyofn/wwQfVv3Nycnjuuee49957effdd4mJiSElJQWdTkeTJk3sjjNmzBj179atW/Pmm2/Su3dvysrKVOHjbyJS1AgEgcBVpm6tqCmsjOy3esEZnImaSIziHR8dT9mkspCd2xv69evH1KlTqaioYPr06ezcuZP77rvPbpv33nuP6dOnc+DAAUwmE9XV1TXS4XTs2NEu4mzTpk3ZtGkTIM9ZMRgMduE/zjnnHLuJrNu2baNFixZ2k3U7dOhAamoq27ZtU0VNq1at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\n", "text/plain": [ "
" ] }, "metadata": { "filenames": { "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter6_1_1.png" } }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "filenames": { "image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter6_1_2.png" } }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from sklearn.preprocessing import PolynomialFeatures\n", "from sklearn.linear_model import LinearRegression\n", "\n", "steps=250\n", "\n", "distance=0\n", "x=0\n", "distance_list=[]\n", "steps_list=[]\n", "while x\u001b[0;34m()\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01msklearn\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mtree\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m export_graphviz\n\u001b[1;32m 8\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mIPython\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mdisplay\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Image \n\u001b[0;32m----> 9\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mpydot\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m graph_from_dot_data\n\u001b[1;32m 10\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mpandas\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mpd\u001b[39;00m\n\u001b[1;32m 11\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mnumpy\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mnp\u001b[39;00m\n", "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'pydot'" ] } ], "source": [ "import os\n", "from sklearn.datasets import load_breast_cancer\n", "from sklearn.tree import DecisionTreeClassifier\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.metrics import confusion_matrix\n", "from sklearn.tree import export_graphviz\n", "\n", "from IPython.display import Image \n", "from pydot import graph_from_dot_data\n", "import pandas as pd\n", "import numpy as np\n", "\n", "\n", "cancer = load_breast_cancer()\n", "X = pd.DataFrame(cancer.data, columns=cancer.feature_names)\n", "print(X)\n", "y = pd.Categorical.from_codes(cancer.target, cancer.target_names)\n", "y = pd.get_dummies(y)\n", "print(y)\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)\n", "tree_clf = DecisionTreeClassifier(max_depth=5)\n", "tree_clf.fit(X_train, y_train)\n", "\n", "export_graphviz(\n", " tree_clf,\n", " out_file=\"DataFiles/cancer.dot\",\n", " feature_names=cancer.feature_names,\n", " class_names=cancer.target_names,\n", " rounded=True,\n", " filled=True\n", ")\n", "cmd = 'dot -Tpng DataFiles/cancer.dot -o DataFiles/cancer.png'\n", "os.system(cmd)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "editable": true }, "outputs": [], "source": [ "# Common imports\n", "import numpy as np\n", "from sklearn.model_selection import train_test_split \n", "from sklearn.tree import DecisionTreeClassifier\n", "from sklearn.datasets import make_moons\n", "from sklearn.tree import export_graphviz\n", "from pydot import graph_from_dot_data\n", "import pandas as pd\n", "import os\n", "\n", "np.random.seed(42)\n", "X, y = make_moons(n_samples=100, noise=0.25, random_state=53)\n", "X_train, X_test, y_train, y_test = train_test_split(X,y,random_state=0)\n", "tree_clf = DecisionTreeClassifier(max_depth=5)\n", "tree_clf.fit(X_train, y_train)\n", "\n", "export_graphviz(\n", " tree_clf,\n", " out_file=\"DataFiles/moons.dot\",\n", " rounded=True,\n", " filled=True\n", ")\n", "cmd = 'dot -Tpng DataFiles/moons.dot -o DataFiles/moons.png'\n", "os.system(cmd)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Other ways of visualizing the trees\n", "\n", "**Scikit-Learn** has also another way to visualize the trees which is very useful, here with the Iris data." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "editable": true }, "outputs": [], "source": [ "from sklearn.datasets import load_iris\n", "from sklearn import tree\n", "X, y = load_iris(return_X_y=True)\n", "tree_clf = tree.DecisionTreeClassifier()\n", "tree_clf = tree_clf.fit(X, y)\n", "# and then plot the tree\n", "tree.plot_tree(tree_clf)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Alternatively, the tree can also be exported in textual format with the function exporttext.\n", "This method doesn’t require the installation of external libraries and is more compact:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "editable": true }, "outputs": [], "source": [ "from sklearn.datasets import load_iris\n", "from sklearn.tree import DecisionTreeClassifier\n", "from sklearn.tree import export_text\n", "iris = load_iris()\n", "decision_tree = DecisionTreeClassifier(random_state=0, max_depth=2)\n", "decision_tree = decision_tree.fit(iris.data, iris.target)\n", "r = export_text(decision_tree, feature_names=iris['feature_names'])\n", "print(r)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Algorithms for Setting up Decision Trees\n", "\n", "Two algorithms stand out in the set up of decision trees:\n", "1. The CART (Classification And Regression Tree) algorithm for both classification and regression\n", "\n", "2. The ID3 algorithm based on the computation of the information gain for classification\n", "\n", "We discuss both algorithms with applications here. The popular library\n", "**Scikit-Learn** uses the CART algorithm. For classification problems\n", "you can use either the **gini** index or the **entropy** to split a tree\n", "in two branches.\n", "\n", "### The CART algorithm for Classification\n", "\n", "For classification, the CART algorithm splits the data set in two subsets using a single feature $k$ and a threshold $t_k$.\n", "This could be for example a threshold set by a number below a certain circumference of a malign tumor.\n", "\n", "How do we find these two quantities?\n", "We search for the pair $(k,t_k)$ that produces the purest subset using for example the **gini** factor $G$.\n", "The cost function it tries to minimize is then" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "C(k,t_k) = \\frac{m_{\\mathrm{left}}}{m}G_{\\mathrm{left}}+ \\frac{m_{\\mathrm{right}}}{m}G_{\\mathrm{right}},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "where $G_{\\mathrm{left/right}}$ measures the impurity of the left/right subset and $m_{\\mathrm{left/right}}$\n", " is the number of instances in the left/right subset\n", "\n", "Once it has successfully split the training set in two, it splits the subsets using the same logic, then the subsubsets\n", "and so on, recursively. It stops recursing once it reaches the maximum depth (defined by the\n", "$max\\_depth$ hyperparameter), or if it cannot find a split that will reduce impurity. A few other\n", "hyperparameters control additional stopping conditions such as the $min\\_samples\\_split$,\n", "$min\\_samples\\_leaf$, $min\\_weight\\_fraction\\_leaf$, and $max\\_leaf\\_nodes$.\n", "\n", "\n", "### The CART algorithm for Regression\n", "\n", "The CART algorithm for regression works is similar to the one for classification except that instead of trying to split the\n", "training set in a way that minimizes say the **gini** or **entropy** impurity, it now tries to split the training set in a way that minimizes our well-known mean-squared error (MSE). The cost function is now" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "C(k,t_k) = \\frac{m_{\\mathrm{left}}}{m}\\mathrm{MSE}_{\\mathrm{left}}+ \\frac{m_{\\mathrm{right}}}{m}\\mathrm{MSE}_{\\mathrm{right}}.\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here the MSE for a specific node is defined as" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\mathrm{MSE}_{\\mathrm{node}}=\\frac{1}{m_\\mathrm{node}}\\sum_{i\\in \\mathrm{node}}(\\overline{y}_{\\mathrm{node}}-y_i)^2,\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "with" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\overline{y}_{\\mathrm{node}}=\\frac{1}{m_\\mathrm{node}}\\sum_{i\\in \\mathrm{node}}y_i,\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "the mean value of all observations in a specific node.\n", "\n", "Without any regularization, the regression task for decision trees, \n", "just like for classification tasks, is prone to overfitting.\n", "\n", "\n", "\n", "### Computing the Gini index\n", "\n", "The example we will look at is a classical one in many Machine\n", "Learning applications. Based on various meteorological features, we\n", "have several so-called attributes which decide whether we at the end\n", "will do some outdoor activity like skiing, going for a bike ride etc\n", "etc. The table here contains the feautures **outlook**, **temperature**,\n", "**humidity** and **wind**. The target or output is whether we ride\n", "(True=1) or whether we do something else that day (False=0). The\n", "attributes for each feature are then sunny, overcast and rain for the\n", "outlook, hot, cold and mild for temperature, high and normal for\n", "humidity and weak and strong for wind.\n", "\n", "The table here summarizes the various attributes and\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Day Outlook Temperature Humidity Wind Ride
1 Sunny Hot High Weak 0
2 Sunny Hot High Strong 1
3 Overcast Hot High Weak 1
4 Rain Mild High Weak 1
5 Rain Cool Normal Weak 1
6 Rain Cool Normal Strong 0
7 Overcast Cool Normal Strong 1
8 Sunny Mild High Weak 0
9 Sunny Cool Normal Weak 1
10 Rain Mild Normal Weak 1
11 Sunny Mild Normal Strong 1
12 Overcast Mild High Strong 1
13 Overcast Hot Normal Weak 1
14 Rain Mild High Strong 0
\n", "\n", "### Simple Python Code to read in Data and perform Classification" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "editable": true }, "outputs": [], "source": [ "# Common imports\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "from sklearn.tree import DecisionTreeClassifier\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.tree import export_graphviz\n", "from sklearn.preprocessing import StandardScaler, OneHotEncoder\n", "from sklearn.compose import ColumnTransformer\n", "from IPython.display import Image \n", "from pydot import graph_from_dot_data\n", "import os\n", "\n", "# Where to save the figures and data files\n", "PROJECT_ROOT_DIR = \"Results\"\n", "FIGURE_ID = \"Results/FigureFiles\"\n", "DATA_ID = \"DataFiles/\"\n", "\n", "if not os.path.exists(PROJECT_ROOT_DIR):\n", " os.mkdir(PROJECT_ROOT_DIR)\n", "\n", "if not os.path.exists(FIGURE_ID):\n", " os.makedirs(FIGURE_ID)\n", "\n", "if not os.path.exists(DATA_ID):\n", " os.makedirs(DATA_ID)\n", "\n", "def image_path(fig_id):\n", " return os.path.join(FIGURE_ID, fig_id)\n", "\n", "def data_path(dat_id):\n", " return os.path.join(DATA_ID, dat_id)\n", "\n", "def save_fig(fig_id):\n", " plt.savefig(image_path(fig_id) + \".png\", format='png')\n", "\n", "infile = open(data_path(\"rideclass.csv\"),'r')\n", "\n", "# Read the experimental data with Pandas\n", "from IPython.display import display\n", "ridedata = pd.read_csv(infile,names = ('Outlook','Temperature','Humidity','Wind','Ride'))\n", "ridedata = pd.DataFrame(ridedata)\n", "\n", "# Features and targets\n", "X = ridedata.loc[:, ridedata.columns != 'Ride'].values\n", "y = ridedata.loc[:, ridedata.columns == 'Ride'].values\n", "\n", "# Create the encoder.\n", "encoder = OneHotEncoder(handle_unknown=\"ignore\")\n", "# Assume for simplicity all features are categorical.\n", "encoder.fit(X) \n", "# Apply the encoder.\n", "X = encoder.transform(X)\n", "print(X)\n", "# Then do a Classification tree\n", "tree_clf = DecisionTreeClassifier(max_depth=2)\n", "tree_clf.fit(X, y)\n", "print(\"Train set accuracy with Decision Tree: {:.2f}\".format(tree_clf.score(X,y)))\n", "#transfer to a decision tree graph\n", "export_graphviz(\n", " tree_clf,\n", " out_file=\"DataFiles/ride.dot\",\n", " rounded=True,\n", " filled=True\n", ")\n", "cmd = 'dot -Tpng DataFiles/cancer.dot -o DataFiles/cancer.png'\n", "os.system(cmd)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The above functions (gini, entropy and misclassification error) are\n", "important components of the so-called CART algorithm. We will discuss\n", "this algorithm below after we have discussed the information gain\n", "algorithm ID3.\n", "\n", "In the example here we have converted all our attributes into numerical values $0,1,2$ etc." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "editable": true }, "outputs": [], "source": [ "# Split a dataset based on an attribute and an attribute value\n", "def test_split(index, value, dataset):\n", "\tleft, right = list(), list()\n", "\tfor row in dataset:\n", "\t\tif row[index] < value:\n", "\t\t\tleft.append(row)\n", "\t\telse:\n", "\t\t\tright.append(row)\n", "\treturn left, right\n", " \n", "# Calculate the Gini index for a split dataset\n", "def gini_index(groups, classes):\n", "\t# count all samples at split point\n", "\tn_instances = float(sum([len(group) for group in groups]))\n", "\t# sum weighted Gini index for each group\n", "\tgini = 0.0\n", "\tfor group in groups:\n", "\t\tsize = float(len(group))\n", "\t\t# avoid divide by zero\n", "\t\tif size == 0:\n", "\t\t\tcontinue\n", "\t\tscore = 0.0\n", "\t\t# score the group based on the score for each class\n", "\t\tfor class_val in classes:\n", "\t\t\tp = [row[-1] for row in group].count(class_val) / size\n", "\t\t\tscore += p * p\n", "\t\t# weight the group score by its relative size\n", "\t\tgini += (1.0 - score) * (size / n_instances)\n", "\treturn gini\n", "\n", "# Select the best split point for a dataset\n", "def get_split(dataset):\n", "\tclass_values = list(set(row[-1] for row in dataset))\n", "\tb_index, b_value, b_score, b_groups = 999, 999, 999, None\n", "\tfor index in range(len(dataset[0])-1):\n", "\t\tfor row in dataset:\n", "\t\t\tgroups = test_split(index, row[index], dataset)\n", "\t\t\tgini = gini_index(groups, class_values)\n", "\t\t\tprint('X%d < %.3f Gini=%.3f' % ((index+1), row[index], gini))\n", "\t\t\tif gini < b_score:\n", "\t\t\t\tb_index, b_value, b_score, b_groups = index, row[index], gini, groups\n", "\treturn {'index':b_index, 'value':b_value, 'groups':b_groups}\n", " \n", "dataset = [[0,0,0,0,0],\n", " [0,0,0,1,1],\n", " [1,0,0,0,1],\n", " [2,1,0,0,1],\n", " [2,2,1,0,1],\n", " [2,2,1,1,0],\n", " [1,2,1,1,1],\n", " [0,1,0,0,0],\n", " [0,2,1,0,1],\n", " [2,1,1,0,1],\n", " [0,1,1,1,1],\n", " [1,1,0,1,1],\n", " [1,0,1,0,1],\n", " [2,1,0,1,0]]\n", "\n", "split = get_split(dataset)\n", "print('Split: [X%d < %.3f]' % ((split['index']+1), split['value']))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Entropy and the ID3 algorithm\n", "\n", "The ID3 algorithm learns decision trees by constructing\n", "them in a top down way, beginning with the question **which attribute should be tested at the root of the tree**?\n", "\n", "1. Each instance attribute is evaluated using a statistical test to determine how well it alone classifies the training examples.\n", "\n", "2. The best attribute is selected and used as the test at the root node of the tree.\n", "\n", "3. A descendant of the root node is then created for each possible value of this attribute.\n", "\n", "4. Training examples are sorted to the appropriate descendant node.\n", "\n", "5. The entire process is then repeated using the training examples associated with each descendant node to select the best attribute to test at that point in the tree.\n", "\n", "6. This forms a greedy search for an acceptable decision tree, in which the algorithm never backtracks to reconsider earlier choices. \n", "\n", "The ID3 algorithm selects which attribute to test at each node in the\n", "tree.\n", "\n", "We would like to select the attribute that is most useful for classifying\n", "examples.\n", "\n", "What is a good quantitative measure of the worth of an attribute?\n", "\n", "Information gain measures how well a given attribute separates the\n", "training examples according to their target classification.\n", "\n", "The ID3 algorithm uses this information gain measure to select among the candidate\n", "attributes at each step while growing the tree.\n", "\n", "\n", "### Cancer Data again now with Decision Trees and other Methods" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "editable": true }, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "from sklearn.model_selection import train_test_split \n", "from sklearn.datasets import load_breast_cancer\n", "from sklearn.svm import SVC\n", "from sklearn.linear_model import LogisticRegression\n", "from sklearn.tree import DecisionTreeClassifier\n", "\n", "# Load the data\n", "cancer = load_breast_cancer()\n", "\n", "X_train, X_test, y_train, y_test = train_test_split(cancer.data,cancer.target,random_state=0)\n", "print(X_train.shape)\n", "print(X_test.shape)\n", "# Logistic Regression\n", "logreg = LogisticRegression(solver='lbfgs')\n", "logreg.fit(X_train, y_train)\n", "print(\"Test set accuracy with Logistic Regression: {:.2f}\".format(logreg.score(X_test,y_test)))\n", "# Support vector machine\n", "svm = SVC(gamma='auto', C=100)\n", "svm.fit(X_train, y_train)\n", "print(\"Test set accuracy with SVM: {:.2f}\".format(svm.score(X_test,y_test)))\n", "# Decision Trees\n", "deep_tree_clf = DecisionTreeClassifier(max_depth=None)\n", "deep_tree_clf.fit(X_train, y_train)\n", "print(\"Test set accuracy with Decision Trees: {:.2f}\".format(deep_tree_clf.score(X_test,y_test)))\n", "#now scale the data\n", "from sklearn.preprocessing import StandardScaler\n", "scaler = StandardScaler()\n", "scaler.fit(X_train)\n", "X_train_scaled = scaler.transform(X_train)\n", "X_test_scaled = scaler.transform(X_test)\n", "# Logistic Regression\n", "logreg.fit(X_train_scaled, y_train)\n", "print(\"Test set accuracy Logistic Regression with scaled data: {:.2f}\".format(logreg.score(X_test_scaled,y_test)))\n", "# Support Vector Machine\n", "svm.fit(X_train_scaled, y_train)\n", "print(\"Test set accuracy SVM with scaled data: {:.2f}\".format(logreg.score(X_test_scaled,y_test)))\n", "# Decision Trees\n", "deep_tree_clf.fit(X_train_scaled, y_train)\n", "print(\"Test set accuracy with Decision Trees and scaled data: {:.2f}\".format(deep_tree_clf.score(X_test_scaled,y_test)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Another example, the moons again" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "editable": true }, "outputs": [], "source": [ "from __future__ import division, print_function, unicode_literals\n", "\n", "# Common imports\n", "import numpy as np\n", "import os\n", "\n", "# to make this notebook's output stable across runs\n", "np.random.seed(42)\n", "\n", "# To plot pretty figures\n", "import matplotlib\n", "import matplotlib.pyplot as plt\n", "from matplotlib.colors import ListedColormap\n", "plt.rcParams['axes.labelsize'] = 14\n", "plt.rcParams['xtick.labelsize'] = 12\n", "plt.rcParams['ytick.labelsize'] = 12\n", "\n", "\n", "from sklearn.svm import SVC\n", "from sklearn import datasets\n", "from sklearn.tree import DecisionTreeClassifier\n", "from sklearn.datasets import make_moons\n", "from sklearn.tree import export_graphviz\n", "\n", "Xm, ym = make_moons(n_samples=100, noise=0.25, random_state=53)\n", "\n", "deep_tree_clf1 = DecisionTreeClassifier(random_state=42)\n", "deep_tree_clf2 = DecisionTreeClassifier(min_samples_leaf=4, random_state=42)\n", "deep_tree_clf1.fit(Xm, ym)\n", "deep_tree_clf2.fit(Xm, ym)\n", "\n", "\n", "def plot_decision_boundary(clf, X, y, axes=[0, 7.5, 0, 3], iris=True, legend=False, plot_training=True):\n", " x1s = np.linspace(axes[0], axes[1], 100)\n", " x2s = np.linspace(axes[2], axes[3], 100)\n", " x1, x2 = np.meshgrid(x1s, x2s)\n", " X_new = np.c_[x1.ravel(), x2.ravel()]\n", " y_pred = clf.predict(X_new).reshape(x1.shape)\n", " custom_cmap = ListedColormap(['#fafab0','#9898ff','#a0faa0'])\n", " plt.contourf(x1, x2, y_pred, alpha=0.3, cmap=custom_cmap)\n", " if not iris:\n", " custom_cmap2 = ListedColormap(['#7d7d58','#4c4c7f','#507d50'])\n", " plt.contour(x1, x2, y_pred, cmap=custom_cmap2, alpha=0.8)\n", " if plot_training:\n", " plt.plot(X[:, 0][y==0], X[:, 1][y==0], \"yo\", label=\"Iris-Setosa\")\n", " plt.plot(X[:, 0][y==1], X[:, 1][y==1], \"bs\", label=\"Iris-Versicolor\")\n", " plt.plot(X[:, 0][y==2], X[:, 1][y==2], \"g^\", label=\"Iris-Virginica\")\n", " plt.axis(axes)\n", " if iris:\n", " plt.xlabel(\"Petal length\", fontsize=14)\n", " plt.ylabel(\"Petal width\", fontsize=14)\n", " else:\n", " plt.xlabel(r\"$x_1$\", fontsize=18)\n", " plt.ylabel(r\"$x_2$\", fontsize=18, rotation=0)\n", " if legend:\n", " plt.legend(loc=\"lower right\", fontsize=14)\n", "plt.figure(figsize=(11, 4))\n", "plt.subplot(121)\n", "plot_decision_boundary(deep_tree_clf1, Xm, ym, axes=[-1.5, 2.5, -1, 1.5], iris=False)\n", "plt.title(\"No restrictions\", fontsize=16)\n", "plt.subplot(122)\n", "plot_decision_boundary(deep_tree_clf2, Xm, ym, axes=[-1.5, 2.5, -1, 1.5], iris=False)\n", "plt.title(\"min_samples_leaf = {}\".format(deep_tree_clf2.min_samples_leaf), fontsize=14)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "editable": true }, "outputs": [], "source": [ "np.random.seed(6)\n", "Xs = np.random.rand(100, 2) - 0.5\n", "ys = (Xs[:, 0] > 0).astype(np.float32) * 2\n", "\n", "angle = np.pi/4\n", "rotation_matrix = np.array([[np.cos(angle), -np.sin(angle)], [np.sin(angle), np.cos(angle)]])\n", "Xsr = Xs.dot(rotation_matrix)\n", "\n", "tree_clf_s = DecisionTreeClassifier(random_state=42)\n", "tree_clf_s.fit(Xs, ys)\n", "tree_clf_sr = DecisionTreeClassifier(random_state=42)\n", "tree_clf_sr.fit(Xsr, ys)\n", "\n", "plt.figure(figsize=(11, 4))\n", "plt.subplot(121)\n", "plot_decision_boundary(tree_clf_s, Xs, ys, axes=[-0.7, 0.7, -0.7, 0.7], iris=False)\n", "plt.subplot(122)\n", "plot_decision_boundary(tree_clf_sr, Xsr, ys, axes=[-0.7, 0.7, -0.7, 0.7], iris=False)\n", "\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "editable": true }, "outputs": [], "source": [ "# Quadratic training set + noise\n", "np.random.seed(42)\n", "m = 200\n", "X = np.random.rand(m, 1)\n", "y = 4 * (X - 0.5) ** 2\n", "y = y + np.random.randn(m, 1) / 10" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "editable": true }, "outputs": [], "source": [ "from sklearn.tree import DecisionTreeRegressor\n", "\n", "tree_reg = DecisionTreeRegressor(max_depth=2, random_state=42)\n", "tree_reg.fit(X, y)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "editable": true }, "outputs": [], "source": [ "from sklearn.tree import DecisionTreeRegressor\n", "\n", "tree_reg1 = DecisionTreeRegressor(random_state=42, max_depth=2)\n", "tree_reg2 = DecisionTreeRegressor(random_state=42, max_depth=3)\n", "tree_reg1.fit(X, y)\n", "tree_reg2.fit(X, y)\n", "\n", "def plot_regression_predictions(tree_reg, X, y, axes=[0, 1, -0.2, 1], ylabel=\"$y$\"):\n", " x1 = np.linspace(axes[0], axes[1], 500).reshape(-1, 1)\n", " y_pred = tree_reg.predict(x1)\n", " plt.axis(axes)\n", " plt.xlabel(\"$x_1$\", fontsize=18)\n", " if ylabel:\n", " plt.ylabel(ylabel, fontsize=18, rotation=0)\n", " plt.plot(X, y, \"b.\")\n", " plt.plot(x1, y_pred, \"r.-\", linewidth=2, label=r\"$\\hat{y}$\")\n", "\n", "plt.figure(figsize=(11, 4))\n", "plt.subplot(121)\n", "plot_regression_predictions(tree_reg1, X, y)\n", "for split, style in ((0.1973, \"k-\"), (0.0917, \"k--\"), (0.7718, \"k--\")):\n", " plt.plot([split, split], [-0.2, 1], style, linewidth=2)\n", "plt.text(0.21, 0.65, \"Depth=0\", fontsize=15)\n", "plt.text(0.01, 0.2, \"Depth=1\", fontsize=13)\n", "plt.text(0.65, 0.8, \"Depth=1\", fontsize=13)\n", "plt.legend(loc=\"upper center\", fontsize=18)\n", "plt.title(\"max_depth=2\", fontsize=14)\n", "\n", "plt.subplot(122)\n", "plot_regression_predictions(tree_reg2, X, y, ylabel=None)\n", "for split, style in ((0.1973, \"k-\"), (0.0917, \"k--\"), (0.7718, \"k--\")):\n", " plt.plot([split, split], [-0.2, 1], style, linewidth=2)\n", "for split in (0.0458, 0.1298, 0.2873, 0.9040):\n", " plt.plot([split, split], [-0.2, 1], \"k:\", linewidth=1)\n", "plt.text(0.3, 0.5, \"Depth=2\", fontsize=13)\n", "plt.title(\"max_depth=3\", fontsize=14)\n", "\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "editable": true }, "outputs": [], "source": [ "tree_reg1 = DecisionTreeRegressor(random_state=42)\n", "tree_reg2 = DecisionTreeRegressor(random_state=42, min_samples_leaf=10)\n", "tree_reg1.fit(X, y)\n", "tree_reg2.fit(X, y)\n", "\n", "x1 = np.linspace(0, 1, 500).reshape(-1, 1)\n", "y_pred1 = tree_reg1.predict(x1)\n", "y_pred2 = tree_reg2.predict(x1)\n", "\n", "plt.figure(figsize=(11, 4))\n", "\n", "plt.subplot(121)\n", "plt.plot(X, y, \"b.\")\n", "plt.plot(x1, y_pred1, \"r.-\", linewidth=2, label=r\"$\\hat{y}$\")\n", "plt.axis([0, 1, -0.2, 1.1])\n", "plt.xlabel(\"$x_1$\", fontsize=18)\n", "plt.ylabel(\"$y$\", fontsize=18, rotation=0)\n", "plt.legend(loc=\"upper center\", fontsize=18)\n", "plt.title(\"No restrictions\", fontsize=14)\n", "\n", "plt.subplot(122)\n", "plt.plot(X, y, \"b.\")\n", "plt.plot(x1, y_pred2, \"r.-\", linewidth=2, label=r\"$\\hat{y}$\")\n", "plt.axis([0, 1, -0.2, 1.1])\n", "plt.xlabel(\"$x_1$\", fontsize=18)\n", "plt.title(\"min_samples_leaf={}\".format(tree_reg2.min_samples_leaf), fontsize=14)\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Pros and cons of trees, pros\n", "\n", "* White box, easy to interpret model. Some people believe that decision trees more closely mirror human decision-making than do the regression and classification approaches discussed earlier (think of support vector machines)\n", "\n", "* Trees are very easy to explain to people. In fact, they are even easier to explain than linear regression!\n", "\n", "* No feature normalization needed\n", "\n", "* Tree models can handle both continuous and categorical data (Classification and Regression Trees)\n", "\n", "* Can model nonlinear relationships\n", "\n", "* Can model interactions between the different descriptive features\n", "\n", "* Trees can be displayed graphically, and are easily interpreted even by a non-expert (especially if they are small)\n", "\n", "### Disadvantages\n", "\n", "* Unfortunately, trees generally do not have the same level of predictive accuracy as some of the other regression and classification approaches\n", "\n", "* If continuous features are used the tree may become quite large and hence less interpretable\n", "\n", "* Decision trees are prone to overfit the training data and hence do not well generalize the data if no stopping criteria or improvements like pruning, boosting or bagging are implemented\n", "\n", "* Small changes in the data may lead to a completely different tree. This issue can be addressed by using ensemble methods like bagging, boosting or random forests\n", "\n", "* Unbalanced datasets where some target feature values occur much more frequently than others may lead to biased trees since the frequently occurring feature values are preferred over the less frequently occurring ones. \n", "\n", "* If the number of features is relatively large (high dimensional) and the number of instances is relatively low, the tree might overfit the data\n", "\n", "* Features with many levels may be preferred over features with less levels since for them it is *more easy* to split the dataset such that the sub datasets only contain pure target feature values. This issue can be addressed by preferring for instance the information gain ratio as splitting criteria over information gain\n", "\n", "However, by aggregating many decision trees, using methods like\n", "bagging, random forests, and boosting, the predictive performance of\n", "trees can be substantially improved." ] } ], "metadata": { "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.10" } }, "nbformat": 4, "nbformat_minor": 4 }