{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "**Chapter 6 – Decision Trees**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "_This notebook contains all the sample code and solutions to the exercises in chapter 6._\n", "\n", "\n", " \n", "
\n", " Run in Google Colab\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Warning**: this is the code for the 1st edition of the book. Please visit https://github.com/ageron/handson-ml2 for the 2nd edition code, with up-to-date notebooks using the latest library versions." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Setup" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, let's make sure this notebook works well in both python 2 and 3, import a few common modules, ensure MatplotLib plots figures inline and prepare a function to save the figures:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# To support both python 2 and python 3\n", "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", "%matplotlib inline\n", "import matplotlib as mpl\n", "import matplotlib.pyplot as plt\n", "mpl.rc('axes', labelsize=14)\n", "mpl.rc('xtick', labelsize=12)\n", "mpl.rc('ytick', labelsize=12)\n", "\n", "# Where to save the figures\n", "PROJECT_ROOT_DIR = \".\"\n", "CHAPTER_ID = \"decision_trees\"\n", "IMAGES_PATH = os.path.join(PROJECT_ROOT_DIR, \"images\", CHAPTER_ID)\n", "os.makedirs(IMAGES_PATH, exist_ok=True)\n", "\n", "def save_fig(fig_id, tight_layout=True, fig_extension=\"png\", resolution=300):\n", " path = os.path.join(IMAGES_PATH, fig_id + \".\" + fig_extension)\n", " print(\"Saving figure\", fig_id)\n", " if tight_layout:\n", " plt.tight_layout()\n", " plt.savefig(path, format=fig_extension, dpi=resolution)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Training and visualizing" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=2,\n", " max_features=None, max_leaf_nodes=None,\n", " min_impurity_decrease=0.0, min_impurity_split=None,\n", " min_samples_leaf=1, min_samples_split=2,\n", " min_weight_fraction_leaf=0.0, presort=False, random_state=42,\n", " splitter='best')" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.datasets import load_iris\n", "from sklearn.tree import DecisionTreeClassifier\n", "\n", "iris = load_iris()\n", "X = iris.data[:, 2:] # petal length and width\n", "y = iris.target\n", "\n", "tree_clf = DecisionTreeClassifier(max_depth=2, random_state=42)\n", "tree_clf.fit(X, y)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "from sklearn.tree import export_graphviz\n", "\n", "def image_path(fig_id):\n", " return os.path.join(IMAGES_PATH, fig_id)\n", "\n", "export_graphviz(\n", " tree_clf,\n", " out_file=image_path(\"iris_tree.dot\"),\n", " feature_names=iris.feature_names[2:],\n", " class_names=iris.target_names,\n", " rounded=True,\n", " filled=True\n", " )" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Saving figure decision_tree_decision_boundaries_plot\n" ] }, { "data": { "image/png": "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BaYBjxFZugFgJPCPDMUmIrJNUinPTuV8mTouG+fr06cHffr0SC0QkRyWbO/L7UAxkaqpBRW2PwXcme6gJD9df/1t3HBDJN81M3baqTF77NGO448/ikGDLqFlyxZpv+asWd/y+OMTueKK/jRpslP59oceeoJLLrmSFSu+oVGjhmm9prtz8813cO+9D/Pjj//jwAO7M2rUjey3X7e0Xke2XbpLz9O9qnm244hlxoyP0ncykRySbIJzLHCsuy+3yv/1+RZom/aoJG/ttFNjXnzxMQBWrFjJxx9/zr33juO++x7hxRcfo0eP7mm93qxZc7jhhn/Qr985lRKcTLrllju58cZR3HrrNXTuvAe33/4vevU6m88+eyMjSVy6pHPulFyS6L4gnPecTs8//2HQIYhkRLIJTgMiVVNVNQfWpy8cyXd16xZw8MFburt79/4Zv/lNP44++jTOO28gX3zxFgUF+Tsv5Pr167nllru4+urL+N3vfgXAIYcU0aHDgdx99wMMH351wBHGl+65WHJFKveV7/ecTvvso8dTEk7Jrib+JnBRhc9uZgXAYODVdAcl4dKkyU7cfPNf+eabubz88n+BSKIwePBwdt+9Bw0a7M7++x/Liy9W/lHq0OFA/vSn67nxxpG0br0vjRt35IILfsuKFSsBeOONdznllAsB6NixJwUFrejQofKUsXPnLqBXr3PYcccOdO16OBMmvLBN9/Luux+ycuUqzjqrT/m2hg134KSTejFlymvbdG4REUmfZBOcPwP9zexloB6RgcVfEFlwc0iiA0UAjj76UOrWrcv770ee9591Vn/GjXuCq6++nOeeG0dR0X6cemo/PvlkRqXjxo9/lldffYt//es2brttGC+++Cr9+/8BgAMO2Ie///06AJ5+eizvvDOZZ555oNLxF1zwW04+uRfPPPMAe+zRgfPOG8jChVvm/di8eTObNm1K+CotLS1v//XX31BQUMCee3aodJ299tqTr776Jn1fmEiWjBo1jFGjhgUdhkjaJbua+Bdmti8wECgB6hMZYHy3uy/OYHwSEvXr16dZs50pLv6BV199ixdffIXXXnuGo446FIBevY5m9uxvuemm0Tz55Ja5I9etW8+kSY+UDxRu2HAH+vW7jC+/nMVee3WiU6eOAOy//z60a7fbVte94ooB/OpX5wLQo8e+tGq1L5Mnv8xvftMPgOHDR5YPjI5n993bMGdOZMDG8uU/0ahRw60eszVpshNr165jw4YNbL/99ql8RSKBGD36egCuvHJYsIGIpFnSc9hEE5lrMxiLhJxHFwB69dU3admyBYcd1pNNmzaV7z/mmCMYN+6JSsccd9yRlaqgTjvtBC680Pngg0/Ya69O1V6zV6+jyt/vssvOtGjRjO+/35KT9+9/Ab/4xXEJz1GvXr1qryOSr6644rqgQxDJiOrWotoB+DtwKrAd8ApwubtriJ7UyPr161m2bDmFhc35/vvFLFmylHr1tu5xqdoz0qJF5Yk9dthhBxo1asiSJVWGgzqmAAAaMklEQVQXto+tamXV9ttvx/r1W5ZUa9myxVbXqKpi5WDTpk1YvXoNpaWllWL96acV7LBDg5zuvWnWLHG1Ub6q7r7CeM/ppJ4bCavqenCuJzK4+FEi1VLnAvcAZ6VyMTMbFD3fPsDj7n5Rgra/JzKIeQfgaWCgu5fEay+57fXX32HTpk0cfHAPXn/9HXbdtRUTJjxQ7XFLl1b+12nt2rWsXr0mbeXYNX1E1bnzHpSWlvLNN3Pp3HmP8jZfffUNXbrsEe8UOSHdZdEdOsReldsM5sxJ73HpLnE/8EBo3z72+UCl5SJhUF2CczpwibuPBzCzR4B3zKzA3UsTHxrTIuBGoDeR0vOYzKw3cDVwTPSYiUSSrdytwZW4fvppBUOG/I099mjPcccdiZkxcuS9NGrUkC5d9kx47CuvvMnq1WvKH1NNnPgfzIyiosh8Ottvvx0Q6SFKRU0fUR16aBGNG+/I009PYujQ3wORpGvy5P+jf/8LUoohX8VKUhJt35bj0l3irtLyLT7/fDqgcnEJn+oSnN2At8o+uPs0M9sEtAa+q+nF3H0CgJkVAW0SNO0HjHX3mdH2w4n0IinByXGbNpUydWrkL8xVq1bz0Uefce+941i7dh0vvvgYBQUFHH/8UfTqdTS9e/flz3/+HV27dmblylV8+ulM1q9fz003DS0/X4MG9enT5wL+8IffsnhxMYMHD+fUU0+ga9fOAHTuHBlkPGbMvznnnFPZYYcG7LPPXknH27p1S1q3bpl0+/r16zN48CBuvPF2mjZtUj7R3+bNmxk06JKkzyOSK04+uQiAuXOryUxF8kx1CU4BW0/wtymJ47bV3sBzFT5/ChSa2S7uvqxiQzMbAAwAaNt21wyHJdVZsWIlhx12EmZG48Y7ssce7Tj//DMqLdVgZjzzzFhGjLiD0aPvY8GC79l55yZ07773VknCOeecwo47NqJ//6tYvXoNffr05p//vLl8/+6778bf/34dd955P3fd9QBt2rQqf5yUKYMHX8bmzZu5+eY7WbZsOUVF+/LSS09QWNg8o9cVyYRu3Q4IOgSRjDBP0C9sZpuBl4mUhpc5AfgvsLZsg7ufXKOLmt0ItIk3BsfMvgV+5+5Top+3I5JotXf3efHOW1TU3adNe6kmoUgO69DhQM4446TyuW7yUUFBKwDmzPkfZk0Djia9Yo1hKTN3bnqPS/VaqcSQSCrXEpH0at/eprt7UXXtquuJGRdj2yOphVQjq4HGFT6XvV+VhWuLiIhInkuY4Lj7xdkKpIqZQHfgyejn7kBx1cdTIhIcs/jVUOk+Lt0l7iotFwm/TI+lqcTM6kavWQAUmFl9YJO7b6rS9GHgITN7lEgV1V+Bh7IZqwQv02NpZNskKgVP93HpLs9WufcWBx3UGoD3319UTUuR/JLsWlTp8ldgHZFqqAui7/9qZm3NbLWZtQWIjr25FXgdWADMB/J3IIaISI5aunQxS5dqxR0Jn6z24Lj7MGBYnN2NqrQdCYzMcEgiIrXa1KnfBx2CSEZkNcEREZHcUljYOugQRDIi24+oRERERDJOCY6ISC02ZMgAhgwZEHQYImmnBEdEpBYbP/4+xo+/L+gwRNJOY3BERGqxv/3tX0GHIJIRSnBERGqx887T4ykJJz2iEhERkdBRgiMiUou98sokXnllUtBhiKSdHlGJiNRi/fufDMDcuTEWCBPJY0pwRERqsWOOOSnoEEQyQgmOiEgtNnasHk9JOGkMjoiIiISOEhwREREJHSU4IiK1WPv2Rvv2FnQYImmnBEdERERCR4OMRURqMZWHS1ipB0dERERCRwmOiIiIhI4SHBGRWuySS/pwySV9gg5DJO00BkdEpBZ77bXJQYcgkhFKcCTriosnMG/eCEpKvqdevV1p124IhYWnBx2WSK10333PBx2CSEYowZGsKi6ewOzZf2Tz5nUAlJQsZPbsPwIoyREJwHHH6fGUhJPG4EhWzZs3ojy5KbN58zrmzRsRUEQiIhJGSnAkq0pKvq/RdpGgDBx4Bp9++gEAo0YNo6ioBb/4xf787GedOOWUA3nwwdGUlpZu0zUWLpzHY4+NqbTt8MPb8fXXM1I+5x13DKdXr735+c/3pU+fHvz3vy+V77vssr5Mn/5upfaPPTZmqxhEwkAJjmRVvXq71mi7SBA+/vh91qxZTffuB5ZvO+20C3nhhY95/fVZ3HnnE0ye/ATDh/9+m66zcOE8xo9Pb3LRvXtPnnvuA6ZM+YxbbnmAyy47h/XrI72mAwdeza23DqnUfujQSxk69NK0xiCSC5TgSFa1azeEOnUaVNpWp04D2rUbEucIkewbP34Mp5xyXtz9bdt24NZbH+DRR+9h5coVALz++ouceeZh9OnTg9NPP4SPP54KwNSpb3DCCd256qoL6dVrb045pSezZ38BwLXX/o7Zs7/gxBP3Y+DAM8vP/8ILT3L66Ydw+OHtGDfurhrFftRRvWnQYAcA9tprX8BZvnwZAF277seyZUuZO3d2efu+ffvTt2//Gl1DJB9okLFkVdlAYlVRSS6bOvUNBgz4U8I2HTt2oUGDHZgz52uaNt2FO+8czrhxL7Hjjo2ZNWsmF198Au+8swCAr776jOuuu4ORIx/mmWfG8Yc/XMjzz3/IDTfczU03/ZHnn/+w0rnXrVvLhAnvsXDhPHr37saZZ15Ew4aNGDbscqZNezNmPPfc8wy7796x0rYJEx6mbduOtGrVpnzbAQccwrvvvkr79nsCMGKEHk9JOGU1wTGznYGxQC/gR2CIuz8Wo90wYChQUmHzvu4+JxtxSmYVFp6uhEZy2pIlC2nWrLDadu6RdZzefPMlFiz4lnPOObJ836ZNm/jhh2IA2rXbg4MPPgqA0077JX/5ywBWrVoZ97x9+vQFoE2bduy0U1OWLFlIx45dGDbsjqTvYerU/zJy5DU8/PDLlbY3b96SxYsXJn0ekXyV7R6cu4ENQCGwH/CCmX3q7jNjtH3C3S/IanQSOM2RI7mgXr0GlJSsT9jm22+/Zv36dXTs2IXPPvuAI4/8OSNHPhyj3ZcpXL9++fs6dQrYtGkTQNI9OB999B5XXXUBY8Y8R8eOnSu1KylZT5Mmu5R/Li5eBEBhYesaxymSy7KW4JhZQ+AMoJu7rwbeNrPngV8CV2crDsldmiNHckXnzvswZ87XtGjRKub+hQvncfXVl3D++QPZccfGHHFEL+6443pmzZpJp057A/Dppx+UD1KeP/9bpk17i549j+C55x6jc+d92HHHxjRq1JhVq1YkHVcyPTiffvoBl112Dnff/TTduh2w1f5vvvmSX/7yd+WfDz44MsBfq4pL2GSzB6cTsMndZ1XY9ilwVJz2fczsf8Bi4C53vyfTAUqwEs2RowRHsunnPz+dN998iYMPPrp828SJD/Puu6+ybt1adtyxMaeccj79+l0GQPv2ezJy5CMMHnwJ69evY+PGDfTocVh5gtO58z488cT9XHPNQOrX34F//CPS09Oly7506NCZ3r270aFDF+655+ltjv3aa3/L+vXrKlVGjRz5b7p02Ye1a9cwe/ZMDj30mPJ98ZI4kXxnZc+QM34hsyOAp9y9ZYVt/YHz3f3oKm27Aj8BxcBBwDPAVe7+eIzzDgAGALRtu2uPuXM/rNpE8sSbb7YGYv08GkceuSjb4aRFQUHkH485c/6HWdOAo5FkrVq1krPOOpxnn32f+vUbVH9AAlOnvhFzIHEQHnvsXyxevJA//GF40KGIpKx9e5vu7kXVtctmmfhqoHGVbY2BVVUbuvsX7r7I3Uvd/V1gNHBm1XbRtmPcvcjdi5o33yVWE8kTmiNHcsWOOzZm6NB/8N13c4MOJa3q1Clg4ECNCJDaIZsJziygrpntWWFbdyDWAOOqHLCMRCU5Q3PkSC454ojj2XPPrtt8noMPPjonem8A+vb9NTvs0DDoMESyImsJjruvASYAN5hZQzM7DDgF+HfVtmZ2ipk1tYiewOXAc9mKVYJRWHg6e+55G/XqtQGMevXasOeet2n8jUgG9enTgz59egQdhkjaZbtM/LfAA8BSYBkw0N1nRsfn/MfdG0Xb9Y22qwcsBG5x93FZjlWiUind/uSTs1m58q3yz40bH8F++z2Z8vkyEaOIwIwZHwUdgkhGZDXBcff/AafG2P4W0KjC53OzGZfEl0rpdtXkBmDlyrf45JOzadWqb9zzASmViau8XCR1ufL4TCTdtFSDJJRK6XbV5Kbi9pKSuXHPV/a+JtdKNUYRidhnHz2eknBSgiMJlZR8X6PtmThfdddKd4wiIpL/tJq4JJTu0u1E50v1WiovF0ndqFHDGDVqWNBhiKSdEhxJKJXS7caNj4i7PdH5Ui0TV3m5SOpGj76e0aOvDzoMkbTTIypJqGwMS00qlPbb78mEVVTVna+m1VCpxCgiEVdccV3QIYhkhBIcqdaKFdMoKVkMOCUli1mxYlp58hAvkWnVqi8lJXPLE45WrfqWtyksPD3tyUcmzilSG1x55bCgQxDJCCU4ktCsWVezZEnFKYhKyz+vXTsnZjn4tGlHs2HDApV7i4hIYDQGRxJasuSRuNvjlYOvX/91wlLweBKVe4tIZnz++XQ+/3x60GGIpJ16cKQapTXcHp/KvUVyz8knRxZlnjvXA45EJL2U4Eg1CoidzMTbHl8y5d4lJQtrfJyIpK5btwOCDkEkI/SIShJq2fKCuNvjlYPXr99Z5d4ieWLSpOlMmqRHVBI+SnAkoU6dbqZly35EemwACmjZsh+dOt3Mfvs9uVWS07jxEfTs+UZKq4JrNXEREUkXcw/Pc9eiou4+bdpLQYchUq6goBUAc+b8D7OmAUcjIpL/2re36e5eVF07jcEJoeLiCTWe9C5SDv4IkXE1BbRseQGdOt0MwLRpR7N+/dflbevX70zPnm8A8OabuwGbKpypLkce+R1vvtkeWF9he32OPHIuAO++uz+bNi3ZckTdlhx66Mcpx74tx4nUdgcd1BqA999fFHAkIumlHpyQqTqXDETGsSR61LP1XDcRLVv246efplZKbsrUr9+Z9eu/pXJyU5361K3bpFJyU6Zu3ZZ07HhNjWOH1O45W9SDI7mufXsDVEUl+SPZHhyNwQmZVOaSSTTXTazkBohur0lyA7A+ZnIDsGnTkpTnwdH8OSKpmzr1e6ZO1VQMEj56RBUyqc0lk765brZFqvPgaP4ckdQVFrYOOgSRjFAPTsjEmzMm8VwyBTXcnhmpxZ76cSIiEl5KcEImlblkEs11U79+55j7Ittr2gFYn7p1W8bcU7duy5TnwdH8OSKpGzJkAEOGDAg6DJG0U4ITMqnMJZNorpuePd/YKskpq6I68sjv2DrJqcuRRy4G6lfZHqmiOvTQj7dKcsqqqFKdB0fz54ikbvz4+xg//r6gwxBJO1VR1SKZKKWOV16eqOy8NlEVleS6xx4bA8B556kXR/KD5sGRSqqWUpeULGT27D8CpJzkbF1eXsqSJeNilJaXlrerjUmOSC5TYiNhpUdUtUQmSqnjlZfHKy2P115ERCTdlODUEpkppa5pGXl2y85FpHqvvDKJV16ZFHQYImmnR1S1RL16u1JSsjDm9tQVULOkJbtl5yJSvf79TwY0k7GEj3pwaolMlFLHKy+PV1oer72IBOeYY07imGNOCjoMkbRTD04tUTaQOJ1VVGUDhlVFJZK/xo7V4ykJJ5WJi2SQysRFRNIrJxfbNLOdzWyima0xs/lmdl6cdmZmt5jZsujrFjOzbMYqIiIi+Svbj6juBjYAhcB+wAtm9qm7z6zSbgBwKtAdcOBlYC5wbxZjFREJvfbtI/931CBjCZus9eCYWUPgDOAad1/t7m8DzwO/jNG8H/APd1/o7t8D/wAuylasIiIikt+y2YPTCdjk7rMqbPsUOCpG272j+yq22zvWSc1sAJEeH4CSgoJWM9IQa1g0A34MOogcEeh30aHDzkFdOh79bGyh74ItPTno+6hK38cWufJd7J5Mo2wmOI2AlVW2rQB2jNN2RZV2jczMvMqoaHcfA4wBMLMPkxl4VFvo+9hC30Vl+j620HdRmb6PyvR9bJFv30U2BxmvBhpX2dYYWJVE28bA6qrJjYiIiEgs2UxwZgF1zWzPCtu6A1UHGBPd1j2JdiIiIiJbyVqC4+5rgAnADWbW0MwOA04B/h2j+cPAVWa2q5m1Bv4APJTEZcakK96Q0Pexhb6LyvR9bKHvojJ9H5Xp+9gir76LrE70Z2Y7Aw8AxwPLgKvd/TEzOwL4j7s3irYz4Bbg19FD7wcG6xGViIiIJCNUMxmLiIiIgBbbFBERkRBSgiMiIiKhE4oEJ9k1rmoDMxtkZh+aWYmZPRR0PEEys3pmNjb6M7HKzD4xsxOCjitIZvaImS02s5VmNsvMfl39UeFmZnua2XozeyToWIJkZm9Ev4fV0dfXQccUNDPra2ZfRv9t+TY6XrRWqfDzUPYqNbM7g44rGdleiypTkl3jqjZYBNwI9AYaBBxL0OoC3xGZLXsBcCLwpJnt4+7zggwsQCOAS9y9xMy6AG+Y2cfuPj3owAJ0N/BB0EHkiEHufn/QQeQCMzueSLHLOcA0oFWwEQWjrPgHwMwaAUuAp4KLKHl534NTwzWuQs/dJ7j7s0Sq1Go1d1/j7sPcfZ67b3b3yUQWbe0RdGxBcfeZ7l5S9jH66hhgSIEys77AT8CrQcciOed64AZ3nxr9++P76NqItdkZwFLgraADSUbeJzjEX+Mq5tpVUnuZWSGRn5fa2LNXzsz+aWZrga+AxcCLAYcUCDNrDNwAXBV0LDlkhJn9aGbvmNnRQQcTFDMrAIqA5mb2jZktNLO7zKy294r3Ax7OlylbwpDg1GSNK6mlzGw74FFgnLt/FXQ8QXL33xL583EEkck3SxIfEVrDgbHuvjDoQHLEYKADsCuRCd0mmVlt7d0rBLYDziTy52Q/YH/gr0EGFSQz253I4/5xQceSrDAkODVZ40pqITOrQ2TG7A3AoIDDyQnuXhp9nNsGGBh0PNlmZvsBxwG3Bx1LrnD39919lbuXuPs44B0i49Zqo3XRX+9098Xu/iMwktr7fUBk2Mfb7j436ECSFYZBxuVrXLn77Og2rV0lQPms2GOJ/I/sRHffGHBIuaYutXMMztFAO2BB5EeERkCBmXV19wMCjCuXOGBBBxEEd19uZguJfAflm4OKJ0dcCNwcdBA1kfc9ODVc4yr0zKyumdUHCoj8hV3fzMKQyKbqHmAvoI+7r6uucZiZWYto2WsjMysws97AudTOAbZjiCR2+0Vf9wIvEKk+rHXMrImZ9S77+8LMzgeOBKYEHVuAHgQui/65aQr8HpgccEyBMLNDiTy6zIvqqTJh+Yfvt0TWuFpKpHpoYC0tEYfIM+LrKny+gEg1wLBAoglQ9JnxpUTGmCyJ/k8d4FJ3fzSwwILjRB5H3UvkPzfzgSvd/flAowqAu68F1pZ9NrPVwHp3/yG4qAK1HZHpJboApUQGoJ9apXijthkONCPylGA98CTwt0AjCk4/YIK759XQD61FJSIiIqGT94+oRERERKpSgiMiIiKhowRHREREQkcJjoiIiISOEhwREREJHSU4IiIiEjpKcEQk55jZRdG5aRK1mWdmf8xWTImYWTszczMrCjoWEYlQgiMiMZnZQ9F/tN3MNprZHDO7zcwa1vAcoZr9NYz3JBJGYZnJWEQy4xUii+xtR2RV5fuBhtTCBTpFJL+oB0dEEilx9yXu/p27PwY8CpxattPMuprZC2a2ysyWmtnjZtYyum8YkSnef1GhJ+jo6L6bzexrM1sXfdR0a3QNtZSZ2U5mNiYaxyoz+2/FR0Zlj73M7Fgzm2Fma8zsdTNrX+U8Q8ysONr2YTO7zszmVXdPUbub2ctmttbMvjCz47flnkQkdUpwRKQm1hHpzcHMWgFvAjOAnsBxRFblfs7M6gC3EVm/5xWgVfT1bvQ8a4BfEVkI9bdAX2BoqkFFV41/gciCgCcB+0djey0aZ5l6wJDotQ8BmhBZm6vsPH2JrOU2FDgA+BK4qsLxie4JImsV3QF0Bz4AxptZo1TvS0RSp0dUIpIUM+sJnMeW1ccHAp+6++AKbS4E/gcUufs0M1tHtBeo4rncfXiFj/PM7Cbgj8A1KYb3MyKrgjevsGr8NWbWh8gjtluj2+oCv3P3r6Px3gY8YGbmkYX5rgAecvf7o+1HmNnPgE7RuFfHuqcKC7ne7u6Totv+AlwYjevtFO9LRFKkBEdEEvl5tJqpLpGem+eAy6L7egBHxql26ghMi3dSMzsTuBLYg0ivT0H0laoewA7ADxWSDYD60VjKlJQlN1GLgO2BpkQSsy7AfVXO/T7RBCcJn1U5N0CLJI8VkTRSgiMiibwJDAA2AovcfWOFfXWIPBaKVapdHO+EZnYwMB64Hvg98BNwMpHHP6mqE73mETH2razwflOVfV7h+HQo/37c3aPJloYCiARACY6IJLLW3b+Js+8j4GxgfpXEp6INbN0zcxjwfcXHVGa2+zbG+RFQCGx29znbcJ6vgAOBByps61mlTax7EpEco/9ZiEiq7gZ2Ap4ws4PMrIOZHRetZNox2mYe0M3MOptZMzPbDpgF7Gpm50ePGQicu42xvAK8Q2SA8wlm1t7MDjGz680sVq9OPKOBi8zsV2a2p5n9GTiILT098e5JRHKMEhwRSYm7LyLSG7MZmALMJJL0lERfEBnP8iXwIfADcFh0EO7fgVFExqwcD1y7jbE4cCLwWvSaXxOpdurMlrEwyZxnPDAcuBn4GOhGpMpqfYVmW93TtsQuIplhkb8XREQkFjObCNR19z5BxyIiydMYHBGRKDPbgUj5+xQiA5LPAE6J/ioieUQ9OCIiUWbWAJhEZKLABsBs4JboLM4ikkeU4IiIiEjoaJCxiIiIhI4SHBEREQkdJTgiIiISOkpwREREJHSU4IiIiEjo/D+yASciklkMLQAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from matplotlib.colors import ListedColormap\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", "\n", "plt.figure(figsize=(8, 4))\n", "plot_decision_boundary(tree_clf, X, y)\n", "plt.plot([2.45, 2.45], [0, 3], \"k-\", linewidth=2)\n", "plt.plot([2.45, 7.5], [1.75, 1.75], \"k--\", linewidth=2)\n", "plt.plot([4.95, 4.95], [0, 1.75], \"k:\", linewidth=2)\n", "plt.plot([4.85, 4.85], [1.75, 3], \"k:\", linewidth=2)\n", "plt.text(1.40, 1.0, \"Depth=0\", fontsize=15)\n", "plt.text(3.2, 1.80, \"Depth=1\", fontsize=13)\n", "plt.text(4.05, 0.5, \"(Depth=2)\", fontsize=11)\n", "\n", "save_fig(\"decision_tree_decision_boundaries_plot\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Predicting classes and class probabilities" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0. , 0.90740741, 0.09259259]])" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tree_clf.predict_proba([[5, 1.5]])" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1])" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tree_clf.predict([[5, 1.5]])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Sensitivity to training set details" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[4.8, 1.8]])" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X[(X[:, 1]==X[:, 1][y==1].max()) & (y==1)] # widest Iris-Versicolor flower" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=2,\n", " max_features=None, max_leaf_nodes=None,\n", " min_impurity_decrease=0.0, min_impurity_split=None,\n", " min_samples_leaf=1, min_samples_split=2,\n", " min_weight_fraction_leaf=0.0, presort=False, random_state=40,\n", " splitter='best')" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "not_widest_versicolor = (X[:, 1]!=1.8) | (y==2)\n", "X_tweaked = X[not_widest_versicolor]\n", "y_tweaked = y[not_widest_versicolor]\n", "\n", "tree_clf_tweaked = DecisionTreeClassifier(max_depth=2, random_state=40)\n", "tree_clf_tweaked.fit(X_tweaked, y_tweaked)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Saving figure decision_tree_instability_plot\n" ] }, { "data": { "image/png": "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TK11/s9//gOOO+4U7r57Kl279mD06KEsW/ZpzfGtW7eyZcuWlFt8r9Mnn3xISUkJXbv2qHWf7t3345NPPszeDyYiIkWjvp6YSQn2PZSLQOpYC7SJ+179uSKEezcZzZo1p127DqxcWc5rr73Aiy9O49FHX+aww44C4MgjT2DBgnncccevufPOyTXnbdy4gfvvn1YzULhly1b84hfn8PHHH7DPPvux9977AtCnz0F06dJ1u/uee+7FDBlyLgAHHHAwhxxSxosvPstZZ/0PALfddn3NwOhkdt99L2bMWAjA6tVf0rJla0pKag8Na9u2HRs2rGfTpk3stNNODf+BRESkaKVMcNz9R2EFUsdc4EDg8dj3A4Fyd69v7I40kMdGdr722j/o2LET/fsPYMuWLTXHBww4lieemFjrnIEDj69VBTV48Hdxd95990322We/eu85aNAJNZ/btWtP+/a71erBGTZsJMccc1LKa+y0U7N67yO5ZZa8Girb53XokHpBzYaq73rZvJeI5Eeux9LUYmalsXuWACVm1hzY4u5b6jR9AJhoZg8TVF5dDUwMM9amoLJyI199tYoOHcpYvvwzVqxYTo8eO27Xrm7PSPv2u9X63qJFS1q1as2KFcvSum986TjAjjvuRGXltjVbO3bstN096opf1b5t23asX7+WqqqqWrGuXv0lLVq0VO9NjqQqBc/2edkuz1a5t0j0hZrgECQqv4r7fjZwnZndD7wP9Hb3xe4+3cxuBl4iWMn8L3XOkyyYOfMltmzZwkEHHc7MmS/SqdPu/OEPT9Z73qpVn9f6vmHDetatW0vHjp2zEldDX1F1796LqqoqFi78mO7d961pM3/+h3Tv3isrMYmISHEJNcFx9zHAmCSHa8385u63ArfmOKQma82ar7jxxstik/4dh5lx772/pVWr1vUmBTNm/J1169bWvKb661+nYmb07dsfCHpkgFq9Mg3R0FdUBx98BDvv3IbnnpvMRRddDQRJ1wsvPMPQoSMzikFERIpb2D04kgdbtmypqZRau7aC996bw0MP3cXGjeuZOHE6JSUlDBp0PEceOZhzzjme88+/jJ49+1BRsYYPPniHysqN/PKX42qu17x5C8499zuMHHkpn3++jHHjLmXw4O/So0dvgJpBxo888gdOOmkoLVq0pFevA9KOt6zsa5SVpT/VUrNmzfmf/7mc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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(8, 4))\n", "plot_decision_boundary(tree_clf_tweaked, X_tweaked, y_tweaked, legend=False)\n", "plt.plot([0, 7.5], [0.8, 0.8], \"k-\", linewidth=2)\n", "plt.plot([0, 7.5], [1.75, 1.75], \"k--\", linewidth=2)\n", "plt.text(1.0, 0.9, \"Depth=0\", fontsize=15)\n", "plt.text(1.0, 1.80, \"Depth=1\", fontsize=13)\n", "\n", "save_fig(\"decision_tree_instability_plot\")\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Saving figure min_samples_leaf_plot\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from sklearn.datasets import make_moons\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", "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", "\n", "save_fig(\"min_samples_leaf_plot\")\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "angle = np.pi / 180 * 20\n", "rotation_matrix = np.array([[np.cos(angle), -np.sin(angle)], [np.sin(angle), np.cos(angle)]])\n", "Xr = X.dot(rotation_matrix)\n", "\n", "tree_clf_r = DecisionTreeClassifier(random_state=42)\n", "tree_clf_r.fit(Xr, y)\n", "\n", "plt.figure(figsize=(8, 3))\n", "plot_decision_boundary(tree_clf_r, Xr, y, axes=[0.5, 7.5, -1.0, 1], iris=False)\n", "\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Saving figure sensitivity_to_rotation_plot\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "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", "save_fig(\"sensitivity_to_rotation_plot\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Regression trees" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "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": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DecisionTreeRegressor(criterion='mse', max_depth=2, max_features=None,\n", " max_leaf_nodes=None, min_impurity_decrease=0.0,\n", " min_impurity_split=None, min_samples_leaf=1,\n", " min_samples_split=2, min_weight_fraction_leaf=0.0,\n", " presort=False, random_state=42, splitter='best')" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "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": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Saving figure tree_regression_plot\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "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", "save_fig(\"tree_regression_plot\")\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "export_graphviz(\n", " tree_reg1,\n", " out_file=image_path(\"regression_tree.dot\"),\n", " feature_names=[\"x1\"],\n", " rounded=True,\n", " filled=True\n", " )" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Saving figure tree_regression_regularization_plot\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "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", "save_fig(\"tree_regression_regularization_plot\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "# Exercise solutions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. to 6." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "See appendix A." ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## 7." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "_Exercise: train and fine-tune a Decision Tree for the moons dataset._" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "a. Generate a moons dataset using `make_moons(n_samples=10000, noise=0.4)`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Adding `random_state=42` to make this notebook's output constant:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "from sklearn.datasets import make_moons\n", "\n", "X, y = make_moons(n_samples=10000, noise=0.4, random_state=42)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "b. Split it into a training set and a test set using `train_test_split()`." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "from sklearn.model_selection import train_test_split\n", "\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "c. Use grid search with cross-validation (with the help of the `GridSearchCV` class) to find good hyperparameter values for a `DecisionTreeClassifier`. Hint: try various values for `max_leaf_nodes`." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Fitting 3 folds for each of 294 candidates, totalling 882 fits\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[Parallel(n_jobs=-1)]: Using backend LokyBackend with 8 concurrent workers.\n", "[Parallel(n_jobs=-1)]: Done 34 tasks | elapsed: 1.4s\n", "[Parallel(n_jobs=-1)]: Done 882 out of 882 | elapsed: 3.5s finished\n" ] }, { "data": { "text/plain": [ "GridSearchCV(cv=3, error_score='raise-deprecating',\n", " estimator=DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=None,\n", " max_features=None, max_leaf_nodes=None,\n", " min_impurity_decrease=0.0, min_impurity_split=None,\n", " min_samples_leaf=1, min_samples_split=2,\n", " min_weight_fraction_leaf=0.0, presort=False, random_state=42,\n", " splitter='best'),\n", " fit_params=None, iid='warn', n_jobs=-1,\n", " param_grid={'max_leaf_nodes': [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99], 'min_samples_split': [2, 3, 4]},\n", " pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n", " scoring=None, verbose=1)" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.model_selection import GridSearchCV\n", "\n", "params = {'max_leaf_nodes': list(range(2, 100)), 'min_samples_split': [2, 3, 4]}\n", "grid_search_cv = GridSearchCV(DecisionTreeClassifier(random_state=42), params, n_jobs=-1, verbose=1, cv=3)\n", "\n", "grid_search_cv.fit(X_train, y_train)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=None,\n", " max_features=None, max_leaf_nodes=17,\n", " min_impurity_decrease=0.0, min_impurity_split=None,\n", " min_samples_leaf=1, min_samples_split=2,\n", " min_weight_fraction_leaf=0.0, presort=False, random_state=42,\n", " splitter='best')" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "grid_search_cv.best_estimator_" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "d. Train it on the full training set using these hyperparameters, and measure your model's performance on the test set. You should get roughly 85% to 87% accuracy." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "By default, `GridSearchCV` trains the best model found on the whole training set (you can change this by setting `refit=False`), so we don't need to do it again. We can simply evaluate the model's accuracy:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.8695" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.metrics import accuracy_score\n", "\n", "y_pred = grid_search_cv.predict(X_test)\n", "accuracy_score(y_test, y_pred)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 8." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "_Exercise: Grow a forest._" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "a. Continuing the previous exercise, generate 1,000 subsets of the training set, each containing 100 instances selected randomly. Hint: you can use Scikit-Learn's `ShuffleSplit` class for this." ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "from sklearn.model_selection import ShuffleSplit\n", "\n", "n_trees = 1000\n", "n_instances = 100\n", "\n", "mini_sets = []\n", "\n", "rs = ShuffleSplit(n_splits=n_trees, test_size=len(X_train) - n_instances, random_state=42)\n", "for mini_train_index, mini_test_index in rs.split(X_train):\n", " X_mini_train = X_train[mini_train_index]\n", " y_mini_train = y_train[mini_train_index]\n", " mini_sets.append((X_mini_train, y_mini_train))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "b. Train one Decision Tree on each subset, using the best hyperparameter values found above. Evaluate these 1,000 Decision Trees on the test set. Since they were trained on smaller sets, these Decision Trees will likely perform worse than the first Decision Tree, achieving only about 80% accuracy." ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.8054499999999999" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.base import clone\n", "\n", "forest = [clone(grid_search_cv.best_estimator_) for _ in range(n_trees)]\n", "\n", "accuracy_scores = []\n", "\n", "for tree, (X_mini_train, y_mini_train) in zip(forest, mini_sets):\n", " tree.fit(X_mini_train, y_mini_train)\n", " \n", " y_pred = tree.predict(X_test)\n", " accuracy_scores.append(accuracy_score(y_test, y_pred))\n", "\n", "np.mean(accuracy_scores)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "c. Now comes the magic. For each test set instance, generate the predictions of the 1,000 Decision Trees, and keep only the most frequent prediction (you can use SciPy's `mode()` function for this). This gives you _majority-vote predictions_ over the test set." ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "Y_pred = np.empty([n_trees, len(X_test)], dtype=np.uint8)\n", "\n", "for tree_index, tree in enumerate(forest):\n", " Y_pred[tree_index] = tree.predict(X_test)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "from scipy.stats import mode\n", "\n", "y_pred_majority_votes, n_votes = mode(Y_pred, axis=0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "d. Evaluate these predictions on the test set: you should obtain a slightly higher accuracy than your first model (about 0.5 to 1.5% higher). Congratulations, you have trained a Random Forest classifier!" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.872" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "accuracy_score(y_test, y_pred_majority_votes.reshape([-1]))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "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.7.10" }, "nav_menu": { "height": "309px", "width": "468px" }, "toc": { "navigate_menu": true, "number_sections": true, "sideBar": true, "threshold": 6, "toc_cell": false, "toc_section_display": "block", "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 1 }