{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "###Bagging\n", "\n", "<p>Bagging is a procedure that let's use bootstrapping to reduce the variance, and ultimately performance, of a prediction. The procedure can be defined as follows:<br><br>\n", "We have data $D=[(X_1, Y_1),(X_2, Y_2),...,(X_N, Y_N)]$ and we want to learn:$\\:\\: E[Y|X]=\\hat{f}(X)$. Define a bootstrap sample $D^b$ as $N$ samples from $D$, sampled with replacement. Let $E^b[Y|X]=\\hat{f}^b(X)$ be the function learned from training set $D^b$.\n", "Our bagged prediction is then the mean of all estimates of $f^b(X)$. I.e.,\n", "<br><br>\n", "<center>$\\hat{f}_{bag}(X) = \\frac{1}{B}\\sum\\limits_{b=1}^B \\:\\hat{f}^b(X)$</center>\n", "<br>\n", "This is a relatively straightforward procedure to implement, which we can show on a simulated example.\n", "\n", "\n", "\n", "\n", "\n", "</p>" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[<matplotlib.lines.Line2D at 0x107877d50>]" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "<matplotlib.figure.Figure at 0x10708ef90>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import pandas as pd\n", "import course_utils as bd\n", "reload(bd)\n", "\n", "#Generate Y, and X, where E[Y|X] is a 3rd order polynomial\n", "betas = [0, 2, -2.5, 1]\n", "n=200\n", "sig=0.2\n", "sp=20\n", "\n", "x_init = np.random.uniform(0, 1, n)\n", "e_init = np.random.normal(0, sig, n)\n", "\n", "dat = bd.genY(x_init, e_init, betas)\n", "dat = bd.makePolyFeat(dat, 6)\n", "\n", "#Plot the data vs. the real curve\n", "plt.plot(dat['x'], dat['y'], 'b.')\n", "plt.plot(dat['x'], dat[['x','x2','x3']].dot(np.array(betas[1:])), 'r.')\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "<matplotlib.legend.Legend at 0x1090b05d0>" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX4AAAEKCAYAAAAVaT4rAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvXmcXGWd7/8+tVd1bV29L+l0dzpkJSGEJIQwEEXBZYgw\nKKAyMggKL8UL/gavd5yXCuO9o453ZnTgysDoZcYLRnANqIRNFkFIQhKykj2d9N5dXfteZ/n90TzH\n6jVJd2d/3q/XeXVV16lznnOq6vN8n+/zfb5fxTAMA4lEIpGcN1hOdwMkEolEcmqRwi+RSCTnGVL4\nJRKJ5DxDCr9EIpGcZ0jhl0gkkvMMKfwSiURyniGFX3LOsXDhQl577bXT3YzTRnNzMy+99NLpbobk\nDEYKv+Sk0NzcjMfjwefzEQqF+Mu//Es6OztPybl37tzJFVdcMe3H/c///E+sVis+n8/c/H4/vb29\n036uqaAoCoqinO5mSM5gpPBLTgqKovDb3/6WZDJJT08PNTU1fOlLXzrdzZoyq1atIplMmlsikaC2\ntvZ0N0siOSGk8EtOOk6nkxtuuIHdu3eb//vd737HkiVLCAQCNDU18cADDwx7z09+8hNmzpxJZWUl\n//N//s9h7otsNsutt95KKBRi/vz5/NM//RMzZsww39vc3Mwf/vAHAO6//35uvPFGbr31Vvx+PwsX\nLmTz5s3mvlu2bGHJkiX4/X5uvPFGbrrpJr7+9a+Pey3jLXQ/ePAgFRUVbN26FYDu7m6qqqpMl9Nj\njz3G/Pnz8fv9zJo1i0cffdR87yuvvEJjYyPf+973qK6upr6+nt/85jf8/ve/54ILLqCiooLvfOc7\n5v73338/H//4x7n55pvx+/0sXbqU7du3j9ve73znO7S1tVFZWclNN91ENBod9/ok5wdS+CUnDSGS\nmUyGJ598kpUrV5qveb1eHn/8ceLxOL/73e94+OGHWbduHQC7d+/mi1/8ImvXrqWnp4d4PE53d7fp\nvnjggQc4evQohw8f5oUXXuDxxx8f5toY6eZ45pln+OQnP0k8HmfNmjXcfffdABQKBa6//no++9nP\nEo1G+eQnP8lvfvObSblJZs2axXe/+11uueUWstkst912G7fddpvpcqqpqeF3v/sdiUSCxx57jC9/\n+ctmJwHQ19dHPp+np6eHf/iHf+COO+7giSeeYOvWrfzxj3/kH/7hHzhy5Ii5/9NPP82NN95INBrl\nU5/6FNdddx2apo1q17/927/x9NNP89prr9HT00N5eTlf/OIXT/j6JOcYhkRyEpg5c6bh9XqNYDBo\n2O12o6GhwdixY8e4+99zzz3Gl7/8ZcMwDOOBBx4wPvWpT5mvZTIZw+FwGC+99JJhGIbR2tpqPP/8\n8+brP/rRj4zGxkbzeXNzs7nvN7/5TeODH/yg+dquXbsMt9ttGIZhvPrqq0ZDQ8Owdlx++eXG17/+\n9THb+Nhjjxk2m80IBoPm1tbWNmyfNWvWGAsXLjQWL15sFAqFca/3uuuuM37wgx8YhmEYL7/8suF2\nuw1d1w3DMIxEImEoimJs3LjR3H/p0qXGunXrzGtauXKl+Zqu60ZdXZ3x+uuvj7r+efPmmY8NwzC6\nu7sNu91uaJo2btsk5z7S4pecFBRFYd26dUSjUfL5PA8++CBXXnklfX19AGzYsIH3ve99VFdXEwwG\neeSRRxgcHASG3CSNjY3msdxuNxUVFebz7u7uYa6d0n3Hoqamxnzs8XjI5XLouk53dzcNDQ3D9p0x\nY8a47hyASy+9lGg0am779+8f9vodd9zBrl27+NKXvoTdbjf//+yzz3LppZdSUVFBeXk5v//9783r\nBaioqDBHGm63e1S73W43qVRqzGtWFIXGxka6u7tHtbe9vZ3rr7+e8vJyysvLmT9/PjabzfwcJOcn\nUvglJx1FUbj++uuxWq288cYbAKZ7orOzk1gsxl133WUKbn19/bAIoGw2O0wk6+rq6OjoMJ+XPj4R\n6urq6OrqGva/o0ePTjoiJpVKce+993LHHXfwzW9+0/Sl5/N5brjhBv77f//v9Pf3E41G+chHPjJh\nB3MsSq9Z13U6Ozupr68ftV9TUxPr168f1lllMhnq6uomfW7J2Y8UfslJQwibYRim9T9v3jxgSCTL\ny8txOBxs3LiRn/70p+b7brjhBp555hnefPNNCoUC999//zCRvPHGG/n2t79NLBajq6uLhx56aFJi\nvXLlSqxWKw899BCqqrJu3To2bdo06eu95557WL58OY8++igf/ehHueuuu4ChuYRCoUBlZSUWi4Vn\nn32W559/ftLnAdi8eTO//vWvUVWV73//+7hcLi699NJR+91111187Wtf4+jRowAMDAzw9NNPT+nc\nkrMfKfySk8a1116Lz+cjEAjw9a9/nZ/85Cem8P/whz/kG9/4Bn6/n29961vcdNNN5vsWLFjAgw8+\n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\nZlLXe/1pYkCjooaXlxe7c+cOY4yxvLw85uXlpbecSqVigwcPZp9//nndFQFYWFgYCwsLYxERESw2\nNrYxVWszDPqlA8/m8RRcXFyYtbU1s7GxYQKBgMlkMvbnn3/WWT48PJzNnTuXMcbY0qVL2VtvvcVt\nKy0tZWZmZlzg79SpEzt58iS3ffPmzVyQiY+PZ87OzlrH/vTTT9nbb7/N7Vvzzb5p06Z6AxSPx2Mi\nkUgrMFWfu3///mzJkiXswYMHWvvcunXLoMB/7tw57ucXX3yRRUVFcT9/8MEHbM6cOXrrlJiYqNXZ\nCgoKYps3b+Z+3r17N+vXr5/WPtOnT2dLly6t83XWfs3p6ensX//6F9u4cSP7+uuv2fTp01l6ejoX\n+BljLDc3l82aNYu5u7szPp/P+vfvz9LS0hhjVUGYz+drtZtEImGlpaUG1YExxrKzsxmPx2Pl5eXc\ncydPnmSurq56y9+9e5ddu3aNMVb1O+jfvz+bMWOG3rKhoaFs2LBherdt27aNderUyeB6NrXq93ps\nbCxbsmQJ93iawN+oRdpGjhyJrVu3IiIiAlu3bsWoUaP0faPA1KlT4evrizlz5tR7vMmTJwOoykFZ\nvfY1eQZacC0fHo+HmJgYDBw4EIwxHDhwAAMGDMDVq1chlUpx4cIFzJ8/HykpKVCpVCgvL8e4ceMA\nVA3V1Ex/aGlpyaXzq95eV6rErKwsLv9uNbVazQ2/1N63dvpHfRITE7n8tjVt2bIFixcvho+PD9zc\n3LBkyRIMHz7ckOYBoJsOsfbPd+/eBQCUlpZi7ty5OHHiBJeMvri4GIwxbsy95th7VlYWLly4oNUG\nlZWVCA0NNbhu1fmDq5OUREVF6VyzkMlk3DBabm4upk+fjtDQUC7vrJOTU4Py7tZmbW0NACgsLOSW\ncSkoKODWtK9NKpVybejq6oqoqCiMGDECGzZs0Cr34Ycf4urVq3Uuu71169YGtVVzCQoKQlCNNLWG\nJLeprVFj/PPnz8dPP/0ET09PnDp1ivvjyMvL4/7wz549ix07diA2NhY9evRAjx49cPz48XqPS0G/\ndeLxeBg9ejRMTExw9uxZAPrT+1UHFicnJ60ZQGVlZVo5X+tLldixY0e4ublppQEsLCzE4cOHuX1r\npk6s+f+G8vDwwPfff48HDx4gIiIC//jHP1BWVvbML7auWbMGqampSEhIQEFBAU6fPq2Vcar2+Zyd\n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\n3CDT36C4TQAAAABJRU5ErkJggg==\n", "text/plain": [ "<matplotlib.figure.Figure at 0x108d9cf50>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#Now let's do bagged prediction using linear regression\n", "from sklearn import linear_model\n", "\n", "n_boots = 100\n", "\n", "boot_est = dict()\n", "x_grid = np.arange(0, 1, 0.01)\n", "d_grid = pd.DataFrame(x_grid, columns=['x'])\n", "d_grid = bd.makePolyFeat(d_grid, 6)\n", "\n", "\n", "fig = plt.figure()\n", "\n", "#Generate and plot each bootstrap model\n", "for i in range(n_boots):\n", " D_b = dat.iloc[np.random.randint(0, dat.shape[0], size=dat.shape[0])]\n", " regr = linear_model.LinearRegression(fit_intercept=True)\n", " regr.fit(D_b.drop('y', 1), D_b['y'])\n", " boot_est[i] = regr.predict(d_grid)\n", " plt.plot(x_grid, boot_est[i], color='0.75')\n", "\n", "#Now aggregate the bootstrapped models for a single prediction\n", "bag_est = pd.DataFrame(boot_est).mean(axis=1)\n", "\n", "#For comparison, we'll also see what a single fit on the original data looks like\n", "regr = linear_model.LinearRegression(fit_intercept=True)\n", "regr.fit(dat.drop('y', 1), dat['y'])\n", "non_bag = regr.predict(d_grid)\n", "\n", "#Truth\n", "truth = d_grid[['x','x2','x3']].dot(np.array(betas[1:]))\n", "\n", "#Now Get MSE of estimates\n", "mse_bag = round(np.sqrt(((truth-bag_est)**2).sum()), 3)\n", "mse_non = round(np.sqrt(((truth-non_bag)**2).sum()), 3)\n", "\n", "\n", "plt.plot(x_grid, non_bag,'k-', label='Non Bagged Estimate, MSE={}'.format(mse_non))\n", "plt.plot(x_grid, bag_est,'r-', label='Bagged Estimate, MSE={}'.format(mse_bag))\n", "plt.plot(d_grid['x'], d_grid[['x','x2','x3']].dot(np.array(betas[1:])), 'b--', label='Truth')\n", "\n", "\n", "plt.title('Bagging Example')\n", "plt.legend(loc=4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<p>We can see in the above example that variance of the bootstrapped predictions is very high, especially around the extreme values of $X$, where there is less data. The goal of Bagging is to reduce the variance of the prediction (and thus improve accuracy). The lever that controls the amount of variance reduction is the number of bootstrap samples used.\n", "<br><br> \n", "<b>When to use Bagging</b><br><br>\n", "According to the original <a href=\"http://statistics.berkeley.edu/sites/default/files/tech-reports/421.pdf\">Bagging paper</a> by Leo Breiman, bagging will produce a much better reduction in training error when the underlying classifier or regression model is unstable, and sensitive to minor variations of the data $D$. The above example was meant to show Bagging at work. We used a linear regression on polynomial features, and even though the underlying model was misspecified (we used degree 6 where the truth is degree 3), the bagged estimate isn't too far from the estimate without bagging. One must be careful when choosing to use bagging, because it can actually hurt performance if the underlying model is fairly stable (if you rerun the above regression example with different data sets or different bootstrapping iterations, you might find that the bagged MSE is worse).\n", "</p>\n", "\n", "##Random Forests\n", "###The Basic Algorithm\n", "<p>The Random Forest algorithm is probably the most well known and utilized implementation of the Bagging technique. A RF is an ensemble of Decision Trees, where both bagging and random feature selection are used to reduce the variance of the forest. The basic algorithm goes as follows:<br><br>\n", "Assume we have a data matrix $D=[X,Y]$ with $N$ records and $M$ features.<br><br>\n", "\n", "<i><u>Train</u></i><br>\n", "For each $b$ of $B$ iterations:\n", "<ul>\n", " <li>Draw a bootstrap sample $D^b$ of size $N$ from $D$.</li>\n", " <li>Sample $p$ features from $X$, where $p<<M$.</li>\n", " <li>Grow a Decision Tree $T_b(X)$ on this data</li>\n", "</ul>\n", "<br>\n", "<i><u>Score</u></i><br>\n", "Take the average of all of the tree predictions, i.e.<br>\n", "$RF(x)=\\frac{1}{B}\\sum\\limits_{b=1}^B \\: T_b(x)$\n", "\n", "\n", "\n", "\n", "</p>" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<p>We'll start by building a forest using <a href=\"http://scikit-learn.org/stable/modules/classes.html#module-sklearn.ensemble\">SKlearn.ensemble</a>. Check out <a href=\"http://scikit-learn.org/stable/modules/ensemble.html\">here</a> for a brief overview of Ensemble methods in Python. We'll also compare this to a single tree. This test is close to an off-the-shelf test, in the sense that we are not doing any intelligent hyper-parameter optimization. However, we do use a few well reasoned starting parameters." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from sklearn.ensemble import RandomForestClassifier\n", "from sklearn.tree import DecisionTreeClassifier\n", "import pandas as pd\n", "import course_utils as bd\n", "reload(bd)\n", "\n", "\n", "f = '/Users/briand/Desktop/ds course/hw/Cell2Cell_data.csv'\n", "dat=pd.read_csv(f, header=0, sep=',')\n", "train, test = bd.trainTest(dat, 0.8)\n", "lab = 'churndep'\n", "\n", "\n", "#We'll build a RF and compare to a DT\n", "clf_def = DecisionTreeClassifier(criterion='entropy', min_samples_leaf = 20)\n", "clf_def = clf_def.fit(train.drop(lab, 1), train[lab])\n", "dt_pred = clf_def.predict_proba(test.drop(lab,1))\n", "\n", "rf_def = RandomForestClassifier(criterion='entropy', n_estimators=100)\n", "rf_def = rf_def.fit(train.drop(lab, 1), train[lab])\n", "rf_pred = rf_def.predict_proba(test.drop(lab,1))\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<p>Now compare the forest to the tree using AUC</p>" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nVqlpJzExEcHBwWqfl+O4Kq9FRkbizTffrPK6UqnE/fv3KzVd6YxGXdZ61pDFfPzHSXZiyDusJL+w\n/LV0RQn7X14OW52dyfJKS9XK58CBA8zd3Z1WQiUvZOh/kt7e3uz48eOMMcYKCwvZgQMHmI+PD4uI\niKiStrphpc8rKSlhTk5O5aOSzp07x0xNTdnNmzdZdnY2y87OZllZWWzixIls1KhRjDHGbt68yXg8\nHjt27BhTKpUsIyOD9ezZk73//vvl+X711VfMxcWF/fHHH6yoqIgpFAp2+PBhnYxK6t27NysoKGC3\nb99mrq6u7OjRo9WmPXnyJHv48CHjOI49fvyY9e7dm02bNq1SmrS0NGZqasoePHhQ5fizZ8+yoKCg\navOu6Xuj6ffJsL+F/2ioP5ZHvx9nx/rNZuKUNMYYY6Ucxw4VitiHmenspETMimmeAdGyxhAYyuYx\n2Nrasm7durGNGzdWu3y8OsNVGWNs0aJF5fMY5syZw0aPHl0lTXx8PLO0tGQFBQWMsWc/tDp06MBs\nbW1Zy5Yt2eLFi5lcLq90zK5du1jHjh2ZjY0Nc3V1Za+++io7f/68Jh+7RiUlJWzatGlMIBAwFxcX\n9s0331R6n8fjlc+d+Prrr5mHhweztrZmXl5ebN68eUwqlVZKv3LlStarV69qz6XPeQy0g1sNHuw4\niNTdsQjb/CF4Ld2QoyzFtvxny1uMtbOHLe3JTHSgse1WqA25ubno2bMnrl27BgsLi4YujkF6+vQp\nwsPDce3aNZhXszJzTd8bTb9PFBiewxjDvY2/4cnR8+iy5UNYuTqiUKXCVzlZGMS3RTdrm1r7Ej7+\n+GN8/fXXeikvaVqaY2Ag9UeBQYcUIglufrEN0tQMhP3wAVRCPlIVJYiVFCLY0gqD+LYvPL7iiKPk\n5OQaO60IqQkFBqIJbQcGGpX0j6yTl/D3qEUwtxfAbNNibOTk+CT7CeKkEnSwssFAXs03+epGHFFQ\nIIQ0Vs1+HoNSJseNz39EQeI9tPriPzjS2gVKlRKD+QL4WVjCtJZ5CadOncKgQYMgEAiQkJBAQ1AJ\nIY1es64xFKVl4ezkjwBjIyi3f4RtLewRYmmFeY7OCLS0qjUoAChfH4XmJRBCmopm28eQc/46rr6/\nAQ7Th+PEwA4QmJpijK0QDqbNvhJFGhD1MRBNaLuPoVneBQsS7+Hq0vUw/nw29vu541W+AB2trOu0\n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\n", "text/plain": [ "<matplotlib.figure.Figure at 0x109245210>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from sklearn.metrics import roc_curve, auc, roc_auc_score\n", "import course_utils as bd\n", "reload(bd)\n", "\n", "\n", "bd.plotAUC(test[lab], dt_pred[:,1], 'DT')\n", "bd.plotAUC(test[lab], rf_pred[:,1], 'RF')\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<p>We can see that with little optimization involved, the RF is already a bit better. Let's see how much better we can do with a grid search on both the DT and the RF. We have already covered DT optimization in a different module, so here we'll focus on the input parameters of the RandomForestClassifier object that let us tune the forest.<br><br>\n", "\n", "The following two are forest specific:\n", "<ul>\n", " <li>n_estimators - the number of trees (and bootstrapped samples) to be used</li>\n", " <li>max_features - the number of features that will be randomly sampled for each tree.</li>\n", "</ul>\n", "The default in RandomForestClassifier is max_features=sqrt(total_features), which is generally a good suggestion. The default for n_estimators is 10, which is probably too low. The other design parameters are specific to the individual decision trees, which are covered in the decision tree module.\n", "</p>" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "###Out-of-Bag Error\n", "<p>Usually we would want to use cross-validation for performance tuning. For Random Forests, this becomes problematic, as cross-validation with RF's can be painfully slow. That's because each cross-validation step requires building k*n_estimators trees. One advantage of a random forest is that it performs what is called an \"out-of-bag\" error calculation. Remember that each tree is built from a bootstrap sample of the data, so that for each tree, some portion of the data is not used for that tree. The RF method computes an out-of-bag prediction for each record $[x_i, y_i]$ by averaging the prediction $f^b(x_i,y_i)$ on record $i$ for the bootstrap iterations in which record $i$ was not chosen in the bootstrap. The out-of-bag prediction can then be used to compute out-of-sample error for model selection and validation. This method should be equivalent to $N$-fold cross-validation. \n", "\n", "<br><br>\n", "We'll start by building a tree of oob predictions enabled and then compare the performance to a true hold out set.\n", "\n", "</p>" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<matplotlib.figure.Figure at 0x10ca01f50>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "rf_def = RandomForestClassifier(criterion='entropy', n_estimators=100, oob_score=True)\n", "rf_def = rf_def.fit(train.drop(lab, 1), train[lab])\n", "rf_pred_test = rf_def.predict_proba(test.drop(lab,1))\n", "rf_pred_train = rf_def.predict_proba(train.drop(lab,1))\n", "\n", "bd.plotAUC(test[lab], rf_pred_test[:,1], 'Test')\n", "bd.plotAUC(train[lab], rf_pred_train[:,1], 'Train')\n", "bd.plotAUC(train[lab], rf_def.oob_decision_function_[:,1], 'OOB')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<p>We can see two very important things here. \n", "<ul>\n", " <li>The training AUC is 1.00. This means that the RF perfectly predicts the training set!</li>\n", " <li>The OOB AUC is exactly equal to the test AUC up to 2 digits of precision.</li>\n", "</ul>\n", "Now we'll use OOB error to do model selection." ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "collapsed": false }, "outputs": [], "source": [ "n_est = [50, 100, 200, 500, 1000]\n", "m_feat = [1, 3, 6, 11]\n", "\n", "aucs_oob = {}\n", "aucs_test = {}\n", "\n", "for m in m_feat:\n", " aucs_oob[m] = []\n", " aucs_test[m] = []\n", " for n in n_est:\n", " rf_oob = RandomForestClassifier(criterion='entropy', n_estimators=n, max_features=m, oob_score=True)\n", " rf_oob = rf_oob.fit(train.drop(lab, 1), train[lab])\n", " aucs_oob[m].append(roc_auc_score(train[lab], rf_oob.oob_decision_function_[:,1]))\n", " aucs_test[m].append(roc_auc_score(test[lab], rf_oob.predict_proba(test.drop(lab,1))[:,1]))" ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "<matplotlib.legend.Legend at 0x10e1a7810>" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nolZDKtUAAAAASUVORK5CYII=\n", "text/plain": [ "<matplotlib.figure.Figure at 0x15ad1e350>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#We'll plot in this block\n", "\n", "x = np.log2(np.array(n_est))\n", "for m in m_feat:\n", " plt.plot(x, aucs_oob[m], label='max_feat={}'.format(m))\n", " \n", "plt.title('OOB AUC by Max Feat and N-Estimators')\n", "plt.xlabel('Log2(N-Estimators)')\n", "plt.ylabel('OOB-AUC')\n", "plt.legend(loc=4, ncol=2, prop={'size':10})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<p>We can see in the plot above that the forest gets better with more trees, but we see that this effect tapers off asymptotically. We also see somewhat of a Golidlocks phenomenon with respect to the optimal number of features. Having too few features is suboptimal (i.e., max_feat=1), probably due to high bias in the trees. Conversely, having too many features (max_feat=11) is also bad, and this is because the individual trees are too correlated with each other, which prevents the Bagging approach from reducing the overall variance (see the analysis below to understand the math behind this statement). The right number of features is in the middle. We see that choosing $3$ or $6$ perform relatively the same. $3$ happens to be closer to the good heuristic default, which is max_feat=sqrt(total feats). \n", "<br><br>\n", "Next, for the purpose of educating ourselves, we'll also look at the Test set AUC's on each of the design options above.\n", "</p>" ] }, { "cell_type": "code", "execution_count": 64, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "<matplotlib.legend.Legend at 0x10a612d10>" ] }, "execution_count": 64, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZUAAAEZCAYAAABfKbiYAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XdYlFfaBvB76L0jHVFRUUGqBfVT1Nh710RFY2zZuBqz\niTFNN3E3ltXVJGtLjGDB3ks0UUMsoKCgggoqAiK9d5h2vj9eGRiBAWSGmYHnd11cCczM+54ZZO55\nzjnvOTzGGAMhhBAiBxrKbgAhhJDWg0KFEEKI3FCoEEIIkRsKFUIIIXJDoUIIIURuKFQIIYTIDYUK\nUSoNDQ28ePFC2c1os+bNm4evv/5a2c2o0/fff4+FCxcquxmkiShUVJSRkRGMjY1hbGwMDQ0NGBgY\nSL4/dOhQk48XEBCAPXv2NHi/kpISGBkZYfTo0bVuqysA1q5dizlz5ki+LyoqwooVK9C+fXsYGxvD\n1dUVH3/8MXJzc5vc5qYICgqChoYGVq5cKfXzM2fOQENDA/Pnz5f7OefNmwddXV3J78XY2BjHjh1r\n9jFb8k2ex+OBx+PVeVvVa7pp0yapnzs6OuL69et1PiYpKQkaGhpSr0ljXpfQ0FA4OTlJ/Wz16tX4\n+eefm/BsGs/FxQXXrl1TyLHbOgoVFVVSUoLi4mIUFxejffv2OH/+vOT7WbNmNfl49b1xvOnEiRNw\ndnZGaGgoMjMzm3RcPp+PoUOH4smTJ7h8+TKKi4sRHh4OKysrRERENLnNTcHj8dCpUyccO3YMIpFI\n8vPg4GB06dKl0c+/qedctWqV5PdSXFyMadOmyf08iibr+mcLCwts3LgRJSUlkp815rUsLCxU6deF\nx+PJfN6yCIVCObemdaFQUTNisRjr16+Hq6srrKysMGPGDOTn5wMAKioqMHv2bFhZWcHc3By9e/dG\nVlYWvvzyS9y4cQMfffQRjI2N8fe//73e4wcHB+ODDz5A//79ceDAgQbbU/MPc9++fUhJScGpU6fg\n5uYGALC2tsaXX36JUaNG1XuMCxcuoFOnTrC2tsZnn30Gxhj4fD4sLCwQGxsruV9WVhYMDQ3rrXps\nbW3h4eGBy5cvAwDy8vIQHh6O8ePHS7Vz2rRpsLOzg5mZGQYNGoTHjx8D4ELR29sbP/30EwBAJBKh\nf//+WLduXYOvw5uvSX2/I1nn3717N0JCQrBx40YYGxtjwoQJdR5/+fLlcHZ2hqmpKfz8/HDz5k3J\nbWvXrsX06dMRGBgIExMTuLu74969e5Lbo6Oj4ePjAxMTE8ycORMVFRX1Pg8ej4du3bqhX79+2LJl\nS5Neg/pcvHgRPXr0gImJCRwdHbFlyxaUlZVh1KhRSEtLg7GxMUxMTJCeni5VBVdVQEFBQXB2doal\npSV27tyJyMhI9OzZE+bm5li2bJnkPAkJCRgyZAisrKxgbW2N2bNno7CwEAAwZ84cvHz5EuPGjYOx\nsTH+85//AADOnj2LHj16wNzcHIMHD0ZcXJzkeC4uLti4cSN69uwJY2NjiEQibNiwAY6OjjAxMYGb\nmxtVPlUYUXkuLi7s6tWrjDHGtm7dyvz9/Vlqairj8/ls8eLFbNasWYwxxnbu3MnGjRvHysvLmVgs\nZlFRUayoqIgxxlhAQADbs2ePzPMkJSUxTU1NlpKSwnbv3s169uwpdTuPx2MJCQlSP1uzZg2bM2cO\nY4yxGTNmsHnz5jXpufF4PDZkyBCWn5/PXr58ybp06cJ++eUXxhhjH374IVu1apXkvlu3bmXjx4+v\n8zh79+5lAwYMYCEhIWzGjBmMMcb+97//scWLF7OvvvpKql179+5lJSUljM/nsxUrVjAvLy/JbbGx\nsczc3Jw9efKErVu3jvn7+zOxWFznOefNm8e++uqrWj+X9Ttq6Pzz5s1jX3/9tczX7MCBAywvL4+J\nRCK2efNmZmtryyorKxlj3O9DT0+P/fbbb0wsFrPVq1ezvn37MsYYq6ysZM7Ozmzr1q1MKBSy48eP\nM21t7XrPV/Wa3r9/n5mbm7P8/HzGGGOOjo7sr7/+qvMxiYmJjMfjMaFQWOfttra27ObNm4wxxgoK\nClhUVBRjjLHQ0FDm6Ogodd+1a9ey2bNnSx136dKlrLKykv3+++9MR0eHTZw4kWVnZ7PU1FTWrl07\nSbueP3/Orly5wvh8PsvOzmYDBw5kK1askBy75t8UY4zFx8czQ0NDduXKFSYUCtnGjRuZq6srEwgE\njDHG2rdvz7y9vdmrV69YRUUFi4uLY05OTiw9PZ0xxlhycnKtv422ikJFDdT8A+jWrZvUH0NaWhrT\n1tZmQqGQ/frrr6xfv37s4cOHtY4REBAgebOuz3fffcf8/f0ZY4zl5OQwLS0tFh0dLbm9oVAZNmwY\nW716dZOeG4/HY5cvX5Z8v337djZ06FDGGGO3b99mzs7Oktt8fX3ZsWPH6jxO1RtgeXk5s7GxYYWF\nhaxv374sLCysVqjUlJ+fz3g8niR8GWNs8+bNrEuXLszCwoI9f/683rYHBgYyPT09ZmZmxszMzJi1\ntTVjjDE3N7c6f0cikajB89cXVLKYm5tLfudr1qxhw4YNk9z26NEjpq+vzxhj7K+//mL29vZSj+3X\nr1+DocIYY9OnT5cEfGNCpeo1qfqKi4tjjDHm7OzMdu3axQoLC6Ue9+eff9YKlTVr1tQKlbS0NMnt\nlpaW7OjRo5Lvp0yZwrZu3Vpnu06dOsW8vb0l378ZKt9++63kwwhjjInFYubg4CB5ni4uLmzv3r2S\n2589e8batWsnCS5Sjbq/1ExSUhImTZoEc3NzmJubo3v37tDS0kJWVhbmzJmDESNGYObMmXBwcMCq\nVauk+n8b6gvft2+fpO/b0tISAQEBCA4OltyuqakJgUAg9RiBQABtbW3JY9LS0pr8nGoO0Do7O0uO\n0adPH+jr6yM0NBRxcXFISEjA+PHjZR5LT08PY8aMwXfffYe8vDz4+/tLdX2JRCJ8/vnncHV1hamp\nKTp06AAej4ecnBzJfebOnYuXL19i9OjR6NSpU73n4vF4+PTTT5Gfn4/8/HxkZWUBAJKTk+v8HWVm\nZtZ5fgBS52/If/7zH3Tv3h1mZmYwNzdHYWGh1ONtbGwk/29gYICKigqIxWKkpaXBwcFB6ljt27dv\n1NjCt99+ix07dkieY5WqCSUmJiZ49eqV5Oe5ubmS1yU/Px9du3YFwI3ZXbx4ES4uLggICMDt27cb\n/bzffG76+vq1vq8a+8nMzMTMmTPh6OgIU1NTzJkzR+ZkkfT0dDg7O0u+5/F4cHJyQmpqquRnNf+d\nurq6YuvWrVi7di1sbGwwa9YspKenN+m5tFYUKmrG2dkZly5dkvqDLSsrg52dHbS0tPDNN9/g0aNH\nCAsLw/nz57Fv3z4ADQdKWFgYnj9/jnXr1sHOzg52dnYIDw9HSEgIxGKx5NyJiYlSj0tMTET79u0B\nAO+88w4uX76MsrKyJj2nly9fSv1/zTe+wMBAHDhwAPv378e0adOgo6PT4PHmzp2LLVu2YPbs2bVu\nCwkJwdmzZ3H16lUUFhYiMTERjKvYJff58MMPMXbsWFy6dAm3bt2Sea663pBl/Y7qOn/N4zT0e7px\n4wY2bdqEY8eOoaCgAPn5+TA1NW1UMNjZ2Um9SQJcADZm4L1r166YPHlyrfGlqgklRUVFcHR0bPA4\nfn5+OH36NLKzszFx4kRMnz4dQN3P+20mV1Q95osvvoCmpiZiY2NRWFiI/fv3S/4d13Vse3t7JCcn\nS75njCElJUXq3+Kbj5k1axZu3LgheQ1XrVrV5Pa2RhQqambJkiX44osvJG/E2dnZOHv2LABuWmZM\nTAxEIhGMjY2hra0NTU1NANwnvISEhHqPGxwcjOHDh+PJkyd48OABHjx4gNjYWJSXl+PixYsAgBkz\nZmDdunVITU2FWCzGlStXcP78eUydOhUANwDq5OSEKVOmID4+HmKxGLm5ufj3v/+N3377rd5z/+c/\n/0FBQQFSUlLwww8/YMaMGZLbZs+ejZMnT+LgwYOYO3duo16jQYMG4cqVK1IDt1VKSkqgq6sLCwsL\nlJaW4osvvpC6ff/+/YiOjkZwcDB++OEHBAYGorS0tM7z1PdGLut31ND5bWxsZF63U1xcDC0tLVhZ\nWYHP5+Pbb79FUVFR/S9GDf7+/tDS0sIPP/wAgUCAkydPIjIyslGPBYA1a9Zg7969KCgoaPC+db02\nAoEABw8eRGFhITQ1NWFsbCz17zM3N1fquTQmKOs7Z0lJCQwNDWFiYoLU1NRa06Lf/HuYPn06Lly4\ngGvXrkEgEGDz5s3Q09NDv3796jzX06dPce3aNVRWVkJXVxd6enqS59LWUaiomeXLl2P8+PEYPnw4\nTExM4O/vL5mum5GRgWnTpsHU1BTdu3dHQECAZPbM8uXLcfz4cVhYWGDFihVSx6yoqMCxY8ewbNky\ntGvXTvLl4uKCOXPmSKqdb775Bv369cOAAQNgYWGBzz//HCEhIejevTsAQEdHB1euXIGbmxuGDRsG\nU1NT9OnTB3l5eejbt2+9z2nChAnw9fWFt7c3xo4di/fff19ym5OTE3x8fKChoYEBAwbUe4w3r7cY\nPHgwzMzMat02d+5ctG/fHg4ODnB3d4e/v7/ktpcvX+Ljjz/Gvn37YGBggFmzZsHPz6/WtS/1nbMx\nvyNZ5weABQsW4PHjxzA3N8fkyZNrHXvkyJEYOXIkunTpAhcXF+jr69fqtnmzTVXf6+jo4OTJkwgK\nCoKlpSWOHj2KKVOmNPo1dXFxwdy5cxtViZqZmUldp7J161YAwIEDB9ChQweYmppi9+7dOHjwIADA\nzc0Ns2bNQseOHWFhYYH09PRa52+ocql5+5o1axAVFQVTU1OMGzcOU6ZMkbp99erVWLduHczNzbFl\nyxZ06dIFBw4cwLJly2BtbY0LFy7g3Llz0NLSqvNclZWVWL16NaytrWFnZ4ecnBx8//33Db4ubQGP\nNfXjACEtbMGCBXBwcMC3336r7KYQQhpAoUJUWlJSEry9vXH//n3J2A0hRHVR9xdRWV9//TU8PDzw\n2WefUaAQoiaoUiGEECI3VKkQQgiRm7qnNrQCXl5eePDggbKbQQghasPT0xP3799v1jFabaXy4MED\nyUVtqvK1Zs0apbeB2tR62qSq7aI2qW+b5PFBvNWGCiGEkJZHoUIIIURuKFRaUEBAgLKbUAu1qXFU\nsU2AaraL2tQ4qtgmeWi1U4qbs7MbIYS0RfJ436RKhRBCiNxQqBBCCJEbChVCCCFyQ6FCCCFEbihU\nCCGEyA2FCiGEELmhUCGEECI3FCqEEELkhkKFEEKI3FCoEEIIkRsKFUIIIXJDoUIIIURuKFQIIYTI\nDYUKIYQQuWm1e9QTQtomvoiP6PRoxGbFQldLF4bahjDSMZJ8GepUf6+vpQ8ej6fsJrcqFCqEELWW\nXpyO8FfhCE8JR9irMDzIeABXC1d42XpBKBaiVFCKEn6J1Fcpn/tZpagSBtoG0qHzZgjJCKX6btfV\n1G2zYUWbdBFC1IZAJMCDzAeSAAlPCUcxvxj+jv7cl5M/etn3grGucaOOJxKLUCoolYSMJHTeCKIG\nb3/je5FY1PgQakJoaWtqK/T1lcf7JoUKIURlZZVmITwlHOGvwhGWEoao9Ch0NO8oCRB/R390seyi\nclWBQCRoejDxS1EiqP/+JfwSaGpoyg4h7cZVUm/erqmhCYBCRSYKFULUi1AsRExmDNeV9TpE8srz\n0Nexr6QS6e3QG6Z6pspuqlIwxsAX8eVaUVXd/9i0Y5jSfQqFiiwUKoSotpyyHNx+dVvSlXU37S6c\nTZ2lurLcrNygwaNJqorEGAMDgwZPg0JFFgoVQlSHSCzCo+xHUmMhmaWZ6OPQRxIgfRz6wFzfXNlN\nbdMoVGSgUCFEefLL87kq5HU3VmRaJGyNbNHPqZ+kEulu3V3Sl09UA4WKDBQqhLQMMRPjSfYTqWm9\nqUWp6OXQSxIgfR37wtLAUtlNJQ2gUJGBQoUQxSisKMSd1DuSAIlIjYCVgZXUWIh7O3doadBlcOqG\nQkUGChVCmk/MxHia+1RqWm9SQRL87P0kAdLXsS/aGbZTdlOJHFCoyEChQkjTFVcWIyI1QhIgt1/d\nhqmeqdRYSE+bngq/CI8oB4WKDBQqhMjGGMPzvOdSYyEJeQnwtvOW6sqyNbJVdlNJC6FQkYFChRBp\npfxSRKZFSgLk9qvbMNA2kAoQL1sv6GjqKLupREkoVGSgUCFtGWMMiQWJUmMh8bnx8LTxlFrixMHE\nQdlNJSqEQkUGChXSlpQLynE37a7UEidaGlpSYyE+dj7Q1dJVdlOJCqNQkYFChbRWjDG8LHwpNRby\nOPsx3Nu5S3VlOZk4qdxCi0S1UajIQKFCWosKYQWi0qOkljgRM3F1FeLkD187X+hr6yu7qUTNUajI\nQKFC1NWroldSYyExWTHoZtVNaizExcyFqhAidxQqMlCoEHVQtfVtzbGQCmGF1FiIn70fDHUMld1U\n0gZQqMhAoUJUUV1b33a27Cw1FtLJvBNVIUQpKFRkoFAhyibvrW8JUTQKFRkoVEhLY4whLCUM556e\nU6utb0krIxYDBQVATk7jv375BZg8mUJFFgoV0lLyyvOw/8F+7I7aDZFYhJnuM9HfqX+b3vqWyAlj\nQHFx0wIiLw8wNgasrLgvS8vq/6/vy9wc0NSkUJGFQoUoEmMMt1JuYfe93TgbfxZjuozBIp9FGNh+\nIFUipG6MAWVljQuG3Nzq/9fVbTgUan5ZWADab7fgp8qHyqVLl7BixQqIRCJ88MEHWLVqVa37hIaG\n4uOPP4ZAIICVlRVCQ0NlPjYvLw8zZsxAcnIyXFxccPToUZiZmdV+YhQqRAHyy/Ox78E+SVWyyHcR\n5nrOhZWBlbKbRlpaRYX0m39jvgDA2lo6BGRVEpaWgJ5eiz0llQ4VkUiErl274sqVK3BwcECvXr1w\n6NAhdOvWTXKfgoIC9O/fH5cvX4ajoyNycnJgZWUl87GfffYZrKys8Nlnn2HDhg3Iz8/H+vXraz8x\nChUiJ1VjJbvu7aKqpLUSCLhuo6YERGVl0yoIKyvAwEDZz1QmebxvKmxrtoiICLi6usLFxQUAMHPm\nTJw5c0YqVEJCQjBlyhQ4OjoCAKysrBp87NmzZ/HXX38BAAIDAxEQEFBnqBDSXHVVJVtGbKGqRB0w\nBjx/DmRmNq6rqaSE6zaqq4JwcgK8vWsHhLExQB8qalFYqKSmpsLJyUnyvaOjI+7cuSN1n2fPnkEg\nEGDw4MEoLi7G8uXLMWfOHJmPzczMhI2NDQDAxsYGmZmZinoKpA2qqyrZPno7VSXqoKwMuHoVOH8e\nuHAB0NQEHB2lg8DGBujRo3ZAmJoCGhrKfgatgsJCpTF/gAKBAFFRUbh69SrKysrg7++Pvn371nos\nY6zO4/F4PJnnWbt2reT/AwICEBAQ0Oj2k7aFqhI19fIlFyDnzwM3bgB+fsDYscAnnwBduii7dSov\nNDRUMo4tLwoLFQcHB6SkpEi+T0lJkXRzVXFycoKVlRX09fWhr6+PgQMH4sGDB3B0dJR67KtXr+Dg\nwO37YGNjg4yMDNja2iI9PR3t2tW/N3bNUCHkTVVVye4obgbX6M6jqSpRdSIREBnJhcj580BqKjBq\nFBAYCBw8CNQxaYfU780P2//85z+bfUyF1Xt+fn549uwZkpKSwOfzceTIEYwfP17qPhMmTMDNmzch\nEolQVlaGO3fuoHv37jIfO378eAQHBwMAgoODMXHiREU9BdJK5Zfn44c7P8BjhwcWnF0ATxtPPFv2\nDAcnH8Qgl0EUKKqmqAg4fhyYNw+wswMWLuTCZft2ICMD2LcPmD6dAkVFKKxS0dLSwk8//YQRI0ZA\nJBJhwYIF6NatG3bt2gUAWLx4Mdzc3DBy5Ej07NkTGhoaWLhwIbp37w4AdT4WAD7//HNMnz4de/bs\nkUwpJqQhdVUl/xv9P6pKVNXz59XVSEQE0L8/1621di3wegIPUU108SNp1fLL87H/4X7svrcbQrGQ\nritRVQIBEBYGnDvHBUlhIRciY8cCQ4cCRkbKbmGboNLXqSgbhUrbVbMqORN3BqM7j8Zi38VUlaia\n3Fzg0iUuRC5fBjp1qg4Sb2+ajaUEFCoyUKi0PTWrEoFYgEU+ixDoFUhViapgDHj8uLpb6+FDYPBg\nYNw4YPRobryEKBWFigwUKm0DVSUqrrISCA2tDhLGqquRgIAWXYKENIxCRQYKldaNqhIVlpFRfe3I\ntWuAh0d1kPToQVehqzAKFRkoVFofxhjCX4Vj171dVJWoEsaA6OjqauTZM2DECC5ERo7krlgnaoFC\nRQYKldYjvzwfBx4ewO6o3eCL+FSVqILSUuklUYyMuLGRsWO56b9vufQ6US4KFRkoVNRbXVXJIt9F\nGNSeLk5UmuTk6m6tmzeBXr24EBkzhpZEaSUoVGSgUFFPVJWoEJEIuHOnulsrPZ2bpTV2LDB8OLcI\nI2lVKFRkoFBRH1SVqJDCQuD337kQuXgRsLevHmTv3Ztb+Ze0WhQqMlCoqD6qSlTEs2fV1UhkJDBg\nADc+MmYM4Oys7NaRFkShIgOFimqqqkp239uNM/FnMMp1FFUlLU0g4MZEqoKkuFh6SRRDQ2W3kCgJ\nhYoMFCqqhaoSJcvJ4ZZEOXeO697q3Fl6SRQKdAIKFZkoVJSvZlVyOu40RnUehcW+i6kqaQmMAY8e\nVVcjMTFcFTJ2LDfYbmur7BYSFUShIgOFivIUVBRg/4P9UlXJXM+5sDa0VnbTWreKCuklUXi86mtH\nBg0CdHWV3UKi4ihUZKBQaVmMMdx+dZubwRV/BiNdR1JV0hLS06uvHfnzT6Bnz+pure7dqVuLNAmF\nigwUKi2DqpIWJhZzS6JU7Tvy4oX0kiiWlspuIVFjFCoyUKjICWNAVBRQtcOmjQ1Yu3Z4opGHkOyr\nOJz9J3r3HIVFvZdSVaIopaXAlSvVS6KYmlZXI/360ZIoRG4oVGSgUGmm9HTgwAEgOBgoKwPeew/l\nOjzEP7qOtIT7MC/ko7PABBZFAmgUFXGfkG1sGv6ytga0FLaLdeuRnFw9NnLrFtCnT/WSKK6uym4d\naaUoVGSgUHkLFRXAmTNckISHA5MnA4GBKO/ji0+ufIqQmBCM6jwKi3wWIcAloLoqEQiA7GwgM7Ph\nr7w8wMyscQHUrh2go6Pc16SliETA7dvVQZKZKb0kiomJsltI2gAKFRkoVBqJMe7NLCgIOH4c8PEB\n5s0DJk0CDAyQVZqFCYcnwMXMBT+M/KH5YyUiEXfNRGMCKDsbMDZuXADZ2Kjfhk8FBdw1I+fOAb/9\nBjg6Vndr9epFS6K8pbw87nPRpUtcUeflxX25uwP6+spunWqjUJGBQqUBL18C+/dzf30aGkBgIDB7\nNuDkJLlLXE4cxoSMwSz3Wfh28LfQ4LXwnuFiMfcO0ZgAysriQqWxAaSsq8afPq2uRu7eBQYOrO7W\nqvHak6ZhDAgLA3bt4jJ67Fiu0H75Erh/n5vb8PQp0LFjdchUfdF2L9UoVGSgUKlDaSlw8iQXJNHR\nwPTpXJj06VNr6mloUihmHJ+B9UPXY773fCU1uAkY4z75NyaAMjO5KqCxAWRs/PZTc/l86SVRysqq\nq5EhQwADA/m+Dm1MQQE39LdrF/dSL17M/ZOuaxJcZSXw5El1yNy/z32ZmHDh4u1dHTQdOrTN2dgU\nKjJQqLwmFgM3bnDdW6dPc7OF5s3jLoqrp7so+H4wPv3jUxyeehhDOgxp0ea2CMa49a4aG0AiUeMD\nyMyM69777TcuRP74g9trpCpIvLza5ruVHDHGrXu5axf3GWnECGDJEu76zqa+tIwBSUnSIXP/PlBU\nBHh6Slc0PXq0/iE+ChUZ2nyoJCQA+/ZxX0ZGXJC8957M5TkYY1gTugYHHh7AhXcvoJt1t5Zrryor\nLW18AFVUcB33NZdEsbFR9jNoFYqLgZAQYOdO7k1/0SJg/nxuPoe85eQADx5IVzUvXnCfD2pWNZ6e\n3OeI1oJCRYY2GSpFRcCxY1z3VlwcMGsW1xfQiAUDK4WVeP/s+0jIS8DZWWfRzlABf6ltQUUFN0bV\n2j/StqDoaC5Ijh0DBg/murjeeYd7mVtSeTm3nFrNqubhQ25MpmbXmZcXNzymjgUphYoMbSZURCLg\n2jWue+vCBe6vLjCQ+4TcyDe2nLIcTDoyCbZGttg3cR/0tWmKDFGu0lLg8GGuiyszE1i4EHj/fW7P\nMFUiFgPPn0t3nUVHc+M7VQFTFThdu6r+daoUKjK0+lCJi+Mqkv37ue6VefO4yqSJU1me5T7D6JDR\nmNJtCv499N8tP8OLkBpiYrggOXQI6N+fq0pGjlS/2dUZGVz3Wc2q5uVLbjm2mlVNz57cPBBVQaEi\nQ6sMlfx87uNbcDB3xfXs2VxV4u7+Voe7kXwD045Nw3eDv8NC34VybiwhjVNezl0itXMn9896wQLg\ngw9a3wzr0lKuu6xmRfPoEeDgULuqsbVVTvcZhYoMrSZUhELuKq7gYG4m0YgRXJAMH96s5U5CYkKw\n4tIKHJh8AMM7DZdjgwlpnLg4rio5cADw8+NmcI0Z07ZW8REKuetnak4IiI7mKrM3pzl37qz4io1C\nRQa1D5WHD7kgOXiQu2IrMJC7rsTcvFmHZYxh3fV12BO9B+ffPQ/3dm9X5RDyNiorgVOnuKokLo4b\nJ1m4kLsuhHAYA9LSak9zzsgAPDykJwR4eMj3UicKFRnUMlSys7k5k0FBQG4uMGcOMHcuN8InB3wR\nH4vOLcKj7Ec4O/Ms7Izt5HJcQhry/Dmwezf3OcnDgxsrmTCBJsk1RWFhdfdZVeDExQEuLrW7z6zf\ncjUlChUZ1CZU+HzuIrngYOCvv4Dx47mqZPBguc6ZzC/Px+Sjk2Gqa4qDkw/CUEdJy5SQNkMg4NYn\n3bWLG7QODOSuLencWdktaz34fC5Y3qxqDAxqT3Pu2LHhtxQKFRlUOlQYA+7d44Lk8GHuUt3AQGDq\nVIVMBXmR/wKjD47GmM5jsHHYRmhqqNlUGqJWkpKAn38Gfv2Vu1hwyRJuHS7azbhlMMZNeHhzmnN+\nfvUqAVXHGqD4AAAgAElEQVSB06OH9O+FQkUGlQyVqj1KgoK4i+TmzuW+FNihHJ4SjslHJ+PrgV/j\nw14fKuw8pG0TCrnLpHbtAiIiuImJixcD3WhRBpWRl1d7mvPz59xKzj/+WLXMDYVKvVQmVMrLq/co\nuX2b+8g2bx4wYIDC5wwefXQUf7v4NwRPDMbozqMVei7SNr16BfzyC/fl7MxVJdOm0RLz6qKigpvW\n7OzMjcNQqMig1FBhjNvkKjiYm4Dv68t1b73eo0Txp2fYcGsDtkdux9lZZ+Fl66Xwc5K2QyQCLl/m\nqpIbN7hrbhcv5i7kI+pNHu+bbWhGeAuoa4+S+/db9CougUiApReW4l76PYQvCIeDiUOLnZu0bunp\n3DjJzz9zn2oXL+ZmvBsZKbtlRJXUGyoRERHIycnB6NHS3SYXL16EjY0NfH19Fd44tVBaCpw4wQXJ\n/fvctST79wO9e7f4JbEFFQWYenQq9LT0cGP+DRjp0F87aR6xGLh6latKrl7lurZOnOCKb1VVIhTi\nYFYWLubmooOeHjyMjOBhaIjuBgYwaktXVipJvd1fgwcPxt69e+Hi4iL186SkJMyfPx9//vlnS7Tv\nrSm0+0ssBq5f54Lk9GlukaLAQJl7lChaUkESxoSMwRCXIdg6civN8CLNkp0N7N3LXVtiZMSNlbz7\nLrehlaqKLSnBjrQ0HMrKwiAzM0y1tkZaZSViSksRU1qK+LIy2OnowMPQEB5GRnA3NISHoSG66OtD\nq6WXPFZRCu3+Ki4urhUoAODi4oKcnJxmnVRt1dyjxNiYC5Lvv5e5R0lLiEiNwKQjk7Cq/yr8vc/f\nldoWor4Y4y6V2rWL22Ns0iSue0sJRXejVYrFOJGdjR1paUgoL8dCOzs89PODYx0f7oRiMZ6Xl0tC\n5khWFr4qLcWrykp01dfnQuZ1VeNuaAgnXV3wVPWJq7B6Q6WgoKDeB5WXlyukMSqpao+SoCAgPp4b\nlTx5UmV28Dv15BQWnV+EPeP3YHzX8cpuDlFDeXlc0b1rF7e21JIlwI4dqr35VGJ5OXalpWFvRgY8\nDA2xwtER4y0toS2j4tDS0ICboSHcDA0xrcbPS0UiPC4tRezrsLmSn4/Y0lKUi0SSoKmqajwMDWGu\n6uvXK1m93V+LFy+GlZUV1q1bJ0lrsViMNWvWIDMzE7t3727RhjZVs8o4kYjrQA4O5ibfDxnCVSWj\nRqnMuhKMMWwJ34L/3v4vzsw8A197Fe7kJiqHMSAsjAuSs2e5TSqXLOF6clXgs1KdRIzhYm4udqSl\nIaKoCHNtbbHE3h5dFDSjMpvPlwRNzf+aampKVTUehoboZmAAPXVbn78OCp1SXFJSgg8++AARERHw\n8uKmpD548AB+fn745ZdfYKxKmwDU4a1enJp7lNjackHyFnuUKJpQLMSyi8twK+UWzr97Hs6mzspu\nElEThYXcP+9du7glPhYv5v6ZW1oqu2X1y6isxJ6MDOxOS4Otjg6W2ttjRrt20FfCm7iYMSRXVEhC\npiponpeXo72ubq2qpqO+PjRVNaXr0CLXqSQkJODRo0fg8Xjo3r07OnXq1KwTtpRGvzh5ecCRI1z3\n1suXzd6jRNGKKosw4/gMMMZwdNpRmOiq8MgpUQmMAZGRXJCcPMntmrBkCRAQoLpVCWMMfxUUYEda\nGn7Pz8dUa2sstbeHj4p+mOWLxYgvK5OqamJKSpAtEKCbgYFUVeNuaAhbHR2VHK9RaKjcu3dP8qQZ\nY+DxeLC2toaTmuyc06gXJzqaW7hx5EguSIYNU+nNHFIKUzAmZAz6OfXDT6N/gpaG6raVKF9xMbfo\n9a5dQEEBV5XMnw+0a6fsltWvQCDAvsxM7ExLAwAstbfHHBsbmKnpOEaRUIhHb1Q1MSUlACA1KaDq\nv8ZKfv9RaKgEBATUStK8vDzw+XwcOnRI0iWmqhr14giF3F9eM/coaQlR6VEYf2g8Pu77MVb6r1TJ\nTzlENURHc0Fy5Ag3HLh4MfDOO3Jd9Fru7hUXY0dqKk7k5GCEuTmWOjhgoKlpq/x3zhhDBp9fq6p5\nUlaGdjo6Ut1n7oaG6GpgAJ0W+uUpZZmWu3fvYuXKlbh+/XqzTqxoKrP2lxyciz+H98++j11jd2Fy\nt8nKbg5RQaWlXIjs2sVd+b5oEbcBlr29sltWvzKRCEeysrAjLQ2ZfD4W29tjgZ0dbFRkMkxLEzGG\nFzWmPFdVNcmVlXDV15eqajwMDdFeT0/uoau0tb+8vb0RHR3drBMrWmsJlR/u/ID1N9fj9MzT6O3Q\nW9nNISomNpYLkpAQbubW4sVcb64qT0SKLyvDzrQ07M/IQB8TEyy1t8coS0u1GtBuSeUiEeJej9dU\nVTWxpaUoEonQ442qxsPQEFbNCGWlrP2VmZkJDVWuo1sJkViEjy9/jKuJVxG2IAwuZi7KbhJREeXl\n3DqlO3dye5d88AHX5eWswpMABWIxzuTkYEdaGmJLS/G+nR0ifX3RgZYzbpC+pia8jY3h/cYkhTyB\nQGqq85GsLMSWlkJfU7NWVdPd0BAGLfRJo95KZdmyZbV+lp+fj1u3bmHbtm0YP161L7RT50qlhF+C\nWSdmoVxQjuPTj8NMT4WvQiMtJi6Oq0r27wf8/LgZXGPHqvTcEqRUVODn9HT8kp4OV319LLW3x2Rr\na+jSB1OFYIzhVY2laaqqmvjycjjq6taqalzfWKJGod1fQUFBUv11PB4PlpaW8PPzg42NTbNO2hLU\nNVRSi1Ix7tA4+Nj5YMeYHdDWVM9ZL0Q+KiuBU6e4qiQujhsnWbhQofu6NZuYMfyRn48dqam4XliI\nd9u1wxJ7e7jTcsZKIxCL8ez1eE3VWE1MaSnS+Xy4GRhgq6srBpqZKWdM5eXLlzhy5Ag+/fTTZp1Y\n0dQxVB5kPMC4Q+PwYa8Psar/qlY584U0TkICt5hjUBDg4cGNlUyYoDILOtQph8/H3owM7EpLg7GW\nFpba2+Pddu1oZWAVViIU4nFZGVz09NDu9bUzLTKmkpWVhWPHjuHQoUNIS0vDpEmTmnVSUttvz35D\n4OlA/DT6J0zvMV3ZzSFKIBBwS6bs3Mlt+xoYCNy8CXTurOyW1Y8xhvCiIuxIS8P53FxMsLTEgW7d\n0MfEhD4UqQEjLS30lvPS0/V2bBYVFSEoKAgjRoyAv78/Xrx4gcTERLx48QKbN29u1MEvXboENzc3\ndO7cGRs2bKh1e2hoKExNTeHt7Q1vb2+sW7dOctu2bdvg4eEBd3d3bNu2TfLztWvXwtHRUfKYS5cu\nNeX5qqQdkTvw/tn3cXrmaQqUNig5GfjqK26g/YcfuAsUX74ENm1S3UApFgqxMzUVXnfvYl5cHLyN\njJDQpw+CunVD31Z6fQlpJFYPPT09Nm7cOBYeHi75mYuLS313r0UoFLJOnTqxxMRExufzmaenJ3v8\n+LHUff788082bty4Wo+NiYlh7u7urLy8nAmFQvbOO++w58+fM8YYW7t2Ldu8eXOD55fx1FSGUCRk\nKy+tZF1/7Mqe5z5XdnNICxIIGDtzhrFRoxizsGBs+XLGHj1Sdqsa9rC4mC2Nj2fmN26wSTEx7Pfc\nXCYSi5XdLCIn8njfrLdS+f7775GZmYkPP/wQ69evR0JCQpPCKiIiAq6urnBxcYG2tjZmzpyJM2fO\n1BVqtX4WFxeHPn36QE9PD5qamhg0aBBOnjwp8zHqppRfiqnHpuJe+j2ELQhDJwv1WFONNM+rV8Da\ntdxA+/r1wIwZQEoKsHUr0L27sltXt0qxGAczMzEgKgojHz5EO21txPTqhZPu7hhmYQENqkpIDfWG\nyooVK3Dnzh0cO3YMIpEIEydORHp6OjZs2ICnT582eODU1FSpdcIcHR2RmpoqdR8ej4ewsDB4enpi\n9OjRePz4MQDA3d0dN27cQF5eHsrKynDhwgW8evVK8rgff/wRnp6eWLBggcx9X1RVRkkGAoIDYKJr\ngt/n/A4LfQtlN4kokEjEbXo1YQLQsye3q+KFC9zS84GBgIJWbm+2F+XlWJWQAKfwcARnZOATJyck\n9e2LtR06wEFXV9nNIyqqwYH6Tp064csvv8SXX36JmJgYHDp0CKNGjWqwcmlMn6qPjw9SUlJgYGCA\n3377DRMnTsTTp0/h5uaGVatWYfjw4TA0NIS3t7fkgsulS5fim2++AQB8/fXX+OSTT7Bnz546j792\n7VrJ/wcEBCAgIKDBNilabFYsxoaMxQLvBfhq4FfU99yKZWQAv/7KzeKytuZmcB08yG3Pq6pEjOHC\n6z1L7hYXI9DGBre8vdFZVZOPNEtoaChCQ0Ple9Cm9JWtWbOm0fcNDw9nI0aMkHz/73//m61fv17m\nY1xcXFhubm6tn69evZrt2LGj1s8TExOZu7t7ncdq4lNrEZefX2bWG63ZgQcHlN0UoiAiEWN//MHY\nlCmMmZkxtnAhY3fvKrtVDUuvqGDfJSYyp7Aw1vfePRacns7KhEJlN4u0MHm8bzbpCF5eXo2+r0Ag\nYB07dmSJiYmssrKyzoH6jIwMJn49yHfnzh3Wvn17yW2ZmZmMMcaSk5OZm5sbKywsZIwxlpaWJrnP\nli1b2KxZs+o8v6qFyu67u5nNJht2Pem6sptC5EwgYOzqVcb+9jfG7O0Z8/RkbPt2xl7/k1VZYrGY\nXcvLY9NiY5nZjRtsUVwciyoqUnaziBLJ432zSVclsSYMkGtpaeGnn37CiBEjIBKJsGDBAnTr1g27\ndu0CwG1XfPz4cezYsQNaWlowMDDA4cOHJY+fOnUqcnNzoa2tje3bt8Pk9VzqVatW4f79++DxeOjQ\noYPkeKpKzMT44uoXOPHkBK7Pv44ull2U3SQiBxUVwB9/cJtenTvHDbxPnsztQu3mpuzWyVYgECD4\n9Z4lmgCWOjjg565dYUoXKRI5aPCK+ps3b2LAgAEAAJFIBE1NTdy6dQv9+/dvkQa+LVW4or5cUI65\np+cioyQDp2acgpWBam1LTJqmqAi4eJFbNuXyZcDLiwuSiRNVezHHKpFFRdiZloaTOTkYZWGBpfb2\nGEDXlJAaWmSZlrqWuael7xuWVZqFCYcnoINZB/w64VfoaekprS3k7WVnc1e5nzoFXL8O/N//AZMm\nAePHq/YOilXKRCIcysrCjtRU5AqFWGxnh/ft7NBOldd7IUqj0GVawsPDERYWhuzsbGzZskVyouLi\nYojF4madtLV7kv0EY0LGYHbP2fhnwD/pk6CaSUkBTp/muraiooARI4D33uNmbpmaKrt1jRNXWood\naWk4kJmJfqam+LZDB4ywsKA9S4jC1RsqfD4fxcXFEIlEKC4ulvzcxMQEx48fb5HGqaM/E//EzBMz\nsfGdjQj0ClR2c0gjxcdz1cjJk8CLF8C4ccDHHwPDhgHqsuWHQCzG6ZwcbE9Lw5PSUiyws0OUnx/a\n61GVTFpOg91fycnJaN++PQBuTKWkpASmavBxTRndX0H3g7DqyiocnnIYgzsMbtFzk6ZhDLh/nwuR\nkyeBggKuW2vSJGDgQEBbjXYceFlRgd1padiTkYGu+vpY6uCASVZWLbavOWk9WmRM5d1338XOnTuh\nqamJXr16obCwEMuXL8dnn33WrBMrWkuGCmMM3/z5DUJiQ3Dh3Qtws1Lx6T9tlEgEhIdXB4mWFjfQ\nPnky0Ls3oE7vwWLGcDkvDzvS0nCrsBDv2dhgib09uhsaKrtpRI21SKh4enriwYMHOHjwIKKiorB+\n/Xr4+PggJiamWSdWtJYKlQphBd4/8z4SCxJxZuYZtDNUg9HbNoTPB/78kwuRM2cAW1uuGpk8GXB3\nB9RtiCGbz8evr/csMX+9Z8ksGxsYqvKm9ERttMh+KkKhEAKBAKdPn8bf/vY3aGtr08DzazllOZh4\neCLsje1xbe416GurSed7K1dayk35PXmSmwLs5saFyK1bQCc1XLeTMYZbhYXYkZaGC7m5mGRtjcPd\nu6OXsTH9LRKV02CoLF68GC4uLujZsycGDhyIpKQktRhTUbSnuU8xJmQMpnabin8N/Rc0eGrUd9IK\n5ecD589zQXLtGtedNXkysHEjYG+v7Na9nSKhEAdeX6RYKRZjib09fuzcGRbqNOBD2pwmbyfMGINI\nJIKWil99q8jur+vJ1zHt2DT8a8i/8IHPBwo5B2lYRgY39ffUKW6sZMgQLkjGjgUs1Hjh5wclJdiR\nmooj2dkYamaGpQ4OGPJ6/3BCFKlFxlQyMjLw5ZdfIjU1FZcuXcLjx48RHh6OBQsWNOvEiqaoUDn4\n8CA+vvwxDk4+iGGdhsn9+ES2Fy+4EDl1Cnj0CBg9mguSkSMBdR6jrhCJcCw7GzvS0vCyogKL7O3x\ngZ0d7GmJedKCWiRURo4cifnz5+Nf//oXHj58CIFAAG9vb8TGxjbrxIom71BhjOG7699h7/29OD/r\nPHq06yG3Y5P6McaFR9U1JGlp3L4kkycDgwcD6v6em1Bejp1paQjOyIC3kRGW2ttjrKUltNRpKhpp\nNRQ6UC8UCqGlpYWcnBzMmDED69evBwBoa2urfNeXvFUKK7Hw3ELE5cQhfEE4bI1sld2kVk0sBiIj\nq4OkspILkW3bgP79AXWf6CQUi3H+9Z4lUSUlmGdrizBvb7jSniWkFag3HXr37o2oqCgYGRkhJydH\n8vPbt2+3qYH6vPI8TD4yGRb6FgidFwoDbfrDVwShELhxgwuRU6cAExMuSA4dAnx81G/qb13SKivx\nS3o6fk5Ph5OuLpba2+OMuzv01D0lCamh3lCpKoE2b96MCRMm4MWLF+jXrx+ys7PbzDItCXkJGB0y\nGuO6jMOGdzZAU4P++OWpogK4coULkrNnueXjJ03ilpTv1k3ZrZMPxhiuFRRgR2oqrhYUYIa1Nc57\neMBTlbd/JKQZ6h1TcXR0xMqVK8G4jbxQWVkJxhh0dXWhqamJlStXtnRbm6S5fYNhKWGYcnQKvhn4\nDZb2WirHlrVtxcXctSMnT1YvHz9pErd8/OvVgFqFfIEAQRkZ2JmWBh0NDSy1t8dsGxuYtLGuY6Je\nFDqm8uZCklXKysqadUJ1cCT2CJb9tgzBE4MxqvMoZTdH7eXkcJXIyZPc8vEDBnBdWz/+qB7LxzdW\nDp+PO8XFOJ6djVPZ2RhjaYlf3dzQz8SEpgOTNqPeSkUd9kyR5W0SlzGG729+j513d+LcrHPwtPVU\nUOtavzeXjx8+nAuS0aPVZ/l4WfhiMe6XlOBOURFuFxXhTlERsgUC9DI2xnALC8y3tYU17VlC1EyL\nLNPSVghEAiw5vwTRGdG4/cFt2Bur6WXYSvT0afVA+/Pn6rl8fF0YY0iqqKgOkOJiPCwpgau+Pvqa\nmGCouTm+bN8ebgYG0KCKhLRx9VYqubm5sLS0bOn2yE1TEregogBTj06FgbYBQqaEwEiHBlEbo+by\n8adOAXl51Ys1qtvy8TUVCYWILC6WqkI0eTz0MTFBXxMT9DE2hp+xMYxofIS0Mi1y8aO6auyLk5if\niDEhYzCs4zBsGbGFZng1oGr5+KprSDQ11Xf5eAAQMYZHpaW48zo8bhcVIamiAl5GRlyAvA4SR11d\nGhchrR6FigyNeXHicuIwJHgIPh/wOf7e5+8t1DL19Ndf3DUjp08DNjZciEyaBHh4qNc1JOmVlVyA\nFBfjdlER7hUXw05Hp7oKMTFBT0NDaKtbOhIiBxQqMjTmxakQVuD2q9sIcAlomUapoeRkYMUKICYG\nWLKECxJ1WT6+XCRC1OvB9KoqpFgkkurG6m1iQqv+EvIahYoMythOuDXh84EtW4BNm4Dly4HPPgNU\neatzxhiel5dLxkBuFxXhSVkZuhkYSFUhnfX1qRuLkHrQ7C+iENeuAX/7G1eRREYCHTsqu0W15QkE\niHjdjVVViRhpakoCZJaNDXyMjKBPS6AQ0qKoUiESaWnAJ58AYWHADz8A48erxniJQCxGTGmpVBWS\nxufDz9gYfYyNJVWInbovWUyIklH3lwwUKo0nFAI//QSsWwcsWgR8+aXy9iZhjOFVZaUkQO4UFyO6\nuBguenroU2M2VncDA1oenhA5o+4v0my3bgEffghYWwM3b3L7ubekEqEQ90pKpKoQIWOS6mOtiwv8\njI1hSteEEKIWqFJpo7KygFWrgN9/5wbkp09XfFeXmDHElZVJXVT4rLwcPY2M0MfYWFKFuOjp0WA6\nIUpAlQppMpEI2L0bWLMGmD0bePKE27tEEbL5fKmlTSKLimCprS2pQhbY2cHTyAi61I1FSKtBlUob\nEhnJdXXp6QHbt3MXLspLZR0LLOYKBOj9OkCqKhFaZJEQ1UUD9TJQqFTLy+MG30+fBtavB+bObV5X\nF2MMiTUXWCwqQkxpKTq/XmCxqhurKy2wSIhaoe4vIpNYDAQHA6tXA1OmAI8fA+bmb3esO0VFuJKf\nLwkRbR5PEiAbOnWCr5ERLbBICKFKpbV68IC7gJHP57q6/Pze7jjFQiE+SUjApbw8zGjXTnJdiKMq\nX15PCHkrVKmQWoqKuEH4gweB774DPviAW0n4bVzLz8eC+HgMNTNDbK9etBUuIaRB9C7RSjAGHD4M\n/OMfwMiRwKNH3LUnb6NUJMKqhASczsnB7q5dMVqN99UhhLQsCpVW4MkT4KOPuL3gjx0D+vV7+2Pd\nLCjAvLg49DM1RUyvXjCnFXwJIU1AFwiosdJS4PPPgf/7P26drnv33j5QykUifPL8OaY/fozNrq7Y\n160bBQohpMmoUlFDjHHTg1esAAYM4PY6sbN7++PdKSpC4JMn8DQywkM/P1jRtSSEkLdEoaJmEhKA\nZcuApCQgKAgYPPjtj1UpFmNtUhJ+TU/Hj507Y3q7dvJqJiGkjaLuLzVRUQGsXQv06QMMGgTcv9+8\nQIkqLobfvXt4UlqKh716UaAQQuSCKhU1cPEiV514eQFRUYCz89sfSyAW41/JydieloYtnTrhPRsb\nWryRECI3FCoq7OVLbtzk4UPgf//jpgo3R0xJCQLj4mCro4NoPz840KZWhBA5o+4vFcTnc2t0+fhw\n1UlsbPMCRSgW49/JyRjy4AH+5uCACx4eFCiEEIWgSkXFVO0P37EjcOcOt098czwpLcW8uDiYaGnh\nnq8vnGl5FUKIAlGoqIj09Or94bduBSZMaN5KwiLGsPXVK3yfnIzvOnTAEnt7GjshhCgcdX8pmVDI\nhYiHB+Diwi2vMnFi8wLleVkZBkVH42xODiJ8fbHUwYEChRDSIqhSUaKq/eGtrOSzP7yYMfwvNRX/\nTErC1y4uWObgQPuZEEJaFIWKEmRnA599xu0Pv3kzMGNG8/eHTyovx/vx8SgXixHm44MuBgbyaSwh\nhDQBdX+1IJEI2LkT6NGD2yzryRNg5szm78K4Oy0NvaKiMNLCAje9vSlQCCFKQ5VKC7l7F1i6FNDV\nBa5cAXr2bP4xX1VU4IP4eOQIBAj18kIPQ8PmH5QQQpqBKhUFy8/nwmTsWG6q8PXrzQ8UxhiC0tPh\nc+8eBpiaItzHhwKFEKISqFJRELEY2LePW5p+8mSuq+tt94evKb2yEoufPkVyRQX+8PSEp5FR8w9K\nCCFyQqGiAA8fcrO6+Hzg/Pm33x++JsYYDmdlYcXz51hkb4/jPXpAR4MKTUKIalHou9KlS5fg5uaG\nzp07Y8OGDbVuDw0NhampKby9veHt7Y1169ZJbtu2bRs8PDzg7u6Obdu2SX6el5eHYcOGoUuXLhg+\nfDgKCgoU+RSapKgI+Phj4J13gDlzgPBw+QRKFp+PaY8e4bvkZJz38MB3HTpQoBBCVJLC3plEIhE+\n+ugjXLp0CY8fP8ahQ4fw5MmTWvcbNGgQoqOjER0dja+++goAEBsbi19++QWRkZF48OABzp8/j4SE\nBADA+vXrMWzYMDx9+hRDhw7F+vXrFfUUGq1qf/hu3YDCQu4CxsWLAU3N5h/7RHY2PO/eRUd9fUT5\n+qKXiUnzD0oIIQqisFCJiIiAq6srXFxcoK2tjZkzZ+LMmTO17scYq/WzuLg49OnTB3p6etDU1MSg\nQYNw8uRJAMDZs2cRGBgIAAgMDMTp06cV9RQaJS6Oq0y+/x44ehT49VfA2rr5x80VCPDu48dY/eIF\nTvTogY2dOkFPHilFCCEKpLBQSU1NhZOTk+R7R0dHpKamSt2Hx+MhLCwMnp6eGD16NB4/fgwAcHd3\nx40bN5CXl4eysjJcuHABr169AgBkZmbCxsYGAGBjY4PMzExFPQWZSkuB1aul94fv318+xz6Xk4Oe\nkZFop62N+35+6GdqKp8DE0KIgilsoL4xa035+PggJSUFBgYG+O233zBx4kQ8ffoUbm5uWLVqFYYP\nHw5DQ0N4e3tDs45P6TweT+Z51q5dK/n/gIAABAQEvM1TkfLm/vAPHzZvf/iaCgQCrHj+HNcLCxHS\nvTsGmZnJ58CEEFKH0NBQhIaGyvWYPFZX/5Mc3L59G2vXrsWlS5cAAN9//z00NDSwatWqeh/ToUMH\n3Lt3DxYWFlI//+KLL+Ds7IwlS5bAzc0NoaGhsLW1RXp6OgYPHoy4uLhax+LxeHV2rTVH1f7wiYnc\npllDhsjv2Jfz8rAwPh5jLC2xqWNHGGnRxDxCSMuSx/umwrq//Pz88OzZMyQlJYHP5+PIkSMYP368\n1H0yMzMlTyAiIgKMMUmgZGVlAQBevnyJU6dO4d133wUAjB8/HsHBwQCA4OBgTJw4UVFPQaKiAvjn\nP6v3h3/wQH6BUiwUYnF8PBbGx2NP167Y0aULBQohRG0p7N1LS0sLP/30E0aMGAGRSIQFCxagW7du\n2LVrFwBg8eLFOH78OHbs2AEtLS0YGBjg8OHDksdPnToVubm50NbWxvbt22HyetbT559/junTp2PP\nnj1wcXHB0aNHFfUUAAC//cZVJ56ezd8f/k1/5ufj/fh4DDEzQ0yvXjClMCGEqDmFdX8pW3PLuJr7\nw//4IzBqlPzaVioS4fMXL3AqOxu7unbFGEtL+R2cEELekkp3f6krPh/YsIHbH97Tk9sfXp6Bcquw\nEBcdhMEAABaxSURBVF5376JAKMTDXr0oUAghrQr1t9Tw55/coo8dOshnf/iaykUifJ2YiINZWdje\nuTMmyeNiFkIIUTEUKqjeH/7WLWDbtubvD/+miKIiBMbFwcPQEA/9/GCtoyO/gxNCiApp091fQiEX\nIh4eQPv2wOPHzd8fvqZKsRhfvniBcTExWOvigqM9elCgEEJatTZdqTx5Aly4IJ/94d8UXVyMwLg4\ndNTTwwM/P9jq6sr3BIQQooJo9pecCcRi/PvlS/wvNRWbO3XCbBubRq0uQJrGwsIC+fn5ym4GIWrL\n3NwceXl5Uj+Tx/smhYocxZaUIDAuDu10dPBL165woOpEYZT1oYGQ1qKuvyF5/F216e4veRGKxdiU\nkoItr17h+w4dsMDOjqoTQkibRKHSTHGlpZgXFwdDTU3c9fVFez09ZTeJEEKUpk3P/moOEWPYkpKC\nAdHRmGtriz88PSlQCCFtHlUqb+F5WRnmx8eDB+COry866esru0mEEKISqFJpAjFj+OnVK/SNisJk\nKyuEenlRoBCF4vP5eOedd+Dt7Y1jx441+fFnzpypcxvv+uTl5WHw4MEwNjbGsmXLmny+tq6lf18A\n8PDhQ/j7+8Pd3R09e/ZEZWVlk88rT1SpNFJSeTkWxMejTCzGLR8fdDUwUHaTSBsQFRUFHo+H6Ojo\nt3r8qVOnMG7cOHTr1q1R99fT08O6desQGxuL2NjYtzpnW9bSvy+hUIg5c+bgwIED8PDwQH5+PrS1\ntd/q3HLDWil5PTWxWMx2p6Yyq5s32frkZCYUi+VyXNI8sn6/3P6cb/fVWImJiaxr165s3rx5rEuX\nLuzdd99lly9fZv369WOdO3dmERERLCIigvn7+zNvb2/Wr18/Fh8fzxhjbMuWLez9999njDH28OFD\n5u7uzsrLy2udIzMzk7m6ujJTU1Pm5eXFEhIS2N27d9mgQYOYr68vGzFiBEtPT2eMMbZ7927Wq1cv\n5unpyaZMmcLKysrYrVu3mIWFBevQoYPk8Y21d+9e9tFHHzX+BWmOFviFtdbf14ULF9js2bMb/TrU\nVNffkDzeNylUZEgpL2cj7t9nPpGRLKa4WA6tIvKi7M9DiYmJTEtLi8XGxjKxWMx8fX0lbzxnzpxh\nEydOZMXFxUwoFDLGGPvjjz/YlClTGGPcB5WBAweykydPMj8/PxYWFlbveUJDQ9nYsWMZY4zx+Xzm\n7+/PcnJyGGOMHT58WHLO3NxcyWO++uor9uOPPzLGGJs3bx47ceKE5LZNmzYxLy+vWl/Lly+XOm9Q\nUFDLhUoLaK2/r//+979szpw5bMSIEczHx4dt3Lix0a+JokKFur/qwBjDvsxM/CMhAcscHLDa2Rna\nGjT8RKR16NABPXr0AAD06NED77zzDgDA3d0dSUlJKCgowJw5c/D8+XPweDwIBAIA3AVmQUFB8PDw\nwNKlS+Hv71/vOViNC9Hi4+Px6NEjyXlEIhHs7e0BADExMfjqq69QWFiIkpISjBw5ss5j/OMf/8A/\n/vEPOb0C6qU1/r6EQiFu3ryJu3fvQl9fH0OHDoWvry+GyHOv8yaiUHlDRmUlFj19iqSKCvzesye8\njY2V3SSionRrrJigoaEBndeLhWpoaEAoFOLrr7/G0KFDcerUKSQnJyMgIEBy/6dPn8LY2BipqamN\nPh9jDD169EBYWFit2+bNm4ezZ8/Cw8MDwcHBCA0NldxW80LcTZs2ISQkpNbjBw4ciG3btjW6Leqo\nNf2+Bg0ahK1bt8LJyQkDBw6UbMM+evRoREVFKTVU6OP3a4wxHM7MhOfdu+hpaIi7vr4UKOStMcZQ\nVFQk+WS6d+9eyW2FhYVYvnw5bty4gdzcXJw4caJRx+zatSuys7Nx+/ZtAIBAIMDjx48BACUlJbC1\ntYVAIMCBAwckb0zGxsYoKiqSHOPTTz9FdHR0ra83A6Xmp+W2QN1+X1u3bgUAjBgxAjExMSgvL4dQ\nKMRff/0lqcaUhUIFQDafj2mPHuHb5GSc9/DAuo4doUPdXaQBby7FU/N7DQ0NfPrpp1i9ejV8fHwg\nEokkt69cuRIfffQRXF1dsWfPHnz++efIycmp9xxVj9PR0cHx48exatUqeHl5wdvbG+Hh4QCA7777\nDn369MGAAQOkZg7NnDkTmzZtgq+vL168eNGo5+Xi4oJPPvkEQUFBcHZ2RlxcXONfFBXWGn9fZmZm\nWLlyJXr16gVvb2/4+vpilDy3qn0LbX5ByZPZ2fjbs2eYY2ODb11coKep2QKtI81FC0oS0jy0oKQC\nRBcX4/MXL3CiRw/0MzVVdnMIIUTttflKRSAW08wuNdTaKpWgoKBa4xoDBgzAjz/+qKQWEVlaw+9L\nUZVKmw8Vop7o90tI8ygqVOgjOiGEELmhUCGEECI3FCqEEELkhkKFEBXW0kupR0REwNvbG97e3ujZ\nsyeOHDnS5HO2Zaq0VcGXX34JZ2dnGLfwRdxtekoxIaqupZdS9/DwwL1796ChoYGMjAy4u7tj6tSp\n0KTrtxpFlbYqmDBhApYtW4bOnTu/VVveFlUqhLyFpKQkuLm5Yf78+ejatSvee+89/P777+jfvz+6\ndOmCyMhIREZGol+/fvDx8UH//v3x9OlTAMB///tfLFiwAAC3sKCHhwcqKipqnSMrKwtz5sxBZGQk\nvL298eLFC9y7dw8BAQHw8/PDyJEjkZGRAQD4+eef0bt3b3h5eWHq1KkoLy9HWFgYzp07h08//VTy\n+Ibo6+tD4/UU+/Lycvx/e/ce09T9/gH8XRTnBShIGBdh4hgXe6XIRbeRdRk4cdENosaRAM5Ml81M\njYjisvnDbVFIdIJxGWxhGTNumiWDuaG7OEFBRWUUXVycqKCIyjIQGBTFsuf7h+GE2gL9aTmHds8r\nabTnfM7nPH1O24dz2n4+crncKQqKsx6vyZMn45lnnjEb12xAbGws/Pz8HiVtD+eRxzkeo5z4oTEa\nYT6VHDz0zVbOOpQ6EdGpU6dIoVDQpEmTqKyszOacPCxUVDz0zVbOfLyIhp+qwM3Nzepya68he7xv\n8uUv5nTo/8T5/YozDqUO3P8L9/z587hw4QLmzZsHvV4P+SiOOEGDRgMeTc56vMYaLiqMPSRnGkrd\n2tD3ERERCAkJwaVLlzBr1iyb4xyrnP14jRX8mQpjo4AcbCj1gTeopqYmmEwmAMDVq1fR0NAg+ge9\nUnDU4zU4/rGCiwpjD8kZh1Kvrq4W+l68eDE+/fRTeHh4/P8SM0Y54/ECzKcqCAoKEqYq2LBhA4KC\ngtDb24ugoCC8//77Nmbq0fDYX8wh8fFl7NHw2F+MMcbGPP6gnrExwBmGUv8v4eM1NL78xRwSH1/G\nHg1f/mKMMTbmcVFhjDFmN/yZCnNIXl5eFl8RZYzZzsvLa1T65TMVEQ3+1exY4agxtbe3g4hEu1VU\nVIi6P0eOi2NyjJja29tH5fXLRUVEjvoGLjaOyXZjMS6OyTZjMSZ74KLCGGPMbrioMMYYsxun/Z1K\nZGQkzp49K3UYjDHmMLRaLerr6x+pD6ctKowxxsTHl78YY4zZDRcVxhhjduPQRSU4OBgajQY6nQ6x\nsbEW6ysrKyGXy6HT6aDT6fDhhx+KEldHRwcWLVqEmTNnQqFQCJP0DLZ69WqEhoZCq9XCYDBIHpPY\nufrzzz+Ffel0OsjlcuzatcuinZh5siUmKZ5T27Ztg1KphFqtRmpqKu7evWvRRuznky1xSZGrgoIC\nqNVqqFSqIWdGFDtXI8UkRp6WL18OX19fqNVqYVl7ezsSExMRFhaGuXPnoqOjw+q2P/74IyIiIhAa\nGoq8vLyRd0YOLDg4mNra2oZcX1FRQQsWLBAxovvS09OpuLiYiIju3btHHR0dZuvLy8spKSmJiIhq\namooLi5O8pikyhURUX9/P/n5+dG1a9fMlkuRp5FiEjtPjY2NNGPGDLpz5w4RES1ZsoS++OILszZS\n5MmWuMTO1e+//04qlYp6e3vJZDJRQkICXbp0yayN2LmyJSYx8nTs2DGqq6sjlUolLMvKyqK8vDwi\nIsrNzaWNGzdabGcymSgkJIQaGxupr6+PtFot/fHHH8Puy6HPVICRp9Ecab29dXZ2oqqqCsuXLwcA\njB8/HnK53KzNgQMHkJGRAQCIi4tDR0cHWltbJY0JkG5K0sOHDyMkJARBQUFmy8XOky0xAeLmycPD\nA66urjAajTCZTDAajZg2bZpZGynyZEtcgLi5unDhAuLi4jBx4kSMGzcOzz33HL799luzNmLnypaY\ngNHPU3x8vMWwLINzkZGRgbKyMovtTp8+jaeeegrBwcFwdXXF0qVL8d133w27L4cuKjKZDAkJCYiO\njsZnn31mdf2JEyeg1Woxf/58YX7o0dTY2AgfHx+89tpriIqKwooVK2A0Gs3atLS0mL1ZBQYG4vr1\n65LGJEWuBuzbtw+pqakWy8XOky0xiZ2nqVOnIjMzE0888QQCAgLg6emJhIQEszZS5MmWuMTOlUql\nQlVVFdrb22E0GlFeXm6RB7FzZUtMUr32Wltb4evrCwDw9fW1Wlyt5aulpWXYfh26qBw/fhwGgwGH\nDh3Cxx9/jKqqKrP1UVFRaG5uxtmzZ/H222/jlVdeGfWYTCYT6urq8NZbb6Gurg5TpkxBbm6uRbsH\n/zIZzcERbYlJilwBQF9fH77//nssXrzY6nox82RLTGLn6fLly8jPz0dTUxNu3LiB7u5u7N2716Kd\n2HmyJS6xcxUREYGNGzdi7ty5SEpKgk6ng4uL5VucmLmyJSapXnuDyWQyq3l4mNw4dFHx9/cHAPj4\n+CA5ORmnT582W+/u7o7JkycDAJKSknDv3r1RG0RtQGBgIAIDAxETEwMAWLRoEerq6szaTJs2Dc3N\nzcL969evW710IGZMUuQKAA4dOoRZs2bBx8fHYp3YebIlJrHzVFtbi6effhre3t4YP348UlJScOLE\nCbM2UuTJlrikeE4tX74ctbW1OHr0KDw9PREeHm62XopcjRSTVK89X19f3Lp1CwBw8+ZNPP744xZt\nHsxXc3MzAgMDh+3XYYuK0WjEP//8AwDo6enBzz//bPbNBuD+6d3AXyWnT58GEWHq1KmjGpefnx+C\ngoJw8eJFAPevzSuVSrM2CxcuxJdffgkAqKmpgaenp3AaKlVMUuQKAL7++mu8+uqrVteJnSdbYhI7\nTxEREaipqUFvby+ICIcPH4ZCoTBrI0WebIlLiufUX3/9BQC4du0aSktLLS5hSpGrkWKS6rW3cOFC\nlJSUAABKSkqsniFFR0ejoaEBTU1N6Ovrw/79+7Fw4cLhO37YbxNI7cqVK6TVakmr1ZJSqaStW7cS\nEVFhYSEVFhYSEdHu3btJqVSSVqulOXPm0MmTJ0WJrb6+nqKjo0mj0VBycjLdvn3bLC4iolWrVlFI\nSAhpNBr67bffJI9Jilx1d3eTt7c3dXV1CcukztNIMUmRp7y8PFIoFKRSqSg9PZ3u3r0reZ5siUuK\nXMXHx5NCoSCtVktHjhwhIumfUyPFJEaeli5dSv7+/uTq6kqBgYH0+eefU1tbG73wwgsUGhpKiYmJ\ndPv2bSIiamlpofnz5wvbHjx4kMLCwigkJER4nx0OD9PCGGPMbhz28hdjjLGxh4sKY4wxu+Giwhhj\nzG64qDDGGLMbLiqMMcbshosKY4wxu+GiwhySm5vbI/fxyy+/IDo6GhqNBtHR0aioqDBbn5CQIPzA\n1sXFBevXrxfWbd++HVu2bLHa7+ApGXQ6HdauXTtkDEePHsXJkyeF+0VFRdizZ8+jPCzB1q1b7dIP\nAKxbt85iGCTGrBkvdQCMPQx7jNfk4+ODH374AX5+fjh//jxefPFFYbC/I0eOIDw8HO7u7gCACRMm\noLS0FJs2bYK3t/ew+5fJZKisrLTpV9EVFRVwd3fHnDlzAABvvPHGIz+uAdu2bcM777xjc/uBn6xZ\ne2xvvvkmMjMzER8fb7f4mHPiMxXmNOrr6zF79mxotVqkpKQIkw6dOXNGOHPIysoShvOJjIyEn58f\nAEChUKC3txf37t0DAHz11Vd4+eWXhb5dXV2xcuVK7Ny506ZYrP2meNeuXVAqldBqtUhNTcXVq1dR\nVFSEnTt3QqfTobq6Gjk5OdixYwcAQK/XY926dYiJicHMmTNx5swZJCcnIywsDO+9957Qb3JyMqKj\no6FSqYTRurOzs9Hb2wudToe0tDQAwEcffQS1Wg21Wi1MFtXU1ITw8HBkZGRArVajubkZy5Ytg1qt\nhkajQX5+PgAgNDQUTU1NQ07kxJjA7uMBMCYCNzc3i2VqtZqOHTtGRESbN2+mtWvXEhGRUqmkmpoa\nIiLKzs4mtVptse0333xDiYmJwv2IiAizCeDc3Nyoq6uLgoODqbOzk7Zv3045OTlWY5s+fTqp1WqK\njIykyMhIys/PJyKigIAA6uvrIyKizs5OIiLKycmhHTt2CNsOvq/X6yk7O5uIiAoKCsjf359u3bpF\nd+/epcDAQGpvbyciEv41Go2kUqmE+4NzVFtbS2q1moxGI3V3d5NSqSSDwUCNjY3k4uJCp06dEtoN\nzsPgydzS09Pp4MGDVh8zYwP4TIU5hc7OTnR2dgqXZzIyMnDs2DF0dnaiu7sbcXFxAIDU1FSLs4jz\n588jOzsbRUVFwrIbN25YXL5yd3dHenq61WmPBxu4/GUwGGAwGLBmzRoAgEajQWpqKvbu3Ytx48YJ\n7R+MZ7CBwftUKhVUKhV8fX0xYcIEPPnkk8LosQUFBYiMjMScOXPQ3NyMhoYGi36qq6uRkpKCSZMm\nYcqUKUhJSUFVVRVkMhmmT58uTMcdEhKCK1euYPXq1fjpp5/g4eEh9BEQEICmpqZhHztjXFSYUxrq\njfrB5devX0dKSgr27NmDGTNmjNjv2rVrUVxcjJ6eHgDAv//+i8jISOh0OuTk5Ay7bXl5OVatWoW6\nujrExMSgv79/xP099thjAO5/UWDg/wP3TSYTKisr8euvv6Kmpgb19fXQ6XS4c+eORT8ymczssROR\n8NnJlClThOWenp44d+4c9Ho9CgsL8frrr1vdhrGhcFFhTkEul8PLywvV1dUAgD179kCv10Mul8Pd\n3V2Ya2ffvn3CNh0dHXjppZeQl5cnfFA+ICAgAG1tbRb78fLywpIlS1BcXAyZTAYXFxfU19fDYDCY\nFZUHixcR4dq1a9Dr9cjNzRXOoNzd3YVvmA217VCICF1dXfDy8sLEiRNx4cIF1NTUCOtdXV1hMpkA\n3J9OtqysDL29vejp6UFZWRni4+Mt9tXW1gaTyYSUlBR88MEHZvPu3Lx5E8HBwTbFxv67uKgwh2Q0\nGhEUFCTc8vPzUVJSgqysLGi1Wpw7dw6bN28GABQXF2PFihXQ6XQwGo2Qy+UAgN27d+Py5cvYsmWL\n8PXfv//+GwDw7LPPora2Vtjf4L/QMzMzhXZDef7554U+ly1bhv7+fqSlpUGj0SAqKgpr1qyBXC7H\nggULUFpaiqioKKEgDjUD34PLZTIZ5s2bB5PJBIVCgU2bNpkVx5UrV0Kj0SAtLU2IIzY2FrNnz8aK\nFSug1Wot9tfS0iLEnpaWZjZDqMFgsCi+jD2Ih75nTq+np0e4xJObm4vW1tYRv8VVWVmJ/fv345NP\nPhEjxDHv4sWLWL9+PQ4cOCB1KGyM4zMV5vTKy8uh0+mgVqtx/PhxvPvuuyNuo9fr0dDQYHFp6r+q\nsLAQGzZskDoM5gD4TIUxxpjd8JkKY4wxu+GiwhhjzG64qDDGGLMbLiqMMcbshosKY4wxu+Giwhhj\nzG7+B/qpEHOo59I/AAAAAElFTkSuQmCC\n", "text/plain": [ "<matplotlib.figure.Figure at 0x10a6124d0>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = np.log2(np.array(n_est))\n", "for m in m_feat:\n", " plt.plot(x, aucs_test[m], label='max_feat={}'.format(m))\n", " \n", "plt.title('Test AUC by Max Feat and N-Estimators')\n", "plt.xlabel('Log2(N-Estimators)')\n", "plt.ylabel('Test-AUC')\n", "plt.legend(loc=4, ncol=2, prop={'size':10})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<p>We can see similar patterns in the true holdout evaluation as we did in the OOB evaluation. We also tend to see a few more things. For one thing, having more trees actually hurts the performance for some levels of max_feat. We also see that the best choice for max_feat was indeed $3$.\n", "\n", "\n", "</p>" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "###Feature Importance\n", "<p>Much like with Decision Trees, the Random Forest Classifier has a built in mechanism for evaluating feature importance. Quoting the sklearn documentation:<br><br> \n", "\n", "<i>Features used at the top of the tree contribute to the final prediction of a larger fraction of the input samples. The <b>expected fraction of the samples</b> they contribute to can thus be used as an estimate of the <b>relative importance of the features</b>.</i>\n", "<br><br>\n", "The above computation is made for each feature in each tree and then averaged over all trees in the forest. The Random Forest Classifier returns an attribute with an importance score for each feature, and these scores sum to $1$ across all features.\n", "<br><br>\n", "We'll train a RF on the best options found above and then look at the feature importances.\n", "\n", "</p>" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from sklearn.ensemble import RandomForestClassifier\n", "\n", "rf_best = RandomForestClassifier(criterion='entropy', n_estimators=500)\n", "rf_best = rf_best.fit(train.drop(lab, 1), train[lab])" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "<matplotlib.legend.Legend at 0x1426bb390>" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "<matplotlib.figure.Figure at 0x1057b3d10>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "\n", "cols = train.drop(lab, 1).columns.values\n", "rf_fi = rf_best.feature_importances_\n", "dt_fi = clf_def.feature_importances_\n", "\n", "fig, ax = plt.subplots()\n", "width=0.35\n", "\n", "ax.bar(np.arange(len(cols)), rf_fi, width, color='r', label='RF')\n", "ax.bar(np.arange(len(cols))+width, dt_fi, width, color='b', label='DT')\n", "\n", "ax.set_xticks(np.arange(len(cols)))\n", "ax.set_xticklabels(cols, rotation=45)\n", "plt.title('Feature Importance from DT and RF')\n", "ax.set_ylabel('Normalized Gini Importance')\n", "plt.legend(loc=1)\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "###Why do Random Forests work?\n", "<p>We can show with a little algebra why Random Forests lead to generally better estimation performance.<br><br> Let's say that the variance of a single tree of size $N$ and $p$ features is: $Var(T_b(X))=\\sigma^2$. Similarly the variance of the Random Forest is the variance of the sum of such trees, i.e., $Var(RF(X))=Var(\\frac{1}{B}\\sum\\limits_{b=1}^B \\: T_b(X)).$ Because the invidual trees are trained with overlapping records and features, the individual tree estimates are correlated. Thus, the variance does not factor completely cleanly into a sum of individual tree variances. We'll solve this by using the following relation:<br><br>\n", "\n", "<center>$Var(\\frac{1}{B}\\sum\\limits_{b=1}^B \\: T_b(X))=\\frac{1}{B^2}\\sum\\limits_{i=1}^B\\sum\\limits_{j=1}^B\\:Cov(T_i(X), T_j(X))$</center>\n", "\n", "<center>$=\\frac{1}{B^2}\\sum\\limits_{i=1}^B (\\sum\\limits_{i \\neq j}\\:Cov(T_i(X), T_j(X))+Var(T_i(X))$</center><br><br>\n", "If $\\rho$ is the correlationb etween $T_i(X)$ and $T_j(X)$, then $Cov(T_i(X), T_j(X))=\\rho\\sigma^2$. So then:<br><br>\n", "\n", "<center>$Var(\\frac{1}{B}\\sum\\limits_{b=1}^B \\: T_b(X))=\\frac{1}{B^2}\\sum\\limits_{i=1}^B ((B-1)\\rho\\sigma^2+\\sigma^2)=\\frac{1}{B}((B-1)\\rho\\sigma^2+\\sigma^2)=\\rho\\sigma^2+\\frac{1}{B}(1-\\rho)\\sigma^2$</center><br><br>\n", "This last quantity shows the two factors that reduce the variance of the Random Forest. 1). The term $\\rho\\sigma^2$ shrinks to $0$ as the correlation between trees reduces to $0$, which is achieved by randomly downsampling the features. 2). The right-hand term shinks asymptotically to $0$ as $B$ increases.\n", "\n", "</p>" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [Root]", "language": "python", "name": "Python [Root]" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.12" } }, "nbformat": 4, "nbformat_minor": 0 }