Source

ml-workshop / 04-RandomForest.ipynb

Full commit
{
 "metadata": {
  "name": "04-RandomForest"
 },
 "nbformat": 3,
 "nbformat_minor": 0,
 "worksheets": [
  {
   "cells": [
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from sklearn.datasets import load_digits"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 2
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "digits = load_digits()\n",
      "print(digits['DESCR'])"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " Optical Recognition of Handwritten Digits Data Set\n",
        "\n",
        "Notes\n",
        "-----\n",
        "Data Set Characteristics:\n",
        "    :Number of Instances: 5620\n",
        "    :Number of Attributes: 64\n",
        "    :Attribute Information: 8x8 image of integer pixels in the range 0..16.\n",
        "    :Missing Attribute Values: None\n",
        "    :Creator: E. Alpaydin (alpaydin '@' boun.edu.tr)\n",
        "    :Date: July; 1998\n",
        "\n",
        "This is a copy of the test set of the UCI ML hand-written digits datasets\n",
        "http://archive.ics.uci.edu/ml/datasets/Optical+Recognition+of+Handwritten+Digits\n",
        "\n",
        "The data set contains images of hand-written digits: 10 classes where\n",
        "each class refers to a digit.\n",
        "\n",
        "Preprocessing programs made available by NIST were used to extract\n",
        "normalized bitmaps of handwritten digits from a preprinted form. From a\n",
        "total of 43 people, 30 contributed to the training set and different 13\n",
        "to the test set. 32x32 bitmaps are divided into nonoverlapping blocks of\n",
        "4x4 and the number of on pixels are counted in each block. This generates\n",
        "an input matrix of 8x8 where each element is an integer in the range\n",
        "0..16. This reduces dimensionality and gives invariance to small\n",
        "distortions.\n",
        "\n",
        "For info on NIST preprocessing routines, see M. D. Garris, J. L. Blue, G.\n",
        "T. Candela, D. L. Dimmick, J. Geist, P. J. Grother, S. A. Janet, and C.\n",
        "L. Wilson, NIST Form-Based Handprint Recognition System, NISTIR 5469,\n",
        "1994.\n",
        "\n",
        "References\n",
        "----------\n",
        "  - C. Kaynak (1995) Methods of Combining Multiple Classifiers and Their\n",
        "    Applications to Handwritten Digit Recognition, MSc Thesis, Institute of\n",
        "    Graduate Studies in Science and Engineering, Bogazici University.\n",
        "  - E. Alpaydin, C. Kaynak (1998) Cascading Classifiers, Kybernetika.\n",
        "  - Ken Tang and Ponnuthurai N. Suganthan and Xi Yao and A. Kai Qin.\n",
        "    Linear dimensionalityreduction using relevance weighted LDA. School of\n",
        "    Electrical and Electronic Engineering Nanyang Technological University.\n",
        "    2005.\n",
        "  - Claudio Gentile. A New Approximate Maximal Margin Classification\n",
        "    Algorithm. NIPS. 2000.\n",
        "\n"
       ]
      }
     ],
     "prompt_number": 3
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# Show the first image\n",
      "X = digits.data\n",
      "im = X[0].reshape(8, 8)\n",
      "plt.imshow(im, cmap=plt.cm.gray)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "pyout",
       "prompt_number": 4,
       "text": [
        "<matplotlib.image.AxesImage at 0x10705ded0>"
       ]
      },
      {
       "output_type": "display_data",
       "png": "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\nJ8o6NgwWBvuBBx6A6667rsq6zFpKA0dVHDuqBjh2cg65BLdWZ62z8/pSWL28nguOf+nDr43GKdT0\nsRq9blpvTMc6cJi1a+eqzwGXnk9Las1/rBA36x5XnT5oFgJ7amoK/vCHP8Bdd91VdX2SLXojrMUl\n2vk55BLwNI4hlsHVXRpEOASWWkubBjmFl8e1NsNrx7jmoUiuuNaW3lRHW1Dz5uPDAl0/LDRxfPTR\nR+G8886DZcuWVV2fxhprrAQLgX3//ffDtddeW3VdjgvzHpM11lgZ5oJ99OhReOKJJ+ArX/lKP+oz\n9Na4k431w9w59gknnABvvPFGP+rSWGONlWTxh7ONNdbYwFgDdp+tmWM31g9rwO6zNXPsxvphDdiN\nNTaE1oBdgb3++uvqsSpc8Weffbb0c1r2/PPP97U87QspjenWgF2BWWBX4Yrv2bOn9HNa1oBdf2vA\nbqyxIbQG7MYaG0JrFT34hs2jm8YaW1jT8O3pp5GaRzeNNVZPa1zxxhobQmvAbqyxIbQG7MYaG0Lr\nO9g7d+6Es846C04//fS+/CLLjTfeCCeffDKcc845lZc1OTkJl1xyCaxduxbOPvts+OlPf1ppeceO\nHYONGzfC+vXrYc2aNfDd73630vLQOp0OTExMwFVXXVV5WatWrYJzzz0XJiYm4IILLqi8vMOHD8Pm\nzZth9erVsGbNGvjrX/9aWVkvvvgiTExMzG5Lly4tr88UfbSZmZnitNNOKw4cOFBMTU0V69atK154\n4YVKy3zqqaeKvXv3FmeffXal5RRFUbz++uvFvn37iqIoinfeeac444wzKr++o0ePFkVRFNPT08XG\njRuL3bt3V1peURTFj3/84+K6664rrrrqqsrLWrVqVfHmm29WXg7a1q1bi1/96ldFUXzQpocPH+5L\nuZ1Op1i+fHnx73//u5Tz9VWx9+zZA5/+9Kdh1apVMDY2Blu2bIGHHnqo0jIvuugi+MQnPlFpGWjL\nly+H9evXAwDAkiVLYPXq1fDaa69VWubixYsB4IPfpet0OnDiiSdWWt6hQ4dgx44dcPPNN/ftqUi/\nynnrrbdg9+7dcOONNwIAwOjoKCxdurQvZZf9K8B9BfvVV1+dU/Hx8XF49dVX+1mFvtnBgwdh3759\nsHHjxkrL6Xa7sH79ejj55JPhkksugTVr1lRa3u233w5333130u+s92KtVgsuu+wy2LBhA9xzzz2V\nlnXgwAFYtmwZbNu2DT7zmc/AN77xDXj33XcrLROt7F8B7ivYx8sLLUeOHIHNmzfD9u3bYcmSJZWW\n1W63Yf/+/XDo0CF46qmnYNeuXZWV9cgjj8BJJ50EExMTfVPRp59+Gvbt2wePPvoo/OIXv4Ddu3dX\nVtbMzAzs3bsXbrnlFti7dy+ccMIJcOedd1ZWHhr+CvBXv/rV0s7ZV7BPOeUUmJycnN2fnJyE8fHx\nflahcpuenoZrrrkGbrjhBrj66qv7Vu7SpUvhyiuvhOeee66yMp555hl4+OGH4dRTT4Vrr70W/vSn\nP8HWrVsrKw8AYMWKFQAAsGzZMti0aVOlX3gZHx+H8fFxOP/88wEAYPPmzbB3797KykOr4leA+wr2\nhg0b4OWXX4aDBw/C1NQUPPjgg/ClL32pn1Wo1IqigJtuugnWrFkDt912W+XlvfHGG3D48GEAAHjv\nvffg8ccfh4mJicrKu+OOO2BychIOHDgADzzwAFx66aVw3333VVbeu+++C++88w4AfPCjmo899lil\nTzeWL18OK1euhJdeegkAPpj3rl27trLy0Cr5FeBSluASbMeOHcUZZ5xRnHbaacUdd9xReXlbtmwp\nVqxYUSxatKgYHx8v7r333srK2r17d9FqtYp169YV69evL9avX188+uijlZX3j3/8o5iYmCjWrVtX\nnHPOOcWPfvSjysritmvXrspXxV955ZVi3bp1xbp164q1a9f2pb/s37+/2LBhQ3HuuecWmzZtqnxV\n/MiRI8UnP/nJ4u233y71vD19CaSxxhqrpzVvnjXW2BBaA3ZjjQ2hNWA31tgQWgN2Y40NoTVgN9bY\nEFoDdmONDaH9P8aBWGceKCHzAAAAAElFTkSuQmCC\n"
      }
     ],
     "prompt_number": 4
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# Target of first sample\n",
      "y = digits.target\n",
      "print(y[0])"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "0\n"
       ]
      }
     ],
     "prompt_number": 5
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# Train a classifier\n",
      "from sklearn.ensemble import RandomForestClassifier\n",
      "clf = RandomForestClassifier()\n",
      "X, y = digits.data, digits.target\n",
      "clf.fit(X, y)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "pyout",
       "prompt_number": 6,
       "text": [
        "RandomForestClassifier(bootstrap=True, compute_importances=False,\n",
        "            criterion='gini', max_depth=None, max_features='auto',\n",
        "            min_density=0.1, min_samples_leaf=1, min_samples_split=1,\n",
        "            n_estimators=10, n_jobs=1, oob_score=False,\n",
        "            random_state=<mtrand.RandomState object at 0x1002ab2e8>,\n",
        "            verbose=0)"
       ]
      }
     ],
     "prompt_number": 6
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# Check accuarcy\n",
      "print(clf.score(X, y))"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "0.999443516973\n"
       ]
      }
     ],
     "prompt_number": 7
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "### Use Cross Validation"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from sklearn.cross_validation import cross_val_score\n",
      "values = cross_val_score(clf, X, y)\n",
      "print(values)\n",
      "print(values.mean())"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "[ 0.93155259  0.94991653  0.93656093]\n",
        "0.939343350028\n"
       ]
      }
     ],
     "prompt_number": 11
    }
   ],
   "metadata": {}
  }
 ]
}