{ "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._" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", " \n", " \n", "
\n", " \"Open\n", " \n", " \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Setup" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, let's import a few common modules, ensure MatplotLib plots figures inline and prepare a function to save the figures. We also check that Python 3.5 or later is installed (although Python 2.x may work, it is deprecated so we strongly recommend you use Python 3 instead), as well as Scikit-Learn ≥0.20." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# Python ≥3.5 is required\n", "import sys\n", "assert sys.version_info >= (3, 5)\n", "\n", "# Scikit-Learn ≥0.20 is required\n", "import sklearn\n", "assert sklearn.__version__ >= \"0.20\"\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 a Decision Tree" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DecisionTreeClassifier(max_depth=2, random_state=42)" ] }, "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": "markdown", "metadata": {}, "source": [ "**This code example generates Figure 6–1. Iris Decision Tree:**" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "Tree\n", "\n", "\n", "\n", "0\n", "\n", "petal length (cm) <= 2.45\n", "gini = 0.667\n", "samples = 150\n", "value = [50, 50, 50]\n", "class = setosa\n", "\n", "\n", "\n", "1\n", "\n", "gini = 0.0\n", "samples = 50\n", "value = [50, 0, 0]\n", "class = setosa\n", "\n", "\n", "\n", "0->1\n", "\n", "\n", "True\n", "\n", "\n", "\n", "2\n", "\n", "petal width (cm) <= 1.75\n", "gini = 0.5\n", "samples = 100\n", "value = [0, 50, 50]\n", "class = versicolor\n", "\n", "\n", "\n", "0->2\n", "\n", "\n", "False\n", "\n", "\n", "\n", "3\n", "\n", "gini = 0.168\n", "samples = 54\n", "value = [0, 49, 5]\n", "class = versicolor\n", "\n", "\n", "\n", "2->3\n", "\n", "\n", "\n", "\n", "\n", "4\n", "\n", "gini = 0.043\n", "samples = 46\n", "value = [0, 1, 45]\n", "class = virginica\n", "\n", "\n", "\n", "2->4\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from graphviz import Source\n", "from sklearn.tree import export_graphviz\n", "\n", "export_graphviz(\n", " tree_clf,\n", " out_file=os.path.join(IMAGES_PATH, \"iris_tree.dot\"),\n", " feature_names=iris.feature_names[2:],\n", " class_names=iris.target_names,\n", " rounded=True,\n", " filled=True\n", " )\n", "\n", "Source.from_file(os.path.join(IMAGES_PATH, \"iris_tree.dot\"))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Making Predictions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Code to generate Figure 6–2. Decision Tree decision boundaries**" ] }, { "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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\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": [ "# Estimating 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": [ "## Regularization Hyperparameters" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We've seen that small changes in the dataset (such as a rotation) may produce a very different Decision Tree.\n", "Now let's show that training the same model on the same data may produce a very different model every time, since the CART training algorithm used by Scikit-Learn is stochastic. To show this, we will set `random_state` to a different value than earlier:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DecisionTreeClassifier(max_depth=2, random_state=40)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tree_clf_tweaked = DecisionTreeClassifier(max_depth=2, random_state=40)\n", "tree_clf_tweaked.fit(X, y)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Code to generate Figure 6–8. Sensitivity to training set details:**" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Saving figure decision_tree_instability_plot\n" ] }, { "data": { "image/png": "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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, y, 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": "markdown", "metadata": {}, "source": [ "**Code to generate Figure 6–3. Regularization using min_samples_leaf:**" ] }, { "cell_type": "code", "execution_count": 9, "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", "fig, axes = plt.subplots(ncols=2, figsize=(10, 4), sharey=True)\n", "plt.sca(axes[0])\n", "plot_decision_boundary(deep_tree_clf1, Xm, ym, axes=[-1.5, 2.4, -1, 1.5], iris=False)\n", "plt.title(\"No restrictions\", fontsize=16)\n", "plt.sca(axes[1])\n", "plot_decision_boundary(deep_tree_clf2, Xm, ym, axes=[-1.5, 2.4, -1, 1.5], iris=False)\n", "plt.title(\"min_samples_leaf = {}\".format(deep_tree_clf2.min_samples_leaf), fontsize=14)\n", "plt.ylabel(\"\")\n", "\n", "save_fig(\"min_samples_leaf_plot\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Rotating the dataset also leads to completely different decision boundaries:" ] }, { "cell_type": "code", "execution_count": 10, "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": "markdown", "metadata": {}, "source": [ "**Code to generate Figure 6–7. Sensitivity to training set rotation**" ] }, { "cell_type": "code", "execution_count": 11, "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", "fig, axes = plt.subplots(ncols=2, figsize=(10, 4), sharey=True)\n", "plt.sca(axes[0])\n", "plot_decision_boundary(tree_clf_s, Xs, ys, axes=[-0.7, 0.7, -0.7, 0.7], iris=False)\n", "plt.sca(axes[1])\n", "plot_decision_boundary(tree_clf_sr, Xsr, ys, axes=[-0.7, 0.7, -0.7, 0.7], iris=False)\n", "plt.ylabel(\"\")\n", "\n", "save_fig(\"sensitivity_to_rotation_plot\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Regression" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's prepare a simple linear dataset:" ] }, { "cell_type": "code", "execution_count": 12, "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": "markdown", "metadata": {}, "source": [ "**Code example:**" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DecisionTreeRegressor(max_depth=2, random_state=42)" ] }, "execution_count": 13, "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": "markdown", "metadata": {}, "source": [ "**Code to generate Figure 6–5. Predictions of two Decision Tree regression models:**" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Saving figure tree_regression_plot\n" ] }, { "data": { "image/png": "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5eXl3H777bz//vs899xzgOFo/uAHP+CAAw6gqKiIY489lqeffrrbfhUVFdx4443MmjWLwYMHU1payqRJk9i2bRsAdXV1jB8/HoADDzwQpRQVFRXdjvHBBx8wduxYSkpKOOyww1i0aFFW57JixQq2b9/ON77xjc73SkpKGD9+PEuXLs3q2IL7vPbaa7z22mt+m5GWTPe0o9PXh5impqaU65Jew6IiW/qZrp0wEHb7heAQBv2M0EETcPOM5FUsAquf2eRnBHnJJofOCv/63WudOWxe5Mslgww5yAMGDEi6bvfu3bqwsFDPmDFDa631ueeeq/fZZx/9m9/8Rj/zzDP60ksv1ZFIpFsu7/Dhw/WQIUP0aaedpp988kk9b9483bdvX/21r31Na631tm3b9B133KEBvWjRIl1fX69fe+01rXVXDvJRRx2l7777bv3MM8/ocePG6R49eugPP/yws4329nbd2tqadmlra+vc/p577tGRSKTbe1prffvtt+vevXtbvp6Ct6Trv/kOIctBHjVqlKXtX1v4H1v6abWddPjR/5y0X8hvQqGfhYV6FGjd0uJps9nqp6RYZMmrr/k7k142FBUVMXDgQD799FOWLVvGU089RV1dHaeffjoAZ511Fg0NDfz0pz/lT3/6U+d+u3bt4qmnnqK0tBQworUXXXQR//nPfzj88MM59NBDATj++OP3ih4DXH/99VxyySWA8Xho0KBBLFmyhCuvvBKAW265hZ/85CdpbR8+fDhr164FoLGxkdLS0r3SRPr168fOnTvZs2cPPXv2tH6BBEGwhNXHvPWvdVVbsaKfQX6cbIaw2y8IlmhvN1KoQpbKKSkWWVJ5QtcHHoR8Y6sYP7Lg+eefZ/DgwZx88sm0tbV1LmPGjGHlypXd9hk7dmyncwxw/vnno7Xm1VdfNdXmWWed1fn/gAED2Hffffnoo48636upqeHVV19NuyxevLjbMZNNRR07N5mmWhC8YcqUKZa2/+KpXQ6yFf202k7QCLv9gmAao0AFU8CYZCJESAQ5DWZqcR43ustBdirf2KsaoLt372bz5s0MGjSIjz/+mI0bN9KjR4+9tkuMzO67777dXhcXF1NaWsonn3xiqt3y8vJur3v27MnuuFHsgwcP3quNROKd3n79+tHU1ER7e3s3W7du3Urv3r2TnpMgCM4zZMiQzv/N6FjlyV0O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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", "fig, axes = plt.subplots(ncols=2, figsize=(10, 4), sharey=True)\n", "plt.sca(axes[0])\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.sca(axes[1])\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": "markdown", "metadata": {}, "source": [ "**Code to generate Figure 6-4. A Decision Tree for regression:**" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "export_graphviz(\n", " tree_reg1,\n", " out_file=os.path.join(IMAGES_PATH, \"regression_tree.dot\"),\n", " feature_names=[\"x1\"],\n", " rounded=True,\n", " filled=True\n", " )" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "Tree\n", "\n", "\n", "\n", "0\n", "\n", "x1 <= 0.197\n", "mse = 0.098\n", "samples = 200\n", "value = 0.354\n", "\n", "\n", "\n", "1\n", "\n", "x1 <= 0.092\n", "mse = 0.038\n", "samples = 44\n", "value = 0.689\n", "\n", "\n", "\n", "0->1\n", "\n", "\n", "True\n", "\n", "\n", "\n", "4\n", "\n", "x1 <= 0.772\n", "mse = 0.074\n", "samples = 156\n", "value = 0.259\n", "\n", "\n", "\n", "0->4\n", "\n", "\n", "False\n", "\n", "\n", "\n", "2\n", "\n", "mse = 0.018\n", "samples = 20\n", "value = 0.854\n", "\n", "\n", "\n", "1->2\n", "\n", "\n", "\n", "\n", "\n", "3\n", "\n", "mse = 0.013\n", "samples = 24\n", "value = 0.552\n", "\n", "\n", "\n", "1->3\n", "\n", "\n", "\n", "\n", "\n", "5\n", "\n", "mse = 0.015\n", "samples = 110\n", "value = 0.111\n", "\n", "\n", "\n", "4->5\n", "\n", "\n", "\n", "\n", "\n", "6\n", "\n", "mse = 0.036\n", "samples = 46\n", "value = 0.615\n", "\n", "\n", "\n", "4->6\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Source.from_file(os.path.join(IMAGES_PATH, \"regression_tree.dot\"))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Code to generate Figure 6–6. Regularizing a Decision Tree regressor:**" ] }, { "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", "fig, axes = plt.subplots(ncols=2, figsize=(10, 4), sharey=True)\n", "\n", "plt.sca(axes[0])\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.sca(axes[1])\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": {}, "source": [ "# Exercise solutions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. to 6." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "See appendix A." ] }, { "cell_type": "markdown", "metadata": {}, "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 SequentialBackend with 1 concurrent workers.\n", "[Parallel(n_jobs=1)]: Done 882 out of 882 | elapsed: 5.7s finished\n" ] }, { "data": { "text/plain": [ "GridSearchCV(cv=3, estimator=DecisionTreeClassifier(random_state=42),\n", " param_grid={'max_leaf_nodes': [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,\n", " 13, 14, 15, 16, 17, 18, 19, 20, 21,\n", " 22, 23, 24, 25, 26, 27, 28, 29, 30,\n", " 31, ...],\n", " 'min_samples_split': [2, 3, 4]},\n", " 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, 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(max_leaf_nodes=17, random_state=42)" ] }, "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]))" ] } ], "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": 4 }