Format: application/octet-stream
⬇ Download File (8.9 KB)
   1  {
   2   "cells": [
   3    {
   4     "cell_type": "markdown",
   5     "metadata": {},
   6     "source": [
   7      "---\n",
   8      "\n",
   9      "_You are currently looking at **version 1.0** of this notebook. To download notebooks and datafiles, as well as get help on Jupyter notebooks in the Coursera platform, visit the [Jupyter Notebook FAQ](https://www.coursera.org/learn/python-machine-learning/resources/bANLa) course resource._\n",
  10      "\n",
  11      "---"
  12     ]
  13    },
  14    {
  15     "cell_type": "markdown",
  16     "metadata": {
  17      "deletable": true,
  18      "editable": true
  19     },
  20     "source": [
  21      "# Classifier Visualization Playground\n",
  22      "\n",
  23      "The purpose of this notebook is to let you visualize various classsifiers' decision boundaries.\n",
  24      "\n",
  25      "The data used in this notebook is based on the [UCI Mushroom Data Set](http://archive.ics.uci.edu/ml/datasets/Mushroom?ref=datanews.io) stored in `mushrooms.csv`. \n",
  26      "\n",
  27      "In order to better vizualize the decision boundaries, we'll perform Principal Component Analysis (PCA) on the data to reduce the dimensionality to 2 dimensions. Dimensionality reduction will be covered in a later module of this course.\n",
  28      "\n",
  29      "Play around with different models and parameters to see how they affect the classifier's decision boundary and accuracy!"
  30     ]
  31    },
  32    {
  33     "cell_type": "code",
  34     "execution_count": null,
  35     "metadata": {
  36      "collapsed": false,
  37      "deletable": true,
  38      "editable": true
  39     },
  40     "outputs": [],
  41     "source": [
  42      "%matplotlib notebook\n",
  43      "\n",
  44      "import pandas as pd\n",
  45      "import numpy as np\n",
  46      "import matplotlib.pyplot as plt\n",
  47      "from sklearn.decomposition import PCA\n",
  48      "from sklearn.model_selection import train_test_split\n",
  49      "\n",
  50      "df = pd.read_csv('readonly/mushrooms.csv')\n",
  51      "df2 = pd.get_dummies(df)\n",
  52      "\n",
  53      "df3 = df2.sample(frac=0.08)\n",
  54      "\n",
  55      "X = df3.iloc[:,2:]\n",
  56      "y = df3.iloc[:,1]\n",
  57      "\n",
  58      "\n",
  59      "pca = PCA(n_components=2).fit_transform(X)\n",
  60      "\n",
  61      "X_train, X_test, y_train, y_test = train_test_split(pca, y, random_state=0)\n",
  62      "\n",
  63      "\n",
  64      "plt.figure(dpi=120)\n",
  65      "plt.scatter(pca[y.values==0,0], pca[y.values==0,1], alpha=0.5, label='Edible', s=2)\n",
  66      "plt.scatter(pca[y.values==1,0], pca[y.values==1,1], alpha=0.5, label='Poisonous', s=2)\n",
  67      "plt.legend()\n",
  68      "plt.title('Mushroom Data Set\\nFirst Two Principal Components')\n",
  69      "plt.xlabel('PC1')\n",
  70      "plt.ylabel('PC2')\n",
  71      "plt.gca().set_aspect('equal')"
  72     ]
  73    },
  74    {
  75     "cell_type": "code",
  76     "execution_count": null,
  77     "metadata": {
  78      "collapsed": false
  79     },
  80     "outputs": [],
  81     "source": [
  82      "def plot_mushroom_boundary(X, y, fitted_model):\n",
  83      "\n",
  84      "    plt.figure(figsize=(9.8,5), dpi=100)\n",
  85      "    \n",
  86      "    for i, plot_type in enumerate(['Decision Boundary', 'Decision Probabilities']):\n",
  87      "        plt.subplot(1,2,i+1)\n",
  88      "\n",
  89      "        mesh_step_size = 0.01  # step size in the mesh\n",
  90      "        x_min, x_max = X[:, 0].min() - .1, X[:, 0].max() + .1\n",
  91      "        y_min, y_max = X[:, 1].min() - .1, X[:, 1].max() + .1\n",
  92      "        xx, yy = np.meshgrid(np.arange(x_min, x_max, mesh_step_size), np.arange(y_min, y_max, mesh_step_size))\n",
  93      "        if i == 0:\n",
  94      "            Z = fitted_model.predict(np.c_[xx.ravel(), yy.ravel()])\n",
  95      "        else:\n",
  96      "            try:\n",
  97      "                Z = fitted_model.predict_proba(np.c_[xx.ravel(), yy.ravel()])[:,1]\n",
  98      "            except:\n",
  99      "                plt.text(0.4, 0.5, 'Probabilities Unavailable', horizontalalignment='center',\n",
 100      "                     verticalalignment='center', transform = plt.gca().transAxes, fontsize=12)\n",
 101      "                plt.axis('off')\n",
 102      "                break\n",
 103      "        Z = Z.reshape(xx.shape)\n",
 104      "        plt.scatter(X[y.values==0,0], X[y.values==0,1], alpha=0.4, label='Edible', s=5)\n",
 105      "        plt.scatter(X[y.values==1,0], X[y.values==1,1], alpha=0.4, label='Posionous', s=5)\n",
 106      "        plt.imshow(Z, interpolation='nearest', cmap='RdYlBu_r', alpha=0.15, \n",
 107      "                   extent=(x_min, x_max, y_min, y_max), origin='lower')\n",
 108      "        plt.title(plot_type + '\\n' + \n",
 109      "                  str(fitted_model).split('(')[0]+ ' Test Accuracy: ' + str(np.round(fitted_model.score(X, y), 5)))\n",
 110      "        plt.gca().set_aspect('equal');\n",
 111      "        \n",
 112      "    plt.tight_layout()\n",
 113      "    plt.subplots_adjust(top=0.9, bottom=0.08, wspace=0.02)"
 114     ]
 115    },
 116    {
 117     "cell_type": "code",
 118     "execution_count": null,
 119     "metadata": {
 120      "collapsed": false,
 121      "deletable": true,
 122      "editable": true,
 123      "scrolled": false
 124     },
 125     "outputs": [],
 126     "source": [
 127      "from sklearn.linear_model import LogisticRegression\n",
 128      "\n",
 129      "model = LogisticRegression()\n",
 130      "model.fit(X_train,y_train)\n",
 131      "\n",
 132      "plot_mushroom_boundary(X_test, y_test, model)"
 133     ]
 134    },
 135    {
 136     "cell_type": "code",
 137     "execution_count": null,
 138     "metadata": {
 139      "collapsed": false,
 140      "deletable": true,
 141      "editable": true
 142     },
 143     "outputs": [],
 144     "source": [
 145      "from sklearn.neighbors import KNeighborsClassifier\n",
 146      "\n",
 147      "model = KNeighborsClassifier(n_neighbors=20)\n",
 148      "model.fit(X_train,y_train)\n",
 149      "\n",
 150      "plot_mushroom_boundary(X_test, y_test, model)"
 151     ]
 152    },
 153    {
 154     "cell_type": "code",
 155     "execution_count": null,
 156     "metadata": {
 157      "collapsed": false,
 158      "deletable": true,
 159      "editable": true
 160     },
 161     "outputs": [],
 162     "source": [
 163      "from sklearn.tree import DecisionTreeClassifier\n",
 164      "\n",
 165      "model = DecisionTreeClassifier(max_depth=3)\n",
 166      "model.fit(X_train,y_train)\n",
 167      "\n",
 168      "plot_mushroom_boundary(X_test, y_test, model)"
 169     ]
 170    },
 171    {
 172     "cell_type": "code",
 173     "execution_count": null,
 174     "metadata": {
 175      "collapsed": false,
 176      "deletable": true,
 177      "editable": true
 178     },
 179     "outputs": [],
 180     "source": [
 181      "from sklearn.tree import DecisionTreeClassifier\n",
 182      "\n",
 183      "model = DecisionTreeClassifier()\n",
 184      "model.fit(X_train,y_train)\n",
 185      "\n",
 186      "plot_mushroom_boundary(X_test, y_test, model)"
 187     ]
 188    },
 189    {
 190     "cell_type": "code",
 191     "execution_count": null,
 192     "metadata": {
 193      "collapsed": false,
 194      "deletable": true,
 195      "editable": true
 196     },
 197     "outputs": [],
 198     "source": [
 199      "from sklearn.ensemble import RandomForestClassifier\n",
 200      "\n",
 201      "model = RandomForestClassifier()\n",
 202      "model.fit(X_train,y_train)\n",
 203      "\n",
 204      "plot_mushroom_boundary(X_test, y_test, model)"
 205     ]
 206    },
 207    {
 208     "cell_type": "code",
 209     "execution_count": null,
 210     "metadata": {
 211      "collapsed": false,
 212      "deletable": true,
 213      "editable": true
 214     },
 215     "outputs": [],
 216     "source": [
 217      "from sklearn.svm import SVC\n",
 218      "\n",
 219      "model = SVC(kernel='linear')\n",
 220      "model.fit(X_train,y_train)\n",
 221      "\n",
 222      "plot_mushroom_boundary(X_test, y_test, model)"
 223     ]
 224    },
 225    {
 226     "cell_type": "code",
 227     "execution_count": null,
 228     "metadata": {
 229      "collapsed": false,
 230      "deletable": true,
 231      "editable": true
 232     },
 233     "outputs": [],
 234     "source": [
 235      "from sklearn.svm import SVC\n",
 236      "\n",
 237      "model = SVC(kernel='rbf', C=1)\n",
 238      "model.fit(X_train,y_train)\n",
 239      "\n",
 240      "plot_mushroom_boundary(X_test, y_test, model)"
 241     ]
 242    },
 243    {
 244     "cell_type": "code",
 245     "execution_count": null,
 246     "metadata": {
 247      "collapsed": false,
 248      "deletable": true,
 249      "editable": true
 250     },
 251     "outputs": [],
 252     "source": [
 253      "from sklearn.svm import SVC\n",
 254      "\n",
 255      "model = SVC(kernel='rbf', C=10)\n",
 256      "model.fit(X_train,y_train)\n",
 257      "\n",
 258      "plot_mushroom_boundary(X_test, y_test, model)"
 259     ]
 260    },
 261    {
 262     "cell_type": "code",
 263     "execution_count": null,
 264     "metadata": {
 265      "collapsed": false,
 266      "deletable": true,
 267      "editable": true
 268     },
 269     "outputs": [],
 270     "source": [
 271      "from sklearn.naive_bayes import GaussianNB\n",
 272      "\n",
 273      "model = GaussianNB()\n",
 274      "model.fit(X_train,y_train)\n",
 275      "\n",
 276      "plot_mushroom_boundary(X_test, y_test, model)"
 277     ]
 278    },
 279    {
 280     "cell_type": "code",
 281     "execution_count": null,
 282     "metadata": {
 283      "collapsed": false,
 284      "deletable": true,
 285      "editable": true
 286     },
 287     "outputs": [],
 288     "source": [
 289      "from sklearn.neural_network import MLPClassifier\n",
 290      "\n",
 291      "model = MLPClassifier()\n",
 292      "model.fit(X_train,y_train)\n",
 293      "\n",
 294      "plot_mushroom_boundary(X_test, y_test, model)"
 295     ]
 296    },
 297    {
 298     "cell_type": "code",
 299     "execution_count": null,
 300     "metadata": {
 301      "collapsed": true
 302     },
 303     "outputs": [],
 304     "source": []
 305    }
 306   ],
 307   "metadata": {
 308    "kernelspec": {
 309     "display_name": "Python 3",
 310     "language": "python",
 311     "name": "python3"
 312    },
 313    "language_info": {
 314     "codemirror_mode": {
 315      "name": "ipython",
 316      "version": 3
 317     },
 318     "file_extension": ".py",
 319     "mimetype": "text/x-python",
 320     "name": "python",
 321     "nbconvert_exporter": "python",
 322     "pygments_lexer": "ipython3",
 323     "version": "3.6.2"
 324    }
 325   },
 326   "nbformat": 4,
 327   "nbformat_minor": 2
 328  }
 329