Files
FYS-STK4155/doc/LectureNotes/_build/jupyter_execute/chapter6.ipynb
T
Morten Hjorth-Jensen d05f791ff6 update
2023-08-31 06:19:44 +02:00

1542 lines
220 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"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.653578701904388\n",
"first power: 0.17297886491529482\n",
"second power: -0.0007790285013223805\n"
]
},
{
"data": {
"image/png": "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efOsHNAdweTJk2nWrBnvvPMOly5dwsvLi759+7J//37at29Ply5dCn00BaN3794cOnSII0eOWPW5dOnSUo9/8803c/LkSYKDg+2O1ahRo0Jt3N3d6d27t+5UvX///kL7BAQEcPvttzN+/HgSExOLTEJZnddZECobsSwJghPSv39/Bg4cyPPPP09qairXXXcdBw8eZNq0aXTq1Il77723VH20bt2abdu2cc899xAWFlYuWQICAnj55ZeZOnUq9913H3fddRcJCQm8+uqreHh4MG3atHL1Wxr8/Pzo1asX7733HiEhITRq1IgdO3Ywf/583bfIUbi6uvLWW28xatQoZs2axUsvvcSsWbO4/vrr6dmzJ4899hiNGjXi0qVLnDhxgtWrV+u+ZU8//TRffvklgwYN4rXXXiM8PJxvv/2Wf/75BwCjseT32qeffprly5fTq1cvnnnmGdq3b4/ZbObs2bNs3LiRZ599lm7duvHKK69w/vx5+vXrR7169UhOTmbWrFm4urrSu3dvAIYOHarn8QoNDeXMmTPMnDmThg0bFplwszqvsyBUNmJZEgQnxGAwsHLlSiZOnMiCBQsYPHiwnkZg69athSwtRTFq1CiAIkPYS8uUKVOYN28eBw4cYPjw4UyYMIE2bdrw+++/V3q262+//Za+ffsyefJkRowYwd69e9m0aRP+/v4OH2vkyJF069aNDz/8kJSUFFq3bs2+ffto27YtL730EgMGDOChhx7ihx9+sLK01KlThx07dtC8eXPGjRvH6NGjcXNz47XXXgMolWLn7e3Nr7/+ypgxY5g7dy5Dhgxh1KhRfPzxx9SrV0+3LHXr1o3o6Gief/55BgwYwCOPPIKnpydbt26lTZs2gJrk9JdffmHcuHH079+fl156iX79+rFjxw5cXV2LlKE6r7MgVCYGRbmcfEMQBMGGLl26YDAY2LNnT3WLckXyyCOPsGTJEhISEnBzc6tucQThikWm4QRBsCI1NZVDhw6xZs0a/vrrL3788cfqFumK4LXXXqNOnTo0adKEtLQ01qxZw7x583jppZdEURKEakaUJUEQrNi3bx99+/YlODiYadOmMXz48OoW6YrA1dWV9957j/Pnz5OXl8dVV13Fhx9+yFNPPVXdognCFY9MwwmCIAiCIBSDOHgLgiAIgiAUgyhLgiAIgiAIxSDKkiAIgiAIQjGI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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": "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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 subtrees\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 doesnt 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
}