{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"import pandas as pd\nimport numpy as np","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","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\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 5GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_train = pd.read_csv('/kaggle/input/Kannada-MNIST/train.csv')\ndf_test = pd.read_csv('/kaggle/input/Kannada-MNIST/test.csv')\ndf_val = pd.read_csv('/kaggle/input/Kannada-MNIST/Dig-MNIST.csv')","execution_count":null,"outputs":[]},{"metadata":{"scrolled":true,"trusted":true},"cell_type":"code","source":"x_train = df_train.iloc[:,1:]/255.\ny_train = df_train['label']\n\nx_test = df_test.iloc[:,1:]/255.\n\nx_val = df_val.iloc[:,1:]/255.\ny_val = df_val['label']","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"class knn():\n    def __init__(self,k = 5):\n        self.k = k\n        self.x = []\n        self.y = []\n        \n    def fit(self,train_x,label):\n        \n        self.x = np.array(train_x)\n        self.y = np.array(label)\n    \n    def predict(self, test_x):\n\n        test_x = np.array(test_x)\n        pred_y = []\n        \n        for x in test_x:\n            counter = np.zeros(10)\n\n            diff_x = self.x - x\n            dist = np.sum(diff_x ** 2,axis = 1)\n            sort_dist = np.argsort(dist)\n            \n            for k in range(self.k):\n                counter[self.y[sort_dist[k]]] += 1\n            pred_y.append(np.argmax(counter))\n            \n        return pred_y\n    \n    def scores(self,test_x,label):\n        \n        pred_y = self.predict(test_x)\n        return np.sum(pred_y == label)/len(pred_y)  ","execution_count":null,"outputs":[]},{"metadata":{"scrolled":false,"trusted":true},"cell_type":"code","source":"from time import process_time_ns \ncls = knn(5)\ncls.fit(x_train,y_train)\n\nt1_start = process_time_ns()\n\npred_val = cls.predict(x_val)\nprint(cls.predict(x_val))\n\nt1_end = process_time_ns()\nprint(\"Elaspe time: \",t1_end - t1_start)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print('Validation score: ',np.sum(y_val == pred_val)/len(y_val))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"t2_start = process_time_ns()\n\npred_test = cls.predict(x_val)\n\nt2_end = process_time_ns()\nprint(\"Test Elaspe time:%f\",t1_end - t1_start)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"pd_outcome = pd.DataFrame({'id':[i for i in range(len(pred_test))],'label':pred_test})\npd_outcome.to_csv('test_submission_knn.csv',index = False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":4}