{"cells":[{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"c8466a77-5114-94ac-02d3-1878e24f7668"},"outputs":[],"source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load in \n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the \"../input/\" directory.\n# For example, running this (by clicking run or pressing Shift+Enter) will list the files in the input directory\n\nfrom subprocess import check_output\nprint(check_output([\"ls\", \"../input\"]).decode(\"utf8\"))\n\nfrom numpy import *\nimport csv\n\ndef 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    \ndef 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\n    \ndef 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)  #label 1*42000  data 42000*784\n    #return trainData,trainLabel\n    \ndef loadTestData():\n    l=[]\n    with open('test.csv') as file:\n         lines=csv.reader(file)\n         for line in lines:\n             l.append(line)#28001*784\n    l.remove(l[0])\n    data=array(l)\n    return nomalizing(toInt(data))  #  data 28000*784\n    #return testData\n    \ndef 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#result是结果列表 \n#csvName是存放结果的csv文件名\ndef 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            \n#调用scikit的knn算法包\nfrom sklearn.neighbors import KNeighborsClassifier  \ndef knnClassify(trainData,trainLabel,testData): \n    knnClf=KNeighborsClassifier()#default:k = 5,defined by yourself:KNeighborsClassifier(n_neighbors=10)\n    knnClf.fit(trainData,ravel(trainLabel))\n    testLabel=knnClf.predict(testData)\n    saveResult(testLabel,'sklearn_knn_Result.csv')\n    return testLabel\n    \n#调用scikit的SVM算法包\nfrom sklearn import svm   \ndef svcClassify(trainData,trainLabel,testData): \n    svcClf=svm.SVC(C=5.0) #default:C=1.0,kernel = 'rbf'. you can try kernel:‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’  \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#调用scikit的朴素贝叶斯算法包,GaussianNB和MultinomialNB\nfrom sklearn.naive_bayes import GaussianNB      #nb for 高斯分布的数据\ndef 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    \nfrom sklearn.naive_bayes import MultinomialNB   #nb for 多项式分布的数据    \ndef MultinomialNBClassify(trainData,trainLabel,testData): \n    nbClf=MultinomialNB(alpha=0.1)      #default alpha=1.0,Setting alpha = 1 is called Laplace smoothing, while alpha < 1 is called Lidstone smoothing.       \n    nbClf.fit(trainData,ravel(trainLabel))\n    testLabel=nbClf.predict(testData)\n    saveResult(testLabel,'sklearn_MultinomialNB_alpha=0.1_Result.csv')\n    return testLabel\n\n\ndef 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    #将结果与跟给定的knn_benchmark对比,以result1为例\n    resultGiven=loadTestResult()\n    m,n=shape(testData)\n    different=0      #result1中与benchmark不同的label个数，初始化为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}