{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Decision Tree Classifiers\n", "<p>This Notebook gives an overview of DecisionTrees with scikit learn. In it are examples of:\n", "\n", "<ul>\n", "<li>Build a basic decision tree</li>\n", "<li>Plotting the decision surface of a decision tree</li>\n", "<li>Visualing the decision tree</li>\n", "<li>Overfitting (as viewed by decision surfaces) of decision trees with no limits on depth and leaf size</li>\n", "<li>Searching for optimal parameters of a decision tree</li>\n", "<li>Using decision tree output to assess feature importance</li>\n", "</ul>\n", "\n", "</p>" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Build a Tree on Simulated Data" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import scipy as sp\n", "import matplotlib.pyplot as plt\n", "\n", "#These all need to be installed to both run and visualize a tree\n", "from sklearn.tree import DecisionTreeClassifier\n", "from sklearn.tree import export_graphviz\n", "from IPython.display import Image\n", "import pydotplus\n", "\n", "from io import StringIO\n", "%matplotlib inline\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<p>Here I generate some random data $X=<X1,X2>$ with $Y \\in [0,1]$\n", "</p>" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[<matplotlib.lines.Line2D at 0x117211f98>]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nrkJggg==\n", "text/plain": [ "<Figure size 600x400 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "'''\n", "Random data example \n", "'''\n", "n = 200\n", "\n", "\n", "#First Generate the data\n", "\n", "m = [[0.25, 0.75], [0.75, 0.75], [0.75, 0.25], [0.25, 0.25]]\n", "s = .1\n", "X1 = pd.DataFrame(np.random.multivariate_normal([m[0][0], m[0][1]], [[s,0],[0,s]],n), columns=['x1','x2'])\n", "X1['y'] = np.zeros(n)\n", "X2 = pd.DataFrame(np.random.multivariate_normal([m[1][0],m[1][1]], [[s,0],[0,s]],n), columns=['x1','x2'])\n", "X2['y'] = np.zeros(n)\n", "X3=pd.DataFrame(np.random.multivariate_normal([m[2][0],m[2][1]], [[s,0],[0,s]],n), columns=['x1','x2'])\n", "X3['y'] = np.ones(n)\n", "X4 = pd.DataFrame(np.random.multivariate_normal([m[3][0],m[3][1]], [[s,0],[0,s]],n), columns=['x1','x2'])\n", "X4['y'] = np.zeros(n)\n", "\n", "dat = X1.append(X2, ignore_index=True)\n", "dat = dat.append(X3, ignore_index=True)\n", "dat = dat.append(X4, ignore_index=True)\n", "\n", "plt.plot(dat['x1'][(dat['y']==1)], dat['x2'][(dat['y']==1)],'r.')\n", "plt.plot(dat['x1'][(dat['y']==0)], dat['x2'][(dat['y']==0)],'b.')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<p>\n", "\n", "</p>" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<p>\n", "Now lets build a tree on our sample data.<br><br>\n", "\n", "Documentation can be found here:\n", "http://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html#sklearn.tree.DecisionTreeClassifier\n", "<br>\n", "Also, here is another useful example:\n", "http://nbviewer.ipython.org/github/sujitpal/statlearning-notebooks/blob/master/src/chapter8.ipynb\n", "\n", "</p>" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "#We want Entropy as our splitting criteria\n", "clf = DecisionTreeClassifier(criterion='entropy', min_samples_leaf = 1, max_depth = 3)\n", "clf = clf.fit(dat.drop('y',1), dat.y)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<p>The decision surface can be derived by using the predict function and not having to parse the DT rules.<br><br>\n", "This code was adapted from http://scikit-learn.org/0.11/auto_examples/tree/plot_iris.html\n", "\n", "\n", "\n", "</p>" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[<matplotlib.lines.Line2D at 0x11d8a1128>]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 600x400 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "X = dat.drop('y',1)\n", "y = dat.y\n", "\n", "plot_step = 0.02\n", "\n", "x_min, x_max = X['x1'].min(), X['x1'].max()\n", "y_min, y_max = X['x2'].min(), X['x2'].max()\n", "xx, yy = np.meshgrid(np.arange(x_min, x_max, plot_step),np.arange(y_min, y_max, plot_step))\n", "\n", "Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])\n", "Z = Z.reshape(xx.shape)\n", "\n", "\n", "plt.subplot(111)\n", "\n", "cs = plt.contourf(xx, yy, Z, cmap=plt.cm.cool)\n", "plt.plot(dat['x1'][(dat['y']==1)],dat['x2'][(dat['y']==1)],'r.')\n", "plt.plot(dat['x1'][(dat['y']==0)],dat['x2'][(dat['y']==0)],'b.')\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<p>The above is a pretty simple tree, which we can see in the above plot.<br><br>\n", "\n", "As we allow for more complex trees, visualing the tree becomes very cumbersome, but we can still look at the decision surface. \n", "\n", "\n", "</p>" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nRU5ErkJggg==\n", "text/plain": [ "<Figure size 600x400 with 9 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def treeComplex(X, y, leaf, dep, i):\n", " clf = DecisionTreeClassifier(criterion = 'entropy', min_samples_leaf = leaf, max_depth = dep)\n", " clf = clf.fit(X, y)\n", " plot_step = 0.02\n", " x_min, x_max = X['x1'].min(), X['x1'].max()\n", " y_min, y_max = X['x2'].min(), X['x2'].max()\n", " xx, yy = np.meshgrid(np.arange(x_min, x_max, plot_step), np.arange(y_min, y_max, plot_step))\n", " Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])\n", " Z = Z.reshape(xx.shape)\n", "\n", " ax = fig.add_subplot(3, 3, i)\n", " cs = plt.contourf(xx, yy, Z, cmap = plt.cm.cool)\n", " ax.axes.get_xaxis().set_visible(False)\n", " ax.axes.get_yaxis().set_visible(False)\n", " plt.title('Dep={},Leaf={}'.format(dep, leaf))\n", " \n", "leafs=[100, 10, 1]\n", "deps=[3, 10, 50]\n", "\n", "i=1\n", "fig=plt.figure()\n", "\n", "for l in leafs:\n", " for d in deps:\n", " treeComplex(dat.drop('y',1), dat.y, l, d, i)\n", " i+=1\n", " \n", "fig.tight_layout()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<p>As we let the trees grow without any restrictions, we notice that the decision surface gets very fragmented. This defies our intuition that nearest neighbors of a point should have the same class assignment. Since we know that this data was generated from a few simple normal mixtures, we should understand that these more complex surfaces are terribly over fit.\n", "<br><br>\n", "Beyond toy examples, let's see this on real data.\n", "</p>\n", "\n", "### Decision Tree on Real Data\n", "<p>We don't just want to build a tree, we want to optimize the configuration of the tree. We'll use AUC as a metric on our test set and vary the max_depth and min_leaf_size. <br><br>\n", "\n", "The underlying data has a very rare outcome (less than 5%) so we'll down sample the data first to reach a 50/50 split.\n", "\n", "\n", "</p>" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from sklearn.metrics import confusion_matrix, roc_auc_score\n", "import sys\n", "#Get the datadir path set up - note this may only work in Linux/MAC\n", "import os\n", "cwd = os.getcwd()\n", "datadir = '/'.join(cwd.split('/')[0:-1]) + '/data/'\n", "#If it doesn't work, hard code the datadir\n", "#datadir = ${path}\n", "import imp\n", "import course_utils as bd\n", "imp.reload(bd)\n", "\n", "#Load data and downsample for a 50/50 split, then split into a train/test\n", "f = datadir + 'ads_dataset_cut.txt'\n", "\n", "train_split = 0.5\n", "tdat = pd.read_csv(f, header = 0, sep = '\\t')\n", "\n", "moddat = bd.downSample(tdat, 'y_buy', 9)\n", "moddat = moddat.sample(frac=1).reset_index(drop=True) #shuffle rows\n", "\n", "#We know the dataset is sorted randomly so we can just split by index\n", "train = moddat[:int(np.floor(moddat.shape[0] * train_split))]\n", "test = moddat[int(np.floor(moddat.shape[0] * train_split)):]\n", "\n", "def testTrees(X_train, y_train, X_test, y_test, dep, leaf, auc):\n", " clf = DecisionTreeClassifier(criterion='entropy', min_samples_leaf = leaf, max_depth = dep)\n", " clf = clf.fit(X_train, y_train)\n", " if (auc==0):\n", " cm = confusion_matrix(clf.predict(X_test), y_test)\n", " return (cm[0][0] + cm[1][1]) / float(sum(cm))\n", " else:\n", " return roc_auc_score(y_test, clf.predict_proba(X_test)[:,1])\n", " \n", "\n", " " ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Text(0.5,1,'Holdout AUC by Hyperparameters')" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 600x400 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "lab = 'y_buy'\n", "\n", "depths = [4, 5, 10, 20]\n", "leaves = np.arange(1, 101)\n", "\n", "#Run all of the options\n", "run=1\n", "if (run == 1):\n", " #Initialize dictionary of results\n", " res = dict()\n", " for d in depths:\n", " res[d] = list()\n", "\n", " #Now train and get results for each option\n", " for d in depths:\n", " for l in leaves:\n", " res[d].append(testTrees(train.drop(lab, 1), train[lab], test.drop(lab, 1), test[lab], d, l, 1))\n", "\n", "\n", "#Now plot \n", "fig = plt.figure()\n", "ax=fig.add_subplot(111)\n", "plt.plot(leaves,res[depths[0]], 'b-', label = 'Depth={}'.format(depths[0]))\n", "plt.plot(leaves,res[depths[1]], 'r-', label = 'Depth={}'.format(depths[1]))\n", "plt.plot(leaves,res[depths[2]], 'y-', label = 'Depth={}'.format(depths[2]))\n", "plt.plot(leaves,res[depths[3]], 'g-', label = 'Depth={}'.format(depths[3]))\n", "plt.legend(loc = 4)\n", "ax.set_xlabel('Min Leaf Size')\n", "ax.set_ylabel('Test Set AUC')\n", "plt.title('Holdout AUC by Hyperparameters')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<p>The above plot shows how holdout AUC varies by parameters. As we generally expect with most hyper-parameter searches, there is a \"sweet spot\" between letting the model be flexible and over fitting. Here we see that as long as we restrict the min_leaf_size, the max_depth doesn't affect the optimal choice too much.<br><br>\n", "\n", "We might want to peek at the tree to determine which features it thinks are important. The DT class objects actually have an attribute that gives each feature a score for how important it is in building the tree. \n", "\n", "\n", "</p>" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Text(0,0.5,'Normalized Gini Importance')" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nV1wjahia4LMLpZZwuaSHA493pSG1ki6yvbWkpwEfAj4BHFrj89eyK4vex8rwWUh6ou2FmmB9Itdf\n6XVVWtrffSqzqqO5yxKVpRX2A57RXGHcr3Ie3Z3Wq1OqgzX3Nt4CuNb2Hc2ona2B4113EbMzJX2C\nspXl2AJjNa4eG+dKerztiyulN54bbM+f+mHT03ZNpCu9vwNfl/QQSZ2Nan5bMYtOTW034Cjb35VU\nZU+I7i99lcUcd6BcMJ3nso7XQIZRE7G9sPk5lEXpKO/RZpS/qe1UVkk9fhgZz9aawsMoI3jOs312\n80+2c9tvuqRf296hUlqLKJ3WmwGnA98CHmv7BTXSb/Jobb+DJv1LKEs1dzo6qy//LenZwD6Udv/u\nwFZjH+6h1USaGa6HAxsA11M2D/qt7cdWSr/V5qkmj38FDgV+Qvmsd6JMJBxoV7Fh1kTa7mdr8jiB\nMrlvEUuDtV1pc6sp85+NQWEYVKa8d3RWYj3C9fYG7jSBvQP4p+3P1Ox4HIaJ/pkr/xOfSNkfYDFL\nv7Rt+7WV0v+57afVSGuKfC4EnkXZN3vbZpjzfrarjF9vu3mqyeMy4CmdPimVpWXOrfU/0aRZvSbS\nk36r/WxNHpcCW7XRJ9mPWdV8NMxOWsofTSePzkqsNSeg3NXMWXg1Zds+qNQEJmk/2ydKeut499v+\n5HjnlyP9dWzfSpmX0Lbta37pjON9ko6mpZpIl7ts36hmwqXtMyV9qlbiQ2iegrIJUfdnvqQ5V8U4\nNZHPSBq4JtLjFpcJa236DfAw4M8t5zOuWRUUOld0ttee6rEVbEUZEvc0SnA4mzJOvpb9KWukfNj2\nVc2EqRMqpb1m87Ot9+kkyg51ncDZvSaNqbvc9LmStrJ9ScU0u+1PqYncj66aCKUfpqabJa1FWbPr\ny5Kup2tf60FN1DxFWRCxliuAX6ns/W1gT+CizsXHoBcblGa8bXtrItTd9L61fraukU1rA5dI+nVP\nHtl5bWUm6VTgVuDLzalXAA+0vdfoSlWXBtg9rs/0B97YpamKb0FL/RaSLmu5JtLJZ03Kfr2izKJd\nF/hyxeHBrTZPNXm8b7L7bX9gwPTPpfQN3tkcrwacZbvaMhRd/WydL87O31ONfcVXiJ3XEhRaIukS\n21tNdW4a6Z5q+2XjjLio3knbR1mqDuNtI/22+y0kHQt8osWayFBIWmB7XhMctrV9r6QLa3Y0t03S\n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\n", "text/plain": [ "<Figure size 600x400 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "'''\n", "The tree gives us a useful tool for analying feature importance\n", "'''\n", "\n", "clf = DecisionTreeClassifier(criterion = 'entropy', min_samples_leaf = 100, max_depth = 20)\n", "clf = clf.fit(train.drop(lab, 1), train[lab])\n", "\n", "\n", "fig, ax = plt.subplots()\n", "width = 0.35\n", "#ax.bar(train.drop(lab,1).columns.values, clf.feature_importances_, width, color='r')\n", "ax.bar(np.arange(13), clf.feature_importances_, width, color = 'r')\n", "ax.set_xticks(np.arange(len(clf.feature_importances_)))\n", "ax.set_xticklabels(train.drop(lab,1).columns.values, rotation = 90)\n", "plt.title('Feature Importance from DT')\n", "ax.set_ylabel('Normalized Gini Importance')\n", "\n" ] } ], "metadata": { "anaconda-cloud": {}, "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.5.2" } }, "nbformat": 4, "nbformat_minor": 0 }