{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Bagging with scikit-learn\n", "\n", "Bagging is an ensemble method that focuses on the manipulation of the training data. When bagging, we sample, with replacement, $m$ subsets of the training data, each of $n$ size. We train a model on each of these subsets; when predicting, we then feed the data point through each of the $m$ models we've created, taking the average of them if the model is a regressor, and the majority vote of them if the model is a classifier.\n", "\n", "Using bagging allows us to reduce overfitting in our model; however, there is a catch. Bagging tends to work better with models that are *unstable*, such as decision trees. Models that tend not to change as much with available data, such as KNN, will not see much benefit from bagging." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Using Bagging" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Scikit-learn provides two main methods for using bagging: BaggingClassifier and BaggingRegressor. We'll start by taking a look at our dataset, which consists and Fire and Electric type pokemon." ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Basline: 0.541666666667\n" ] } ], "source": [ "%matplotlib inline\n", "\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "from sklearn import neighbors as ne\n", "import pandas as pd\n", "from matplotlib.colors import ListedColormap\n", "import matplotlib.patches as mpatches\n", "\n", "poke = pd.read_csv(\"./Pokemon.csv\")\n", "poke['TN'] = poke['Type 1'].astype('category').cat.codes\n", "type_mask = poke['Type 1'].isin(['Fire','Electric'])\n", "type_num = {'Fire':0, 'Electric':1}\n", "EorF = poke[type_mask]\n", "\n", "xcol = ['Speed', 'Sp. Atk']\n", "ycol = 'TN'\n", "\n", "cmb = ListedColormap(['#cf3e28', '#f2cb3a'])\n", "\n", "plt.figure()\n", "\n", "plt.scatter(EorF['Speed'].as_matrix(), EorF['Sp. Atk'].as_matrix(), c=EorF[ycol], cmap=cmb, edgecolor='black', label=ycol)\n", "\n", "plt.xlabel(\"Speed\")\n", "plt.ylabel(\"Sp. Atk\")\n", "plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0., handles=[mpatches.Patch(color='#cf3e28', label=\"Fire\"),\n", " mpatches.Patch(color='#f2cb3a', label=\"Electric\")])\n", "\n", "plt.show()\n", "\n", "print(\"Basline: \", EorF[ycol].value_counts().iloc[0] / EorF[ycol].shape[0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next, we'll see how a single decision tree does at predicting the type." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Prediction Accuracy: 0.53125\n" ] } ], "source": [ "from sklearn import tree\n", "from sklearn.model_selection import train_test_split\n", "\n", "X_train, X_test, y_train, y_test = train_test_split(EorF[['Speed', 'Sp. Atk']], EorF[ycol],\n", " test_size=0.33, random_state=151)\n", "\n", "clf = tree.DecisionTreeClassifier()\n", "clf.fit(X_train, y_train)\n", "\n", "preds = clf.predict(X_test)\n", "\n", "print(\"Prediction Accuracy: \", np.equal(preds, y_test).sum() / preds.shape[0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ouch, didn't even meet the baseline...that stings. Rather than trying something else immediately, why don't we first give bagging a try?" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Prediction Accuracy: 0.59375\n" ] } ], "source": [ "from sklearn.ensemble import BaggingClassifier\n", "\n", "# Create a bagging model of 5 models which each hold 1% of the data\n", "bag = BaggingClassifier(base_estimator=tree.DecisionTreeClassifier(), n_estimators=5, max_samples=.1)\n", "bag.fit(X_train, y_train)\n", "\n", "preds = bag.predict(X_test)\n", "\n", "print(\"Prediction Accuracy: \", np.equal(preds, y_test).sum() / preds.shape[0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And we managed to get 6% higher accuracy, beating the baseline (slightly). Now, in reality, you'd certainly want to use something other than a decision tree for this problem; however, I do hope this example has shown you how to use a bagging model, and that it can lead to increased performance on our testing data." ] } ], "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.6.1" } }, "nbformat": 4, "nbformat_minor": 2 }