"
]
},
"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": [
"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",
"
\n",
"When to use Bagging
\n",
"According to the original Bagging paper 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",
"
\n",
"\n",
"##Random Forests\n",
"###The Basic Algorithm\n",
"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:
\n",
"Assume we have a data matrix $D=[X,Y]$ with $N$ records and $M$ features.
\n",
"\n",
"Train
\n",
"For each $b$ of $B$ iterations:\n",
"
\n",
" - Draw a bootstrap sample $D^b$ of size $N$ from $D$.
\n",
" - Sample $p$ features from $X$, where $p<\n",
"
- Grow a Decision Tree $T_b(X)$ on this data
\n",
"
\n",
"
\n",
"Score
\n",
"Take the average of all of the tree predictions, i.e.
\n",
"$RF(x)=\\frac{1}{B}\\sum\\limits_{b=1}^B \\: T_b(x)$\n",
"\n",
"\n",
"\n",
"\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We'll start by building a forest using SKlearn.ensemble. Check out here 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": [
"
Now compare the forest to the tree using AUC
"
]
},
{
"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": [
""
]
},
"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": [
"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.
\n",
"\n",
"The following two are forest specific:\n",
"
\n",
" - n_estimators - the number of trees (and bootstrapped samples) to be used
\n",
" - max_features - the number of features that will be randomly sampled for each tree.
\n",
"
\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",
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"###Out-of-Bag Error\n",
"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",
"
\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",
"
"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"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": [
"We can see two very important things here. \n",
"
\n",
" - The training AUC is 1.00. This means that the RF perfectly predicts the training set!
\n",
" - The OOB AUC is exactly equal to the test AUC up to 2 digits of precision.
\n",
"
\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": [
""
]
},
"execution_count": 61,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nolZDKtUAAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"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": [
"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",
"
\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",
"
"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 64,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nzG7+B/qpEHOo59I/AAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
},
"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": [
"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",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"###Feature Importance\n",
"Much like with Decision Trees, the Random Forest Classifier has a built in mechanism for evaluating feature importance. Quoting the sklearn documentation:
\n",
"\n",
"Features used at the top of the tree contribute to the final prediction of a larger fraction of the input samples. The expected fraction of the samples they contribute to can thus be used as an estimate of the relative importance of the features.\n",
"
\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",
"
\n",
"We'll train a RF on the best options found above and then look at the feature importances.\n",
"\n",
"
"
]
},
{
"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": [
""
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"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",
"We can show with a little algebra why Random Forests lead to generally better estimation performance.
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:
\n",
"\n",
"
$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))$\n",
"\n",
"$=\\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))$
\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:
\n",
"\n",
"$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$
\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",
""
]
},
{
"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
}