{"nbformat_minor": 1, "nbformat": 4, "cells": [{"source": ["# \u4e5d\u7ae0 KNN \u6559\u7a0b \n"], "metadata": {"_uuid": "3c3a77fabcccc522179cd30b2f8341cef622065f", "_cell_guid": "3c9a8553-77e1-4adb-8ff3-fb048a3ef876"}, "cell_type": "markdown"}, {"outputs": [], "source": ["import numpy as np # \u6570\u7ec4\u5e38\u7528\u5e93\n", "import pandas as pd # \u8bfb\u5165csv\u5e38\u7528\u5e93\n", "import matplotlib.pyplot as plt # \u753b\u56fe\u5e38\u7528\u5e93"], "execution_count": null, "metadata": {"_uuid": "05f3d503b832bfd7807aa8a746978073606b25ec", "collapsed": true, "_cell_guid": "01387841-ca92-465f-a983-e1b887447984"}, "cell_type": "code"}, {"source": ["\u4ece `../train.csv` and `../test.csv` \u6587\u4ef6\u91cc\u9762\u8bfb\u5165 numpy arrays.\n", "\n", "\u5bfc\u5165\u6570\u636e\u540e\u6253\u5370shape\u67e5\u770b\u662f\u5426\u6570\u636e\u662f\u5426\u5b8c\u6574\n", "\n", "\u5bfc\u5165\u6570\u636e\u5dee\u4e0d\u591a10\u79d2"], "metadata": {"_uuid": "f987d6fff2a091c7377ff8d50d4cb05926c2dc61", "_cell_guid": "0bf595cd-d743-4238-b869-d1085a4c6c01"}, "cell_type": "markdown"}, {"outputs": [], "source": ["\n", "data_dir = \"../input/\"\n", "\n", "# load csv files to numpy arrays\n", "def load_data(data_dir, train_row):\n", "    train = pd.read_csv(data_dir + \"train.csv\")\n", "    print(train.shape)\n", "#     print(train.head())\n", "#     print(train.shape)\n", "#     print(train.head())\n", "#     print(train[0:])\n", "    X_train = train.values[0:train_row,1:] # \u53d6\u4e0b\u6807\u4e3a1-784\u7684\u5217\uff08pixel0 - pixel783\uff09\n", "    y_train = train.values[0:train_row,0] # \u53d6\u4e0b\u6807\u4e3a0\u7684\u5217 (label)\n", "    \n", "    \n", "    Pred_test = pd.read_csv(data_dir + \"test.csv\").values  # \u89e3\u91ca value\n", "#     print(Pred_test.shape)\n", "#     print(pd.read_csv(data_dir + \"test.csv\").head())\n", "    return X_train, y_train, Pred_test\n", "\n", "train_row = 5000 # \u5982\u679c\u60f3\u53d6\u5168\u90e8\u6570\u636e\uff0c\u8bbe\u7f6e\u4e3a\u6700\u5927\u503c 42000\n", "Origin_X_train, Origin_y_train, Origin_y_test = load_data(data_dir, train_row)\n", "\n"], "execution_count": null, "metadata": {"_uuid": "9071a16ea31a330f7c3386457deea5c1fce8bcb8", "_cell_guid": "8cd4978a-631f-472a-93b2-47560bb9126c"}, "cell_type": "code"}, {"outputs": [], "source": ["print(Origin_X_train.shape, Origin_y_train.shape, Origin_y_test.shape)"], "execution_count": null, "metadata": {"_uuid": "4a73570857961eacd4015dc8e4d7a686438d28b7", "_cell_guid": "660f22f9-c7ae-4d47-87da-b951504ea38d"}, "cell_type": "code"}, {"source": ["# \u7528\u56fe\u50cf\u5c55\u793a\u4e00\u4e0b\u6570\u636e\u96c6"], "metadata": {"_uuid": "35f98d09e1b005b21082d8a066e11bf5f4a43b7a", "_cell_guid": "40f15f3c-3537-4e5b-b76c-930c6c547cf0"}, "cell_type": "markdown"}, {"outputs": [], "source": ["import matplotlib\n", "import matplotlib.pyplot as plt\n", "row = 3\n", "# \u5c55\u793a\u7b2ci\u4e2a\u56fe\n", "# print (X_train[row].reshape((28, 28)))\n", "\n", "print (Origin_y_train[row])\n", "\n", "plt.imshow(Origin_X_train[row].reshape((28, 28)))\n", "plt.show()"], "execution_count": null, "metadata": {"_uuid": "e783d6439d696218d8a26f4fa69443f600570022", "scrolled": true, "_cell_guid": "d2c795fb-68bc-4e36-a117-e36c1d1062a6"}, "cell_type": "code"}, {"source": ["\n", "\u5c55\u793a\u90e8\u5206\u6570\u636e\u770b\u770b\u56fe\u7247\u662f\u4ec0\u4e48\u6837\u5b50\u7684\u3002\uff08\u6709\u5174\u8da3\u7684\u540c\u5b66\u53ef\u4ee5\u81ea\u5df1\u770b\uff09"], "metadata": {"_uuid": "9ec99f8d60a171b3b163ea7044fc57699fe0148d", "_cell_guid": "857759ae-6cf7-4f23-9fa6-8a7c9a349c95"}, "cell_type": "markdown"}, {"outputs": [], "source": ["classes = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"]\n", "rows = 4\n", "\n", "print(classes)\n", "for y, cls in enumerate(classes):\n", "    idxs = np.nonzero([i == y for i in Origin_y_train])\n", "    idxs = np.random.choice(idxs[0], rows)\n", "    for i , idx in enumerate(idxs):\n", "        plt_idx = i * len(classes) + y + 1\n", "        plt.subplot(rows, len(classes), plt_idx)\n", "        plt.imshow(Origin_X_train[idx].reshape((28, 28)))\n", "        plt.axis(\"off\")\n", "        if i == 0:\n", "            plt.title(cls)\n", "        \n", "\n", "plt.show()"], "execution_count": null, "metadata": {"_uuid": "943db1c0c54e5ce920b1190dc998c746e65ace79", "_cell_guid": "1bd7c9b4-8e36-4ea2-ab9e-152c5e982eb1"}, "cell_type": "code"}, {"source": ["\u628a\u539f\u672c\u7684\u8bad\u7ec3\u6570\u636e\u62c6\u5206\u6210\u4e3a20%\u6d4b\u8bd5\u96c6\uff088400\u4e2a\uff09\uff0c80%\u8bad\u7ec3\u96c6\uff0833600\u4e2a\uff09\n", "\n", "\u600e\u4e48\u68372/8\u5206"], "metadata": {"_uuid": "96325f48332b9cc7bc901a09ca26b800b0216203", "_cell_guid": "d839fd15-cae4-4930-bab0-9edd7bfa9f17"}, "cell_type": "markdown"}, {"outputs": [], "source": ["from sklearn.model_selection import train_test_split\n", "\n", "X_train,X_test, y_train, y_test = train_test_split(Origin_X_train,\n", "                                                   Origin_y_train,\n", "                                                   test_size = 0.2,\n", "                                                   random_state = 0)\n", "# \u89e3\u91ca\u4e00\u4e0brandom \u90a3\u4e2a\u968f\u673a\u51fd\u6570\u968f\u673a\u79cd\u5b50\u662f\u4ec0\u4e48\u3002 \u968f\u673a\u79cd\u5b50\u4e00\u6837\uff0c\u90a3\u4e48\u7ed3\u679c\u662f\u4e00\u6837\u7684\u3002\n", "\n", "print(X_train.shape, X_test.shape, y_train.shape, y_test.shape)"], "execution_count": null, "metadata": {"_uuid": "e4c7333c2f340f2321c55024823da48b48acf210", "_cell_guid": "aa1c44b3-35ac-44ba-97fc-87da97edcaa5"}, "cell_type": "code"}, {"source": ["\n", "\u4e0b\u9762\u8fdb\u884cKNN\u6a21\u578b\u8bad\u7ec3\n", "\u5982\u679c\u662f\u5927\u6570\u636e\uff0c\u9700\u89811.5\u5c0f\u65f6\u8dd1\u5b8c"], "metadata": {"_uuid": "b258eac398bd2c330c655b341ed0e902cbbf8a19", "_cell_guid": "6bb6a797-7cbe-4011-9585-3c6363cd33a8"}, "cell_type": "markdown"}, {"outputs": [], "source": ["import time\n", "from sklearn.metrics import accuracy_score,classification_report,confusion_matrix\n", "from sklearn.neighbors import KNeighborsClassifier\n", "\n", "ans_k = 0\n", "\n", "k_range = range(1,8)\n", "scores = []\n", "\n", "# \u8fd9\u4e2a\u5730\u65b9\u901a\u8fc7\u679a\u4e3e\u6240\u6709\u7684k\u503c\u6765\u53d6\u627e\u5230\u6700\u597d\u7684k\u503c\u9884\u6d4b\u6570\u636e\n", "for k in k_range:\n", "    print(\"k = \" + str(k) + \" begin \")\n", "    start = time.time()\n", "    knn = KNeighborsClassifier(n_neighbors=k)\n", "    knn.fit(X_train,y_train)\n", "    y_pred = knn.predict(X_test)\n", "    accuracy = accuracy_score(y_test,y_pred)\n", "    scores.append(accuracy)\n", "    end = time.time()\n", "    print(classification_report(y_test, y_pred))  \n", "    print(confusion_matrix(y_test, y_pred))  \n", "    \n", "    print(\"Complete time: \" + str(end-start) + \" Secs.\")\n"], "execution_count": null, "metadata": {"_uuid": "d0f2323553d8d7c42628ec6c4caa637f7c145932", "_cell_guid": "e3ad8287-d3ad-4d7c-95c1-995671efda20"}, "cell_type": "code"}, {"source": ["# \u901a\u8fc7\u8bad\u7ec3\u6211\u4eec\u53ef\u4ee5\u627e\u5230\u6700\u597d\u7684\u6d4b\u8bd5\u6570\u636e\u96c6\uff0c\u6253\u5370\u51faAccuracy\u7684\u56fe"], "metadata": {"_uuid": "0c3a365a41bcc47aa7e7b8014384acef760f1ea9", "_cell_guid": "cdf8dd58-5ebd-4f1c-99c9-80386bf260c3"}, "cell_type": "markdown"}, {"outputs": [], "source": ["\n", "print (scores)\n", "plt.plot(k_range,scores)\n", "plt.xlabel('Value of K')\n", "plt.ylabel('Testing accuracy')\n", "plt.show()"], "execution_count": null, "metadata": {"_uuid": "452994d7ffdd837d90496fe9b6e43e260597250d", "_cell_guid": "cc3dbf0e-da0f-4f24-88bc-1e370fc890e7"}, "cell_type": "code"}, {"source": ["# \u9884\u6d4b\u6d4b\u8bd5\u6570\u636e\u96c6\u7684\u7ed3\u679c\n"], "metadata": {"_uuid": "627da162f04d4f92e192d4a850315e2f8b8726db", "_cell_guid": "34dad727-b11e-4133-827f-bec04568f5de"}, "cell_type": "markdown"}, {"outputs": [], "source": ["k = 3\n", "\n", "knn = KNeighborsClassifier(n_neighbors=k)\n", "knn.fit(Origin_X_train,Origin_y_train)\n", "y_pred = knn.predict(Origin_y_test)"], "execution_count": null, "metadata": {"_uuid": "533bf5e813ac0190eab49afb86c25c9a9fb57982", "collapsed": true, "_cell_guid": "0c448c8b-5462-444f-a602-c5e8d4a32ead"}, "cell_type": "code"}, {"source": ["# \u9a8c\u8bc1\u4e00\u4e0b\u7ed3\u679c"], "metadata": {"_uuid": "a5a6a6dde71eef69f195a07db195b041eb929a62", "_cell_guid": "3ada6f15-4071-47d5-95f3-56cbb3eafdba"}, "cell_type": "markdown"}, {"outputs": [], "source": ["print (y_pred[200])\n", "plt.imshow(Origin_y_test[200].reshape((28, 28)))\n", "plt.show()"], "execution_count": null, "metadata": {"_uuid": "604f6512b4120252bbdc5a5d8572c88467487830", "_cell_guid": "41dd25b2-7033-45fb-ae98-0261d6969c24"}, "cell_type": "code"}, {"source": ["# \u9884\u6d4b\u4e4b\u540e\uff0c\u6211\u4eec\u628a\u9884\u6d4b\u597d\u7684\u6570\u636e\u6253\u5370\u5230\u6587\u4ef6Digit_Recogniser_Result.csv\u91cc\u9762\u3002\n", "# \u6253\u5370\u7684\u683c\u5f0f\u662f\u5982\u4e0b\n", "\n", "* ImageId\tLabel\n", "* 1\t2\n", "* 2\t0\n", "* 3\t9\n", "* 4\t9"], "metadata": {"_uuid": "bea6e2c77d7983f5bc21b631dff2e2c36edebedc", "_cell_guid": "20b02a75-880e-4165-9c2c-898a579a3f48"}, "cell_type": "markdown"}, {"outputs": [], "source": ["print(len(y_pred))\n", "\n", "# save submission to csv\n", "pd.DataFrame({\"ImageId\": list(range(1,len(y_pred)+1)),\"Label\": y_pred}).to_csv('Digit_Recogniser_Result.csv', index=False,header=True)\n"], "execution_count": null, "metadata": {"_uuid": "dc033209aeb9db118482901a3076b39d2d59aa12", "collapsed": true, "_cell_guid": "46b3809a-9740-4d65-952d-be7e20721faa"}, "cell_type": "code"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"nbconvert_exporter": "python", "file_extension": ".py", "name": "python", "mimetype": "text/x-python", "codemirror_mode": {"version": 3, "name": "ipython"}, "pygments_lexer": "ipython3", "version": "3.6.3"}}}