1542 lines
220 KiB
Plaintext
1542 lines
220 KiB
Plaintext
{
|
||
"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: 4.0618352118150005\n",
|
||
"first power: 0.004339135748752641\n",
|
||
"second power: 1.9543538503067644e-05\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<Figure size 640x480 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"filenames": {
|
||
"image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter6_1_1.png"
|
||
}
|
||
},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAkMAAAHFCAYAAADxOP3DAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAACbaElEQVR4nOzdeVwU9f8H8NfscgssCwq7q4iA5oEn2NcrRSMPzNJMs9M8siyrn5oddlhWX+1r1tcuM9OvaJoamd2akkdmnuAJigooigsoLqDcsPP7Y91hhj3YXfbe99MHD3dmPvOZz8zuzr7n8/nMZxiWZVkQQgghhHgokaMLQAghhBDiSBQMEUIIIcSjUTBECCGEEI9GwRAhhBBCPBoFQ4QQQgjxaBQMEUIIIcSjUTBECCGEEI9GwRAhhBBCPBoFQ4QQQgjxaBQMEWIHKSkpYBiG+/Pz84NMJsOwYcOwePFiFBcX23T7Fy9eBMMwSElJMWu9KVOmoEOHDjYpk7Ft8o+Vob8pU6bYtVxNNS1PcHAwBg4ciI0bNzq0XPZk6eeKEGfD0OM4CLG9lJQUTJ06FWvWrEGXLl1QV1eH4uJi/P3331izZg3EYjE2b96Me+65xybbr6mpwbFjxxAbG4s2bdqYvF5OTg7Ky8vRp08fm5TL0DavXbvGTWdkZGDWrFlYtGgRhg0bxs1v06YNYmNj7VauphiGwYQJE/DSSy+BZVnk5eVh0aJFyMzMxIYNG/Doo486rGz2YunnihBnQ8EQIXagDYaOHDmCvn37Cpbl5+fjrrvuQmlpKc6fP4+IiAgHldI57dmzB8OGDUNqaiomTJhgMF1VVRX8/PzAMIxdysUwDGbNmoXPP/+cm3fp0iV06NABQ4YMwd69e+1SDq3KykoEBATYdZuEuAtqJiPEwdq3b4+PPvoIN2/exFdffSVYdvToUdx///0IDQ2Fn58f+vTpg++++04nj4KCAjz99NOIjIyEj48PFAoFJkyYgKKiIgD6mzOuXbvGrePr64s2bdpg0KBBSEtL49Loayarrq7G/PnzER0dDR8fH7Rt2xazZs1CaWmpIF2HDh0wZswYbN++HfHx8fD390eXLl3wv//9r2UHDI3Njjt27MC0adPQpk0bBAQEoKamBgCwefNmDBgwAK1atUJgYCBGjhyJY8eO6eRj6vE1VVRUFNq0acMdd63y8nLMmzdPcMxmz56NiooKQbrS0lJMnz4doaGhCAwMxL333ovc3FwwDIN33nmHS/fOO++AYRhkZGRgwoQJkEqlXC0Zy7JYvnw5evfuDX9/f0ilUkyYMAG5ubmCbR07dgxjxoxBeHg4fH19oVAocO+99+LKlStcmtTUVPTr1w8SiQQBAQGIiYnBtGnTuOWGmsn+/vtvJCUlISgoCAEBARg4cCB+++03QRrte7h79248++yzaN26NcLCwjB+/HhcvXrV7GNPSEtQMESIExg9ejTEYjH++usvbt7u3bsxaNAglJaWYsWKFfjpp5/Qu3dvTJo0SfDjU1BQgDvvvBNbt27F3LlzsW3bNixbtgwSiQQqlcrgNp944gn8+OOPWLBgAXbs2IFVq1bhnnvuQUlJicF1WJbFuHHjsHTpUjzxxBP47bffMHfuXKxduxZ33303F4xonThxAi+99BLmzJmDn376CT179sT06dMF+9kS06ZNg7e3N7755ht8//338Pb2xqJFi/DII4+gW7du+O677/DNN9/g5s2bGDx4MLKysrh1TT2+5igrK8ONGzdwxx13cPMqKyuRmJiItWvX4sUXX8S2bdvw6quvIiUlBffffz+0lfNqtRr33Xcfvv32W7z66qvYunUr+vXrh1GjRhnc3vjx49GxY0ekpqZixYoVAIBnnnkGs2fPxj333IMff/wRy5cvR2ZmJgYOHMgFaRUVFRg+fDiKiorwxRdfYOfOnVi2bBnat2+PmzdvAgAOHDiASZMmISYmBps2bcJvv/2GBQsWoL6+3ugx2Lt3L+6++26UlZVh9erV2LhxI4KCgnDfffdh8+bNOumfeuopeHt749tvv8WSJUuwZ88ePP744+YdeEJaiiWE2NyaNWtYAOyRI0cMpomIiGC7du3KTXfp0oXt06cPW1dXJ0g3ZswYVi6Xsw0NDSzLsuy0adNYb29vNisry2DeeXl5LAB2zZo13LzAwEB29uzZRsv95JNPslFRUdz09u3bWQDskiVLBOk2b97MAmBXrlzJzYuKimL9/PzYS5cucfOqqqrY0NBQ9plnnjG6Xb7du3ezANjU1FRunvZ4Tp48WZA2Pz+f9fLyYl944QXB/Js3b7IymYx96KGHuHmmHl9DALDPPfccW1dXx9bW1rLnzp1j77//fjYoKIg9evQol27x4sWsSCTSee+///57FgD7+++/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\n",
|
||
"text/plain": [
|
||
"<Figure size 640x480 with 1 Axes>"
|
||
]
|
||
},
|
||
"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<steps:\n",
|
||
" distance+=np.random.randint(-1,2)\n",
|
||
" distance_list.append(distance)\n",
|
||
" x+=1\n",
|
||
" steps_list.append(x)\n",
|
||
"plt.plot(steps_list,distance_list, color='green', label=\"Random Walk Data\")\n",
|
||
"\n",
|
||
"steps_list=np.asarray(steps_list)\n",
|
||
"distance_list=np.asarray(distance_list)\n",
|
||
"\n",
|
||
"X=steps_list[:,np.newaxis]\n",
|
||
"\n",
|
||
"#Polynomial fits\n",
|
||
"\n",
|
||
"#Degree 2\n",
|
||
"poly_features=PolynomialFeatures(degree=2, include_bias=False)\n",
|
||
"X_poly=poly_features.fit_transform(X)\n",
|
||
"\n",
|
||
"lin_reg=LinearRegression()\n",
|
||
"poly_fit=lin_reg.fit(X_poly,distance_list)\n",
|
||
"b=lin_reg.coef_\n",
|
||
"c=lin_reg.intercept_\n",
|
||
"print (\"2nd degree coefficients:\")\n",
|
||
"print (\"zero power: \",c)\n",
|
||
"print (\"first power: \", b[0])\n",
|
||
"print (\"second power: \",b[1])\n",
|
||
"\n",
|
||
"z = np.arange(0, steps, .01)\n",
|
||
"z_mod=b[1]*z**2+b[0]*z+c\n",
|
||
"\n",
|
||
"fit_mod=b[1]*X**2+b[0]*X+c\n",
|
||
"plt.plot(z, z_mod, color='r', label=\"2nd Degree Fit\")\n",
|
||
"plt.title(\"Polynomial Regression\")\n",
|
||
"\n",
|
||
"plt.xlabel(\"Steps\")\n",
|
||
"plt.ylabel(\"Distance\")\n",
|
||
"\n",
|
||
"#Degree 10\n",
|
||
"poly_features10=PolynomialFeatures(degree=10, include_bias=False)\n",
|
||
"X_poly10=poly_features10.fit_transform(X)\n",
|
||
"\n",
|
||
"poly_fit10=lin_reg.fit(X_poly10,distance_list)\n",
|
||
"\n",
|
||
"y_plot=poly_fit10.predict(X_poly10)\n",
|
||
"plt.plot(X, y_plot, color='black', label=\"10th Degree Fit\")\n",
|
||
"\n",
|
||
"plt.legend()\n",
|
||
"plt.show()\n",
|
||
"\n",
|
||
"\n",
|
||
"#Decision Tree Regression\n",
|
||
"from sklearn.tree import DecisionTreeRegressor\n",
|
||
"regr_1=DecisionTreeRegressor(max_depth=2)\n",
|
||
"regr_2=DecisionTreeRegressor(max_depth=5)\n",
|
||
"regr_3=DecisionTreeRegressor(max_depth=7)\n",
|
||
"regr_1.fit(X, distance_list)\n",
|
||
"regr_2.fit(X, distance_list)\n",
|
||
"regr_3.fit(X, distance_list)\n",
|
||
"\n",
|
||
"X_test = np.arange(0.0, steps, 0.01)[:, np.newaxis]\n",
|
||
"y_1 = regr_1.predict(X_test)\n",
|
||
"y_2 = regr_2.predict(X_test)\n",
|
||
"y_3=regr_3.predict(X_test)\n",
|
||
"\n",
|
||
"# Plot the results\n",
|
||
"plt.figure()\n",
|
||
"plt.scatter(X, distance_list, s=2.5, c=\"black\", label=\"data\")\n",
|
||
"plt.plot(X_test, y_1, color=\"red\",\n",
|
||
" label=\"max_depth=2\", linewidth=2)\n",
|
||
"plt.plot(X_test, y_2, color=\"green\", label=\"max_depth=5\", linewidth=2)\n",
|
||
"plt.plot(X_test, y_3, color=\"m\", label=\"max_depth=7\", linewidth=2)\n",
|
||
"\n",
|
||
"plt.xlabel(\"Data\")\n",
|
||
"plt.ylabel(\"Darget\")\n",
|
||
"plt.title(\"Decision Tree Regression\")\n",
|
||
"plt.legend()\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Building a tree, regression\n",
|
||
"\n",
|
||
"There are mainly two steps\n",
|
||
"1. We split the predictor space (the set of possible values $x_1,x_2,\\dots, x_p$) into $J$ distinct and non-non-overlapping regions, $R_1,R_2,\\dots,R_J$. \n",
|
||
"\n",
|
||
"2. For every observation that falls into the region $R_j$ , we make the same prediction, which is simply the mean of the response values for the training observations in $R_j$.\n",
|
||
"\n",
|
||
"How do we construct the regions $R_1,\\dots,R_J$? In theory, the\n",
|
||
"regions could have any shape. However, we choose to divide the\n",
|
||
"predictor space into high-dimensional rectangles, or boxes, for\n",
|
||
"simplicity and for ease of interpretation of the resulting predictive\n",
|
||
"model. The goal is to find boxes $R_1,\\dots,R_J$ that minimize the\n",
|
||
"MSE, given by"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\sum_{j=1}^J\\sum_{i\\in R_j}(y_i-\\overline{y}_{R_j})^2,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"where $\\overline{y}_{R_j}$ is the mean response for the training observations \n",
|
||
"within box $j$. \n",
|
||
"\n",
|
||
"\n",
|
||
"Unfortunately, it is computationally infeasible to consider every\n",
|
||
"possible partition of the feature space into $J$ boxes. The common\n",
|
||
"strategy is to take a top-down approach\n",
|
||
"\n",
|
||
"The approach is top-down because it begins at the top of the tree (all\n",
|
||
"observations belong to a single region) and then successively splits\n",
|
||
"the predictor space; each split is indicated via two new branches\n",
|
||
"further down on the tree. It is greedy because at each step of the\n",
|
||
"tree-building process, the best split is made at that particular step,\n",
|
||
"rather than looking ahead and picking a split that will lead to a\n",
|
||
"better tree in some future step.\n",
|
||
"\n",
|
||
"\n",
|
||
"### Making a tree\n",
|
||
"\n",
|
||
"In order to implement the recursive binary splitting we start by selecting\n",
|
||
"the predictor $x_j$ and a cutpoint $s$ that splits the predictor space into two regions $R_1$ and $R_2$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\left\\{X\\vert x_j < s\\right\\},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"and"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\left\\{X\\vert x_j \\geq s\\right\\},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"so that we obtain the lowest MSE, that is"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\sum_{i:x_i\\in R_j}(y_i-\\overline{y}_{R_1})^2+\\sum_{i:x_i\\in R_2}(y_i-\\overline{y}_{R_2})^2,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"which we want to minimize by considering all predictors\n",
|
||
"$x_1,x_2,\\dots,x_p$. We consider also all possible values of $s$ for\n",
|
||
"each predictor. These values could be determined by randomly assigned\n",
|
||
"numbers or by starting at the midpoint and then proceed till we find\n",
|
||
"an optimal value.\n",
|
||
"\n",
|
||
"For any $j$ and $s$, we define the pair of half-planes where\n",
|
||
"$\\overline{y}_{R_1}$ is the mean response for the training\n",
|
||
"observations in $R_1(j,s)$, and $\\overline{y}_{R_2}$ is the mean\n",
|
||
"response for the training observations in $R_2(j,s)$.\n",
|
||
"\n",
|
||
"Finding the values of $j$ and $s$ that minimize the above equation can be\n",
|
||
"done quite quickly, especially when the number of features $p$ is not\n",
|
||
"too large.\n",
|
||
"\n",
|
||
"Next, we repeat the process, looking\n",
|
||
"for the best predictor and best cutpoint in order to split the data\n",
|
||
"further so as to minimize the MSE within each of the resulting\n",
|
||
"regions. However, this time, instead of splitting the entire predictor\n",
|
||
"space, we split one of the two previously identified regions. We now\n",
|
||
"have three regions. Again, we look to split one of these three regions\n",
|
||
"further, so as to minimize the MSE. The process continues until a\n",
|
||
"stopping criterion is reached; for instance, we may continue until no\n",
|
||
"region contains more than five observations.\n",
|
||
"\n",
|
||
"\n",
|
||
"The above procedure is rather straightforward, but leads often to\n",
|
||
"overfitting and unnecessarily large and complicated trees. The basic\n",
|
||
"idea is to grow a large tree $T_0$ and then prune it back in order to\n",
|
||
"obtain a subtree. A smaller tree with fewer splits (fewer regions) can\n",
|
||
"lead to smaller variance and better interpretation at the cost of a\n",
|
||
"little more bias.\n",
|
||
"\n",
|
||
"The so-called Cost complexity pruning algorithm gives us a\n",
|
||
"way to do just this. Rather than considering every possible subtree,\n",
|
||
"we consider a sequence of trees indexed by a nonnegative tuning\n",
|
||
"parameter $\\alpha$.\n",
|
||
"\n",
|
||
"Read more at the following [Scikit-Learn link on pruning](https://scikit-learn.org/stable/auto_examples/tree/plot_cost_complexity_pruning.html#sphx-glr-auto-examples-tree-plot-cost-complexity-pruning-py).\n",
|
||
"\n",
|
||
"\n",
|
||
"For each value of $\\alpha$ there corresponds a subtree $T \\in T_0$ such that"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\sum_{m=1}^{\\overline{T}}\\sum_{i:x_i\\in R_m}(y_i-\\overline{y}_{R_m})^2+\\alpha\\overline{T},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"is as small as possible. Here $\\overline{T}$ is \n",
|
||
"the number of terminal nodes of the tree $T$ , $R_m$ is the\n",
|
||
"rectangle (i.e. the subset of predictor space) corresponding to the $m$-th terminal node.\n",
|
||
"\n",
|
||
"The tuning parameter $\\alpha$ controls a trade-off between the subtree’s\n",
|
||
"complexity and its fit to the training data. When $\\alpha = 0$, then the\n",
|
||
"subtree $T$ will simply equal $T_0$, \n",
|
||
"because then the above equation just measures the\n",
|
||
"training error. \n",
|
||
"However, as $\\alpha$ increases, there is a price to pay for\n",
|
||
"having a tree with many terminal nodes. The above equation will\n",
|
||
"tend to be minimized for a smaller subtree. \n",
|
||
"\n",
|
||
"\n",
|
||
"It turns out that as we increase $\\alpha$ from zero\n",
|
||
"branches get pruned from the tree in a nested and predictable fashion,\n",
|
||
"so obtaining the whole sequence of subtrees as a function of $\\alpha$ is\n",
|
||
"easy. We can select a value of $\\alpha$ using a validation set or using\n",
|
||
"cross-validation. We then return to the full data set and obtain the\n",
|
||
"subtree corresponding to $\\alpha$. \n",
|
||
"\n",
|
||
"\n",
|
||
"### Schematic Regression Procedure\n",
|
||
"\n",
|
||
"Building a Regression Tree\n",
|
||
"\n",
|
||
"1. Use recursive binary splitting to grow a large tree on the training data, stopping only when each terminal node has fewer than some minimum number of observations.\n",
|
||
"\n",
|
||
"2. Apply cost complexity pruning to the large tree in order to obtain a sequence of best subtrees, as a function of $\\alpha$.\n",
|
||
"\n",
|
||
"3. Use for example $K$-fold cross-validation to choose $\\alpha$. Divide the training observations into $K$ folds. For each $k=1,2,\\dots,K$ we: \n",
|
||
"\n",
|
||
" * repeat steps 1 and 2 on all but the $k$-th fold of the training data. \n",
|
||
"\n",
|
||
" * Then we valuate the mean squared prediction error on the data in the left-out $k$-th fold, as a function of $\\alpha$.\n",
|
||
"\n",
|
||
" * Finally we average the results for each value of $\\alpha$, and pick $\\alpha$ to minimize the average error.\n",
|
||
"\n",
|
||
"\n",
|
||
"4. Return the subtree from Step 2 that corresponds to the chosen value of $\\alpha$. \n",
|
||
"\n",
|
||
"!eblock\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"## A Classification Tree\n",
|
||
"\n",
|
||
"A classification tree is very similar to a regression tree, except\n",
|
||
"that it is used to predict a qualitative response rather than a\n",
|
||
"quantitative one. Recall that for a regression tree, the predicted\n",
|
||
"response for an observation is given by the mean response of the\n",
|
||
"training observations that belong to the same terminal node. In\n",
|
||
"contrast, for a classification tree, we predict that each observation\n",
|
||
"belongs to the most commonly occurring class of training observations\n",
|
||
"in the region to which it belongs. In interpreting the results of a\n",
|
||
"classification tree, we are often interested not only in the class\n",
|
||
"prediction corresponding to a particular terminal node region, but\n",
|
||
"also in the class proportions among the training observations that\n",
|
||
"fall into that region. \n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"The task of growing a\n",
|
||
"classification tree is quite similar to the task of growing a\n",
|
||
"regression tree. Just as in the regression setting, we use recursive\n",
|
||
"binary splitting to grow a classification tree. However, in the\n",
|
||
"classification setting, the MSE cannot be used as a criterion for making\n",
|
||
"the binary splits. A natural alternative to MSE is the **classification\n",
|
||
"error rate**. Since we plan to assign an observation in a given region\n",
|
||
"to the most commonly occurring error rate class of training\n",
|
||
"observations in that region, the classification error rate is simply\n",
|
||
"the fraction of the training observations in that region that do not\n",
|
||
"belong to the most common class. \n",
|
||
"\n",
|
||
"When building a classification tree, either the Gini index or the\n",
|
||
"entropy are typically used to evaluate the quality of a particular\n",
|
||
"split, since these two approaches are more sensitive to node purity\n",
|
||
"than is the classification error rate. \n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"If our targets are the outcome of a classification process that takes\n",
|
||
"for example $k=1,2,\\dots,K$ values, the only thing we need to think of\n",
|
||
"is to set up the splitting criteria for each node.\n",
|
||
"\n",
|
||
"We define a PDF $p_{mk}$ that represents the number of observations of\n",
|
||
"a class $k$ in a region $R_m$ with $N_m$ observations. We represent\n",
|
||
"this likelihood function in terms of the proportion $I(y_i=k)$ of\n",
|
||
"observations of this class in the region $R_m$ as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"p_{mk} = \\frac{1}{N_m}\\sum_{x_i\\in R_m}I(y_i=k).\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"We let $p_{mk}$ represent the majority class of observations in region\n",
|
||
"$m$. The three most common ways of splitting a node are given by\n",
|
||
"\n",
|
||
"* Misclassification error"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"p_{mk} = \\frac{1}{N_m}\\sum_{x_i\\in R_m}I(y_i\\ne k) = 1-p_{mk}.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"* Gini index $g$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"g = \\sum_{k=1}^K p_{mk}(1-p_{mk}).\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"* Information entropy or just entropy $s$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"s = -\\sum_{k=1}^K p_{mk}\\log{p_{mk}}.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"### Visualizing the Tree, Classification"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 2,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
" mean radius mean texture mean perimeter mean area mean smoothness \\\n",
|
||
"0 17.99 10.38 122.80 1001.0 0.11840 \n",
|
||
"1 20.57 17.77 132.90 1326.0 0.08474 \n",
|
||
"2 19.69 21.25 130.00 1203.0 0.10960 \n",
|
||
"3 11.42 20.38 77.58 386.1 0.14250 \n",
|
||
"4 20.29 14.34 135.10 1297.0 0.10030 \n",
|
||
".. ... ... ... ... ... \n",
|
||
"564 21.56 22.39 142.00 1479.0 0.11100 \n",
|
||
"565 20.13 28.25 131.20 1261.0 0.09780 \n",
|
||
"566 16.60 28.08 108.30 858.1 0.08455 \n",
|
||
"567 20.60 29.33 140.10 1265.0 0.11780 \n",
|
||
"568 7.76 24.54 47.92 181.0 0.05263 \n",
|
||
"\n",
|
||
" mean compactness mean concavity mean concave points mean symmetry \\\n",
|
||
"0 0.27760 0.30010 0.14710 0.2419 \n",
|
||
"1 0.07864 0.08690 0.07017 0.1812 \n",
|
||
"2 0.15990 0.19740 0.12790 0.2069 \n",
|
||
"3 0.28390 0.24140 0.10520 0.2597 \n",
|
||
"4 0.13280 0.19800 0.10430 0.1809 \n",
|
||
".. ... ... ... ... \n",
|
||
"564 0.11590 0.24390 0.13890 0.1726 \n",
|
||
"565 0.10340 0.14400 0.09791 0.1752 \n",
|
||
"566 0.10230 0.09251 0.05302 0.1590 \n",
|
||
"567 0.27700 0.35140 0.15200 0.2397 \n",
|
||
"568 0.04362 0.00000 0.00000 0.1587 \n",
|
||
"\n",
|
||
" mean fractal dimension ... worst radius worst texture \\\n",
|
||
"0 0.07871 ... 25.380 17.33 \n",
|
||
"1 0.05667 ... 24.990 23.41 \n",
|
||
"2 0.05999 ... 23.570 25.53 \n",
|
||
"3 0.09744 ... 14.910 26.50 \n",
|
||
"4 0.05883 ... 22.540 16.67 \n",
|
||
".. ... ... ... ... \n",
|
||
"564 0.05623 ... 25.450 26.40 \n",
|
||
"565 0.05533 ... 23.690 38.25 \n",
|
||
"566 0.05648 ... 18.980 34.12 \n",
|
||
"567 0.07016 ... 25.740 39.42 \n",
|
||
"568 0.05884 ... 9.456 30.37 \n",
|
||
"\n",
|
||
" worst perimeter worst area worst smoothness worst compactness \\\n",
|
||
"0 184.60 2019.0 0.16220 0.66560 \n",
|
||
"1 158.80 1956.0 0.12380 0.18660 \n",
|
||
"2 152.50 1709.0 0.14440 0.42450 \n",
|
||
"3 98.87 567.7 0.20980 0.86630 \n",
|
||
"4 152.20 1575.0 0.13740 0.20500 \n",
|
||
".. ... ... ... ... \n",
|
||
"564 166.10 2027.0 0.14100 0.21130 \n",
|
||
"565 155.00 1731.0 0.11660 0.19220 \n",
|
||
"566 126.70 1124.0 0.11390 0.30940 \n",
|
||
"567 184.60 1821.0 0.16500 0.86810 \n",
|
||
"568 59.16 268.6 0.08996 0.06444 \n",
|
||
"\n",
|
||
" worst concavity worst concave points worst symmetry \\\n",
|
||
"0 0.7119 0.2654 0.4601 \n",
|
||
"1 0.2416 0.1860 0.2750 \n",
|
||
"2 0.4504 0.2430 0.3613 \n",
|
||
"3 0.6869 0.2575 0.6638 \n",
|
||
"4 0.4000 0.1625 0.2364 \n",
|
||
".. ... ... ... \n",
|
||
"564 0.4107 0.2216 0.2060 \n",
|
||
"565 0.3215 0.1628 0.2572 \n",
|
||
"566 0.3403 0.1418 0.2218 \n",
|
||
"567 0.9387 0.2650 0.4087 \n",
|
||
"568 0.0000 0.0000 0.2871 \n",
|
||
"\n",
|
||
" worst fractal dimension \n",
|
||
"0 0.11890 \n",
|
||
"1 0.08902 \n",
|
||
"2 0.08758 \n",
|
||
"3 0.17300 \n",
|
||
"4 0.07678 \n",
|
||
".. ... \n",
|
||
"564 0.07115 \n",
|
||
"565 0.06637 \n",
|
||
"566 0.07820 \n",
|
||
"567 0.12400 \n",
|
||
"568 0.07039 \n",
|
||
"\n",
|
||
"[569 rows x 30 columns]\n",
|
||
" malignant benign\n",
|
||
"0 1 0\n",
|
||
"1 1 0\n",
|
||
"2 1 0\n",
|
||
"3 1 0\n",
|
||
"4 1 0\n",
|
||
".. ... ...\n",
|
||
"564 1 0\n",
|
||
"565 1 0\n",
|
||
"566 1 0\n",
|
||
"567 1 0\n",
|
||
"568 0 1\n",
|
||
"\n",
|
||
"[569 rows x 2 columns]\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"0"
|
||
]
|
||
},
|
||
"execution_count": 2,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"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": 3,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"0"
|
||
]
|
||
},
|
||
"execution_count": 3,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"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": 4,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"[Text(0.5, 0.9166666666666666, 'X[2] <= 2.45\\ngini = 0.667\\nsamples = 150\\nvalue = [50, 50, 50]'),\n",
|
||
" Text(0.4230769230769231, 0.75, 'gini = 0.0\\nsamples = 50\\nvalue = [50, 0, 0]'),\n",
|
||
" Text(0.5769230769230769, 0.75, 'X[3] <= 1.75\\ngini = 0.5\\nsamples = 100\\nvalue = [0, 50, 50]'),\n",
|
||
" Text(0.3076923076923077, 0.5833333333333334, 'X[2] <= 4.95\\ngini = 0.168\\nsamples = 54\\nvalue = [0, 49, 5]'),\n",
|
||
" Text(0.15384615384615385, 0.4166666666666667, 'X[3] <= 1.65\\ngini = 0.041\\nsamples = 48\\nvalue = [0, 47, 1]'),\n",
|
||
" Text(0.07692307692307693, 0.25, 'gini = 0.0\\nsamples = 47\\nvalue = [0, 47, 0]'),\n",
|
||
" Text(0.23076923076923078, 0.25, 'gini = 0.0\\nsamples = 1\\nvalue = [0, 0, 1]'),\n",
|
||
" Text(0.46153846153846156, 0.4166666666666667, 'X[3] <= 1.55\\ngini = 0.444\\nsamples = 6\\nvalue = [0, 2, 4]'),\n",
|
||
" Text(0.38461538461538464, 0.25, 'gini = 0.0\\nsamples = 3\\nvalue = [0, 0, 3]'),\n",
|
||
" Text(0.5384615384615384, 0.25, 'X[2] <= 5.45\\ngini = 0.444\\nsamples = 3\\nvalue = [0, 2, 1]'),\n",
|
||
" Text(0.46153846153846156, 0.08333333333333333, 'gini = 0.0\\nsamples = 2\\nvalue = [0, 2, 0]'),\n",
|
||
" Text(0.6153846153846154, 0.08333333333333333, 'gini = 0.0\\nsamples = 1\\nvalue = [0, 0, 1]'),\n",
|
||
" Text(0.8461538461538461, 0.5833333333333334, 'X[2] <= 4.85\\ngini = 0.043\\nsamples = 46\\nvalue = [0, 1, 45]'),\n",
|
||
" Text(0.7692307692307693, 0.4166666666666667, 'X[1] <= 3.1\\ngini = 0.444\\nsamples = 3\\nvalue = [0, 1, 2]'),\n",
|
||
" Text(0.6923076923076923, 0.25, 'gini = 0.0\\nsamples = 2\\nvalue = [0, 0, 2]'),\n",
|
||
" Text(0.8461538461538461, 0.25, 'gini = 0.0\\nsamples = 1\\nvalue = [0, 1, 0]'),\n",
|
||
" Text(0.9230769230769231, 0.4166666666666667, 'gini = 0.0\\nsamples = 43\\nvalue = [0, 0, 43]')]"
|
||
]
|
||
},
|
||
"execution_count": 4,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<Figure size 640x480 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"filenames": {
|
||
"image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter6_24_1.png"
|
||
}
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"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": 5,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"|--- petal width (cm) <= 0.80\n",
|
||
"| |--- class: 0\n",
|
||
"|--- petal width (cm) > 0.80\n",
|
||
"| |--- petal width (cm) <= 1.75\n",
|
||
"| | |--- class: 1\n",
|
||
"| |--- petal width (cm) > 1.75\n",
|
||
"| | |--- class: 2\n",
|
||
"\n"
|
||
]
|
||
}
|
||
],
|
||
"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",
|
||
"<table border=\"1\">\n",
|
||
"<thead>\n",
|
||
"<tr><th align=\"center\">Day</th> <th align=\"center\">Outlook </th> <th align=\"center\">Temperature</th> <th align=\"center\">Humidity</th> <th align=\"center\"> Wind </th> <th align=\"center\">Ride</th> </tr>\n",
|
||
"</thead>\n",
|
||
"<tbody>\n",
|
||
"<tr><td align=\"center\"> 1 </td> <td align=\"center\"> Sunny </td> <td align=\"center\"> Hot </td> <td align=\"center\"> High </td> <td align=\"center\"> Weak </td> <td align=\"center\"> 0 </td> </tr>\n",
|
||
"<tr><td align=\"center\"> 2 </td> <td align=\"center\"> Sunny </td> <td align=\"center\"> Hot </td> <td align=\"center\"> High </td> <td align=\"center\"> Strong </td> <td align=\"center\"> 1 </td> </tr>\n",
|
||
"<tr><td align=\"center\"> 3 </td> <td align=\"center\"> Overcast </td> <td align=\"center\"> Hot </td> <td align=\"center\"> High </td> <td align=\"center\"> Weak </td> <td align=\"center\"> 1 </td> </tr>\n",
|
||
"<tr><td align=\"center\"> 4 </td> <td align=\"center\"> Rain </td> <td align=\"center\"> Mild </td> <td align=\"center\"> High </td> <td align=\"center\"> Weak </td> <td align=\"center\"> 1 </td> </tr>\n",
|
||
"<tr><td align=\"center\"> 5 </td> <td align=\"center\"> Rain </td> <td align=\"center\"> Cool </td> <td align=\"center\"> Normal </td> <td align=\"center\"> Weak </td> <td align=\"center\"> 1 </td> </tr>\n",
|
||
"<tr><td align=\"center\"> 6 </td> <td align=\"center\"> Rain </td> <td align=\"center\"> Cool </td> <td align=\"center\"> Normal </td> <td align=\"center\"> Strong </td> <td align=\"center\"> 0 </td> </tr>\n",
|
||
"<tr><td align=\"center\"> 7 </td> <td align=\"center\"> Overcast </td> <td align=\"center\"> Cool </td> <td align=\"center\"> Normal </td> <td align=\"center\"> Strong </td> <td align=\"center\"> 1 </td> </tr>\n",
|
||
"<tr><td align=\"center\"> 8 </td> <td align=\"center\"> Sunny </td> <td align=\"center\"> Mild </td> <td align=\"center\"> High </td> <td align=\"center\"> Weak </td> <td align=\"center\"> 0 </td> </tr>\n",
|
||
"<tr><td align=\"center\"> 9 </td> <td align=\"center\"> Sunny </td> <td align=\"center\"> Cool </td> <td align=\"center\"> Normal </td> <td align=\"center\"> Weak </td> <td align=\"center\"> 1 </td> </tr>\n",
|
||
"<tr><td align=\"center\"> 10 </td> <td align=\"center\"> Rain </td> <td align=\"center\"> Mild </td> <td align=\"center\"> Normal </td> <td align=\"center\"> Weak </td> <td align=\"center\"> 1 </td> </tr>\n",
|
||
"<tr><td align=\"center\"> 11 </td> <td align=\"center\"> Sunny </td> <td align=\"center\"> Mild </td> <td align=\"center\"> Normal </td> <td align=\"center\"> Strong </td> <td align=\"center\"> 1 </td> </tr>\n",
|
||
"<tr><td align=\"center\"> 12 </td> <td align=\"center\"> Overcast </td> <td align=\"center\"> Mild </td> <td align=\"center\"> High </td> <td align=\"center\"> Strong </td> <td align=\"center\"> 1 </td> </tr>\n",
|
||
"<tr><td align=\"center\"> 13 </td> <td align=\"center\"> Overcast </td> <td align=\"center\"> Hot </td> <td align=\"center\"> Normal </td> <td align=\"center\"> Weak </td> <td align=\"center\"> 1 </td> </tr>\n",
|
||
"<tr><td align=\"center\"> 14 </td> <td align=\"center\"> Rain </td> <td align=\"center\"> Mild </td> <td align=\"center\"> High </td> <td align=\"center\"> Strong </td> <td align=\"center\"> 0 </td> </tr>\n",
|
||
"</tbody>\n",
|
||
"</table>\n",
|
||
"\n",
|
||
"### Simple Python Code to read in Data and perform Classification"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 6,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"ename": "FileNotFoundError",
|
||
"evalue": "[Errno 2] No such file or directory: 'DataFiles/rideclass.csv'",
|
||
"output_type": "error",
|
||
"traceback": [
|
||
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
||
"\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)",
|
||
"Input \u001b[0;32mIn [6]\u001b[0m, in \u001b[0;36m<cell line: 37>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 34\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21msave_fig\u001b[39m(fig_id):\n\u001b[1;32m 35\u001b[0m plt\u001b[38;5;241m.\u001b[39msavefig(image_path(fig_id) \u001b[38;5;241m+\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m.png\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28mformat\u001b[39m\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mpng\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m---> 37\u001b[0m infile \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mopen\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mdata_path\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mrideclass.csv\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mr\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 39\u001b[0m \u001b[38;5;66;03m# Read the experimental data with Pandas\u001b[39;00m\n\u001b[1;32m 40\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 display\n",
|
||
"\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'DataFiles/rideclass.csv'"
|
||
]
|
||
}
|
||
],
|
||
"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
|
||
} |