Files
FYS-STK4155/doc/pub/DecisionTrees/ipynb/DecisionTrees.ipynb
T
2020-05-29 11:39:02 +02:00

4086 lines
596 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": [
"<!-- dom:TITLE: Data Analysis and Machine Learning: From Decision Trees to Forests and all that -->\n",
"# Data Analysis and Machine Learning: From Decision Trees to Forests and all that\n",
"<!-- dom:AUTHOR: Morten Hjorth-Jensen at Department of Physics, University of Oslo & Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University -->\n",
"<!-- Author: --> \n",
"**Morten Hjorth-Jensen**, Department of Physics, University of Oslo and Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University\n",
"\n",
"Date: **Dec 27, 2019**\n",
"\n",
"Copyright 1999-2019, Morten Hjorth-Jensen. Released under CC Attribution-NonCommercial 4.0 license\n",
"\n",
"\n",
"\n",
"\n",
"## 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",
"\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",
"## A typical Decision Tree with its pertinent Jargon, Classification Problem\n",
"\n",
"<!-- dom:FIGURE: [DataFiles/cancer.png, width=600 frac=0.8] -->\n",
"<!-- begin figure -->\n",
"\n",
"<p></p>\n",
"<img src=\"DataFiles/cancer.png\" width=600>\n",
"\n",
"<!-- end figure -->\n",
"\n",
"\n",
"This tree was produced using the Wisconsin cancer data (discussed here as well, see code examples below) using **Scikit-Learn**'s decision tree classifier. Here we have used the so-called **gini** index (see below) to split the various branches.\n",
"\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",
"## How do we set it up?\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!\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"## Decision trees and Regression"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2nd degree coefficients:\n",
"zero power: 7.069813447337733\n",
"first power: -0.169654380239669\n",
"second power: 0.00048141857827328896\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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5OLFi+natWuRz6WXXlpEvv3797N+/Xp69erl1WurRz0FGsZLiGFRmLVFoalm+DEQWqtWrejcuTOA6+1dROjcuTP79+/nzJkz3HXXXezatQsRIT8/HwCTycSUKVO44IILGDlyJL179y6xjWXLljFjxgwArr/+eurVqwfAwoULWbduHT169AAgJyeHRo0aueofNmwYALfffjs33XRTifU78y666CJXO1dccQVJSUllnn9mZiZDhgzhvffeIyoqqszy54JWFAGGh0Vh0RaFRlNeQkJCXNsmk8m1bzKZsFqtvPjii1xxxRXMnDmT/fv3069fP1f5Xbt2ERERUeE+A6UUd911F2+88UaZZUub0+CU2Ww2Y7VaAcOiGDVqVJGy4eHh/PHHH4CxjMqQIUO47bbbSlVEFUW7ngIM9z4KzI40bVFoNJXmzJkzxMbGAkZHsnv6Y489xrJly0hNTeWHH34osY7LL7+c6dOnA/Drr7+SlpYGwJVXXskPP/xASkoKAKdOneLAASPUg91ud9U5ffp0+vTpAxj9CRkZGWXK7bQoCn+cSkIpxb333kv79u158sknz+WSlButKAKEM6vOsKDbAn67+TcAjp045rIo5veZz+xvZpd6fMr3KSzosoDx9cYz+/vSy2o0tZFnn32W559/ngsvvND1tg4watQoHn74Ydq0acOkSZN47rnnXA/8wrz00kssW7aMjh07MmPGDFq0aAFAhw4deO211+jfvz8XXHABV199NUePHgWgTp06rF69mk6dOrFo0SLGjBkDwN13382DDz7o0ZldEVauXMlXX33FokWLXP0Xc+fOrXB9xSHKjz5Fb9G9e3dV3SPcbbtrG8enHnftL41Zys1X3syJ704A8GXLL5m6f2qJx6/ttpbM9ZkAfNLqE77d+23VCqzRONi2bRvt27f3txgBS0REBJmZmf4Wo9j7JCLrlFLdyzpWWxQBgnOi3ey6s3m9yetc+OmFtJvcDnu0kT785uHlOh7gzlvvrDpBNRpNrUN3ZgcIzn6I5754jkY3N3KlNxnQhJTpKXTr2q1cxwP0uKhH1Qip0dQSJk+eXGSGc+/evZk4ceI51xUI1kRl0YoiUHAbFuuOa99W+uHuI6P0KCmNpnKMGDGCESNG+FuMgEG7ngIE12gnSyFFUd4hsrYStjUajaaSaEURILjmT5RgUZQ1RNY9Xw+n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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"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=11)\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",
"## A top-down approach, recursive binary splitting\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",
"## 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",
"<!-- !split -->\n",
"## Pruning the tree\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",
"## Cost complexity pruning\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",
"com- plexity 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",
"\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",
"## Growing a classification tree\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",
"## Classification tree, how to split nodes\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": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" mean radius mean texture mean perimeter mean area mean smoothness \\\n",
"0 17.990 10.38 122.80 1001.0 0.11840 \n",
"1 20.570 17.77 132.90 1326.0 0.08474 \n",
"2 19.690 21.25 130.00 1203.0 0.10960 \n",
"3 11.420 20.38 77.58 386.1 0.14250 \n",
"4 20.290 14.34 135.10 1297.0 0.10030 \n",
"5 12.450 15.70 82.57 477.1 0.12780 \n",
"6 18.250 19.98 119.60 1040.0 0.09463 \n",
"7 13.710 20.83 90.20 577.9 0.11890 \n",
"8 13.000 21.82 87.50 519.8 0.12730 \n",
"9 12.460 24.04 83.97 475.9 0.11860 \n",
"10 16.020 23.24 102.70 797.8 0.08206 \n",
"11 15.780 17.89 103.60 781.0 0.09710 \n",
"12 19.170 24.80 132.40 1123.0 0.09740 \n",
"13 15.850 23.95 103.70 782.7 0.08401 \n",
"14 13.730 22.61 93.60 578.3 0.11310 \n",
"15 14.540 27.54 96.73 658.8 0.11390 \n",
"16 14.680 20.13 94.74 684.5 0.09867 \n",
"17 16.130 20.68 108.10 798.8 0.11700 \n",
"18 19.810 22.15 130.00 1260.0 0.09831 \n",
"19 13.540 14.36 87.46 566.3 0.09779 \n",
"20 13.080 15.71 85.63 520.0 0.10750 \n",
"21 9.504 12.44 60.34 273.9 0.10240 \n",
"22 15.340 14.26 102.50 704.4 0.10730 \n",
"23 21.160 23.04 137.20 1404.0 0.09428 \n",
"24 16.650 21.38 110.00 904.6 0.11210 \n",
"25 17.140 16.40 116.00 912.7 0.11860 \n",
"26 14.580 21.53 97.41 644.8 0.10540 \n",
"27 18.610 20.25 122.10 1094.0 0.09440 \n",
"28 15.300 25.27 102.40 732.4 0.10820 \n",
"29 17.570 15.05 115.00 955.1 0.09847 \n",
".. ... ... ... ... ... \n",
"539 7.691 25.44 48.34 170.4 0.08668 \n",
"540 11.540 14.44 74.65 402.9 0.09984 \n",
"541 14.470 24.99 95.81 656.4 0.08837 \n",
"542 14.740 25.42 94.70 668.6 0.08275 \n",
"543 13.210 28.06 84.88 538.4 0.08671 \n",
"544 13.870 20.70 89.77 584.8 0.09578 \n",
"545 13.620 23.23 87.19 573.2 0.09246 \n",
"546 10.320 16.35 65.31 324.9 0.09434 \n",
"547 10.260 16.58 65.85 320.8 0.08877 \n",
"548 9.683 19.34 61.05 285.7 0.08491 \n",
"549 10.820 24.21 68.89 361.6 0.08192 \n",
"550 10.860 21.48 68.51 360.5 0.07431 \n",
"551 11.130 22.44 71.49 378.4 0.09566 \n",
"552 12.770 29.43 81.35 507.9 0.08276 \n",
"553 9.333 21.94 59.01 264.0 0.09240 \n",
"554 12.880 28.92 82.50 514.3 0.08123 \n",
"555 10.290 27.61 65.67 321.4 0.09030 \n",
"556 10.160 19.59 64.73 311.7 0.10030 \n",
"557 9.423 27.88 59.26 271.3 0.08123 \n",
"558 14.590 22.68 96.39 657.1 0.08473 \n",
"559 11.510 23.93 74.52 403.5 0.09261 \n",
"560 14.050 27.15 91.38 600.4 0.09929 \n",
"561 11.200 29.37 70.67 386.0 0.07449 \n",
"562 15.220 30.62 103.40 716.9 0.10480 \n",
"563 20.920 25.09 143.00 1347.0 0.10990 \n",
"564 21.560 22.39 142.00 1479.0 0.11100 \n",
"565 20.130 28.25 131.20 1261.0 0.09780 \n",
"566 16.600 28.08 108.30 858.1 0.08455 \n",
"567 20.600 29.33 140.10 1265.0 0.11780 \n",
"568 7.760 24.54 47.92 181.0 0.05263 \n",
"\n",
" mean compactness mean concavity mean concave points mean symmetry \\\n",
"0 0.27760 0.300100 0.147100 0.2419 \n",
"1 0.07864 0.086900 0.070170 0.1812 \n",
"2 0.15990 0.197400 0.127900 0.2069 \n",
"3 0.28390 0.241400 0.105200 0.2597 \n",
"4 0.13280 0.198000 0.104300 0.1809 \n",
"5 0.17000 0.157800 0.080890 0.2087 \n",
"6 0.10900 0.112700 0.074000 0.1794 \n",
"7 0.16450 0.093660 0.059850 0.2196 \n",
"8 0.19320 0.185900 0.093530 0.2350 \n",
"9 0.23960 0.227300 0.085430 0.2030 \n",
"10 0.06669 0.032990 0.033230 0.1528 \n",
"11 0.12920 0.099540 0.066060 0.1842 \n",
"12 0.24580 0.206500 0.111800 0.2397 \n",
"13 0.10020 0.099380 0.053640 0.1847 \n",
"14 0.22930 0.212800 0.080250 0.2069 \n",
"15 0.15950 0.163900 0.073640 0.2303 \n",
"16 0.07200 0.073950 0.052590 0.1586 \n",
"17 0.20220 0.172200 0.102800 0.2164 \n",
"18 0.10270 0.147900 0.094980 0.1582 \n",
"19 0.08129 0.066640 0.047810 0.1885 \n",
"20 0.12700 0.045680 0.031100 0.1967 \n",
"21 0.06492 0.029560 0.020760 0.1815 \n",
"22 0.21350 0.207700 0.097560 0.2521 \n",
"23 0.10220 0.109700 0.086320 0.1769 \n",
"24 0.14570 0.152500 0.091700 0.1995 \n",
"25 0.22760 0.222900 0.140100 0.3040 \n",
"26 0.18680 0.142500 0.087830 0.2252 \n",
"27 0.10660 0.149000 0.077310 0.1697 \n",
"28 0.16970 0.168300 0.087510 0.1926 \n",
"29 0.11570 0.098750 0.079530 0.1739 \n",
".. ... ... ... ... \n",
"539 0.11990 0.092520 0.013640 0.2037 \n",
"540 0.11200 0.067370 0.025940 0.1818 \n",
"541 0.12300 0.100900 0.038900 0.1872 \n",
"542 0.07214 0.041050 0.030270 0.1840 \n",
"543 0.06877 0.029870 0.032750 0.1628 \n",
"544 0.10180 0.036880 0.023690 0.1620 \n",
"545 0.06747 0.029740 0.024430 0.1664 \n",
"546 0.04994 0.010120 0.005495 0.1885 \n",
"547 0.08066 0.043580 0.024380 0.1669 \n",
"548 0.05030 0.023370 0.009615 0.1580 \n",
"549 0.06602 0.015480 0.008160 0.1976 \n",
"550 0.04227 0.000000 0.000000 0.1661 \n",
"551 0.08194 0.048240 0.022570 0.2030 \n",
"552 0.04234 0.019970 0.014990 0.1539 \n",
"553 0.05605 0.039960 0.012820 0.1692 \n",
"554 0.05824 0.061950 0.023430 0.1566 \n",
"555 0.07658 0.059990 0.027380 0.1593 \n",
"556 0.07504 0.005025 0.011160 0.1791 \n",
"557 0.04971 0.000000 0.000000 0.1742 \n",
"558 0.13300 0.102900 0.037360 0.1454 \n",
"559 0.10210 0.111200 0.041050 0.1388 \n",
"560 0.11260 0.044620 0.043040 0.1537 \n",
"561 0.03558 0.000000 0.000000 0.1060 \n",
"562 0.20870 0.255000 0.094290 0.2128 \n",
"563 0.22360 0.317400 0.147400 0.2149 \n",
"564 0.11590 0.243900 0.138900 0.1726 \n",
"565 0.10340 0.144000 0.097910 0.1752 \n",
"566 0.10230 0.092510 0.053020 0.1590 \n",
"567 0.27700 0.351400 0.152000 0.2397 \n",
"568 0.04362 0.000000 0.000000 0.1587 \n",
"\n",
" mean fractal dimension ... worst radius \\\n",
"0 0.07871 ... 25.380 \n",
"1 0.05667 ... 24.990 \n",
"2 0.05999 ... 23.570 \n",
"3 0.09744 ... 14.910 \n",
"4 0.05883 ... 22.540 \n",
"5 0.07613 ... 15.470 \n",
"6 0.05742 ... 22.880 \n",
"7 0.07451 ... 17.060 \n",
"8 0.07389 ... 15.490 \n",
"9 0.08243 ... 15.090 \n",
"10 0.05697 ... 19.190 \n",
"11 0.06082 ... 20.420 \n",
"12 0.07800 ... 20.960 \n",
"13 0.05338 ... 16.840 \n",
"14 0.07682 ... 15.030 \n",
"15 0.07077 ... 17.460 \n",
"16 0.05922 ... 19.070 \n",
"17 0.07356 ... 20.960 \n",
"18 0.05395 ... 27.320 \n",
"19 0.05766 ... 15.110 \n",
"20 0.06811 ... 14.500 \n",
"21 0.06905 ... 10.230 \n",
"22 0.07032 ... 18.070 \n",
"23 0.05278 ... 29.170 \n",
"24 0.06330 ... 26.460 \n",
"25 0.07413 ... 22.250 \n",
"26 0.06924 ... 17.620 \n",
"27 0.05699 ... 21.310 \n",
"28 0.06540 ... 20.270 \n",
"29 0.06149 ... 20.010 \n",
".. ... ... ... \n",
"539 0.07751 ... 8.678 \n",
"540 0.06782 ... 12.260 \n",
"541 0.06341 ... 16.220 \n",
"542 0.05680 ... 16.510 \n",
"543 0.05781 ... 14.370 \n",
"544 0.06688 ... 15.050 \n",
"545 0.05801 ... 15.350 \n",
"546 0.06201 ... 11.250 \n",
"547 0.06714 ... 10.830 \n",
"548 0.06235 ... 10.930 \n",
"549 0.06328 ... 13.030 \n",
"550 0.05948 ... 11.660 \n",
"551 0.06552 ... 12.020 \n",
"552 0.05637 ... 13.870 \n",
"553 0.06576 ... 9.845 \n",
"554 0.05708 ... 13.890 \n",
"555 0.06127 ... 10.840 \n",
"556 0.06331 ... 10.650 \n",
"557 0.06059 ... 10.490 \n",
"558 0.06147 ... 15.480 \n",
"559 0.06570 ... 12.480 \n",
"560 0.06171 ... 15.300 \n",
"561 0.05502 ... 11.920 \n",
"562 0.07152 ... 17.520 \n",
"563 0.06879 ... 24.290 \n",
"564 0.05623 ... 25.450 \n",
"565 0.05533 ... 23.690 \n",
"566 0.05648 ... 18.980 \n",
"567 0.07016 ... 25.740 \n",
"568 0.05884 ... 9.456 \n",
"\n",
" worst texture worst perimeter worst area worst smoothness \\\n",
"0 17.33 184.60 2019.0 0.16220 \n",
"1 23.41 158.80 1956.0 0.12380 \n",
"2 25.53 152.50 1709.0 0.14440 \n",
"3 26.50 98.87 567.7 0.20980 \n",
"4 16.67 152.20 1575.0 0.13740 \n",
"5 23.75 103.40 741.6 0.17910 \n",
"6 27.66 153.20 1606.0 0.14420 \n",
"7 28.14 110.60 897.0 0.16540 \n",
"8 30.73 106.20 739.3 0.17030 \n",
"9 40.68 97.65 711.4 0.18530 \n",
"10 33.88 123.80 1150.0 0.11810 \n",
"11 27.28 136.50 1299.0 0.13960 \n",
"12 29.94 151.70 1332.0 0.10370 \n",
"13 27.66 112.00 876.5 0.11310 \n",
"14 32.01 108.80 697.7 0.16510 \n",
"15 37.13 124.10 943.2 0.16780 \n",
"16 30.88 123.40 1138.0 0.14640 \n",
"17 31.48 136.80 1315.0 0.17890 \n",
"18 30.88 186.80 2398.0 0.15120 \n",
"19 19.26 99.70 711.2 0.14400 \n",
"20 20.49 96.09 630.5 0.13120 \n",
"21 15.66 65.13 314.9 0.13240 \n",
"22 19.08 125.10 980.9 0.13900 \n",
"23 35.59 188.00 2615.0 0.14010 \n",
"24 31.56 177.00 2215.0 0.18050 \n",
"25 21.40 152.40 1461.0 0.15450 \n",
"26 33.21 122.40 896.9 0.15250 \n",
"27 27.26 139.90 1403.0 0.13380 \n",
"28 36.71 149.30 1269.0 0.16410 \n",
"29 19.52 134.90 1227.0 0.12550 \n",
".. ... ... ... ... \n",
"539 31.89 54.49 223.6 0.15960 \n",
"540 19.68 78.78 457.8 0.13450 \n",
"541 31.73 113.50 808.9 0.13400 \n",
"542 32.29 107.40 826.4 0.10600 \n",
"543 37.17 92.48 629.6 0.10720 \n",
"544 24.75 99.17 688.6 0.12640 \n",
"545 29.09 97.58 729.8 0.12160 \n",
"546 21.77 71.12 384.9 0.12850 \n",
"547 22.04 71.08 357.4 0.14610 \n",
"548 25.59 69.10 364.2 0.11990 \n",
"549 31.45 83.90 505.6 0.12040 \n",
"550 24.77 74.08 412.3 0.10010 \n",
"551 28.26 77.80 436.6 0.10870 \n",
"552 36.00 88.10 594.7 0.12340 \n",
"553 25.05 62.86 295.8 0.11030 \n",
"554 35.74 88.84 595.7 0.12270 \n",
"555 34.91 69.57 357.6 0.13840 \n",
"556 22.88 67.88 347.3 0.12650 \n",
"557 34.24 66.50 330.6 0.10730 \n",
"558 27.27 105.90 733.5 0.10260 \n",
"559 37.16 82.28 474.2 0.12980 \n",
"560 33.17 100.20 706.7 0.12410 \n",
"561 38.30 75.19 439.6 0.09267 \n",
"562 42.79 128.70 915.0 0.14170 \n",
"563 29.41 179.10 1819.0 0.14070 \n",
"564 26.40 166.10 2027.0 0.14100 \n",
"565 38.25 155.00 1731.0 0.11660 \n",
"566 34.12 126.70 1124.0 0.11390 \n",
"567 39.42 184.60 1821.0 0.16500 \n",
"568 30.37 59.16 268.6 0.08996 \n",
"\n",
" worst compactness worst concavity worst concave points worst symmetry \\\n",
"0 0.66560 0.71190 0.26540 0.4601 \n",
"1 0.18660 0.24160 0.18600 0.2750 \n",
"2 0.42450 0.45040 0.24300 0.3613 \n",
"3 0.86630 0.68690 0.25750 0.6638 \n",
"4 0.20500 0.40000 0.16250 0.2364 \n",
"5 0.52490 0.53550 0.17410 0.3985 \n",
"6 0.25760 0.37840 0.19320 0.3063 \n",
"7 0.36820 0.26780 0.15560 0.3196 \n",
"8 0.54010 0.53900 0.20600 0.4378 \n",
"9 1.05800 1.10500 0.22100 0.4366 \n",
"10 0.15510 0.14590 0.09975 0.2948 \n",
"11 0.56090 0.39650 0.18100 0.3792 \n",
"12 0.39030 0.36390 0.17670 0.3176 \n",
"13 0.19240 0.23220 0.11190 0.2809 \n",
"14 0.77250 0.69430 0.22080 0.3596 \n",
"15 0.65770 0.70260 0.17120 0.4218 \n",
"16 0.18710 0.29140 0.16090 0.3029 \n",
"17 0.42330 0.47840 0.20730 0.3706 \n",
"18 0.31500 0.53720 0.23880 0.2768 \n",
"19 0.17730 0.23900 0.12880 0.2977 \n",
"20 0.27760 0.18900 0.07283 0.3184 \n",
"21 0.11480 0.08867 0.06227 0.2450 \n",
"22 0.59540 0.63050 0.23930 0.4667 \n",
"23 0.26000 0.31550 0.20090 0.2822 \n",
"24 0.35780 0.46950 0.20950 0.3613 \n",
"25 0.39490 0.38530 0.25500 0.4066 \n",
"26 0.66430 0.55390 0.27010 0.4264 \n",
"27 0.21170 0.34460 0.14900 0.2341 \n",
"28 0.61100 0.63350 0.20240 0.4027 \n",
"29 0.28120 0.24890 0.14560 0.2756 \n",
".. ... ... ... ... \n",
"539 0.30640 0.33930 0.05000 0.2790 \n",
"540 0.21180 0.17970 0.06918 0.2329 \n",
"541 0.42020 0.40400 0.12050 0.3187 \n",
"542 0.13760 0.16110 0.10950 0.2722 \n",
"543 0.13810 0.10620 0.07958 0.2473 \n",
"544 0.20370 0.13770 0.06845 0.2249 \n",
"545 0.15170 0.10490 0.07174 0.2642 \n",
"546 0.08842 0.04384 0.02381 0.2681 \n",
"547 0.22460 0.17830 0.08333 0.2691 \n",
"548 0.09546 0.09350 0.03846 0.2552 \n",
"549 0.16330 0.06194 0.03264 0.3059 \n",
"550 0.07348 0.00000 0.00000 0.2458 \n",
"551 0.17820 0.15640 0.06413 0.3169 \n",
"552 0.10640 0.08653 0.06498 0.2407 \n",
"553 0.08298 0.07993 0.02564 0.2435 \n",
"554 0.16200 0.24390 0.06493 0.2372 \n",
"555 0.17100 0.20000 0.09127 0.2226 \n",
"556 0.12000 0.01005 0.02232 0.2262 \n",
"557 0.07158 0.00000 0.00000 0.2475 \n",
"558 0.31710 0.36620 0.11050 0.2258 \n",
"559 0.25170 0.36300 0.09653 0.2112 \n",
"560 0.22640 0.13260 0.10480 0.2250 \n",
"561 0.05494 0.00000 0.00000 0.1566 \n",
"562 0.79170 1.17000 0.23560 0.4089 \n",
"563 0.41860 0.65990 0.25420 0.2929 \n",
"564 0.21130 0.41070 0.22160 0.2060 \n",
"565 0.19220 0.32150 0.16280 0.2572 \n",
"566 0.30940 0.34030 0.14180 0.2218 \n",
"567 0.86810 0.93870 0.26500 0.4087 \n",
"568 0.06444 0.00000 0.00000 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",
"5 0.12440 \n",
"6 0.08368 \n",
"7 0.11510 \n",
"8 0.10720 \n",
"9 0.20750 \n",
"10 0.08452 \n",
"11 0.10480 \n",
"12 0.10230 \n",
"13 0.06287 \n",
"14 0.14310 \n",
"15 0.13410 \n",
"16 0.08216 \n",
"17 0.11420 \n",
"18 0.07615 \n",
"19 0.07259 \n",
"20 0.08183 \n",
"21 0.07773 \n",
"22 0.09946 \n",
"23 0.07526 \n",
"24 0.09564 \n",
"25 0.10590 \n",
"26 0.12750 \n",
"27 0.07421 \n",
"28 0.09876 \n",
"29 0.07919 \n",
".. ... \n",
"539 0.10660 \n",
"540 0.08134 \n",
"541 0.10230 \n",
"542 0.06956 \n",
"543 0.06443 \n",
"544 0.08492 \n",
"545 0.06953 \n",
"546 0.07399 \n",
"547 0.09479 \n",
"548 0.07920 \n",
"549 0.07626 \n",
"550 0.06592 \n",
"551 0.08032 \n",
"552 0.06484 \n",
"553 0.07393 \n",
"554 0.07242 \n",
"555 0.08283 \n",
"556 0.06742 \n",
"557 0.06969 \n",
"558 0.08004 \n",
"559 0.08732 \n",
"560 0.08321 \n",
"561 0.05905 \n",
"562 0.14090 \n",
"563 0.09873 \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",
"5 1 0\n",
"6 1 0\n",
"7 1 0\n",
"8 1 0\n",
"9 1 0\n",
"10 1 0\n",
"11 1 0\n",
"12 1 0\n",
"13 1 0\n",
"14 1 0\n",
"15 1 0\n",
"16 1 0\n",
"17 1 0\n",
"18 1 0\n",
"19 0 1\n",
"20 0 1\n",
"21 0 1\n",
"22 1 0\n",
"23 1 0\n",
"24 1 0\n",
"25 1 0\n",
"26 1 0\n",
"27 1 0\n",
"28 1 0\n",
"29 1 0\n",
".. ... ...\n",
"539 0 1\n",
"540 0 1\n",
"541 0 1\n",
"542 0 1\n",
"543 0 1\n",
"544 0 1\n",
"545 0 1\n",
"546 0 1\n",
"547 0 1\n",
"548 0 1\n",
"549 0 1\n",
"550 0 1\n",
"551 0 1\n",
"552 0 1\n",
"553 0 1\n",
"554 0 1\n",
"555 0 1\n",
"556 0 1\n",
"557 0 1\n",
"558 0 1\n",
"559 0 1\n",
"560 0 1\n",
"561 0 1\n",
"562 1 0\n",
"563 1 0\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": "markdown",
"metadata": {},
"source": [
"## Visualizing the Tree, The Moons"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"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": [
"## 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",
"## 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",
"## 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": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" (0, 0)\t1.0\n",
" (0, 7)\t1.0\n",
" (0, 9)\t1.0\n",
" (0, 13)\t1.0\n",
" (1, 3)\t1.0\n",
" (1, 5)\t1.0\n",
" (1, 8)\t1.0\n",
" (1, 12)\t1.0\n",
" (2, 3)\t1.0\n",
" (2, 5)\t1.0\n",
" (2, 8)\t1.0\n",
" (2, 11)\t1.0\n",
" (3, 1)\t1.0\n",
" (3, 5)\t1.0\n",
" (3, 8)\t1.0\n",
" (3, 12)\t1.0\n",
" (4, 2)\t1.0\n",
" (4, 6)\t1.0\n",
" (4, 8)\t1.0\n",
" (4, 12)\t1.0\n",
" (5, 2)\t1.0\n",
" (5, 4)\t1.0\n",
" (5, 10)\t1.0\n",
" (5, 12)\t1.0\n",
" (6, 2)\t1.0\n",
" :\t:\n",
" (8, 12)\t1.0\n",
" (9, 3)\t1.0\n",
" (9, 4)\t1.0\n",
" (9, 10)\t1.0\n",
" (9, 12)\t1.0\n",
" (10, 2)\t1.0\n",
" (10, 6)\t1.0\n",
" (10, 10)\t1.0\n",
" (10, 12)\t1.0\n",
" (11, 3)\t1.0\n",
" (11, 6)\t1.0\n",
" (11, 10)\t1.0\n",
" (11, 11)\t1.0\n",
" (12, 1)\t1.0\n",
" (12, 6)\t1.0\n",
" (12, 8)\t1.0\n",
" (12, 11)\t1.0\n",
" (13, 1)\t1.0\n",
" (13, 5)\t1.0\n",
" (13, 10)\t1.0\n",
" (13, 12)\t1.0\n",
" (14, 2)\t1.0\n",
" (14, 6)\t1.0\n",
" (14, 8)\t1.0\n",
" (14, 11)\t1.0\n",
"Train set accuracy with Decision Tree: 0.73\n"
]
},
{
"data": {
"text/plain": [
"0"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"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": [
"## Computing the Gini Factor\n",
"\n",
"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": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"X1 < 0.000 Gini=0.408\n",
"X1 < 0.000 Gini=0.408\n",
"X1 < 1.000 Gini=0.394\n",
"X1 < 2.000 Gini=0.394\n",
"X1 < 2.000 Gini=0.394\n",
"X1 < 2.000 Gini=0.394\n",
"X1 < 1.000 Gini=0.394\n",
"X1 < 0.000 Gini=0.408\n",
"X1 < 0.000 Gini=0.408\n",
"X1 < 2.000 Gini=0.394\n",
"X1 < 0.000 Gini=0.408\n",
"X1 < 1.000 Gini=0.394\n",
"X1 < 1.000 Gini=0.394\n",
"X1 < 2.000 Gini=0.394\n",
"X2 < 0.000 Gini=0.408\n",
"X2 < 0.000 Gini=0.408\n",
"X2 < 0.000 Gini=0.408\n",
"X2 < 1.000 Gini=0.407\n",
"X2 < 2.000 Gini=0.407\n",
"X2 < 2.000 Gini=0.407\n",
"X2 < 2.000 Gini=0.407\n",
"X2 < 1.000 Gini=0.407\n",
"X2 < 2.000 Gini=0.407\n",
"X2 < 1.000 Gini=0.407\n",
"X2 < 1.000 Gini=0.407\n",
"X2 < 1.000 Gini=0.407\n",
"X2 < 0.000 Gini=0.408\n",
"X2 < 1.000 Gini=0.407\n",
"X3 < 0.000 Gini=0.408\n",
"X3 < 0.000 Gini=0.408\n",
"X3 < 0.000 Gini=0.408\n",
"X3 < 0.000 Gini=0.408\n",
"X3 < 1.000 Gini=0.367\n",
"X3 < 1.000 Gini=0.367\n",
"X3 < 1.000 Gini=0.367\n",
"X3 < 0.000 Gini=0.408\n",
"X3 < 1.000 Gini=0.367\n",
"X3 < 1.000 Gini=0.367\n",
"X3 < 1.000 Gini=0.367\n",
"X3 < 0.000 Gini=0.408\n",
"X3 < 1.000 Gini=0.367\n",
"X3 < 0.000 Gini=0.408\n",
"X4 < 0.000 Gini=0.408\n",
"X4 < 1.000 Gini=0.405\n",
"X4 < 0.000 Gini=0.408\n",
"X4 < 0.000 Gini=0.408\n",
"X4 < 0.000 Gini=0.408\n",
"X4 < 1.000 Gini=0.405\n",
"X4 < 1.000 Gini=0.405\n",
"X4 < 0.000 Gini=0.408\n",
"X4 < 0.000 Gini=0.408\n",
"X4 < 0.000 Gini=0.408\n",
"X4 < 1.000 Gini=0.405\n",
"X4 < 1.000 Gini=0.405\n",
"X4 < 0.000 Gini=0.408\n",
"X4 < 1.000 Gini=0.405\n",
"Split: [X3 < 1.000]\n"
]
}
],
"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",
"ID3, learns decision trees by constructing\n",
"them topdown, 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",
"## Implementing the ID3 Algorithm"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['Outlook', 'Temperature', 'Humidity', 'Wind']\n",
"System entropy 0.863120568566631\n",
"Outlook\n",
"(Sunny)\n",
"(Overcast)\n",
"(Rain)\n",
"Humidity\n",
"(High)\n",
"(Normal)\n",
"1\n",
"Temperature\n",
"(Mild)\n",
"(Cool)\n",
"Wind\n",
"(Weak)\n",
"(Strong)\n",
"1\n",
"1\n",
"0\n",
"0\n",
"1\n"
]
}
],
"source": [
"import re\n",
"import math\n",
"from collections import deque\n",
"\n",
"# x is examples in training set\n",
"# y is set of targets\n",
"# label is target attributes\n",
"# Node is a class which has properties values, childs, and next\n",
"# root is top node in the decision tree\n",
"\n",
"class Node(object):\n",
"\tdef __init__(self):\n",
"\t\tself.value = None\n",
"\t\tself.next = None\n",
"\t\tself.childs = None\n",
"\n",
"# Simple class of Decision Tree\n",
"# Aimed for who want to learn Decision Tree, so it is not optimized\n",
"class DecisionTree(object):\n",
"\tdef __init__(self, sample, attributes, labels):\n",
"\t\tself.sample = sample\n",
"\t\tself.attributes = attributes\n",
"\t\tself.labels = labels\n",
"\t\tself.labelCodes = None\n",
"\t\tself.labelCodesCount = None\n",
"\t\tself.initLabelCodes()\n",
"\t\t# print(self.labelCodes)\n",
"\t\tself.root = None\n",
"\t\tself.entropy = self.getEntropy([x for x in range(len(self.labels))])\n",
"\n",
"\tdef initLabelCodes(self):\n",
"\t\tself.labelCodes = []\n",
"\t\tself.labelCodesCount = []\n",
"\t\tfor l in self.labels:\n",
"\t\t\tif l not in self.labelCodes:\n",
"\t\t\t\tself.labelCodes.append(l)\n",
"\t\t\t\tself.labelCodesCount.append(0)\n",
"\t\t\tself.labelCodesCount[self.labelCodes.index(l)] += 1\n",
"\n",
"\tdef getLabelCodeId(self, sampleId):\n",
"\t\treturn self.labelCodes.index(self.labels[sampleId])\n",
"\n",
"\tdef getAttributeValues(self, sampleIds, attributeId):\n",
"\t\tvals = []\n",
"\t\tfor sid in sampleIds:\n",
"\t\t\tval = self.sample[sid][attributeId]\n",
"\t\t\tif val not in vals:\n",
"\t\t\t\tvals.append(val)\n",
"\t\t# print(vals)\n",
"\t\treturn vals\n",
"\n",
"\tdef getEntropy(self, sampleIds):\n",
"\t\tentropy = 0\n",
"\t\tlabelCount = [0] * len(self.labelCodes)\n",
"\t\tfor sid in sampleIds:\n",
"\t\t\tlabelCount[self.getLabelCodeId(sid)] += 1\n",
"\t\t# print(\"-ge\", labelCount)\n",
"\t\tfor lv in labelCount:\n",
"\t\t\t# print(lv)\n",
"\t\t\tif lv != 0:\n",
"\t\t\t\tentropy += -lv/len(sampleIds) * math.log(lv/len(sampleIds), 2)\n",
"\t\t\telse:\n",
"\t\t\t\tentropy += 0\n",
"\t\treturn entropy\n",
"\n",
"\tdef getDominantLabel(self, sampleIds):\n",
"\t\tlabelCodesCount = [0] * len(self.labelCodes)\n",
"\t\tfor sid in sampleIds:\n",
"\t\t\tlabelCodesCount[self.labelCodes.index(self.labels[sid])] += 1\n",
"\t\treturn self.labelCodes[labelCodesCount.index(max(labelCodesCount))]\n",
"\n",
"\tdef getInformationGain(self, sampleIds, attributeId):\n",
"\t\tgain = self.getEntropy(sampleIds)\n",
"\t\tattributeVals = []\n",
"\t\tattributeValsCount = []\n",
"\t\tattributeValsIds = []\n",
"\t\tfor sid in sampleIds:\n",
"\t\t\tval = self.sample[sid][attributeId]\n",
"\t\t\tif val not in attributeVals:\n",
"\t\t\t\tattributeVals.append(val)\n",
"\t\t\t\tattributeValsCount.append(0)\n",
"\t\t\t\tattributeValsIds.append([])\n",
"\t\t\tvid = attributeVals.index(val)\n",
"\t\t\tattributeValsCount[vid] += 1\n",
"\t\t\tattributeValsIds[vid].append(sid)\n",
"\t\t# print(\"-gig\", self.attributes[attributeId])\n",
"\t\tfor vc, vids in zip(attributeValsCount, attributeValsIds):\n",
"\t\t\t# print(\"-gig\", vids)\n",
"\t\t\tgain -= vc/len(sampleIds) * self.getEntropy(vids)\n",
"\t\treturn gain\n",
"\n",
"\tdef getAttributeMaxInformationGain(self, sampleIds, attributeIds):\n",
"\t\tattributesEntropy = [0] * len(attributeIds)\n",
"\t\tfor i, attId in zip(range(len(attributeIds)), attributeIds):\n",
"\t\t\tattributesEntropy[i] = self.getInformationGain(sampleIds, attId)\n",
"\t\tmaxId = attributeIds[attributesEntropy.index(max(attributesEntropy))]\n",
"\t\treturn self.attributes[maxId], maxId\n",
"\n",
"\tdef isSingleLabeled(self, sampleIds):\n",
"\t\tlabel = self.labels[sampleIds[0]]\n",
"\t\tfor sid in sampleIds:\n",
"\t\t\tif self.labels[sid] != label:\n",
"\t\t\t\treturn False\n",
"\t\treturn True\n",
"\n",
"\tdef getLabel(self, sampleId):\n",
"\t\treturn self.labels[sampleId]\n",
"\n",
"\tdef id3(self):\n",
"\t\tsampleIds = [x for x in range(len(self.sample))]\n",
"\t\tattributeIds = [x for x in range(len(self.attributes))]\n",
"\t\tself.root = self.id3Recv(sampleIds, attributeIds, self.root)\n",
"\n",
"\tdef id3Recv(self, sampleIds, attributeIds, root):\n",
"\t\troot = Node() # Initialize current root\n",
"\t\tif self.isSingleLabeled(sampleIds):\n",
"\t\t\troot.value = self.labels[sampleIds[0]]\n",
"\t\t\treturn root\n",
"\t\t# print(attributeIds)\n",
"\t\tif len(attributeIds) == 0:\n",
"\t\t\troot.value = self.getDominantLabel(sampleIds)\n",
"\t\t\treturn root\n",
"\t\tbestAttrName, bestAttrId = self.getAttributeMaxInformationGain(\n",
"\t\t\tsampleIds, attributeIds)\n",
"\t\t# print(bestAttrName)\n",
"\t\troot.value = bestAttrName\n",
"\t\troot.childs = [] # Create list of children\n",
"\t\tfor value in self.getAttributeValues(sampleIds, bestAttrId):\n",
"\t\t\t# print(value)\n",
"\t\t\tchild = Node()\n",
"\t\t\tchild.value = value\n",
"\t\t\troot.childs.append(child) # Append new child node to current\n",
"\t\t\t\t\t\t\t\t\t # root\n",
"\t\t\tchildSampleIds = []\n",
"\t\t\tfor sid in sampleIds:\n",
"\t\t\t\tif self.sample[sid][bestAttrId] == value:\n",
"\t\t\t\t\tchildSampleIds.append(sid)\n",
"\t\t\tif len(childSampleIds) == 0:\n",
"\t\t\t\tchild.next = self.getDominantLabel(sampleIds)\n",
"\t\t\telse:\n",
"\t\t\t\t# print(bestAttrName, bestAttrId)\n",
"\t\t\t\t# print(attributeIds)\n",
"\t\t\t\tif len(attributeIds) > 0 and bestAttrId in attributeIds:\n",
"\t\t\t\t\ttoRemove = attributeIds.index(bestAttrId)\n",
"\t\t\t\t\tattributeIds.pop(toRemove)\n",
"\t\t\t\tchild.next = self.id3Recv(\n",
"\t\t\t\t\tchildSampleIds, attributeIds, child.next)\n",
"\t\treturn root\n",
"\n",
"\tdef printTree(self):\n",
"\t\tif self.root:\n",
"\t\t\troots = deque()\n",
"\t\t\troots.append(self.root)\n",
"\t\t\twhile len(roots) > 0:\n",
"\t\t\t\troot = roots.popleft()\n",
"\t\t\t\tprint(root.value)\n",
"\t\t\t\tif root.childs:\n",
"\t\t\t\t\tfor child in root.childs:\n",
"\t\t\t\t\t\tprint('({})'.format(child.value))\n",
"\t\t\t\t\t\troots.append(child.next)\n",
"\t\t\t\telif root.next:\n",
"\t\t\t\t\tprint(root.next)\n",
"\n",
"\n",
"def test():\n",
"\tf = open('DataFiles/rideclass.csv')\n",
"\tattributes = f.readline().split(',')\n",
"\tattributes = attributes[1:len(attributes)-1]\n",
"\tprint(attributes)\n",
"\tsample = f.readlines()\n",
"\tf.close()\n",
"\tfor i in range(len(sample)):\n",
"\t\tsample[i] = re.sub('\\d+,', '', sample[i])\n",
"\t\tsample[i] = sample[i].strip().split(',')\n",
"\tlabels = []\n",
"\tfor s in sample:\n",
"\t\tlabels.append(s.pop())\n",
"\t# print(sample)\n",
"\t# print(labels)\n",
"\tdecisionTree = DecisionTree(sample, attributes, labels)\n",
"\tprint(\"System entropy {}\".format(decisionTree.entropy))\n",
"\tdecisionTree.id3()\n",
"\tdecisionTree.printTree()\n",
"\n",
"\n",
"if __name__ == '__main__':\n",
"\ttest()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Cancer Data again now with Decision Trees and other Methods"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(426, 30)\n",
"(143, 30)\n",
"Test set accuracy with Logistic Regression: 0.95\n",
"Test set accuracy with SVM: 0.63\n",
"Test set accuracy with Decision Trees: 0.90\n",
"Test set accuracy Logistic Regression with scaled data: 0.96\n",
"Test set accuracy SVM with scaled data: 0.96\n",
"Test set accuracy with Decision Trees and scaled data: 0.90\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:757: ConvergenceWarning: lbfgs failed to converge. Increase the number of iterations.\n",
" \"of iterations.\", ConvergenceWarning)\n"
]
}
],
"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": 8,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 792x288 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"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": "markdown",
"metadata": {},
"source": [
"## Playing around with regions"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 792x288 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"np.random.seed(6)\n",
"Xs = np.random.rand(100, 2) - 0.5\n",
"ys = (Xs[:, 0] > 0).astype(np.float32) * 2\n",
"\n",
"angle = np.pi/4\n",
"rotation_matrix = np.array([[np.cos(angle), -np.sin(angle)], [np.sin(angle), np.cos(angle)]])\n",
"Xsr = Xs.dot(rotation_matrix)\n",
"\n",
"tree_clf_s = DecisionTreeClassifier(random_state=42)\n",
"tree_clf_s.fit(Xs, ys)\n",
"tree_clf_sr = DecisionTreeClassifier(random_state=42)\n",
"tree_clf_sr.fit(Xsr, ys)\n",
"\n",
"plt.figure(figsize=(11, 4))\n",
"plt.subplot(121)\n",
"plot_decision_boundary(tree_clf_s, Xs, ys, axes=[-0.7, 0.7, -0.7, 0.7], iris=False)\n",
"plt.subplot(122)\n",
"plot_decision_boundary(tree_clf_sr, Xsr, ys, axes=[-0.7, 0.7, -0.7, 0.7], iris=False)\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Regression trees"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"# Quadratic training set + noise\n",
"np.random.seed(42)\n",
"m = 200\n",
"X = np.random.rand(m, 1)\n",
"y = 4 * (X - 0.5) ** 2\n",
"y = y + np.random.randn(m, 1) / 10"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"DecisionTreeRegressor(criterion='mse', max_depth=2, max_features=None,\n",
" max_leaf_nodes=None, min_impurity_decrease=0.0,\n",
" min_impurity_split=None, min_samples_leaf=1,\n",
" min_samples_split=2, min_weight_fraction_leaf=0.0,\n",
" presort=False, random_state=42, splitter='best')"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.tree import DecisionTreeRegressor\n",
"\n",
"tree_reg = DecisionTreeRegressor(max_depth=2, random_state=42)\n",
"tree_reg.fit(X, y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Final regressor code"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 792x288 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn.tree import DecisionTreeRegressor\n",
"\n",
"tree_reg1 = DecisionTreeRegressor(random_state=42, max_depth=2)\n",
"tree_reg2 = DecisionTreeRegressor(random_state=42, max_depth=3)\n",
"tree_reg1.fit(X, y)\n",
"tree_reg2.fit(X, y)\n",
"\n",
"def plot_regression_predictions(tree_reg, X, y, axes=[0, 1, -0.2, 1], ylabel=\"$y$\"):\n",
" x1 = np.linspace(axes[0], axes[1], 500).reshape(-1, 1)\n",
" y_pred = tree_reg.predict(x1)\n",
" plt.axis(axes)\n",
" plt.xlabel(\"$x_1$\", fontsize=18)\n",
" if ylabel:\n",
" plt.ylabel(ylabel, fontsize=18, rotation=0)\n",
" plt.plot(X, y, \"b.\")\n",
" plt.plot(x1, y_pred, \"r.-\", linewidth=2, label=r\"$\\hat{y}$\")\n",
"\n",
"plt.figure(figsize=(11, 4))\n",
"plt.subplot(121)\n",
"plot_regression_predictions(tree_reg1, X, y)\n",
"for split, style in ((0.1973, \"k-\"), (0.0917, \"k--\"), (0.7718, \"k--\")):\n",
" plt.plot([split, split], [-0.2, 1], style, linewidth=2)\n",
"plt.text(0.21, 0.65, \"Depth=0\", fontsize=15)\n",
"plt.text(0.01, 0.2, \"Depth=1\", fontsize=13)\n",
"plt.text(0.65, 0.8, \"Depth=1\", fontsize=13)\n",
"plt.legend(loc=\"upper center\", fontsize=18)\n",
"plt.title(\"max_depth=2\", fontsize=14)\n",
"\n",
"plt.subplot(122)\n",
"plot_regression_predictions(tree_reg2, X, y, ylabel=None)\n",
"for split, style in ((0.1973, \"k-\"), (0.0917, \"k--\"), (0.7718, \"k--\")):\n",
" plt.plot([split, split], [-0.2, 1], style, linewidth=2)\n",
"for split in (0.0458, 0.1298, 0.2873, 0.9040):\n",
" plt.plot([split, split], [-0.2, 1], \"k:\", linewidth=1)\n",
"plt.text(0.3, 0.5, \"Depth=2\", fontsize=13)\n",
"plt.title(\"max_depth=3\", fontsize=14)\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 792x288 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"tree_reg1 = DecisionTreeRegressor(random_state=42)\n",
"tree_reg2 = DecisionTreeRegressor(random_state=42, min_samples_leaf=10)\n",
"tree_reg1.fit(X, y)\n",
"tree_reg2.fit(X, y)\n",
"\n",
"x1 = np.linspace(0, 1, 500).reshape(-1, 1)\n",
"y_pred1 = tree_reg1.predict(x1)\n",
"y_pred2 = tree_reg2.predict(x1)\n",
"\n",
"plt.figure(figsize=(11, 4))\n",
"\n",
"plt.subplot(121)\n",
"plt.plot(X, y, \"b.\")\n",
"plt.plot(x1, y_pred1, \"r.-\", linewidth=2, label=r\"$\\hat{y}$\")\n",
"plt.axis([0, 1, -0.2, 1.1])\n",
"plt.xlabel(\"$x_1$\", fontsize=18)\n",
"plt.ylabel(\"$y$\", fontsize=18, rotation=0)\n",
"plt.legend(loc=\"upper center\", fontsize=18)\n",
"plt.title(\"No restrictions\", fontsize=14)\n",
"\n",
"plt.subplot(122)\n",
"plt.plot(X, y, \"b.\")\n",
"plt.plot(x1, y_pred2, \"r.-\", linewidth=2, label=r\"$\\hat{y}$\")\n",
"plt.axis([0, 1, -0.2, 1.1])\n",
"plt.xlabel(\"$x_1$\", fontsize=18)\n",
"plt.title(\"min_samples_leaf={}\".format(tree_reg2.min_samples_leaf), fontsize=14)\n",
"\n",
"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.\n",
"\n",
"\n",
"## Ensemble Methods: From a Single Tree to Many Trees and Extreme Boosting, Meet the Jungle of Methods\n",
"\n",
"As stated above and seen in many of the examples discussed here about\n",
"a single decision tree, we often end up overfitting our training\n",
"data. This normally means that we have a high variance. Can we reduce\n",
"the variance of a statistical learning method?\n",
"\n",
"This leads us to a set of different methods that can combine different\n",
"machine learning algorithms or just use one of them to construct\n",
"forests and jungles of trees, homogeneous ones or heterogenous\n",
"ones. These methods are recognized by different names which we will\n",
"try to explain here. These are\n",
"\n",
"1. Voting classifiers\n",
"\n",
"2. Bagging and Pasting\n",
"\n",
"3. Random forests\n",
"\n",
"4. Boosting methods, from adaptive to Extreme Gradient Boosting (XGBoost)\n",
"\n",
"We discuss these methods here.\n",
"\n",
"\n",
"## An Overview of Ensemble Methods\n",
"\n",
"<!-- dom:FIGURE: [DataFiles/ensembleoverview.png, width=600 frac=0.8] -->\n",
"<!-- begin figure -->\n",
"\n",
"<p></p>\n",
"<img src=\"DataFiles/ensembleoverview.png\" width=600>\n",
"\n",
"<!-- end figure -->\n",
"\n",
"\n",
"\n",
"\n",
"## Bagging\n",
"\n",
"The **plain** decision trees suffer from high\n",
"variance. This means that if we split the training data into two parts\n",
"at random, and fit a decision tree to both halves, the results that we\n",
"get could be quite different. In contrast, a procedure with low\n",
"variance will yield similar results if applied repeatedly to distinct\n",
"data sets; linear regression tends to have low variance, if the ratio\n",
"of $n$ to $p$ is moderately large. \n",
"\n",
"**Bootstrap aggregation**, or just **bagging**, is a\n",
"general-purpose procedure for reducing the variance of a statistical\n",
"learning method. \n",
"\n",
"\n",
"## More bagging\n",
"\n",
"Bagging typically results in improved accuracy\n",
"over prediction using a single tree. Unfortunately, however, it can be\n",
"difficult to interpret the resulting model. Recall that one of the\n",
"advantages of decision trees is the attractive and easily interpreted\n",
"diagram that results.\n",
"\n",
"However, when we bag a large number of trees, it is no longer\n",
"possible to represent the resulting statistical learning procedure\n",
"using a single tree, and it is no longer clear which variables are\n",
"most important to the procedure. Thus, bagging improves prediction\n",
"accuracy at the expense of interpretability. Although the collection\n",
"of bagged trees is much more difficult to interpret than a single\n",
"tree, one can obtain an overall summary of the importance of each\n",
"predictor using the MSE (for bagging regression trees) or the Gini\n",
"index (for bagging classification trees). In the case of bagging\n",
"regression trees, we can record the total amount that the MSE is\n",
"decreased due to splits over a given predictor, averaged over all $B$ possible\n",
"trees. A large value indicates an important predictor. Similarly, in\n",
"the context of bagging classification trees, we can add up the total\n",
"amount that the Gini index is decreased by splits over a given\n",
"predictor, averaged over all $B$ trees.\n",
"\n",
"## Simple Voting Example, head or tail"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 576x252 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"heads_proba = 0.51\n",
"coin_tosses = (np.random.rand(10000, 10) < heads_proba).astype(np.int32)\n",
"cumulative_heads_ratio = np.cumsum(coin_tosses, axis=0) / np.arange(1, 10001).reshape(-1, 1)\n",
"plt.figure(figsize=(8,3.5))\n",
"plt.plot(cumulative_heads_ratio)\n",
"plt.plot([0, 10000], [0.51, 0.51], \"k--\", linewidth=2, label=\"51%\")\n",
"plt.plot([0, 10000], [0.5, 0.5], \"k-\", label=\"50%\")\n",
"plt.xlabel(\"Number of coin tosses\")\n",
"plt.ylabel(\"Heads ratio\")\n",
"plt.legend(loc=\"lower right\")\n",
"plt.axis([0, 10000, 0.42, 0.58])\n",
"save_fig(\"votingsimple\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Using the Voting Classifier"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"LogisticRegression 0.864\n",
"RandomForestClassifier 0.872\n",
"SVC 0.888\n",
"VotingClassifier 0.896\n",
"LogisticRegression 0.864\n",
"RandomForestClassifier 0.872\n",
"SVC 0.888\n",
"VotingClassifier 0.912\n"
]
}
],
"source": [
"from sklearn.model_selection import train_test_split\n",
"from sklearn.datasets import make_moons\n",
"\n",
"X, y = make_moons(n_samples=500, noise=0.30, random_state=42)\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)\n",
"\n",
"from sklearn.ensemble import RandomForestClassifier\n",
"from sklearn.ensemble import VotingClassifier\n",
"from sklearn.linear_model import LogisticRegression\n",
"from sklearn.svm import SVC\n",
"\n",
"log_clf = LogisticRegression(solver=\"liblinear\", random_state=42)\n",
"rnd_clf = RandomForestClassifier(n_estimators=10, random_state=42)\n",
"svm_clf = SVC(gamma=\"auto\", random_state=42)\n",
"\n",
"voting_clf = VotingClassifier(\n",
" estimators=[('lr', log_clf), ('rf', rnd_clf), ('svc', svm_clf)],\n",
" voting='hard')\n",
"\n",
"voting_clf.fit(X_train, y_train)\n",
"\n",
"from sklearn.metrics import accuracy_score\n",
"\n",
"for clf in (log_clf, rnd_clf, svm_clf, voting_clf):\n",
" clf.fit(X_train, y_train)\n",
" y_pred = clf.predict(X_test)\n",
" print(clf.__class__.__name__, accuracy_score(y_test, y_pred))\n",
"\n",
"log_clf = LogisticRegression(solver=\"liblinear\", random_state=42)\n",
"rnd_clf = RandomForestClassifier(n_estimators=10, random_state=42)\n",
"svm_clf = SVC(gamma=\"auto\", probability=True, random_state=42)\n",
"\n",
"voting_clf = VotingClassifier(\n",
" estimators=[('lr', log_clf), ('rf', rnd_clf), ('svc', svm_clf)],\n",
" voting='soft')\n",
"voting_clf.fit(X_train, y_train)\n",
"\n",
"from sklearn.metrics import accuracy_score\n",
"\n",
"for clf in (log_clf, rnd_clf, svm_clf, voting_clf):\n",
" clf.fit(X_train, y_train)\n",
" y_pred = clf.predict(X_test)\n",
" print(clf.__class__.__name__, accuracy_score(y_test, y_pred))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Please, not the moons again! Voting and Bagging"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
" FutureWarning)\n",
"/usr/local/lib/python3.7/site-packages/sklearn/ensemble/forest.py:248: FutureWarning: The default value of n_estimators will change from 10 in version 0.20 to 100 in 0.22.\n",
" \"10 in version 0.20 to 100 in 0.22.\", FutureWarning)\n",
"/usr/local/lib/python3.7/site-packages/sklearn/svm/base.py:196: FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning.\n",
" \"avoid this warning.\", FutureWarning)\n"
]
},
{
"data": {
"text/plain": [
"VotingClassifier(estimators=[('lr', LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
" intercept_scaling=1, max_iter=100, multi_class='warn',\n",
" n_jobs=None, penalty='l2', random_state=42, solver='warn',\n",
" tol=0.0001, verbose=0, warm_start=False)), ('rf', RandomFore...rbf', max_iter=-1, probability=False, random_state=42,\n",
" shrinking=True, tol=0.001, verbose=False))],\n",
" flatten_transform=None, n_jobs=None, voting='hard', weights=None)"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.model_selection import train_test_split\n",
"from sklearn.datasets import make_moons\n",
"\n",
"X, y = make_moons(n_samples=500, noise=0.30, random_state=42)\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)\n",
"from sklearn.ensemble import RandomForestClassifier\n",
"from sklearn.ensemble import VotingClassifier\n",
"from sklearn.linear_model import LogisticRegression\n",
"from sklearn.svm import SVC\n",
"\n",
"log_clf = LogisticRegression(random_state=42)\n",
"rnd_clf = RandomForestClassifier(random_state=42)\n",
"svm_clf = SVC(random_state=42)\n",
"\n",
"voting_clf = VotingClassifier(\n",
" estimators=[('lr', log_clf), ('rf', rnd_clf), ('svc', svm_clf)],\n",
" voting='hard')\n",
"voting_clf.fit(X_train, y_train)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"LogisticRegression 0.864\n",
"RandomForestClassifier 0.872\n",
"SVC 0.888\n",
"VotingClassifier 0.896\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
" FutureWarning)\n",
"/usr/local/lib/python3.7/site-packages/sklearn/ensemble/forest.py:248: FutureWarning: The default value of n_estimators will change from 10 in version 0.20 to 100 in 0.22.\n",
" \"10 in version 0.20 to 100 in 0.22.\", FutureWarning)\n",
"/usr/local/lib/python3.7/site-packages/sklearn/svm/base.py:196: FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning.\n",
" \"avoid this warning.\", FutureWarning)\n",
"/usr/local/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
" FutureWarning)\n",
"/usr/local/lib/python3.7/site-packages/sklearn/svm/base.py:196: FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning.\n",
" \"avoid this warning.\", FutureWarning)\n"
]
}
],
"source": [
"from sklearn.metrics import accuracy_score\n",
"\n",
"for clf in (log_clf, rnd_clf, svm_clf, voting_clf):\n",
" clf.fit(X_train, y_train)\n",
" y_pred = clf.predict(X_test)\n",
" print(clf.__class__.__name__, accuracy_score(y_test, y_pred))"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
" FutureWarning)\n",
"/usr/local/lib/python3.7/site-packages/sklearn/ensemble/forest.py:248: FutureWarning: The default value of n_estimators will change from 10 in version 0.20 to 100 in 0.22.\n",
" \"10 in version 0.20 to 100 in 0.22.\", FutureWarning)\n",
"/usr/local/lib/python3.7/site-packages/sklearn/svm/base.py:196: FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning.\n",
" \"avoid this warning.\", FutureWarning)\n"
]
},
{
"data": {
"text/plain": [
"VotingClassifier(estimators=[('lr', LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
" intercept_scaling=1, max_iter=100, multi_class='warn',\n",
" n_jobs=None, penalty='l2', random_state=42, solver='warn',\n",
" tol=0.0001, verbose=0, warm_start=False)), ('rf', RandomFore...'rbf', max_iter=-1, probability=True, random_state=42,\n",
" shrinking=True, tol=0.001, verbose=False))],\n",
" flatten_transform=None, n_jobs=None, voting='soft', weights=None)"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"log_clf = LogisticRegression(random_state=42)\n",
"rnd_clf = RandomForestClassifier(random_state=42)\n",
"svm_clf = SVC(probability=True, random_state=42)\n",
"\n",
"voting_clf = VotingClassifier(\n",
" estimators=[('lr', log_clf), ('rf', rnd_clf), ('svc', svm_clf)],\n",
" voting='soft')\n",
"voting_clf.fit(X_train, y_train)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"LogisticRegression 0.864\n",
"RandomForestClassifier 0.872\n",
"SVC 0.888\n",
"VotingClassifier 0.912\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
" FutureWarning)\n",
"/usr/local/lib/python3.7/site-packages/sklearn/ensemble/forest.py:248: FutureWarning: The default value of n_estimators will change from 10 in version 0.20 to 100 in 0.22.\n",
" \"10 in version 0.20 to 100 in 0.22.\", FutureWarning)\n",
"/usr/local/lib/python3.7/site-packages/sklearn/svm/base.py:196: FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning.\n",
" \"avoid this warning.\", FutureWarning)\n",
"/usr/local/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
" FutureWarning)\n",
"/usr/local/lib/python3.7/site-packages/sklearn/svm/base.py:196: FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning.\n",
" \"avoid this warning.\", FutureWarning)\n"
]
}
],
"source": [
"from sklearn.metrics import accuracy_score\n",
"\n",
"for clf in (log_clf, rnd_clf, svm_clf, voting_clf):\n",
" clf.fit(X_train, y_train)\n",
" y_pred = clf.predict(X_test)\n",
" print(clf.__class__.__name__, accuracy_score(y_test, y_pred))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Bagging Examples"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.ensemble import BaggingClassifier\n",
"from sklearn.tree import DecisionTreeClassifier\n",
"\n",
"bag_clf = BaggingClassifier(\n",
" DecisionTreeClassifier(random_state=42), n_estimators=500,\n",
" max_samples=100, bootstrap=True, n_jobs=-1, random_state=42)\n",
"bag_clf.fit(X_train, y_train)\n",
"y_pred = bag_clf.predict(X_test)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.904\n"
]
}
],
"source": [
"from sklearn.metrics import accuracy_score\n",
"print(accuracy_score(y_test, y_pred))"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.856\n"
]
}
],
"source": [
"tree_clf = DecisionTreeClassifier(random_state=42)\n",
"tree_clf.fit(X_train, y_train)\n",
"y_pred_tree = tree_clf.predict(X_test)\n",
"print(accuracy_score(y_test, y_pred_tree))"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 792x288 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from matplotlib.colors import ListedColormap\n",
"\n",
"def plot_decision_boundary(clf, X, y, axes=[-1.5, 2.5, -1, 1.5], alpha=0.5, contour=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 contour:\n",
" custom_cmap2 = ListedColormap(['#7d7d58','#4c4c7f','#507d50'])\n",
" plt.contour(x1, x2, y_pred, cmap=custom_cmap2, alpha=0.8)\n",
" plt.plot(X[:, 0][y==0], X[:, 1][y==0], \"yo\", alpha=alpha)\n",
" plt.plot(X[:, 0][y==1], X[:, 1][y==1], \"bs\", alpha=alpha)\n",
" plt.axis(axes)\n",
" plt.xlabel(r\"$x_1$\", fontsize=18)\n",
" plt.ylabel(r\"$x_2$\", fontsize=18, rotation=0)\n",
"plt.figure(figsize=(11,4))\n",
"plt.subplot(121)\n",
"plot_decision_boundary(tree_clf, X, y)\n",
"plt.title(\"Decision Tree\", fontsize=14)\n",
"plt.subplot(122)\n",
"plot_decision_boundary(bag_clf, X, y)\n",
"plt.title(\"Decision Trees with Bagging\", fontsize=14)\n",
"save_fig(\"baggingtree\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Making your own Bootstrap: Changing the Level of the Decision Tree\n",
"\n",
"Let us bring up our good old boostrap example from the linear regression lectures. We change the linerar regression algorithm with\n",
"a decision tree wth different depths and perform a bootstrap aggregate (in this case we perform as many bootstraps as data points $n$)."
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"ename": "SyntaxError",
"evalue": "invalid syntax (<ipython-input-27-c21b87fe7de5>, line 51)",
"output_type": "error",
"traceback": [
"\u001b[0;36m File \u001b[0;32m\"<ipython-input-27-c21b87fe7de5>\"\u001b[0;36m, line \u001b[0;32m51\u001b[0m\n\u001b[0;31m plt.xlim(1,maxdepth)\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n"
]
}
],
"source": [
"\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.pipeline import make_pipeline\n",
"from sklearn.utils import resample\n",
"from sklearn.tree import DecisionTreeRegressor\n",
"\n",
"n = 100\n",
"n_boostraps = 100\n",
"maxdepth = 8\n",
"\n",
"# Make data set.\n",
"x = np.linspace(-3, 3, n).reshape(-1, 1)\n",
"y = np.exp(-x**2) + 1.5 * np.exp(-(x-2)**2)+ np.random.normal(0, 0.1, x.shape)\n",
"error = np.zeros(maxdepth)\n",
"bias = np.zeros(maxdepth)\n",
"variance = np.zeros(maxdepth)\n",
"polydegree = np.zeros(maxdepth)\n",
"X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.2)\n",
"\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",
"\n",
"# we produce a simple tree first as benchmark\n",
"simpletree = DecisionTreeRegressor(max_depth=3) \n",
"simpletree.fit(X_train_scaled, y_train)\n",
"simpleprediction = simpletree.predict(X_test_scaled)\n",
"for degree in range(1,maxdepth):\n",
" model = DecisionTreeRegressor(max_depth=degree) \n",
" y_pred = np.empty((y_test.shape[0], n_boostraps))\n",
" for i in range(n_boostraps):\n",
" x_, y_ = resample(X_train_scaled, y_train)\n",
" model.fit(x_, y_)\n",
" y_pred[:, i] = model.predict(X_test_scaled)#.ravel()\n",
"\n",
" polydegree[degree] = degree\n",
" error[degree] = np.mean( np.mean((y_test - y_pred)**2, axis=1, keepdims=True) )\n",
" bias[degree] = np.mean( (y_test - np.mean(y_pred, axis=1, keepdims=True))**2 )\n",
" variance[degree] = np.mean( np.var(y_pred, axis=1, keepdims=True) )\n",
" print('Polynomial degree:', degree)\n",
" print('Error:', error[degree])\n",
" print('Bias^2:', bias[degree])\n",
" print('Var:', variance[degree])\n",
" print('{} >= {} + {} = {}'.format(error[degree], bias[degree], variance[degree], bias[degree]+variance[degree]))\n",
"\n",
"mse_simpletree = np.mean( np.mean((y_test - simpleprediction)**2)\n",
"plt.xlim(1,maxdepth)\n",
"plt.plot(polydegree, error, label='MSE simple tree')\n",
"plt.plot(polydegree, mse_simpletree, label='MSE for Bootstrap')\n",
"plt.plot(polydegree, bias, label='bias')\n",
"plt.plot(polydegree, variance, label='Variance')\n",
"plt.legend()\n",
"save_fig(\"baggingboot\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Random forests\n",
"\n",
"Random forests provide an improvement over bagged trees by way of a\n",
"small tweak that decorrelates the trees. \n",
"\n",
"As in bagging, we build a\n",
"number of decision trees on bootstrapped training samples. But when\n",
"building these decision trees, each time a split in a tree is\n",
"considered, a random sample of $m$ predictors is chosen as split\n",
"candidates from the full set of $p$ predictors. The split is allowed to\n",
"use only one of those $m$ predictors. \n",
"\n",
"A fresh sample of $m$ predictors is\n",
"taken at each split, and typically we choose"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"m\\approx \\sqrt{p}.\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In building a random forest, at\n",
"each split in the tree, the algorithm is not even allowed to consider\n",
"a majority of the available predictors. \n",
"\n",
"The reason for this is rather clever. Suppose that there is one very\n",
"strong predictor in the data set, along with a number of other\n",
"moderately strong predictors. Then in the collection of bagged\n",
"variable importance random forest trees, most or all of the trees will\n",
"use this strong predictor in the top split. Consequently, all of the\n",
"bagged trees will look quite similar to each other. Hence the\n",
"predictions from the bagged trees will be highly correlated.\n",
"Unfortunately, averaging many highly correlated quantities does not\n",
"lead to as large of a reduction in variance as averaging many\n",
"uncorrelated quantities. In particular, this means that bagging will\n",
"not lead to a substantial reduction in variance over a single tree in\n",
"this setting.\n",
"\n",
"\n",
"## Random Forest Algorithm\n",
"The algorithm described here can be applied to both classification and regression problems.\n",
"\n",
"We will grow of forest of say $B$ trees.\n",
"1. For $b=1:B$\n",
"\n",
" * Draw a bootstrap sample of from the training data organized in our $\\boldsymbol{X}$ matrix.\n",
"\n",
" * We grow then a random forest tree $T_b$ based on the bootstrapped data by repeating the steps outlined till we reach the maximum node size is reached\n",
"\n",
"1. we select $m \\le p$ variables at random from the $p$ predictors/features\n",
"\n",
"2. pick the best split point among the $m$ features using either the CART algorithm or the ID3 for classification and create a new node\n",
"\n",
"3. split the node into daughter nodes\n",
"\n",
"\n",
"\n",
"4. Output then the ensemble of trees $\\{T_b\\}_1^{B}$ and make predictions for either a regression type of problem or a classification type of problem. \n",
"\n",
"## Random Forests Compared with other Methods on the Cancer Data"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(426, 30)\n",
"(143, 30)\n",
"Test set accuracy with Logistic Regression: 0.95\n",
"Test set accuracy with SVM: 0.63\n",
"Test set accuracy with Decision Trees: 0.87\n",
"Test set accuracy Logistic Regression with scaled data: 0.96\n",
"Test set accuracy SVM with scaled data: 0.96\n",
"Test set accuracy with Decision Trees and scaled data: 0.90\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:757: ConvergenceWarning: lbfgs failed to converge. Increase the number of iterations.\n",
" \"of iterations.\", ConvergenceWarning)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0.93333333 0.8 0.93333333 1. 1. 0.92857143\n",
" 1. 0.92857143 0.92857143 1. ]\n",
"Test set accuracy with Random Forests and scaled data: 0.98\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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I0dYu3ZthoKCQ4YMYfbs2YC1qvHIkSNp1KgR77//PqGhoRne38DAQIBsy42nt3r1atu3dci+FPn1peDj4uJ4+umnCQ0NpWHDhrby4Nn9fm9FzZo1CQoKwsUl+4/X06dPc/nyZZo1a4Yxht69e9vO7pYsWWJ73/v06WNbb4yhdevWLFu27JZjvGl5zTCOejjbGUViYqKMHz9ePDw8BJAyZcrIjBkzHPqN9mY4+owiPDxcXF1dZefOnZKamiqNGjWSfv36icVikcWLF0vnzp1FROSLL76QwYMHi4hIt27dZPLkySJi/QZ76dIlCQ8PF2OMbNy4UUREIiMjpVq1avLPP/9IcnKy3HfffbJo0aJM+4+Li5MrV66IiMjBgwelcePGIiKycOFC6d27t4hYf8dVq1aV+Ph4mTlzprz99tsiYi1j0bhxYzl69KisWbNGPD09bd/mRUTOnz8vItZv/vXr15eoqCiJjIyUGjVqyPnz5yUpKUnuuece23E98cQT8scff4iIyPHjx8XX1zdTvOnPKC5cuCCNGjWS06dPi4hIw4YNJSwsLEP7sLAwadiwoURHR0uZMmVy9TsJDQ2VhQsXioi1BElcXFyG/YqIDB48WL744gsREalRo4a89957tueCg4Nt78O7774rb7/9tiQlJUnz5s3ln3/+ERGRuXPnSr9+/TLt+4033pCpU6falqOiomw/jxkzxvZcnz59pGPHjrYzmNGjR8tXX30lIiIXL16UunXrSmxsbLa/3+vdc889EhwcnOmxYsWKbN+nrEq9XLVlyxZp27atbXndunW296906dK29RaLJcPy119/LUOGDMl2n1fl9xmFdmbb2cmTJxk7diyJiYn07NmTDz74gEqVKjk6LKfi7e1t+9ZZv3592rZtizGGwMBAjh07lql9VmW4L168SI0aNWzzDGzZsoXWrVtToUIFAHr27Mm6det45JFHMmwrOTmZIUOGEBYWhqurq61f6cEHH+SFF14gMTGR5cuXc++991KsWDF+++03du7cabs2HR0dzaFDhyhatCihoaG2b/OQdRnuM2fO0KpVK8qVKwdYy5lf3WduypYD/PHHHwQHB3Po0CGGDRvGXXfdlYd3PWsxMTFERkby6KOPAuS6Mu7V0utgvSlv3rx5jBo1innz5jFv3rwcy42nd/r06QylKXIqRZ6+FPxvv/3G0qVLbVO5JiQkcOLECe6+++4sf7/Xu37yqNvFGJOhivHVUua3myYKO7h48SJlypTBGEPt2rWZMmUKderUoW3bto4O7dadG5K7dr0DrI984O7ubvvZxcXFtuzi4nJTM4qlLw2enUWLFvHf//4XgM8++4xly5ZRqVIlduzYgcVisX0wenh40Lp1a3799VfmzZtHjx49AOsZ+ocffphp7oS1a9dm2H9OZbizk9uy5S1btmTZsmWEh4fTrFkzunXrRoMGDfD3989Udn3btm3Ur1+fUqVKUaJECY4ePUqtWrVu+D5d72qJ8atyKsvevXt3Hn/8cbp06YIxhrp167Jr165sy42nV6xYsQzbzqkUefp9igg//PBDpsq8b731Vpa/3+u1bNmSmJiYTOsnTpzI/fff/H3DVapUISIiwracvmR5pUqVOH36NJUrV+b06dNUrFjR1s5Rpcy1jyIfWaAGrQwAABd+SURBVCwWPv/8c+rUqcPXX39tW//MM88UjCThJG5UhhsgNDSU33//naioKFJTU/nuu+9o1aoVjz76qK1UdZMmTYiOjqZy5cq4uLjw1VdfkZp6bQre7t2788UXX/DHH3/QoUMHANq3b8/06dNJTk4GrPfIxMXFZdp/dmW4Q0JC+P3337l48SIpKSm2aVkhd2XL0/P29mbUqFG2vrBXXnmFd955x3YWduzYMf73v//ZZgEcPXo0g/+/vTOPjqLO9vjnGsGwo+DCABKBSNZOIosERhCQgLKMCMMmghwCBAYzgrI4wsgQj0Z8gCDhIT4YgggovCfwxkEEjYojAaIswx5GUfCJMCyRzShy3x9VqXRCd9KJpLP9Puf0OV3Vv6rf7dvVdeu3fe8f/sAPP/wAWClV888uqlWrFo0aNXL6zbOzs7l06RJNmjRh//79ZGdnc+7cOT744AOvdjVr1oyAgACSkpKclkZBcuPuhIaGcuTIEWfbFylysH6XV1991ZlZtHPnToACf193tmzZ4lHOvDhBAixdrNq1a5Oeno6qsmzZMieNbO/evUlNTQUgNTU1T3rZ0pIyL3eBov4PNWDZXvixbOWm3bdvH/fffz8jRozgzJkzbNjgMbWGwQ/MnTuXtLQ0IiMjadmyZZ7umhwaNGhAcnIynTp1IioqipYtW+b5Q+YwduxYUlNTiYqK4uDBg3meUuPi4vj444954IEHqFq1KgDx8fGEhYVxzz33EBERwejRoz22erp3786VK1cIDQ1lypQpTpdYw4YN+dOf/kSbNm1o3749QUFBTga7efPmkZGRgcvlIiwszGNujfwkJCTwySefcPToUaKjo3nppZfo1asXISEh9OrVi5kzZxIdHQ3AmDFj6NSpE61btyYiIoL77rvP44DsG2+8wbx583C5XLRr144TJ07QuHFj+vfvT0REBP379ycmJqZAuwYMGMDy5cvp378/AFWrVmXNmjVMnjyZqKgooqOjPQ4sP/jgg3mSVSUlJXHvvffSvn37AnXQpk2bxs8//4zL5SI8PJxp06YBBf++xWXHjh00atSI1atXM3r0aMLDw53PcnwNsGDBAuLj42nevDnNmjXjwQcfBKwc5ps2bSI4OJjNmzczZcoU55i0tDR69Ojxq20sMsUd3CitV8sbG1uDo6cvFTqg4w8uXryoU6ZM0RtvvFEBve222/TNN9/MkxOhPFMW8lFUNs6fP6+q1rTOnj17OgPHBouHH35YDx8+XNpm+J0TJ05o586dfSprpseWIQ4fPkx4eDjJycn88ssvJCQkcPDgQQYPHlwhU5Ia/MP06dOJjo4mIiKCu+6665oB9spOcnKyx6mzFZ1vvvmGWbNmlUrdZjD7V9CkSRMCAwOJiopi4cKFTveBwfBryJmZY/BMixYtCk0XWxFp3bp1qdVd7loUp2pdgMfCoGqA3+u+cuUK8+fP5/Tp04A1G+e9994jIyPDBAmDwVBhKXeB4ptbz8LszlCzql/r3b59O23atOGJJ57Is4q3SZMmFTphicFgMJS7QOFvsrKyGDduHG3btmXnzp3ceeedHmfHGAwGQ0XFBAovqCqrVq0iJCSElJQUAgICmDRpEvv376dXr16lbZ7BYDD4DRMovLB7924GDRrEiRMnaNeuHV988QUvvfTSdZlnbTD4i4CAAGcGVa9evTh37pzz2b59++jcuTMtWrQgODiYpKQkZ0EawIYNG2jVqhVhYWHExMQ4C/PKEjt37mTEiBGlbYZXTp8+TadOnahZs6Yj7ugJb9LiqkpiYiLNmzfH5XLxxRdfAJZAZM4iT39gAoUb7qsyo6OjGT9+PK+//jpbtmxxtIYqOyJ/yfPyxqJFn+cpN2rU//rRyqLhbTVuRai/WrVq7Nq1i71793LLLbeQkpICwOXLl+nduzdTpkzh0KFD7N69m88++4wFCxYAlobSuHHjWL58Ofv37ycjI4PmzZtfV9uKIr/ijRdeeIHExES/1lkUAgMDSUpKKnQmW3JyMl26dCEzM5MuXbo4uVU2bNhAZmYmmZmZLFq0iDFjxgBw66230qBBg0IVhK8XJlDYpKWlERERkWfV5+zZs4mPjy9QLthQsvgqM759+3ZiY2OJiYmhXbt2HDp0CLBuwk8//TQRERG4XC5HAsNd+nr16tXs2rWLtm3b4nK56NOnj/NElx9P0uALFy5k4sSJThl3yfPly5fTpk0boqOjGT16tBMUatasyVNPPUVUVBRbt25lxowZzoroUaNGOU/2O3bswOVyER0dzcSJEx35Bm9y5gURGxvrSI6vWLGC9u3bExcXB0D16tWZP3++c4OaOXMmzz77rLPaOSAgwLlJuXPhwgWGDx9OZGQkLpfLkRxxFypcs2YNjz/+OHCt/HdQUFCeVk5wcDDff/+9T5Lq58+fZ8+ePY52lbdrYOnSpfTu3ZvOnTs7Ujovv/yy47vnnnvOOac36ffiUqNGDX77298Wqs/lTVp83bp1DB06FBGhbdu2nDt3zllD8vDDDxcoW3JdKe5KvdJ6hVa/XbXzKtVzP/q0QrEwvv/+ex06dKgCCjiy1QaL/Cs8YXqelzdeey0jT7mRI9cXq35fZcazsrKcBDWbNm3SRx55RFVVFyxYoH379nU+y5H2zi99HRkZqR999JGqqk6bNk3/+Mc/erTHkzT4yZMntVmzZk6Z7t2765YtW3T//v3as2dP/emnn1RVdcyYMZqamqqqqoC+9dZb15xXVXXIkCG6fr3lr/DwcP3ss89UVXXy5MkaHh6uqupVzjw/NWrUUFVLbr1fv366YcMGVVUdP368vvLKK9eUr1u3rmZlZXmUJPfEpEmT8vjqzJkzeepVVV29erUOGzZMVa+V/05MTNQlS5aoqmp6erojve2LpPqHH37o/M6q3q+Bv/71r9qwYUPHxxs3btSRI0c6Cax69OihH3/8sap6/n3z8+STT3qUHM9JNuQJdxl8T3iTFu/Ro4fjB1XVzp07644dO1RV9fjx4xoREeHxfJVeZrz6T1Vhzyn45WrhhQvg6tWrLF68mMmTJ3P27Fluuukmpk6dmufJ0FA28EVmPCsri2HDhpGZmYmIOKJ8mzdvJiEhwZnCnCPfDbnS11lZWZw7d46OHTsC1hPd73//e4+2eJIGb9u2LU2bNiU9PZ3g4GAOHjxI+/btSUlJ4fPPP3cWSl2+fNlRAg0ICKBv377OedPS0pg5cyaXLl3izJkzhIeHO4qlsbGxAAwePNhJWuNNztxdxjynzpzkRaGhoY6M9/Vi8+bNrFq1ytm++eabCz3GXf57wIABzJgxg+HDh7Nq1SrnN/FFUv27775zZOLB+zUA0LVrV+e3f//993n//fcdPaoLFy6QmZlJhw4dPP6+9erVy2P/nDlzfHNOMckvLe4Nf0qOl7tAcT346quvGDJkiCM6FhcXR0pKynXvg62IqD5XeCFg1KiWjBrV8rrU6YvM+LRp0+jUqRPvvPMOR48e5f777y/0vIVNTDh27Jgzwy0hIYGQkBCv0uADBw7k7bffJiQkhD59+iAiqCrDhg3jxRdfvObcgYGBzs3yxx9/ZOzYsWRkZNC4cWOmT59eqOS4qmc58/zkjFFcunSJbt26kZKSQmJiImFhYXm6WcHKwlizZk1q165NeHj4NZLkRcH9RleQ5HhsbCxHjhzh1KlTrF27lqlTpwK+Sarnlxwv6BrILzn+zDPPMHr06Dzn81X6ffz48aSlpV2zf+DAgXkE/IqCN2nxhg0bcuzYMaecuxy5PyXHK2Xne+3atTl8+DB33HEHq1at4r333jNBopyTlZXl/IFyUnCC9ST52muvOQHlzJkz1xxbp04dbr75Zic5zRtvvEHHjh1p3LixIyedkJDgVRocoE+fPqxbt46VK1c6uSm6dOnCmjVrOHnypFP3119/fU39OTej+vXrc+HCBaeVULduXWrVqsW2bdsA8jy5+ypnnkP16tWZN28es2bN4sqVKzz66KN8+umnbN68GbBaHomJiUyaNAmAiRMn8sILLziJfK5evepRrbZr167OADngjO3cfvvtHDhwgKtXrzpP6J4QEfr06cOECRMIDQ11nt59kVTPLznu7RrIT7du3ViyZAkXLlwA4Ntvv+XkyZMF/r7uzJkzx6PkeHGDBHiXFu/duzfLli1DVUlPT6dOnTpOQid/So6Xu0BxoOEJ2Nwfat9UeGE3Nm7cSHZ2NgD16tVj/fr1HDx4kAEDBhgBvwrApEmTeOaZZ4iJickzsyU+Pp4777wTl8tFVFQUK1as8Hh8amoqEydOxOVysWvXLv785z9fU8abNDhYXS6hoaF8/fXXTk7osLAwnn/+eeLi4nC5XHTt2tWjmF3dunUZOXIkERERdOvWLY+mz+LFixk5ciTR0dFcvHjRkRz3Vc7cnZiYGFwuFytXrqRatWqsW7eO559/nhYtWhAZGUnr1q2dQXiXy8Urr7zCoEGDCA0NJSIigi+//PKac06dOpWzZ88SERFBVFSU86SdnJxMz549adeuncdMde7kSI67Z8HzRVI9JCSErKwsJ6GQt2sgP3FxcQwePJjY2FgiIyPp168f58+fL/D3/TUEBQUxYcIEli5dSqNGjZwutfj4eDIyMgDv0uIPPfQQTZs2pXnz5owcOdKZlQb+lRwXdZs3XR6QFqJ6yHebjx07RmJiImvXriUpKclp2hp848CBA3lSTxr8i3u/fI5q6ty5c0vZqrLDnDlzqFWrFvHx8aVtit/p0KED69at8zgu5Ol/KyKfq2qr4tRV7loUvnLlyhVmz55NaGgoa9eupWbNmnkGMg2G8sC7777rLJjbsmWLedDJx5gxY/KMYVUWTp06xYQJE3yaPHA9qJAtivT0dBISEti9ezcAffv2Ze7cuU7/pcF3TIvCYCh/XO8WRYWb9bRt2zbatWuHqhIUFMT8+fNLJ3VgBUJVzTiOwVBOKImH/woXKNq0aUO3bt2IiYlh6tSpVK9evbRNKtcEBgZy+vRp6tWrZ4KFwVDGUVVOnz5d6ErwolLuup5qBFXVi+uOQ3h9uPEGMjMzGT9+PLNnz+buu+8GrKl8Rnbj+vDzzz9z/PjxQuf1GwyGskFgYCCNGjWiSpUqefZXqq6n0G/vgAfeJnvPEJIXzeXFF18kOzubwMBAZ/65CRLXjypVqlyz2tdgMFQuSvSOKiLdReSQiBwRkWtWo4jITSLylv35NhEJ8uW8H/x0CNd9bZg+fTrZ2dkMHz7c4zxrg8FgMPx6SqzrSUQCgMNAV+A4sAMYpKr73cqMBVyqmiAiA4E+qjrA4wlt6t1QQ8/oJcBamblw4UI6dOhQIt/BYDAYKgpldR1FG+CIqn6pqj8Bq4D8OUR/B6Ta79cAXaSQEdOzeonAG6rwwp9nsGvXLhMkDAaDoYQpyRZFP6C7qsbb248B96rqOLcye+0yx+3tf9ll/p3vXKOAUfZmBLC3RIwuf9QH/l1oqcqB8UUuxhe5GF/k0kJVaxXnwHIxmK2qi4BFACKSUdzmU0XD+CIX44tcjC9yMb7IRUQyintsSXY9fQs0dttuZO/zWEZEbgTqAKdL0CaDwWAwFJGSDBQ7gGARuUtEqgIDgfX5yqwHhtnv+wEfanlb2GEwGAwVnBLrelLVKyIyDtgIBABLVHWfiMzASsm3HlgMvCEiR4AzWMGkMH59ItuKg/FFLsYXuRhf5GJ8kUuxfVHuVmYbDAaDwb+YJcwGg8FgKBATKAwGg8FQIGU2UJSU/Ed5xAdfTBCR/SKyR0Q+EJEmpWGnPyjMF27l+oqIikiFnRrpiy9EpL99bewTEc95YCsAPvxH7hSRNBHZaf9PHioNO0saEVkiIiftNWqePhcRmWf7aY+I3OPTiVW1zL2wBr//BTQFqgK7gbB8ZcYCC+33A4G3StvuUvRFJ6C6/X5MZfaFXa4W8AmQDrQqbbtL8boIBnYCN9vbt5W23aXoi0XAGPt9GHC0tO0uIV90AO4B9nr5/CFgAyBAW2CbL+ctqy2KEpH/KKcU6gtVTVO1BbCsm2MjP9voL3y5LgCSgJeAiqyN7osvRgIpqnoWQFVP+tlGf+GLLxSobb+vA/yfH+3zG6r6CdYMUm/8DlimFulAXRFpUNh5y2qgaAgcc9s+bu/zWEZVrwBZQD2/WOdffPGFOyOwnhgqIoX6wm5KN1bVd/1pWCngy3VxN3C3iPxDRNJFpLvfrPMvvvhiOjBERI4Dfwee8I9pZY6i3k+AciLhYfANERkCtAI6lrYtpYGI3ADMBh4vZVPKCjdidT/dj9XK/EREIlX1XKlaVToMApaq6iwRicVavxWhqldL27DyQFltURj5j1x88QUi8gDwLNBbVbP9ZJu/KcwXtbBEIz8SkaNYfbDrK+iAti/XxXFgvar+rKpfYcn+B/vJPn/iiy9GAG8DqOpWIBBLMLCy4dP9JD9lNVAY+Y9cCvWFiMQAr2EFiYraDw2F+EJVs1S1vqoGqWoQ1nhNb1UtthhaGcaX/8harNYEIlIfqyvqS38a6Sd88cU3QBcAEQnFChSn/Gpl2WA9MNSe/dQWyFLV7wo7qEx2PWnJyX+UO3z0xctATWC1PZ7/jar2LjWjSwgffVEp8NEXG4E4EdkP/AJMVNUK1+r20RdPAa+LyHisge3HK+KDpYisxHo4qG+PxzwHVAFQ1YVY4zMPAUeAS8Bwn85bAX1lMBgMhutIWe16MhgMBkMZwQQKg8FgMBSICRQGg8FgKBATKAwGg8FQICZQGAwGg6FATKAwlDlE5BcR2eX2CiqgbJA3pcwi1vmRrT6625a8aFGMcySIyFD7/eMi8hu3z/5LRMKus507RCTah2OeFJHqv7ZuQ+XFBApDWeSyqka7vY76qd5HVTUKS2zy5aIerKoLVXWZvfk48Bu3z+JVdf91sTLXzgX4ZueTgAkUhmJjAoWhXGC3HLaIyBf2q52HMuEist1uhewRkWB7/xC3/a+JSEAh1X0CNLeP7WLnMPinrfV/k70/WXJzgPyHvW+6iDwtIv2wNLfetOusZrcEWtmtDufmbrc85hfTzq24CbqJyH+KSIZYuSf+Yu9LxApYaSKSZu+LE5Gtth9Xi0jNQuoxVHJMoDCURaq5dTu9Y+87CXRV1XuAAcA8D8clAHNVNRrrRn3clmsYALS39/8CPFpI/b2Af4pIILAUGKCqkVhKBmNEpB7QBwhXVRfwvPvBqroGyMB68o9W1ctuH/+3fWwOA4BVxbSzO5ZMRw7PqmorwAV0FBGXqs7DktTupKqdbCmPqcADti8zgAmF1GOo5JRJCQ9DpeeyfbN0pwow3+6T/wVLtyg/W4FnRaQR8D+qmikiXYCWwA5b3qQaVtDxxJsichk4iiVD3QL4SlUP25+nAn8A5mPlulgsIn8D/ubrF1PVUyLypa2zkwmEAP+wz1sUO6tiyba4+6m/iIzC+l83wErQsyffsW3t/f+w66mK5TeDwSsmUBjKC+OB74EorJbwNUmJVHWFiGwDegB/F5HRWJm8UlX1GR/qeNRdQFBEbvFUyNYWaoMlMtcPGAd0LsJ3WQX0Bw4C76iqinXX9tlO4HOs8YlXgUdE5C7gaaC1qp4VkaVYwnf5EWCTqg4qgr2GSo7pejKUF+oA39n5Ax7DEn/Lg4g0Bb60u1vWYXXBfAD0E5Hb7DK3iO85xQ8BQSLS3N5+DPjY7tOvo6p/xwpgUR6OPY8le+6Jd7AyjQ3CChoU1U5b0G4a0FZEQrCyt10EskTkduBBL7akA+1zvpOI1BART60zg8HBBApDeWEBMExEdmN111z0UKY/sFdEdmHlpVhmzzSaCrwvInuATVjdMoWiqj9iqWuuFpF/AleBhVg33b/Z5/sUz338S4GFOYPZ+c57FjgANFHV7fa+Ittpj33MwlKF3Y2VH/sgsAKrOyuHRcB7IpKmqqewZmSttOvZiuVPg8ErRj3WYDAYDAViWhQGg8FgKBATKAwGg8FQICZQGAwGg6FATKAwGAwGQ4GYQGEwGAyGAjGBwmAwGAwFYgKFwWAwGArk/wE6nvb8/HAplAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/lib/python3.7/site-packages/matplotlib/cbook/__init__.py:424: MatplotlibDeprecationWarning: \n",
"Passing one of 'on', 'true', 'off', 'false' as a boolean is deprecated; use an actual boolean (True/False) instead.\n",
" warn_deprecated(\"2.2\", \"Passing one of 'on', 'true', 'off', 'false' as a \"\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"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)))\n",
"\n",
"\n",
"from sklearn.ensemble import RandomForestClassifier\n",
"from sklearn.preprocessing import LabelEncoder\n",
"from sklearn.model_selection import cross_validate\n",
"# Data set not specificied\n",
"#Instantiate the model with 500 trees and entropy as splitting criteria\n",
"Random_Forest_model = RandomForestClassifier(n_estimators=500,criterion=\"entropy\")\n",
"Random_Forest_model.fit(X_train_scaled, y_train)\n",
"#Cross validation\n",
"accuracy = cross_validate(Random_Forest_model,X_test_scaled,y_test,cv=10)['test_score']\n",
"print(accuracy)\n",
"print(\"Test set accuracy with Random Forests and scaled data: {:.2f}\".format(Random_Forest_model.score(X_test_scaled,y_test)))\n",
"\n",
"\n",
"import scikitplot as skplt\n",
"y_pred = Random_Forest_model.predict(X_test_scaled)\n",
"skplt.metrics.plot_confusion_matrix(y_test, y_pred, normalize=True)\n",
"plt.show()\n",
"y_probas = Random_Forest_model.predict_proba(X_test_scaled)\n",
"skplt.metrics.plot_roc(y_test, y_probas)\n",
"plt.show()\n",
"skplt.metrics.plot_cumulative_gain(y_test, y_probas)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Compare Bagging on Trees with Random Forests"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"bag_clf = BaggingClassifier(\n",
" DecisionTreeClassifier(splitter=\"random\", max_leaf_nodes=16, random_state=42),\n",
" n_estimators=500, max_samples=1.0, bootstrap=True, n_jobs=-1, random_state=42)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"bag_clf.fit(X_train, y_train)\n",
"y_pred = bag_clf.predict(X_test)\n",
"from sklearn.ensemble import RandomForestClassifier\n",
"rnd_clf = RandomForestClassifier(n_estimators=500, max_leaf_nodes=16, n_jobs=-1, random_state=42)\n",
"rnd_clf.fit(X_train, y_train)\n",
"y_pred_rf = rnd_clf.predict(X_test)\n",
"np.sum(y_pred == y_pred_rf) / len(y_pred)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Boosting, a Bird's Eye View\n",
"\n",
"The basic idea is to combine weak classifiers in order to create a good\n",
"classifier. With a weak classifier we often intend a classifier which\n",
"produces results which are only slightly better than we would get by\n",
"random guesses.\n",
"\n",
"This is done by applying in an iterative way a weak (or a standard\n",
"classifier like decision trees) to modify the data. In each iteration\n",
"we emphasize those observations which are misclassified by weighting\n",
"them with a factor.\n",
"\n",
"\n",
"## What is boosting? Additive Modelling/Iterative Fitting\n",
"\n",
"Boosting is a way of fitting an additive expansion in a set of\n",
"elementary basis functions like for example some simple polynomials.\n",
"Assume for example that we have a function"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"f_M(x) = \\sum_{i=1}^M \\beta_m b(x;\\gamma_m),\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"where $\\beta_m$ are the expansion parameters to be determined in a\n",
"minimization process and $b(x;\\gamma_m)$ are some simple functions of\n",
"the multivariable parameter $x$ which is characterized by the\n",
"parameters $\\gamma_m$.\n",
"\n",
"As an example, consider the Sigmoid function we used in logistic\n",
"regression. In that case, we can translate the function\n",
"$b(x;\\gamma_m)$ into the Sigmoid function"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\sigma(t) = \\frac{1}{1+\\exp{(-t)}},\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"where $t=\\gamma_0+\\gamma_1 x$ and the parameters $\\gamma_0$ and\n",
"$\\gamma_1$ were determined by the Logistic Regression fitting\n",
"algorithm.\n",
"\n",
"As another example, consider the cost function we defined for linear regression"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"C(\\boldsymbol{y},\\boldsymbol{f}) = \\frac{1}{n} \\sum_{i=0}^{n-1}(y_i-f(x_i))^2.\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In this case the function $f(x)$ was replaced by the design matrix\n",
"$\\boldsymbol{X}$ and the unknown linear regression parameters $\\boldsymbol{\\beta}$,\n",
"that is $\\boldsymbol{f}=\\boldsymbol{X}\\boldsymbol{\\beta}$. In linear regression we can \n",
"simply invert a matrix and obtain the parameters $\\beta$ by"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\boldsymbol{\\beta}=\\left(\\boldsymbol{X}^T\\boldsymbol{X}\\right)^{-1}\\boldsymbol{X}^T\\boldsymbol{y}.\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In iterative fitting or additive modeling, we minimize the cost function with respect to the parameters $\\beta_m$ and $\\gamma_m$.\n",
"\n",
"\n",
"## Iterative Fitting, Regression and Squared-error Cost Function\n",
"\n",
"The way we proceed is as follows (here we specialize to the squared-error cost function)\n",
"\n",
"1. Establish a cost function, here ${\\cal C}(\\boldsymbol{y},\\boldsymbol{f}) = \\frac{1}{n} \\sum_{i=0}^{n-1}(y_i-f_M(x_i))^2$ with $f_M(x) = \\sum_{i=1}^M \\beta_m b(x;\\gamma_m)$.\n",
"\n",
"2. Initialize with a guess $f_0(x)$. It could be one or even zero or some random numbers.\n",
"\n",
"3. For $m=1:M$\n",
"\n",
"a. minimize $\\sum_{i=0}^{n-1}(y_i-f_{m-1}(x_i)-\\beta b(x;\\gamma))^2$ wrt $\\gamma$ and $\\beta$\n",
"\n",
"b. This gives the optimal values $\\beta_m$ and $\\gamma_m$\n",
"\n",
"c. Determine then the new values $f_m(x)=f_{m-1}(x) +\\beta_m b(x;\\gamma_m)$\n",
"\n",
"\n",
"We could use any of the algorithms we have discussed till now. If we\n",
"use trees, $\\gamma$ parameterizes the split variables and split points\n",
"at the internal nodes, and the predictions at the terminal nodes.\n",
"\n",
"\n",
"## Squared-Error Example and Iterative Fitting\n",
"\n",
"To better understand what happens, let us develop the steps for the iterative fitting using the above squared error function.\n",
"\n",
"For simplicity we assume also that our functions $b(x;\\gamma)=1+\\gamma x$. \n",
"\n",
"This means that for every iteration $m$, we need to optimize"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"(\\beta_m,\\gamma_m) = \\mathrm{argmin}_{\\beta,\\lambda}\\hspace{0.1cm} \\sum_{i=0}^{n-1}(y_i-f_{m-1}(x_i)-\\beta b(x;\\gamma))^2=\\sum_{i=0}^{n-1}(y_i-f_{m-1}(x_i)-\\beta(1+\\gamma x_i))^2.\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We start our iteration by simply setting $f_0(x)=0$. \n",
"Taking the derivatives with respect to $\\beta$ and $\\gamma$ we obtain"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\frac{\\partial {\\cal C}}{\\partial \\beta} = -2\\sum_{i}(1+\\gamma x_i)(y_i-\\beta(1+\\gamma x_i))=0,\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"and"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\frac{\\partial {\\cal C}}{\\partial \\gamma} =-2\\sum_{i}\\beta x_i(y_i-\\beta(1+\\gamma x_i))=0.\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can then rewrite these equations as (defining $\\boldsymbol{w}=\\boldsymbol{e}+\\gamma \\boldsymbol{x})$ with $\\boldsymbol{e}$ being the unit vector)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\gamma \\boldsymbol{w}^T(\\boldsymbol{y}-\\beta\\gamma \\boldsymbol{w})=0,\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"which gives us $\\beta = \\boldsymbol{w}^T\\boldsymbol{y}/(\\boldsymbol{w}^T\\boldsymbol{w})$. Similarly we have"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\beta\\gamma \\boldsymbol{x}^T(\\boldsymbol{y}-\\beta(1+\\gamma \\boldsymbol{x}))=0,\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"which leads to $\\gamma =(\\boldsymbol{x}^T\\boldsymbol{y}-\\beta\\boldsymbol{x}^T\\boldsymbol{e})/(\\beta\\boldsymbol{x}^T\\boldsymbol{x})$. Inserting\n",
"for $\\beta$ gives us an equation for $\\gamma$. This is a non-linear equation in the unknown $\\gamma$ and has to be solved numerically. \n",
"\n",
"The solution to these two equations gives us in turn $\\beta_1$ and $\\gamma_1$ leading to the new expression for $f_1(x)$ as\n",
"$f_1(x) = \\beta_1(1+\\gamma_1x)$. Doing this $M$ times results in our final estimate for the function $f$. \n",
"\n",
"\n",
"\n",
"## Iterative Fitting, Classification and AdaBoost\n",
"\n",
"Let us consider a binary classification problem with two outcomes $y_i \\in \\{-1,1\\}$ and $i=0,1,2,\\dots,n-1$ as our set of\n",
"observations. We define a classification function $G(x)$ which produces a prediction taking one or the other of the two values \n",
"$\\{-1,1\\}$.\n",
"\n",
"The error rate of the training sample is then"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\mathrm{\\overline{err}}=\\frac{1}{n} \\sum_{i=0}^{n-1} I(y_i\\ne G(x_i)).\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The iterative procedure starts with defining a weak classifier whose\n",
"error rate is barely better than random guessing. The iterative\n",
"procedure in boosting is to sequentially apply a weak\n",
"classification algorithm to repeatedly modified versions of the data\n",
"producing a sequence of weak classifiers $G_m(x)$.\n",
"\n",
"Here we will express our function $f(x)$ in terms of $G(x)$. That is"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"f_M(x) = \\sum_{i=1}^M \\beta_m b(x;\\gamma_m),\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"will be a function of"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"G_M(x) = \\mathrm{sign} \\sum_{i=1}^M \\alpha_m G_m(x).\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Adaptive Boosting, AdaBoost\n",
"\n",
"In our iterative procedure we define thus"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"f_m(x) = f_{m-1}(x)+\\beta_mG_m(x).\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The simplest possible cost function which leads (also simple from a computational point of view) to the AdaBoost algorithm is the\n",
"exponential cost/loss function defined as"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"C(\\boldsymbol{y},\\boldsymbol{f}) = \\sum_{i=0}^{n-1}\\exp{(-y_i(f_{m-1}(x_i)+\\beta G(x_i))}.\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We optimize $\\beta$ and $G$ for each value of $m=1:M$ as we did in the regression case.\n",
"This is normally done in two steps. Let us however first rewrite the cost function as"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"C(\\boldsymbol{y},\\boldsymbol{f}) = \\sum_{i=0}^{n-1}w_i^{m}\\exp{(-y_i\\beta G(x_i))},\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"where we have defined $w_i^m= \\exp{(-y_if_{m-1}(x_i))}$.\n",
"\n",
"## Building up AdaBoost\n",
"\n",
"First, for any $\\beta > 0$, we optimize $G$ by setting"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"G_m(x) = \\mathrm{sign} \\sum_{i=0}^{n-1} w_i^m I(y_i \\ne G_(x_i)),\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"which is the classifier that minimizes the weighted error rate in predicting $y$.\n",
"\n",
"We can do this by rewriting"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\exp{-(\\beta)}\\sum_{y_i=G(x_i)}w_i^m+\\exp{(\\beta)}\\sum_{y_i\\ne G(x_i)}w_i^m,\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"which can be rewritten as"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"(\\exp{(\\beta)}-\\exp{-(\\beta)})\\sum_{i=0}^{n-1}w_i^mI(y_i\\ne G(x_i))+\\exp{(-\\beta)}\\sum_{i=0}^{n-1}w_i^m=0,\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"which leads to"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\beta_m = \\frac{1}{2}\\log{\\frac{1-\\mathrm{\\overline{err}}}{\\mathrm{\\overline{err}}}},\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"where we have redefined the error as"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\mathrm{\\overline{err}}_m=\\frac{1}{n}\\frac{\\sum_{i=0}^{n-1}w_i^mI(y_i\\ne G(x_i)}{\\sum_{i=0}^{n-1}w_i^m},\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"which leads to an update of"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"f_m(x) = f_{m-1}(x) +\\beta_m G_m(x).\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This leads to the new weights"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"w_i^{m+1} = w_i^m \\exp{(-y_i\\beta_m G_m(x_i))}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Adaptive boosting: AdaBoost, Basic Algorithm\n",
"\n",
"The algorithm here is rather straightforward. Assume that our weak\n",
"classifier is a decision tree and we consider a binary set of outputs\n",
"with $y_i \\in \\{-1,1\\}$ and $i=0,1,2,\\dots,n-1$ as our set of\n",
"observations. Our design matrix is given in terms of the\n",
"feature/predictor vectors\n",
"$\\boldsymbol{X}=[\\boldsymbol{x}_0\\boldsymbol{x}_1\\dots\\boldsymbol{x}_{p-1}]$. Finally, we define also a\n",
"classifier determined by our data via a function $G(x)$. This function tells us how well we are able to classify our outputs/targets $\\boldsymbol{y}$. \n",
"\n",
"We have already defined the misclassification error $\\mathrm{err}$ as"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\mathrm{err}=\\frac{1}{n}\\sum_{i=0}^{n-1}I(y_i\\ne G(x_i)),\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"where the function $I()$ is one if we misclassify and zero if we classify correctly. \n",
"\n",
"## Basic Steps of AdaBoost\n",
"\n",
"With the above definitions we are now ready to set up the algorithm for AdaBoost.\n",
"The basic idea is to set up weights which will be used to scale the correctly classified and the misclassified cases.\n",
"1. We start by initializing all weights to $w_i = 1/n$, with $i=0,1,2,\\dots n-1$. It is easy to see that we must have $\\sum_{i=0}^{n-1}w_i = 1$.\n",
"\n",
"2. We rewrite the misclassification error as"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\mathrm{\\overline{err}}_m=\\frac{\\sum_{i=0}^{n-1}w_i^m I(y_i\\ne G(x_i))}{\\sum_{i=0}^{n-1}w_i},\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"1. Then we start looping over all attempts at classifying, namely we start an iterative process for $m=1:M$, where $M$ is the final number of classifications. Our given classifier could for example be a plain decision tree.\n",
"\n",
"a. Fit then a given classifier to the training set using the weights $w_i$.\n",
"\n",
"b. Compute then $\\mathrm{err}$ and figure out which events are classified properly and which are classified wrongly.\n",
"\n",
"c. Define a quantity $\\alpha_{m} = \\log{(1-\\mathrm{\\overline{err}}_m)/\\mathrm{\\overline{err}}_m}$\n",
"\n",
"d. Set the new weights to $w_i = w_i\\times \\exp{(\\alpha_m I(y_i\\ne G(x_i)}$.\n",
"\n",
"\n",
"5. Compute the new classifier $G(x)= \\sum_{i=0}^{n-1}\\alpha_m I(y_i\\ne G(x_i)$.\n",
"\n",
"For the iterations with $m \\le 2$ the weights are modified\n",
"individually at each steps. The observations which were misclassified\n",
"at iteration $m-1$ have a weight which is larger than those which were\n",
"classified properly. As this proceeds, the observations which were\n",
"difficult to classifiy correctly are given a larger influence. Each\n",
"new classification step $m$ is then forced to concentrate on those\n",
"observations that are missed in the previous iterations.\n",
"\n",
"\n",
"\n",
"## AdaBoost Examples\n",
"\n",
"Using **Scikit-Learn** it is easy to apply the adaptive boosting algorithm, as done here."
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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S1uSMCYXyWx8YutbFsU1iCgWDb2yzf1/eVZ8fDw7duzg2LFjqCqlS5fGz8+PMmXK3PQk4eHhQd26dfH39+ef//wn586dcz63Y8cOWrVqRe3atalZsyZvvPEGKQdo/PTTTzRs2JA6depQr149nn/+qjPvZhvdu3cnMDCQSZMmZal9kSJFXBKHqjJ48GBq1KhBYGAgmzdvTrfdxYsXadGihXNq2uzo559/pnbt2tSoUYN33nkn3TaHDx+mdevWBAYG0rJlS0JDQ53PDR8+HH9/f/z9/fn227/rpXbr1o2//vrL5fG7jarmqAe1UHPr7Ny5M931SUlJunv3bt22bZueP3/epTEULlzY+XOvXr30zTffVFXVmJgYrVatmv7yyy+qqhodHa3t27fXqVOnqqrqtm3btFq1arpr1y5VVU1ISNAPP/zwpsYWHx9/U7d32fHjx7V69erX9JqU79PN9J///Efbt2+vSUlJunbtWm3UqFG67aZOnarvv/9+lreblJSkiYmJNyvMq0pISNBq1arp/v379dKlSxoYGKg7duxI065Lly46a9YsVVVdtmyZPvbYY6qqumTJEr3nnns0Pj5eo6KitGHDhhoZGamqqitXrtR//etft+xYria9v1scE8Zd3+fu9b7QXQ9LFLfW5V+4pKQkxVEc8qY/riblB+D06dP16aefVlXVTz75RHv27Jmq7b59+7RSpUqqqtqzZ0/99NNPr7r9CxcuaJ8+fdTf318DAgJ03rx5afY7d+5c7d27t6qq9u7dW5966ilt1KiRPvfcc1q5cmU9e/ass22NGjX0xIkTeurUKX3ooYe0YcOG2rBhQ129enWafV+8eNG577p16+ry5ctVVTUgIEC9vLw0KChIV61aleo1J06c0AceeEADAwM1MDBQ16xZkyreCxcuaKtWrbRevXrq7++vCxcuVFXVqKgo7dChgwYGBqqfn5/OmTNHVVWHDx+uvr6+GhAQoM8//3yaGJ988kn9+uuvncu1atXSY8eOpWnXtGlTPXjwYKYxHDx4UGvVqqU9e/bUOnXq6KFDh/SXX37RJk2aaL169bRLly564cIFVVV9/fXXtWHDhurn56dPPPGEJiUlpfv/l1W///67tm3b1rn81ltv6VtvvZWmXZ06dfTIkSOq6vi9L1q0qKqqjhs3TseMGeNs9/jjj+u3336rqqqJiYla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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/lib/python3.7/site-packages/matplotlib/cbook/__init__.py:424: MatplotlibDeprecationWarning: \n",
"Passing one of 'on', 'true', 'off', 'false' as a boolean is deprecated; use an actual boolean (True/False) instead.\n",
" warn_deprecated(\"2.2\", \"Passing one of 'on', 'true', 'off', 'false' as a \"\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn.ensemble import AdaBoostClassifier\n",
"\n",
"ada_clf = AdaBoostClassifier(\n",
" DecisionTreeClassifier(max_depth=1), n_estimators=200,\n",
" algorithm=\"SAMME.R\", learning_rate=0.5, random_state=42)\n",
"ada_clf.fit(X_train, y_train)\n",
"\n",
"from sklearn.ensemble import AdaBoostClassifier\n",
"\n",
"ada_clf = AdaBoostClassifier(\n",
" DecisionTreeClassifier(max_depth=1), n_estimators=200,\n",
" algorithm=\"SAMME.R\", learning_rate=0.5, random_state=42)\n",
"ada_clf.fit(X_train_scaled, y_train)\n",
"y_pred = ada_clf.predict(X_test_scaled)\n",
"skplt.metrics.plot_confusion_matrix(y_test, y_pred, normalize=True)\n",
"plt.show()\n",
"y_probas = ada_clf.predict_proba(X_test_scaled)\n",
"skplt.metrics.plot_roc(y_test, y_probas)\n",
"plt.show()\n",
"skplt.metrics.plot_cumulative_gain(y_test, y_probas)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## AdaBoost for Regression\n",
"\n",
"Here we present [Drucker's AdaBoost](https://pdfs.semanticscholar.org/8d49/e2dedb817f2c3330e74b63c5fc86d2399ce3.pdf) tailored for regression.\n",
"\n",
"In bagging, each training example is equally likely to be\n",
"picked. In boosting, the probability of a particular\n",
"example being in the training set of a particular machine\n",
"depends on the performance of the prior machines on\n",
"that example. The following is a modification of\n",
"Adaboost by Drucker.\n",
"\n",
"Start by selecting a set of training data $n$ and assign to each entry a weight $w_i=1$ for $i=1,2,\\dots,n$. As we have done earlier, we could pick say $80\\%$ of the data set for training. The algorithm runs as follows:\n",
"1. We define the probability that the training sample $i$ is in the set by $p_i = w_i/\\sum_iw_i$. We pick $n$ samples (with replacement) to form our training set. We pick a number uniformly in the range $[0,\\sum_iw_i]$.\n",
"\n",
"2. We choose then a regression machine (for example plain linear regression or a simple decision tree). A given regression machine makes then a hypothesis.\n",
"\n",
"3. Using every member of the training set with the chosen regression machine we obtain then a prediction $\\tilde{y}_i$.\n",
"\n",
"4. We calculate then the loss function $L_i$ for each training sample. We can use various types of loss function as long as we have a value\n",
"\n",
"$L_i\\in [0,1]$. \n",
"\n",
"## Gradient boosting: Basics with Steepest Descent\n",
"\n",
"Gradient boosting is again a similar technique to Adaptive boosting,\n",
"it combines so-called weak classifiers or regressors into a strong\n",
"method via a series of iterations.\n",
"\n",
"In order to understand the method, let us illustrate its basics by\n",
"bringing back the essential steps in linear regression, where our cost\n",
"function was the least squares function.\n",
"\n",
"## The Squared-Error again! Steepest Descent\n",
"\n",
"We start again with our cost function ${\\cal C}(\\boldsymbol{y}m\\boldsymbol{f})=\\sum_{i=0}^{n-1}{\\cal L}(y_i, f(x_i))$ where we want to minimize\n",
"This means that for every iteration, we need to optimize"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"(\\hat{\\boldsymbol{f}}) = \\mathrm{argmin}_{\\boldsymbol{f}}\\hspace{0.1cm} \\sum_{i=0}^{n-1}(y_i-f(x_i))^2.\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We define a real function $h_m(x)$ that defines our final function $f_M(x)$ as"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"f_M(x) = \\sum_{m=0}^M h_m(x).\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In the steepest decent approach we approximate $h_m(x) = -\\rho_m g_m(x)$, where $\\rho_m$ is a scalar and $g_m(x)$ the gradient defined as"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"g_m(x_i) = \\left[ \\frac{\\partial {\\cal L}(y_i, f(x_i))}{\\partial f(x_i)}\\right]_{f(x_i)=f_{m-1}(x_i)}.\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"With the new gradient we can update $f_m(x) = f_{m-1}(x) -\\rho_m g_m(x)$. Using the above squared-error function we see that\n",
"the gradient is $g_m(x_i) = -2(y_i-f(x_i))$.\n",
"\n",
"Choosing $f_0(x)=0$ we obtain $g_m(x) = -2y_i$ and inserting this into the minimization problem for the cost function we have"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"(\\rho_1) = \\mathrm{argmin}_{\\rho}\\hspace{0.1cm} \\sum_{i=0}^{n-1}(y_i+2\\rho y_i)^2.\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Steepest Descent Example\n",
"\n",
"Optimizing with respect to $\\rho$ we obtain (taking the derivative) that $\\rho_1 = -1/2$. We have then that"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"f_1(x) = f_{0}(x) -\\rho_1 g_1(x)=-y_i.\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can then proceed and compute"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"g_2(x_i) = \\left[ \\frac{\\partial {\\cal L}(y_i, f(x_i))}{\\partial f(x_i)}\\right]_{f(x_i)=f_{1}(x_i)=y_i}=-4y_i,\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"and find a new value for $\\rho_2=-1/2$ and continue till we have reached $m=M$. We can modify the steepest descent method, or steepest boosting, by introducing what is called **gradient boosting**. \n",
"\n",
"## Gradient Boosting, algorithm\n",
"\n",
"Suppose we have a cost function $C(f)=\\sum_{i=0}^{n-1}L(y_i, f(x_i))$ where $y_i$ is our target and $f(x_i)$ the function which is meant to model $y_i$. The above cost function could be our standard squared-error function"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"C(\\boldsymbol{y},\\boldsymbol{f})=\\sum_{i=0}^{n-1}(y_i-f(x_i))^2.\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The way we proceed in an iterative fashion is to\n",
"1. Initialize our estimate $f_0(x)$.\n",
"\n",
"2. For $m=1:M$, we\n",
"\n",
"a. compute the negative gradient vector $\\boldsymbol{u}_m = -\\partial C(\\boldsymbol{y},\\boldsymbol{f})/\\partial \\boldsymbol{f}(x)$ at $f(x) = f_{m-1}(x)$;\n",
"\n",
"b. fit the so-called base-learner to the negative gradient $h_m(u_m,x)$;\n",
"\n",
"c. update the estimate $f_m(x) = f_{m-1}(x)+\\nu h_m(u_m,x)$;\n",
"\n",
"\n",
"4. The final estimate is then $f_M(x) = \\sum_{m=1}^M\\nu h_m(u_m,x)$.\n",
"\n",
"## Gradient Boosting Example, Regression\n",
"\n",
"We discuss here the difference between the steepest descent approach and gradient boosting by repeating our simple regression example above. \n",
"\n",
"\n",
"## Gradient Boosting, Examples of Regression"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.ensemble import GradientBoostingRegressor\n",
"from sklearn.preprocessing import StandardScaler\n",
"import scikitplot as skplt\n",
"from sklearn.metrics import mean_squared_error\n",
"\n",
"n = 100\n",
"maxdegree = 6\n",
"\n",
"# Make data set.\n",
"x = np.linspace(-3, 3, n).reshape(-1, 1)\n",
"y = np.exp(-x**2) + 1.5 * np.exp(-(x-2)**2)+ np.random.normal(0, 0.1, x.shape)\n",
"\n",
"error = np.zeros(maxdegree)\n",
"bias = np.zeros(maxdegree)\n",
"variance = np.zeros(maxdegree)\n",
"polydegree = np.zeros(maxdegree)\n",
"X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.2)\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",
"\n",
"for degree in range(1,maxdegree):\n",
" model = GradientBoostingRegressor(max_depth=degree, n_estimators=100, learning_rate=1.0) \n",
" model.fit(X_train_scaled,y_train)\n",
" y_pred = model.predict(X_test_scaled)\n",
" polydegree[degree] = degree\n",
" error[degree] = np.mean( np.mean((y_test - y_pred)**2) )\n",
" bias[degree] = np.mean( (y_test - np.mean(y_pred))**2 )\n",
" variance[degree] = np.mean( np.var(y_pred) )\n",
" print('Max depth:', degree)\n",
" print('Error:', error[degree])\n",
" print('Bias^2:', bias[degree])\n",
" print('Var:', variance[degree])\n",
" print('{} >= {} + {} = {}'.format(error[degree], bias[degree], variance[degree], bias[degree]+variance[degree]))\n",
"\n",
"plt.xlim(1,maxdegree-1)\n",
"plt.plot(polydegree, error, label='Error')\n",
"plt.plot(polydegree, bias, label='bias')\n",
"plt.plot(polydegree, variance, label='Variance')\n",
"plt.legend()\n",
"save_fig(\"gdregression\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Gradient Boosting, Classification Example"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"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",
"import scikitplot as skplt\n",
"from sklearn.ensemble import GradientBoostingClassifier\n",
"from sklearn.model_selection import cross_validate\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",
"#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",
"\n",
"gd_clf = GradientBoostingClassifier(max_depth=3, n_estimators=100, learning_rate=1.0) \n",
"gd_clf.fit(X_train_scaled, y_train)\n",
"#Cross validation\n",
"accuracy = cross_validate(gd_clf,X_test_scaled,y_test,cv=10)['test_score']\n",
"print(accuracy)\n",
"print(\"Test set accuracy with Random Forests and scaled data: {:.2f}\".format(gd_clf.score(X_test_scaled,y_test)))\n",
"\n",
"import scikitplot as skplt\n",
"y_pred = gd_clf.predict(X_test_scaled)\n",
"skplt.metrics.plot_confusion_matrix(y_test, y_pred, normalize=True)\n",
"save_fig(\"gdclassiffierconfusion\")\n",
"plt.show()\n",
"y_probas = gd_clf.predict_proba(X_test_scaled)\n",
"skplt.metrics.plot_roc(y_test, y_probas)\n",
"save_fig(\"gdclassiffierroc\")\n",
"plt.show()\n",
"skplt.metrics.plot_cumulative_gain(y_test, y_probas)\n",
"save_fig(\"gdclassiffiercgain\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## XGBoost: Extreme Gradient Boosting\n",
"\n",
"\n",
"[XGBoost](https://github.com/dmlc/xgboost) or Extreme Gradient\n",
"Boosting, is an optimized distributed gradient boosting library\n",
"designed to be highly efficient, flexible and portable. It implements\n",
"machine learning algorithms under the Gradient Boosting\n",
"framework. XGBoost provides a parallel tree boosting that solve many\n",
"data science problems in a fast and accurate way. See the [article by Chen and Guestrin](https://arxiv.org/abs/1603.02754).\n",
"\n",
"The authors design and build a highly scalable end-to-end tree\n",
"boosting system. It has a theoretically justified weighted quantile\n",
"sketch for efficient proposal calculation. It introduces a novel sparsity-aware algorithm for parallel tree learning and an effective cache-aware block structure for out-of-core tree learning.\n",
"\n",
"It is now the algorithm which wins essentially all ML competitions!!!\n",
"\n",
"## Regression Case"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"from sklearn.model_selection import train_test_split\n",
"import xgboost as xgb\n",
"from sklearn.preprocessing import StandardScaler\n",
"import scikitplot as skplt\n",
"from sklearn.metrics import mean_squared_error\n",
"\n",
"n = 100\n",
"maxdegree = 6\n",
"\n",
"# Make data set.\n",
"x = np.linspace(-3, 3, n).reshape(-1, 1)\n",
"y = np.exp(-x**2) + 1.5 * np.exp(-(x-2)**2)+ np.random.normal(0, 0.1, x.shape)\n",
"\n",
"error = np.zeros(maxdegree)\n",
"bias = np.zeros(maxdegree)\n",
"variance = np.zeros(maxdegree)\n",
"polydegree = np.zeros(maxdegree)\n",
"X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.2)\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",
"\n",
"for degree in range(maxdegree):\n",
" model = xgb.XGBRegressor(objective ='reg:squarederror', colsaobjective ='reg:squarederror', colsample_bytree = 0.3, learning_rate = 0.1,max_depth = degree, alpha = 10, n_estimators = 200)\n",
"\n",
" model.fit(X_train_scaled,y_train)\n",
" y_pred = model.predict(X_test_scaled)\n",
" polydegree[degree] = degree\n",
" error[degree] = np.mean( np.mean((y_test - y_pred)**2) )\n",
" bias[degree] = np.mean( (y_test - np.mean(y_pred))**2 )\n",
" variance[degree] = np.mean( np.var(y_pred) )\n",
" print('Max depth:', degree)\n",
" print('Error:', error[degree])\n",
" print('Bias^2:', bias[degree])\n",
" print('Var:', variance[degree])\n",
" print('{} >= {} + {} = {}'.format(error[degree], bias[degree], variance[degree], bias[degree]+variance[degree]))\n",
"\n",
"plt.xlim(1,maxdegree-1)\n",
"plt.plot(polydegree, error, label='Error')\n",
"plt.plot(polydegree, bias, label='bias')\n",
"plt.plot(polydegree, variance, label='Variance')\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Xgboost on the Cancer Data\n",
"\n",
"As you will see from the confusion matrix below, XGBoots does an excellent job on the Wisconsin cancer data and outperforms essentially all agorithms we have discussed till now."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"\n",
"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.preprocessing import LabelEncoder\n",
"from sklearn.model_selection import cross_validate\n",
"import scikitplot as skplt\n",
"import xgboost as xgb\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",
"#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",
"\n",
"xg_clf = xgb.XGBClassifier()\n",
"xg_clf.fit(X_train_scaled,y_train)\n",
"\n",
"y_test = xg_clf.predict(X_test_scaled)\n",
"\n",
"print(\"Test set accuracy with Random Forests and scaled data: {:.2f}\".format(xg_clf.score(X_test_scaled,y_test)))\n",
"\n",
"import scikitplot as skplt\n",
"y_pred = xg_clf.predict(X_test_scaled)\n",
"skplt.metrics.plot_confusion_matrix(y_test, y_pred, normalize=True)\n",
"save_fig(\"xdclassiffierconfusion\")\n",
"plt.show()\n",
"y_probas = xg_clf.predict_proba(X_test_scaled)\n",
"skplt.metrics.plot_roc(y_test, y_probas)\n",
"save_fig(\"xdclassiffierroc\")\n",
"plt.show()\n",
"skplt.metrics.plot_cumulative_gain(y_test, y_probas)\n",
"save_fig(\"gdclassiffiercgain\")\n",
"plt.show()\n",
"\n",
"\n",
"xgb.plot_tree(xg_clf,num_trees=0)\n",
"plt.rcParams['figure.figsize'] = [50, 10]\n",
"save_fig(\"xgtree\")\n",
"plt.show()\n",
"\n",
"xgb.plot_importance(xg_clf)\n",
"plt.rcParams['figure.figsize'] = [5, 5]\n",
"save_fig(\"xgparams\")\n",
"plt.show()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.7"
}
},
"nbformat": 4,
"nbformat_minor": 2
}