{"cells":[{"metadata":{"trusted":false},"cell_type":"code","source":"import time\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nfrom sklearn.neighbors import KNeighborsClassifier\nfrom sklearn.metrics import accuracy_score","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"def get_data(data_set, label_column='label'):\n    # data_set:   pd DataFrame\n    data_X = data_set.drop(columns=label_column)\n    data_y = data_set[label_column]\n    return data_X, data_y\n\ndef count_labels(data_set, label_column='label'):\n    # count the number of entries of each label\n    labels = np.unique(data_set[label_column])\n    for i in range(len(labels)):\n        count_labels = data_set[data_set['label'] == i]\n        print(f'laebl: {i}, count: {len(count_labels)}')    \n    ","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"# read data\ntrain_set = pd.read_csv('./train.csv')\ntest_set = pd.read_csv('./test.csv')\ndig_set = pd.read_csv('./Dig-MNIST.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"X_train, y_train = get_data(train_set, label_column='label')\nX_dig, y_dig = get_data(dig_set, label_column='label')","execution_count":null,"outputs":[]},{"metadata":{"scrolled":false,"trusted":false},"cell_type":"code","source":"# check homogeneity of training set\ncount_labels(train_set)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"# check homogeneity of validation set\ncount_labels(dig_set)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"# plt.imshow(train_X.loc[1].to_numpy().reshape(28, 28))\n# plt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"for k in [5, 50, 100, 250, 500, 800, 1000]:\n    knn_clf = KNeighborsClassifier(n_neighbors=k)\n    knn_clf.fit(X=X_train, y=y_train)\n    y_pred = knn_clf.predict(X_dig)\n    accur = accuracy_score(y_dig, y_pred)\n    print(f'k: {k}, accuracy: {accur}')","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"for k in [10, 20, 30, 40, 50, 60, 70]:\n    knn_clf = KNeighborsClassifier(n_neighbors=k)\n    knn_clf.fit(X=X_train, y=y_train)\n    y_pred = knn_clf.predict(X_dig)\n    accur = accuracy_score(y_dig, y_pred)\n    print(f'k: {k}, accuracy: {accur}')","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"for k in [80, 90, 100]:\n    knn_clf = KNeighborsClassifier(n_neighbors=k)\n    knn_clf.fit(X=X_train, y=y_train)\n    y_pred = knn_clf.predict(X_dig)\n    accur = accuracy_score(y_dig, y_pred)\n    print(f'k: {k}, accuracy: {1accur}')ew","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"# it seems that the best k is between 1 - 10 (k=5: 0.7146, k=10: 0.7069)\n# check other possibilities\nfor k in [1, 2, 3, 4, 6, 7, 8, 9]:\n    knn_clf = KNeighborsClassifier(n_neighbors=k)\n    knn_clf.fit(X=X_train, y=y_train)\n    y_pred = knn_clf.predict(X_dig)\n    accur = accuracy_score(y_dig, y_pred)\n    print(f'k: {k}, accuracy: {accur}')","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"# k = 3 is the best\nknn_clf = KNeighborsClassifier(n_neighbors=3)\nknn_clf.fit(X=X_train, y=y_train)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"ticks = time.time()\nprint(ticks)\ny_pred = knn_clf.predict(test_set.drop(columns='id'))\nticks = time.time()\nprint(ticks)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"y_pred_pd = pd.DataFrame({'id': np.arange(len(y_pred)),\n                          'label': y_pred})","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"y_pred_pd.to_csv('./y_pred.csv', sep=',', 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}