diff --git a/Supplement-4_2.ipynb b/Supplement-4_2.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..23cad5d53834d486343f0ada9d032c7787bb380d --- /dev/null +++ b/Supplement-4_2.ipynb @@ -0,0 +1,378 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Supplement 4: Classification" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import numpy as np\n", + "import pandas as pd\n", + "from scipy.spatial.distance import cdist\n", + "from scipy.stats import mode\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4.2 Programming Task: K-Nearest Neighbor\n", + "The datasets in files __train-knn.csv__ and __test-knn.csv__ contain samples from a synthetic dataset for training a K-Nearest Neighbor classifier.\n", + "The dataset consists of 7 columns: the first six columns, denoted as x1, x2, ..., x6 represent\n", + " the input features for each data sample, and the last column represents the class label given by 0 or 1.\n", + "There are 200 samples in the __train-knn.csv__ and 100 samples in the __test-knn.csv__}.\n", + "\n", + "i\\. Implement the K-Nearest Neighbor classification algorithm using NumPy and SciPy.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "train_set = pd.read_csv('train-knn.csv').to_numpy()\n", + "test_set = pd.read_csv('test-knn.csv').to_numpy()\n", + "\n", + "\n", + "def knn_predict(train_X, train_y, test_X,n):\n", + "\n", + " # Calculate the distance\n", + " distance_matrix = cdist(train_X, test_X,)\n", + " # Find the indices of nearest neighbours\n", + " neighbour_indices = distance_matrix.argsort(axis=0)[:n]\n", + " # Find class of nearest neighbours\n", + " neighbour_class = train_y[neighbour_indices]\n", + " # Find most frequent class among neighbour\n", + " frequent_class,_ = mode(neighbour_class,axis=0)\n", + "\n", + " return frequent_class.reshape(-1,)\n", + "\n", + "def get_accuracy(predict_labels, true_labels):\n", + " correct_count = np.sum([predict_labels == true_labels])\n", + " total_samples = predict_labels.shape[0]\n", + "\n", + " accuracy = correct_count / total_samples\n", + "\n", + " return accuracy\n", + "\n", + "# last coloumn is class label\n", + "train_X = train_set[:,:-1]\n", + "train_y = train_set[:,-1]\n", + "\n", + "test_X = test_set[:,:-1]\n", + "test_y = test_set[:,-1]\n", + "\n", + "# Using a subset of the original dataset\n", + "predicted_y = knn_predict(train_X[:0], train_y[:0], test_X[:1],n=3)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ii\\. Perform cross-validation (with 5 folds) on the train dataset __train-knn.csv__ to determine a suitable value of K.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "best k from cross validation: 8\n" + ] + }, + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>k</th>\n", + " <th>train_acc</th>\n", + " <th>val_acc</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>7</th>\n", + " <td>8</td>\n", + " <td>0.88875</td>\n", + " <td>0.855</td>\n", + " </tr>\n", + " <tr>\n", + " <th>47</th>\n", + " <td>48</td>\n", + " <td>0.82750</td>\n", + " <td>0.845</td>\n", + " </tr>\n", + " <tr>\n", + " <th>5</th>\n", + " <td>6</td>\n", + " <td>0.89750</td>\n", + " <td>0.845</td>\n", + " </tr>\n", + " <tr>\n", + " <th>49</th>\n", + " <td>50</td>\n", + " <td>0.83125</td>\n", + " <td>0.840</td>\n", + " </tr>\n", + " <tr>\n", + " <th>45</th>\n", + " <td>46</td>\n", + " <td>0.82375</td>\n", + " <td>0.840</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " k train_acc val_acc\n", + "7 8 0.88875 0.855\n", + "47 48 0.82750 0.845\n", + "5 6 0.89750 0.845\n", + "49 50 0.83125 0.840\n", + "45 46 0.82375 0.840" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "n_fold = 5\n", + "\n", + "train_size = train_set.shape[0]\n", + "indices = np.arange(train_size)\n", + "np.random.shuffle(indices)\n", + "\n", + "# split dataset\n", + "splits = np.array_split(indices, n_fold)\n", + "\n", + "# List to store metrics for each value of k\n", + "exp = []\n", + "\n", + "k_max = 50\n", + "for k in range(1,k_max+1):\n", + "\n", + " val_acc = np.zeros(n_fold)\n", + " train_acc = np.zeros(n_fold)\n", + "\n", + " for fold in range(n_fold):\n", + " val_indices = splits[fold]\n", + "\n", + " # Create a mask that has 1 at val_set and 0 elsewhere\n", + " mask = np.zeros(train_size, dtype =bool)\n", + " mask[val_indices] = True\n", + "\n", + " # Get cal data using mask\n", + " cv_val_X = train_X[mask]\n", + " cv_val_y = train_y[mask]\n", + "\n", + " # Get train data by inverting the mask\n", + " cv_train_X = train_X[np.invert(mask)]\n", + " cv_train_y = train_y[np.invert(mask)]\n", + "\n", + "\n", + " # Train accuracy\n", + " predicted_labels_train = knn_predict(cv_train_X, cv_train_y, cv_train_X,k)\n", + " train_acc[fold] = get_accuracy(predicted_labels_train, cv_train_y)\n", + "\n", + " # Validation accuracy\n", + " predicted_labels_val = knn_predict(cv_train_X, cv_train_y, cv_val_X, k)\n", + " val_acc[fold] = get_accuracy(predicted_labels_val, cv_val_y)\n", + "\n", + " exp.append([k,train_acc.mean(),val_acc.mean()])\n", + "\n", + "# print(np.argmax(exp))\n", + "\n", + "exp = pd.DataFrame(exp, columns=['k','train_acc','val_acc'])\n", + "\n", + "import matplotlib.pyplot as plt\n", + "\n", + "plt.plot(exp['k'], exp['train_acc'],'r',label='train')\n", + "plt.plot(exp['k'], exp['val_acc'],'b',label='validation')\n", + "plt.grid()\n", + "plt.legend()\n", + "plt.ylabel('Accuracy')\n", + "plt.xlabel('Value of K in K-Nearest Neighbour')\n", + "plt.xticks(np.arange(0,k_max,step=2))\n", + "# plt.plot(train_exp[1:])\n", + "plt.show()\n", + "\n", + "exp.sort_values(by=['val_acc'], ascending=False, inplace = True)\n", + "\n", + "best_k = int(exp.iloc[0]['k'])\n", + "print('best k from cross validation: ' , best_k)\n", + "\n", + "exp.head()\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "iii\\. Using the optimal value of k from the cross-validation, obtain the accuracy of your model on the test dataset __test-knn.csv__.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.81\n" + ] + } + ], + "source": [ + "predicted_labels = knn_predict(train_X, train_y, test_X, best_k)\n", + "acc = get_accuracy(predicted_labels, test_y)\n", + "print(acc)\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "iv\\. Compare your result with the KNeighborsClassifier model from the scikit-learn library." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.81\n", + "8\n" + ] + } + ], + "source": [ + "from sklearn.neighbors import KNeighborsClassifier\n", + "from sklearn.model_selection import GridSearchCV, KFold\n", + "\n", + "model = KNeighborsClassifier(n_neighbors=best_k)\n", + "model.fit(train_X, train_y)\n", + "\n", + "print(model.score(test_X, test_y))\n", + "\n", + "knn2 = KNeighborsClassifier()\n", + "param_grid = {'n_neighbors': np.arange(1, 50)}\n", + "# Use gridsearch to test all values for n_neighbors\n", + "knn_gscv = GridSearchCV(knn2, param_grid, cv=KFold(5,shuffle=True))\n", + "# fit model to data\n", + "knn_gscv.fit(train_X, train_y)\n", + "\n", + "print(knn_gscv.best_params_['n_neighbors'])\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "v\\. How do the bias and variance of each model vary as K increases?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernel_info": { + "name": "python3" + }, + "kernelspec": { + "display_name": "Python 3.9.7 ('base')", + "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.9.7" + }, + "nteract": { + "version": "0.15.0" + }, + "vscode": { + "interpreter": { + "hash": "ecd4d27f568e4e411014651395f8ce8e2a5bffeb2f41f9e1cf81fec543185c37" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}