{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "_cell_guid": "8e8588b5-8b9e-5ec6-42d7-08154e2fb09a"
      },
      "source": [
        "pcr1"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "2b95ed56-6417-18b6-ad79-1d66318953ff"
      },
      "outputs": [],
      "source": [
        "from numpy import *\n",
        "import csv\n",
        "\n",
        "def toInt(array):\n",
        "    array=mat(array)\n",
        "    m,n=shape(array)\n",
        "    newArray=zeros((m,n))\n",
        "    for i in xrange(m):\n",
        "        for j in xrange(n):\n",
        "                newArray[i,j]=int(array[i,j])\n",
        "    return newArray\n",
        "    \n",
        "def nomalizing(array):\n",
        "    m,n=shape(array)\n",
        "    for i in xrange(m):\n",
        "        for j in xrange(n):\n",
        "            if array[i,j]!=0:\n",
        "                array[i,j]=1\n",
        "    return array"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "8adef60d-6f47-fedd-fe60-3a2364c5108a"
      },
      "outputs": [],
      "source": [
        "def loadTrainData():\n",
        "    l=[]\n",
        "    with open('train.csv') as file:\n",
        "         lines=csv.reader(file)\n",
        "         for line in lines:\n",
        "             l.append(line) #42001*785\n",
        "    l.remove(l[0])\n",
        "    l=array(l)\n",
        "    label=l[:,0]\n",
        "    data=l[:,1:]\n",
        "    return nomalizing(toInt(data)),toInt(label)  \n",
        "    \n",
        "def loadTestData():\n",
        "    l=[]\n",
        "    with open('test.csv') as file:\n",
        "         lines=csv.reader(file)\n",
        "         for line in lines:\n",
        "             l.append(line)\n",
        "    l.remove(l[0])\n",
        "    data=array(l)\n",
        "    return nomalizing(toInt(data))  \n",
        "   \n",
        "    \n",
        "def loadTestResult():\n",
        "    l=[]\n",
        "    with open('knn_benchmark.csv') as file:\n",
        "         lines=csv.reader(file)\n",
        "         for line in lines:\n",
        "             l.append(line)#28001*2\n",
        "    l.remove(l[0])\n",
        "    label=array(l)\n",
        "    return toInt(label[:,1])  #  label 28000*1\n",
        "    \n",
        "\n",
        "def saveResult(result,csvName):\n",
        "    with open(csvName,'wb') as myFile:    \n",
        "        myWriter=csv.writer(myFile)\n",
        "        for i in result:\n",
        "            tmp=[]\n",
        "            tmp.append(i)\n",
        "            myWriter.writerow(tmp)\n",
        "            \n",
        "from sklearn.neighbors import KNeighborsClassifier  \n",
        "def knnClassify(trainData,trainLabel,testData): \n",
        "    knnClf=KNeighborsClassifier()\n",
        "    knnClf.fit(trainData,ravel(trainLabel))\n",
        "    testLabel=knnClf.predict(testData)\n",
        "    saveResult(testLabel,'sklearn_knn_Result.csv')\n",
        "    return testLabel\n",
        "    \n",
        "\n",
        "from sklearn import svm   \n",
        "def svcClassify(trainData,trainLabel,testData): \n",
        "    svcClf=svm.SVC(C=5.0)   \n",
        "    svcClf.fit(trainData,ravel(trainLabel))\n",
        "    testLabel=svcClf.predict(testData)\n",
        "    saveResult(testLabel,'sklearn_SVC_C=5.0_Result.csv')\n",
        "    return testLabel\n",
        "    \n",
        "\n",
        "from sklearn.naive_bayes import GaussianNB     \n",
        "def GaussianNBClassify(trainData,trainLabel,testData): \n",
        "    nbClf=GaussianNB()          \n",
        "    nbClf.fit(trainData,ravel(trainLabel))\n",
        "    testLabel=nbClf.predict(testData)\n",
        "    saveResult(testLabel,'sklearn_GaussianNB_Result.csv')\n",
        "    return testLabel\n",
        "    \n",
        "from sklearn.naive_bayes import MultinomialNB      \n",
        "def MultinomialNBClassify(trainData,trainLabel,testData): \n",
        "    nbClf=MultinomialNB(alpha=0.1)             \n",
        "    nbClf.fit(trainData,ravel(trainLabel))\n",
        "    testLabel=nbClf.predict(testData)\n",
        "    saveResult(testLabel,'sklearn_MultinomialNB_alpha=0.1_Result.csv')\n",
        "    return testLabel"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "09a6a502-c41b-d3ed-6189-e35dd4ce0af1"
      },
      "outputs": [],
      "source": [
        "def digitRecognition():\n",
        "    trainData,trainLabel=loadTrainData()\n",
        "    testData=loadTestData()\n",
        "    \n",
        "    result1=knnClassify(trainData,trainLabel,testData)\n",
        "    result2=svcClassify(trainData,trainLabel,testData)\n",
        "    result3=GaussianNBClassify(trainData,trainLabel,testData)\n",
        "    result4=MultinomialNBClassify(trainData,trainLabel,testData)\n",
        "    \n",
        "   \n",
        "    resultGiven=loadTestResult()\n",
        "    m,n=shape(testData)\n",
        "    different=0     \n",
        "    for i in xrange(m):\n",
        "        if result1[i]!=resultGiven[0,i]:\n",
        "            different+=1\n",
        "    print (different)"
      ]
    }
  ],
  "metadata": {
    "_change_revision": 0,
    "_is_fork": false,
    "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.0"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}