{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "3bd64325-118c-40a9-b01c-a3e8e012def0", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "import pandas as pd" ] }, { "cell_type": "markdown", "id": "f978a19c-b6d0-43f5-9cc7-2762d1b0d548", "metadata": {}, "source": [ "# Loading MNIST" ] }, { "cell_type": "code", "execution_count": 2, "id": "24e7e0d0-6b3b-474e-bf3e-9779449ec92e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The number of digits in the dataset: 1797\n", "The class abundances:\n", "0: 178 digits\n", "1: 182 digits\n", "2: 177 digits\n", "3: 183 digits\n", "4: 181 digits\n", "5: 182 digits\n", "6: 181 digits\n", "7: 179 digits\n", "8: 174 digits\n", "9: 180 digits\n" ] } ], "source": [ "from sklearn.datasets import load_digits\n", "X_all, y_all = load_digits(return_X_y=True)\n", "\n", "print(f\"The number of digits in the dataset: {X_all.shape[0]}\")\n", "print(f\"The class abundances:\")\n", "for i in range(10):\n", " print(f\"{i}: {sum(y_all==i)} digits\")" ] }, { "cell_type": "code", "execution_count": 3, "id": "c7fc81ba-8dd0-485e-beb8-86ba789c260c", "metadata": {}, "outputs": [], "source": [ "def plot_a_digit(x):\n", " fig, ax = plt.subplots(figsize=(5,5))\n", " sns.heatmap(x.reshape(8,8), vmin=0, vmax=15, cmap='viridis', cbar=None)\n", " plt.show()" ] }, { "cell_type": "code", "execution_count": 7, "id": "45b6998e-66c3-4823-8f53-3fe3883f520c", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "True class: 9\n" ] } ], "source": [ "index = 31\n", "plot_a_digit(X_all[index])\n", "print(f\"True class: {y_all[index]}\")" ] }, { "cell_type": "code", "execution_count": 8, "id": "97148c6e-a52a-4e3b-ae69-fe2de74f000d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The train-test split is 1617 to 180 datapoints.\n" ] } ], "source": [ "from sklearn.model_selection import train_test_split\n", "X_train, X_test, y_train, y_test = train_test_split(X_all, y_all, test_size=0.1, random_state=42)\n", "\n", "print(f\"The train-test split is {X_train.shape[0]} to {X_test.shape[0]} datapoints.\")" ] }, { "cell_type": "markdown", "id": "59c76aa3-957c-4b03-bd4c-dccd1559db74", "metadata": {}, "source": [ "# Logistic regression between two classes" ] }, { "cell_type": "markdown", "id": "3232b77c-76e3-4df2-9ad2-bcfc83f4e3ed", "metadata": {}, "source": [ "The logistic regression class:" ] }, { "cell_type": "code", "execution_count": 9, "id": "160fb94d-d5d2-4a37-8802-9dcb60b6fd05", "metadata": {}, "outputs": [], "source": [ "from sklearn.linear_model import LogisticRegression" ] }, { "cell_type": "markdown", "id": "4ff4a6e5-f8a5-4b8a-bef7-d034d2ef62ed", "metadata": {}, "source": [ "TODO:\n", "1. Train a logistic regression on `class_1 = 2` and `class_2 = 5` in the train split.\n", "2. Calculate the AUC on the test split using `sklearn.metrics.roc_auc_score`.\n", "3. Plot the ROC using `sklearn.metrics.RocCurveDisplay.from_estimator`.\n", "4. Visualize an example of a misclassified 2 and a misclassified 5." ] }, { "cell_type": "code", "execution_count": 49, "id": "6c1ccc1c-03df-463b-b833-883e085a2e8a", "metadata": {}, "outputs": [], "source": [ "class_1 = 2\n", "class_2 = 5\n", "X = X_train[(y_train == 2) | (y_train == 5)]\n", "y = y_train[(y_train == 2) | (y_train == 5)]" ] }, { "cell_type": "code", "execution_count": 50, "id": "bfad93d6-cbcb-4a70-8ce5-870b35d04f29", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
LogisticRegression()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ], "text/plain": [ "LogisticRegression()" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model = LogisticRegression()\n", "model.fit(X,y)" ] }, { "cell_type": "code", "execution_count": 51, "id": "992fff34-fb64-4b47-9afe-3358a46d42a9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "39\n" ] } ], "source": [ "mask = (y_test == 2) | (y_test == 5)\n", "print(sum(mask))" ] }, { "cell_type": "code", "execution_count": 52, "id": "46b460ea-a6fb-4610-81c1-44e947f04804", "metadata": {}, "outputs": [], "source": [ "y_pred = model.predict(X_test[mask])\n", "y_score = model.predict_proba(X_test[mask])[:,1]" ] }, { "cell_type": "code", "execution_count": 53, "id": "20ca7325-6061-49b5-bf46-95bb32f53ef1", "metadata": {}, "outputs": [], "source": [ "from sklearn.metrics import roc_auc_score" ] }, { "cell_type": "code", "execution_count": 54, "id": "363bccea-b66f-4d8e-9f0f-cf6ba231a0f8", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.0" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "roc_auc_score(y_test[mask], y_score)" ] }, { "cell_type": "code", "execution_count": 55, "id": "5fb68147-c3d0-4c1a-a674-c8508fa99608", "metadata": {}, "outputs": [], "source": [ "from sklearn.metrics import RocCurveDisplay" ] }, { "cell_type": "code", "execution_count": 56, "id": "22481249-44c4-4a46-92eb-6e837f96db76", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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kYiI6Hk6fwe4b98+reeOjo5az69cuYIhQ4bovOKcnBycOHECEydOlNpMTEzg5+eH2NjYQufx9fXFf/7zHxw9ehTe3t64fPkyduzYgX79+hW5nuzsbGRnZ0vPMzIydK6RiIheXzoHYMuWLYudPnr0aFkrTk1NRV5eHqpWrarVXrVqVZw/f77Qefr27YvU1FS88847EELgyZMnGDp0aLGHQMPDwzF9+nRZtRER0euvXJ0Iv3//fsyaNQuLFy/GyZMnsXnzZmzfvh1fffVVkfNMnDgR6enp0uPatWulWDEREb2qSnQ7JH2ws7ODqakpbt++rdV++/ZtODg4FDrP1KlT0a9fPwwePBgA0KhRIzx8+BBDhgzB5MmTYWJSMM9VKlWBATtERERltgeoVCrRtGlTrfMGNRoNoqOj0bx580LnycrKKhBypqamALTPUyQiInqRMtsDBICQkBAEBQWhWbNm8Pb2xoIFC/Dw4UMMHDgQANC/f384OzsjPDwcANClSxfMnz8fXl5e8PHxwcWLFzF16lR06dJFCkIiIiJdlGkABgQE4O7duwgNDUVKSgo8PT0RFRUlDYxJTk7W2uObMmUKFAoFpkyZghs3bqBKlSro0qULZs6cWVYvgYiIyimFKMGxwz///BNWVlZo1qyZ1Hb8+HFkZWXhvffe02uB+paRkQG1Wo309HSYWVjBPXQXACB+hj+slGX69wAREeng2c9xGxubEi+nRJ/4rVq1Qv369REfHy+19evXDxcuXEBeXl6JiyEiIiotJQrAK1euwNzcXKstOjoaubm5eimKiIjI0EoUgDVq1CjQJvcyaERERGWpXJ0IT0REpC867QFWqlQJCoVCpwWmpaW9VEFERESlQacAXLBggYHLICIiKl06BWBQUJCh6yAiIipVJfoO8NKlS5gyZQr69Okj3bx2586dOHfunF6LIyIiMhTZAXjgwAE0atQIR44cwebNm5GZmQkAOH36NMLCwvReIBERkSHIDsAJEybg66+/xp49e6BUKqX2999/H3/99ZdeiyMiIjIU2QF45swZ9OjRo0C7vb09UlNT9VIUERGRockOQFtbW9y6datA+6lTp+Ds7KyXooiIiAxNdgD27t0b48ePR0pKChQKBTQaDWJiYjB27Fj079/fEDUSERHpnewAnDVrFurXrw8XFxdkZmbC3d0d7733Hnx9fTFl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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "RocCurveDisplay.from_estimator(model, X_test[mask], y_test[mask])" ] }, { "cell_type": "code", "execution_count": 59, "id": "1e0762bf-07a1-450d-9fb1-aba31dab831d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1, 64)" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.coef_.shape" ] }, { "cell_type": "code", "execution_count": 61, "id": "4a4b2006-610c-40cf-b1ce-60b60c5936c2", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "np.float64(0.008640888473967146)" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.var(model.coef_[0])" ] }, { "cell_type": "code", "execution_count": 66, "id": "fe18a6e3-b987-4016-8c18-e15042d2ff69", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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XDt37tTQoUM1YcIEHT161OvS2q25uVlDhw7V8uXLvS6lw9555x3Nnz9f27Zt08aNG3XmzBnddNNNam5u9ro0R/r27avFixerpqZGO3bs0I033qhbb71Vu3fv9rq0Dtm+fbv++Z//WUOGDPG6lA753ve+py+++KJ1e/fdd70uybGvvvpKo0ePVrdu3fTGG2/o448/1uOPP66ePXt6XVq7bd++PezPYePGjZKk2267zePK0Gm8fbRG5xs5cqQ1f/781p9bWlqsrKwsKxAIeFhVx0myNmzY4HUZETt69KglyXrnnXe8LiViPXv2tH73u995XYZjx48ft6655hpr48aN1rhx46x77rnH65IcKS8vt4YOHep1GRH7xS9+Yd1www1el+Gqe+65x7rqqqusUCjkdSnoJDHdeTh9+rRqampUXFzcui8uLk7FxcWqqqrysDI0NjZKktLS0jyupONaWlq0bt06NTc3q6ioyOtyHJs/f75uueWWsP8+upo///nPysrKUv/+/TVt2jQdOnTI65Ice/XVV1VQUKDbbrtNvXv31vXXX6/Vq1d7XVaHnT59Wn/4wx905513yufzeV0OOklMh4eGhga1tLSoT58+Yfv79Omjuro6j6pCKBTSvffeq9GjR2vQoEFel+PYhx9+qMsuu0x+v1933323NmzYoIEDB3pdliPr1q3Tzp07FQgEvC6lwwoLC/X888+roqJCK1as0IEDBzRmzBgdP37c69Ic+fTTT7VixQpdc801evPNNzVv3jz97Gc/05o1a7wurUNeeeUVff3115o1a5bXpaATJXhdAL575s+fr48++qhLrk9L0nXXXaddu3apsbFRL7/8smbOnKl33nmnywSIzz//XPfcc482btyopKQkr8vpsIkTJ7b+7yFDhqiwsFA5OTl66aWXNGfOHA8rcyYUCqmgoECPPfaYJOn666/XRx99pJUrV2rmzJkeV+fcM888o4kTJyorK8vrUtCJYrrzkJ6ervj4eNXX14ftr6+vV0ZGhkdVfbctWLBAr7/+ujZv3qy+fft6XU6HJCYm6uqrr1Z+fr4CgYCGDh2qJ554wuuy2q2mpkZHjx7V8OHDlZCQoISEBL3zzjt68sknlZCQoJaWFq9L7JDU1FRde+212rdvn9elOJKZmXlO8BwwYECXXII5ePCg3n77bf3kJz/xuhR0spgOD4mJicrPz1dlZWXrvlAopMrKyi65Rt2VWZalBQsWaMOGDdq0aZOuvPJKr0tyTSgUUjAY9LqMdhs/frw+/PBD7dq1q3UrKCjQtGnTtGvXLsXHx3tdYoecOHFC+/fvV2ZmptelODJ69Ohzvrb8ySefKCcnx6OKOu65555T7969dcstt3hdCjpZzC9blJaWaubMmSooKNDIkSO1bNkyNTc3a/bs2V6X1m4nTpwI+9fUgQMHtGvXLqWlpSk7O9vDytpv/vz5Wrt2rf7jP/5DPXr0aL3mJCUlRd27d/e4uvYrKyvTxIkTlZ2drePHj2vt2rXasmWL3nzzTa9La7cePXqcc63JpZdeqssvv7xLXYNy//33a/LkycrJydGRI0dUXl6u+Ph4TZ061evSHLnvvvs0atQoPfbYY7r99ttVXV2tVatWadWqVV6X5kgoFNJzzz2nmTNnKiEh5n+1wOuve1wMTz31lJWdnW0lJiZaI0eOtLZt2+Z1SY5s3rzZknTONnPmTK9La7e26pdkPffcc16X5sidd95p5eTkWImJiVavXr2s8ePHW2+99ZbXZUWsK35Vs6SkxMrMzLQSExOtK664wiopKbH27dvndVkd8tprr1mDBg2y/H6/lZeXZ61atcrrkhx78803LUnW3r17vS4FFwGP5AYAAI7E9DUPAADAfYQHAADgCOEBAAA4QngAAACOEB4AAIAjhAcAAOAI4QEAADhCeAAAAI4QHgAAgCOEBwAA4AjhAQAAOEJ4AAAAjvwffFCwydfM1VkAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.heatmap(model.coef_[0].reshape(8,8), cmap='bwr', vmin=-0.5, vmax=0.5)" ] }, { "cell_type": "markdown", "id": "5bb4a7c3-ffe1-4653-aaca-920af1427638", "metadata": {}, "source": [ "TODO:\n", "1. Wrap the code above in a function accepting `class_1` and `class_2` variables.\n", "2. Test the logistic regression performance for 3's and 2's.\n", "3. Test the logistic regression performance for 1's and 7's.\n", "4. Test the logistic regression performance for 0's and 9's." ] }, { "cell_type": "code", "execution_count": 32, "id": "942d6739-29c2-47fe-beb9-1faaa9d65bfe", "metadata": {}, "outputs": [], "source": [ "def separate_two_classes(class_1, class_2):\n", " train_mask = (y_train == class_1) | (y_train == class_2)\n", " X = X_train[train_mask]\n", " y = y_train[train_mask]\n", " model = LogisticRegression()\n", " model.fit(X,y)\n", "\n", " test_mask = (y_test == class_1) | (y_test == class_2)\n", " y_pred = model.predict(X_test[test_mask])\n", " y_score = model.predict_proba(X_test[test_mask])[:,1]\n", " auc = roc_auc_score(y_test[test_mask], y_score)\n", " print(f\"AUC: {auc:.2f}\")" ] }, { "cell_type": "code", "execution_count": 36, "id": "b00e9c09-935d-48d8-92a8-67aa19d52452", "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0, 1\n", "AUC: 1.00\n", "0, 2\n", "AUC: 1.00\n", "0, 3\n", "AUC: 1.00\n", "0, 4\n", "AUC: 1.00\n", "0, 5\n", "AUC: 1.00\n", "0, 6\n", "AUC: 1.00\n", "0, 7\n", "AUC: 1.00\n", "0, 8\n", "AUC: 1.00\n", "0, 9\n", "AUC: 1.00\n", "1, 2\n", "AUC: 1.00\n", "1, 3\n", "AUC: 1.00\n", "1, 4\n", "AUC: 1.00\n", "1, 5\n", "AUC: 1.00\n", "1, 6\n", "AUC: 1.00\n", "1, 7\n", "AUC: 1.00\n", "1, 8\n", "AUC: 1.00\n", "1, 9\n", "AUC: 1.00\n", "2, 3\n", "AUC: 1.00\n", "2, 4\n", "AUC: 1.00\n", "2, 5\n", "AUC: 1.00\n", "2, 6\n", "AUC: 1.00\n", "2, 7\n", "AUC: 1.00\n", "2, 8\n", "AUC: 1.00\n", "2, 9\n", "AUC: 1.00\n", "3, 4\n", "AUC: 1.00\n", "3, 5\n", "AUC: 1.00\n", "3, 6\n", "AUC: 1.00\n", "3, 7\n", "AUC: 1.00\n", "3, 8\n", "AUC: 1.00\n", "3, 9\n", "AUC: 1.00\n", "4, 5\n", "AUC: 1.00\n", "4, 6\n", "AUC: 1.00\n", "4, 7\n", "AUC: 1.00\n", "4, 8\n", "AUC: 1.00\n", "4, 9\n", "AUC: 1.00\n", "5, 6\n", "AUC: 1.00\n", "5, 7\n", "AUC: 1.00\n", "5, 8\n", "AUC: 1.00\n", "5, 9\n", "AUC: 1.00\n", "6, 7\n", "AUC: 1.00\n", "6, 8\n", "AUC: 1.00\n", "6, 9\n", "AUC: 1.00\n", "7, 8\n", "AUC: 1.00\n", "7, 9\n", "AUC: 1.00\n", "8, 9\n", "AUC: 1.00\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/aleksei/miniforge3/envs/env01/lib/python3.12/site-packages/sklearn/linear_model/_logistic.py:473: ConvergenceWarning: lbfgs failed to converge after 100 iteration(s) (status=1):\n", "STOP: TOTAL NO. OF ITERATIONS REACHED LIMIT\n", "\n", "Increase the number of iterations to improve the convergence (max_iter=100).\n", "You might also want to scale the data as shown in:\n", " https://scikit-learn.org/stable/modules/preprocessing.html\n", "Please also refer to the documentation for alternative solver options:\n", " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", " n_iter_i = _check_optimize_result(\n" ] } ], "source": [ "for i in range(10):\n", " for j in range(i+1,10):\n", " print(f\"{i}, {j}\")\n", " separate_two_classes(i,j)" ] }, { "cell_type": "markdown", "id": "a1f91730-3d38-4802-af93-cb54d15ef874", "metadata": {}, "source": [ "# Logistic regression for multiple classes" ] }, { "cell_type": "markdown", "id": "121e614d-04c1-40c5-bf26-c3ea1f772b73", "metadata": {}, "source": [ "TODO:\n", "1. Using the same `LogisticRegression` class, train a logistic regression on all digit classes.\n", "2. Calculate and visualize the confusion matrix using `sklearn.metrics.confusion_matrix`.\n", "3. Calculate the F1 score of the regression using `sklearn.metrics.f1_score`.\n", "4. Visualize an example of a misclassified digit for top-5 confusion matrix entries." ] }, { "cell_type": "code", "execution_count": 38, "id": "dbefbedf-bb60-4be1-a29f-2b0f8cbbe834", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
LogisticRegression(max_iter=10000)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ], "text/plain": [ "LogisticRegression(max_iter=10000)" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model = LogisticRegression(max_iter=10000)\n", "model.fit(X_train, y_train)" ] }, { "cell_type": "code", "execution_count": 39, "id": "69a0edc7-cdfb-4653-82f2-00cd8e5fbda4", "metadata": {}, "outputs": [], "source": [ "y_pred = model.predict(X_test)" ] }, { "cell_type": "code", "execution_count": 40, "id": "9f616573-eb2a-42e4-a5bc-a1b2173d3e68", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([7.79359780e-08, 1.24689128e-10, 1.99301614e-13, 5.54603916e-13,\n", " 7.16469048e-09, 1.16384117e-08, 9.99988593e-01, 1.56222478e-10,\n", " 1.13100695e-05, 3.72797553e-11])" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.predict_proba(X_test)[0]" ] }, { "cell_type": "code", "execution_count": 41, "id": "14b13427-6d31-4eea-aa85-76cc577c4242", "metadata": {}, "outputs": [], "source": [ "from sklearn.metrics import confusion_matrix" ] }, { "cell_type": "code", "execution_count": 42, "id": "aeb9ec9f-779b-4eba-9a07-6caf83059e8d", "metadata": {}, "outputs": [], "source": [ "matrix = confusion_matrix(y_test, y_pred)" ] }, { "cell_type": "code", "execution_count": 43, "id": "27c40086-ecc8-4f0d-a3f5-3dd98a2317b7", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[17, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n", " [ 0, 11, 0, 0, 0, 0, 0, 0, 0, 0],\n", " [ 0, 0, 17, 0, 0, 0, 0, 0, 0, 0],\n", " [ 0, 0, 0, 16, 0, 1, 0, 0, 0, 0],\n", " [ 0, 0, 0, 0, 24, 0, 1, 0, 0, 0],\n", " [ 0, 0, 0, 0, 0, 22, 0, 0, 0, 0],\n", " [ 0, 0, 0, 0, 0, 0, 19, 0, 0, 0],\n", " [ 0, 0, 0, 0, 0, 0, 0, 18, 0, 1],\n", " [ 0, 0, 0, 0, 0, 0, 0, 0, 8, 0],\n", " [ 0, 0, 0, 1, 0, 0, 0, 0, 1, 23]])" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "matrix" ] }, { "cell_type": "code", "execution_count": 44, "id": "f8cab0c1-6fbe-4db3-876e-99000f299fe2", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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LS2tOxaJRFRaWhrVCbADlT8AADEiPz9f06dPV2ZmpoYOHar7779ftbW1uv766239HFcmf7/frwULFjSqzdLSYjk2ifjORizHJhHf2Yjl2CTic5MpU6bok08+0a9+9SsdOHBAF110kYqLi5WYmGjr57hywR8AADg9rvkDAOAxJH8AADyG5A8AgMeQ/AEA8BjXJf+WeBRiU6xfv14TJ05USkqKfD6f1qxZ43RIUYLBoC655BJ16NBBXbt21eTJk7Vz506nw5IkFRYWatCgQerYsaM6duyorKwsvfDCC06HdVqLFi2Sz+fTrFmznA5FknT77bfL5/NFjfT0dKfDqrNv3z796Ec/0rnnnquEhAQNHDhQW7dudTosSdL5559/yr87n8+nvLw8p0OTJIXDYf3yl79Ujx49lJCQoF69eumOO+5QrKzjPnLkiGbNmqW0tDQlJCRo+PDh2rJli9NhQS5L/i31KMSmqK2tVUZGhpYuXep0KPVat26d8vLytGnTJpWUlOjEiRMaP368amtrnQ5N3bt316JFi1ReXq6tW7fq8ssv16RJk/TOO+84HdoptmzZooceekiDBg1yOpQo/fv31/79++vGhg0bnA5JkvSvf/1LI0aMUOvWrfXCCy/o3Xff1T333KPvfOc7Tocm6cv/Pb/5762kpESSdO211zoc2ZcWL16swsJCLVmyRO+9954WL16s3/zmN/r973/vdGiSpP/8z/9USUmJnnzySb399tsaP368xo0bp3379jkdGmx9UoDDhg4dauTl5dW9DofDRkpKihEMBh2M6lSSjNWrVzsdRoM+/vhjQ5Kxbt06p0Op13e+8x3j0UcfdTqMKEeOHDF69+5tlJSUGKNHjzZuueUWp0MyDOPLh4pkZGQ4HUa9fv7znxsjR450OoxGu+WWW4xevXoZkUjE6VAMwzCMq666ypgxY0bUsWuuucbIyclxKKKvHTt2zIiPjzeee+65qOMXX3yxMX/+fIeiwldcU/l/9SjEcePG1R1rtkchekB1dbUkqXPnzg5HEi0cDmvlypWqra21fbvLs5WXl6errroq6v+DsWL37t1KSUlRz549lZOTo7179zodkiTpb3/7mzIzM3Xttdeqa9euGjx4sB555BGnw6rXF198oaeeekozZsyQz+dzOhxJ0vDhw1VaWqpdu3ZJkt58801t2LBB2dnZDkcmnTx5UuFwWG3bto06npCQEDOdJy9zzQ5/n376qcLh8Cm7ICUmJmrHjh0ORfXtFIlENGvWLI0YMUIDBgxwOhxJ0ttvv62srCwdP35c7du31+rVq9WvXz+nw6qzcuVKvf766zF5PXPYsGEqKipSnz59tH//fi1cuFCjRo3S9u3b1aFDB0dj++CDD1RYWKj8/Hzddttt2rJli/77v/9bbdq00fTp0x2NzWzNmjU6fPiwcnNznQ6lzq233qqamhqlp6crPj5e4XBYd911l3JycpwOTR06dFBWVpbuuOMO9e3bV4mJifrTn/6ksrIyXXDBBU6H53muSf6wT15enrZv3x5Tv8779Omjbdu2qbq6Wn/5y180ffp0rVu3LiZ+AHz44Ye65ZZbVFJSckqVEwu+WQUOGjRIw4YNU1pamlatWqUbbrjBwci+/KGZmZmpu+++W5I0ePBgbd++XcuWLYu55P+HP/xB2dnZSklJcTqUOqtWrdIf//hHrVixQv3799e2bds0a9YspaSkxMS/vyeffFIzZsxQt27dFB8fr4svvljTpk1TeXm506F5nmuSf0s+CtHNbr75Zj333HNav369unfv7nQ4ddq0aVNXLQwZMkRbtmzRAw88oIceesjhyKTy8nJ9/PHHuvjii+uOhcNhrV+/XkuWLFEoFFJ8fLyDEUbr1KmTLrzwQlVUVDgdipKTk0/5Ade3b1/93//9n0MR1W/Pnj166aWX9MwzzzgdSpS5c+fq1ltv1dSpUyVJAwcO1J49exQMBmMi+ffq1Uvr1q1TbW2tampqlJycrClTpqhnz55Oh+Z5rrnm35KPQnQjwzB08803a/Xq1Xr55ZfVo0cPp0NqUCQSUSgUcjoMSdLYsWP19ttva9u2bXUjMzNTOTk52rZtW0wlfkk6evSo3n//fSUnJzsdikaMGHHKLaW7du1SWlqaQxHVb/ny5eratauuuuoqp0OJcuzYMcXFRf81Hh8fr0gk4lBE9WvXrp2Sk5P1r3/9S2vXrtWkSZOcDsnzXFP5Sy33KMSmOHr0aFSlVVlZqW3btqlz585KTU11MLIv5eXlacWKFfrrX/+qDh066MCBA5KkQCCghIQER2MrKChQdna2UlNTdeTIEa1YsUKvvvqq1q5d62hcX+nQocMpayPatWunc889NybWTMyZM0cTJ05UWlqaqqqqtGDBAsXHx2vatGlOh6bZs2dr+PDhuvvuu3Xddddp8+bNevjhh/Xwww87HVqdSCSi5cuXa/r06WrVKrb+ypw4caLuuusupaamqn///nrjjTd07733asaMGU6HJklau3atDMNQnz59VFFRoblz5yo9PT0m/k72PKdvN7Db73//eyM1NdVo06aNMXToUGPTpk1Oh2QYhmG88sorhqRTxvTp050OzTAMo97YJBnLly93OjRjxowZRlpamtGmTRvjvPPOM8aOHWu8+OKLTofVoFi61W/KlClGcnKy0aZNG6Nbt27GlClTjIqKCqfDqvPss88aAwYMMPx+v5Genm48/PDDTocUZe3atYYkY+fOnU6HcoqamhrjlltuMVJTU422bdsaPXv2NObPn2+EQiGnQzMMwzCefvppo2fPnkabNm2MpKQkIy8vzzh8+LDTYcEwDB7pCwCAx7jmmj8AAGgckj8AAB5D8gcAwGNI/gAAeAzJHwAAjyH5AwDgMSR/AAA8huQPAIDHkPwBAPAYkj8AAB5D8gcAwGNI/gAAeMz/A8+Srb44JBRpAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.heatmap(matrix, cmap='viridis')" ] }, { "cell_type": "code", "execution_count": 45, "id": "7de84530-48db-4638-9949-aad49421b0cb", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "np.int64(1)" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mask = (y_test == 3) & (y_pred == 5)\n", "sum(mask)" ] }, { "cell_type": "code", "execution_count": 46, "id": "c93f716d-4c8c-4a94-ad62-a2b3b0f8d6a2", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_a_digit(X_test[mask][0])" ] }, { "cell_type": "code", "execution_count": 47, "id": "52e74aad-1173-4b5f-87ab-66d8d2eb3121", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "np.int64(1)" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mask = (y_test == 4) & (y_pred == 6)\n", "sum(mask)" ] }, { "cell_type": "code", "execution_count": 48, "id": "4b99e513-cd84-4306-8026-b5714b20a639", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_a_digit(X_test[mask][0])" ] }, { "cell_type": "markdown", "id": "c2865922-00db-4887-8fcf-532ef71d4594", "metadata": {}, "source": [ "# k-means" ] }, { "cell_type": "code", "execution_count": 67, "id": "1a6034b0-bf7b-46bd-aa3f-db3b6360d869", "metadata": {}, "outputs": [], "source": [ "from sklearn.cluster import KMeans" ] }, { "cell_type": "code", "execution_count": 68, "id": "34c0a161-9cd4-4ba3-ab73-7c3b830c62ab", "metadata": {}, "outputs": [], "source": [ "model = KMeans(n_clusters=10)" ] }, { "cell_type": "code", "execution_count": 70, "id": "aecfe134-cf01-4b24-a334-3e30dc9d901d", "metadata": {}, "outputs": [], "source": [ "y_cluster = model.fit_predict(X_train)" ] }, { "cell_type": "code", "execution_count": 71, "id": "631744df-8496-4acb-8285-7ee6f9f9494c", "metadata": {}, "outputs": [], "source": [ "matrix = np.zeros(shape=(10,10))\n", "for data_label in range(10):\n", " for cluster_label in range(10):\n", " mask = (y_train == data_label) & (y_cluster == cluster_label)\n", " matrix[data_label, cluster_label] = sum(mask)" ] }, { "cell_type": "code", "execution_count": 72, "id": "b01de3c2-f60c-4551-9a8a-7c23fb07015c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 72, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.heatmap(matrix)" ] }, { "cell_type": "code", "execution_count": 73, "id": "d8393d93-bb62-4a7a-89be-dae14d041f63", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(10, 64)" ] }, "execution_count": 73, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.cluster_centers_.shape" ] }, { "cell_type": "code", "execution_count": 80, "id": "69dae7a6-f516-4f2c-a569-adbe4f0d5652", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "np.int64(7)" ] }, "execution_count": 80, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = X_test[2]\n", "centroids = model.cluster_centers_\n", "distances = np.sqrt(np.sum(np.square(centroids - x), axis=1))\n", "np.argmin(distances)" ] }, { "cell_type": "code", "execution_count": 81, "id": "a360a125-b596-480e-a8ae-5e99cbee5c31", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "np.int64(3)" ] }, "execution_count": 81, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y_test[2]" ] }, { "cell_type": "code", "execution_count": 79, "id": "385c98b9-6b62-4f34-b09c-043d5a50b22d", "metadata": {}, "outputs": [], "source": [ "def closest_centroid(x, centroids):\n", " np.sqrt(np.sum(np.square(centroids - x), axis=1))" ] }, { "cell_type": "markdown", "id": "39bc5bdd-7931-47b5-9905-7a218ec96032", "metadata": {}, "source": [ "TODO:\n", "1. Cluster the train split into 10 clusters.\n", "2. Calculate and visualize the \"confusion matrix\" between the cluster labels and data labels.\n", "3. Use the centroids to classify the test split.\n", "4. Calculate the F1 score of the obtained classification." ] }, { "cell_type": "markdown", "id": "50b6ee5f-14d8-4e84-b97f-5887f0edca8b", "metadata": {}, "source": [ "# kNN" ] }, { "cell_type": "code", "execution_count": 95, "id": "69ab30f9-28fd-4580-b8bd-9e190ae6e075", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_a_digit(X_train[84])" ] }, { "cell_type": "code", "execution_count": 84, "id": "de32e400-a19c-4fc8-a7c4-ca5744b1ad71", "metadata": {}, "outputs": [], "source": [ "from sklearn.neighbors import kneighbors_graph" ] }, { "cell_type": "code", "execution_count": 85, "id": "d6936cab-e920-4c04-b3be-e5027911ac65", "metadata": {}, "outputs": [], "source": [ "res = kneighbors_graph(X_train, n_neighbors=3)" ] }, { "cell_type": "code", "execution_count": 96, "id": "82f6a5e3-1c52-4cac-b7eb-2284339b9d03", "metadata": {}, "outputs": [], "source": [ "initial_datapoint = 84\n", "closest = np.arange(1617)[np.ravel(res[initial_datapoint].todense()) != 0]" ] }, { "cell_type": "code", "execution_count": 97, "id": "ee45a75d-24f6-4e30-9b8b-948dd9a61301", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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5fP5PNvRbON15swZRaNRderUKe58p06ddPLkSY9Wpa5YLKZHHnlEhYWFys/P93qOKx988IHatGkjv9+vmTNnasOGDerVq5fXsxK2bt067d69W6FQyOspjTJo0CCtXr1a5eXlKisrU01NjYYNG6azZ896PS0hR48eVVlZmW655RZt3rxZs2bN0s9+9jOtWbPG62mN8tprr+lf//qXpk6d6umOdE+/O1JGcXGx9u7da+pnFRfceuut2rNnj8LhsF599VVNmTJF27dvNxGwEydOaM6cOaqoqFCrVq28ntMoo0ePrv/Pffr00aBBg5Sbm6v169frwQcf9HBZYmKxmAoKCrR48WJJUr9+/bR3716tWLFCU6ZM8Xide7///e81evRoZWdne7qj2d55dejQQWlpaTp16lTc+VOnTqlz584erUpNDz/8sN544w1t27ZNXbp08XqOay1btlT37t3Vv39/hUIh9e3bV08++aTXsxJSXV2t06dP64477lB6errS09O1fft2LVu2TOnp6YpGo15PdK1du3bq0aOHjhw54vWUhGRlZV30Lzo9e/Y09dLnBceOHdObb76pH//4x15Pab7xatmypfr376+tW7fWn4vFYtq6dau5n1dY5TiOHn74YW3YsEFvvfWWunXr5vWkJhGLxRSJRLyekZCRI0fqgw8+0J49e+qPgoICTZ48WXv27FFaWprXE1378ssv9dFHHykrK8vrKQkpLCy86I+IHDp0SLm5uR4tarxVq1apY8eOuvvuu72e0rxfNpw3b56mTJmigoICDRw4UEuXLlVdXZ2mTZvm9bSEffnll3H/hllTU6M9e/bo+uuvV05OjofLGlZcXKy1a9fqz3/+s9q2bVv/s8ZAIKBrrrnG43WJCQaDGj16tHJycnT27FmtXbtWb7/9tjZv3uz1tIS0bdv2op8xtm7dWu3btzfzs8f58+dr7Nixys3N1SeffKKSkhKlpaVp0qRJXk9LyNy5czVkyBAtXrxYEyZMUFVVlVauXKmVK1d6Pc2VWCymVatWacqUKUpP/w6kw7P3OX5Lfve73zk5OTlOy5YtnYEDBzo7duzwepIr27ZtcyRddEyZMsXraQ261G5JzqpVq7yelrDp06c7ubm5TsuWLZ0bbrjBGTlypLNlyxavZyXF2lvlJ06c6GRlZTktW7Z0brzxRmfixInOkSNHvJ7lysaNG538/HzH7/c7eXl5zsqVK72e5NrmzZsdSc7Bgwe9nuI4juPw+7wAAOY02595AQCaL+IFADCHeAEAzCFeAABziBcAwBziBQAwh3gBAMwhXgAAc4gXAMAc4gUAMId4AQDM+R9XruSxTpMRiwAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAa8AAAGsCAYAAABq/yivAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAGKdJREFUeJzt3X1wVIW9xvFnk8CiQFYlAokxAQVMMLxJgIsB0gG0gw4VZ8pbsROgpYVGilC4NsPcG+mdsjgVi1Qaii9AaxGpU6w4QyAi0lphAqFRQV6MZIBRXqTaDaay0t1z/+iQe7e8ZE829Phjv5+ZM2N2NyfP6jhfzmZDfI7jOAIAwJAUrwcAAOAW8QIAmEO8AADmEC8AgDnECwBgDvECAJhDvAAA5hAvAIA5aV4PuOCelPFeT0hIWmZXryck7Ns7qr2ekJBJHT7zekLS+6/TBV5PSEh1/1SvJyS9qujv4nocV14AAHOIFwDAHOIFADCHeAEAzCFeAABziBcAwBziBQAwh3gBAMwhXgAAc4gXAMAc4gUAMId4AQDMIV4AAHOIFwDAHOIFADCHeAEAzCFeAABziBcAwBziBQAwh3gBAMwhXgAAc9LcfsKZM2f0/PPPa+fOnTp58qQkqWvXrrr77rs1depU3Xzzza0+EgCA/8/Vldfu3bvVq1cvLV++XIFAQCNGjNCIESMUCAS0fPly5eXlac+ePc2eJxwOq6GhIeaIOpEWPwkAQHJxdeU1e/ZsjR8/XitXrpTP54u5z3EczZw5U7Nnz9bOnTuveJ5gMKhFixbF3NZd+bpdd7qZAwBIUq6uvN555x3NnTv3onBJks/n09y5c1VbW9vsecrKyhQKhWKO7spzMwUAkMRcXXl17dpV1dXVysu7dGiqq6vVpUuXZs/j9/vl9/tjbkvxpbqZAgBIYq7iNX/+fH3ve99TTU2NRo0a1RSqU6dOadu2bXrmmWf0xBNPXJWhAABc4CpepaWlysjI0M9//nP98pe/VCTyzzdZpKamauDAgVqzZo0mTJhwVYYCAHCB67fKT5w4URMnTtT58+d15swZSVJGRobatGnT6uMAALgU1/G6oE2bNsrMzGzNLQAAxIW/YQMAYA7xAgCYQ7wAAOYQLwCAOcQLAGAO8QIAmEO8AADmEC8AgDnECwBgDvECAJhDvAAA5hAvAIA5xAsAYA7xAgCYQ7wAAOYQLwCAOcQLAGBOi3+TMmKFe9/i9YSE7f+77efQ57lJXk9ISO+xh72ekLD/vnWT1xMSUq2hXk9AnLjyAgCYQ7wAAOYQLwCAOcQLAGAO8QIAmEO8AADmEC8AgDnECwBgDvECAJhDvAAA5hAvAIA5xAsAYA7xAgCYQ7wAAOYQLwCAOcQLAGAO8QIAmEO8AADmEC8AgDnECwBgDvECAJhDvAAA5qR58UXD4bDC4XDMbVEnohRfqhdzAADGtPqV1/HjxzV9+vQrPiYYDCoQCMQc9TrY2lMAANeoVo/Xp59+qrVr117xMWVlZQqFQjFHd+W19hQAwDXK9cuGr7766hXvP3LkSLPn8Pv98vv9MbfxkiEAIF6u4zVu3Dj5fD45jnPZx/h8voRGAQBwJa5fNszMzNTvf/97RaPRSx579+69GjsBAGjiOl4DBw5UTU3NZe9v7qoMAIBEuX7ZcMGCBWpsbLzs/T169ND27dsTGgUAwJW4jtfw4cOveH/79u1VXFzc4kEAADSHv2EDAGAO8QIAmEO8AADmEC8AgDnECwBgDvECAJhDvAAA5hAvAIA5xAsAYA7xAgCYQ7wAAOYQLwCAOcQLAGAO8QIAmEO8AADmEC8AgDnECwBgjuvfpIxLS91W4/WEhFX3T/V6QkKy9LbXExKyt39/ryckbH2HwV5PQJLgygsAYA7xAgCYQ7wAAOYQLwCAOcQLAGAO8QIAmEO8AADmEC8AgDnECwBgDvECAJhDvAAA5hAvAIA5xAsAYA7xAgCYQ7wAAOYQLwCAOcQLAGAO8QIAmEO8AADmEC8AgDnECwBgDvECAJjjOl5ffPGF3nrrLb3//vsX3Xfu3Dn9+te/bvYc4XBYDQ0NMUfUibidAgBIUq7idfjwYeXn52vEiBHq06ePiouLdeLEiab7Q6GQpk2b1ux5gsGgAoFAzFGvg+7XAwCSkqt4PfrooyooKNDp06d16NAhdezYUUVFRTp27JirL1pWVqZQKBRzdFeeq3MAAJJXmpsHv/3223r99deVkZGhjIwMbdq0ST/4wQ80fPhwbd++Xe3bt4/rPH6/X36/P+a2FF+qmykAgCTm6srriy++UFra//XO5/OpoqJCY8eOVXFxsQ4fPtzqAwEA+Feurrzy8vK0Z88e5efnx9z+9NNPS5K+8Y1vtN4yAAAuw9WV14MPPqgXX3zxkvc9/fTTmjx5shzHaZVhAABcjs/5itTmnpTxXk8APHXkxf5eT0jYpPwaryckpLo/33v3WlX0d3E9jh9SBgCYQ7wAAOYQLwCAOcQLAGAO8QIAmEO8AADmEC8AgDnECwBgDvECAJhDvAAA5hAvAIA5xAsAYA7xAgCYQ7wAAOYQLwCAOcQLAGAO8QIAmJPm9YBrRVpmV68nJOzwk7afwwfFa72ekKB3vB6Q9Hq+WOL1hITdNrnW6wn/Flx5AQDMIV4AAHOIFwDAHOIFADCHeAEAzCFeAABziBcAwBziBQAwh3gBAMwhXgAAc4gXAMAc4gUAMId4AQDMIV4AAHOIFwDAHOIFADCHeAEAzCFeAABziBcAwBziBQAwh3gBAMwhXgAAc9LcfsKBAwe0a9cuDR06VHl5eTp48KCeeuophcNhPfTQQxo5cmSz5wiHwwqHwzG3RZ2IUnypbucAAJKQqyuvyspK9e/fX/Pnz9eAAQNUWVmpESNGqK6uTkePHtW9996rN954o9nzBINBBQKBmKNeB1v8JAAAycVVvH7yk59owYIF+utf/6rVq1frW9/6lmbMmKGqqipt27ZNCxYs0JIlS5o9T1lZmUKhUMzRXXktfhIAgOTiKl779+/X1KlTJUkTJkzQ2bNn9c1vfrPp/ilTpujdd99t9jx+v1/p6ekxBy8ZAgDi5foNGz6f75+fmJKidu3aKRAINN3XsWNHhUKh1lsHAMAluIpXt27d9MEHHzR9vHPnTuXk5DR9fOzYMWVmZrbeOgAALsHVuw1nzZqlSCTS9HFBQUHM/Zs3b47r3YYAACTCVbxmzpx5xfsXL16c0BgAAOLBDykDAMwhXgAAc4gXAMAc4gUAMId4AQDMIV4AAHOIFwDAHOIFADCHeAEAzCFeAABziBcAwBziBQAwh3gBAMwhXgAAc4gXAMAc4gUAMId4AQDMcfWblHF5zs03ej0hYZPya7yekNT2n/+71xMSVrL4R15PSEjA6wGIG1deAABziBcAwBziBQAwh3gBAMwhXgAAc4gXAMAc4gUAMId4AQDMIV4AAHOIFwDAHOIFADCHeAEAzCFeAABziBcAwBziBQAwh3gBAMwhXgAAc4gXAMAc4gUAMId4AQDMaZV4OY7TGqcBACAurRIvv9+vAwcOtMapAABoVpqbB8+bN++St0ciES1ZskSdOnWSJD355JNXPE84HFY4HI65LepElOJLdTMHAJCkXMVr2bJl6tevn2644YaY2x3H0YEDB9S+fXv5fL5mzxMMBrVo0aKY27orX7frTjdzAABJylW8Fi9erFWrVmnp0qUaOXJk0+1t2rTRmjVr1Lt377jOU1ZWdtFV3IOBqW6mAACSmKvvef34xz/WSy+9pFmzZmn+/Pk6f/58i76o3+9Xenp6zMFLhgCAeLl+w8agQYNUU1OjTz75RIWFhdq3b19cLxUCANBaXL1seEGHDh20du1arV+/XqNHj1YkEmntXQAAXFaL4nXBpEmTNGzYMNXU1Cg3N7e1NgEAcEUJxUuSsrOzlZ2d3RpbAACIC389FADAHOIFADCHeAEAzCFeAABziBcAwBziBQAwh3gBAMwhXgAAc4gXAMAc4gUAMId4AQDMIV4AAHOIFwDAHOIFADCHeAEAzCFeAABziBcAwJyEf5My/iny7gGvJyRsc8Vwryck5H/K93k9ISH/+R8Pej0hYZ1OvO31BCQJrrwAAOYQLwCAOcQLAGAO8QIAmEO8AADmEC8AgDnECwBgDvECAJhDvAAA5hAvAIA5xAsAYA7xAgCYQ7wAAOYQLwCAOcQLAGAO8QIAmEO8AADmEC8AgDnECwBgDvECAJhDvAAA5hAvAIA5aYl8cmNjozZs2KC6ujplZmZq8uTJ6tSpU7OfFw6HFQ6HY26LOhGl+FITmQMASBKurrx69+6tTz/9VJJ0/PhxFRQUaO7cuaqqqlJ5ebl69+6t+vr6Zs8TDAYVCARijnodbNkzAAAkHVfxOnjwoP7xj39IksrKypSVlaWjR4+qurpaR48eVd++fbVw4cJmz1NWVqZQKBRzdFdey54BACDptPhlw507d2rlypUKBAKSpA4dOmjRokWaNGlSs5/r9/vl9/tjbuMlQwBAvFy/YcPn80mSzp07p8zMzJj7brnlFn3yySetswwAgMtwfeU1atQopaWlqaGhQYcOHVJBQUHTfUePHo3rDRsAACTCVbzKy8tjPu7QoUPMx5s2bdLw4cMTXwUAwBUkFK9/9bOf/SyhMQAAxIMfUgYAmEO8AADmEC8AgDnECwBgDvECAJhDvAAA5hAvAIA5xAsAYA7xAgCYQ7wAAOYQLwCAOcQLAGAO8QIAmEO8AADmEC8AgDnECwBgDvECAJjj6jcp49p2+7cPez0hIT13lHg9ISG3naj1egJgBldeAABziBcAwBziBQAwh3gBAMwhXgAAc4gXAMAc4gUAMId4AQDMIV4AAHOIFwDAHOIFADCHeAEAzCFeAABziBcAwBziBQAwh3gBAMwhXgAAc4gXAMAc4gUAMId4AQDMIV4AAHOIFwDAHFfx2rt3r+rr65s+/s1vfqOioiLdeuutGjZsmNavXx/XecLhsBoaGmKOqBNxtxwAkLRcxWvatGn68MMPJUnPPvusvv/976uwsFALFy7UoEGDNGPGDD3//PPNnicYDCoQCMQc9TrYsmcAAEg6PsdxnHgffP311+vAgQPKzc3VXXfdpVmzZmnGjBlN969bt04//elPtX///iueJxwOKxwOx9z2YGCqUnypLuejNd3wVobXExKy93i21xMSctvkWq8nAJ6riv4urseluTnp9ddfrzNnzig3N1cfffSRBg8eHHP/kCFDYl5WvBy/3y+/3x9zG+ECAMTL1cuGY8aMUUVFhSSpuLhYL7/8csz9GzZsUI8ePVpvHQAAl+Dqyuvxxx9XUVGRiouLVVhYqKVLl+rNN99Ufn6+Dh06pF27dmnjxo1XaysAAJJcXnllZWXpL3/5i4YOHarKyko5jqPq6mpt3bpV2dnZ+vOf/6z77rvvam0FAECSyzdsXE33pIz3ekLS4w0b3uING0D8b9jgh5QBAOYQLwCAOcQLAGAO8QIAmEO8AADmEC8AgDnECwBgDvECAJhDvAAA5hAvAIA5xAsAYA7xAgCYQ7wAAOYQLwCAOcQLAGAO8QIAmEO8AADmpHk9AF8dL922zesJCRldPt3rCQD+TbjyAgCYQ7wAAOYQLwCAOcQLAGAO8QIAmEO8AADmEC8AgDnECwBgDvECAJhDvAAA5hAvAIA5xAsAYA7xAgCYQ7wAAOYQLwCAOcQLAGAO8QIAmEO8AADmEC8AgDnECwBgDvECAJhDvAAA5riK1+zZs/WnP/0p4S8aDofV0NAQc0SdSMLnBQAkB1fxWrFihb72ta+pV69eevzxx3Xy5MkWfdFgMKhAIBBz1Otgi84FAEg+rl823Lp1q+677z498cQTysnJ0QMPPKDXXntN0Wg07nOUlZUpFArFHN2V53YKACBJuY5Xnz59tGzZMn388cd64YUXFA6HNW7cON16661auHCh6urqmj2H3+9Xenp6zJHiS23REwAAJJ8Wv2GjTZs2mjBhgiorK3XkyBHNmDFDv/3tb3XHHXe05j4AAC7SKu82zMnJ0WOPPab6+npVVla2xikBALgsV/HKzc1VaurlX97z+Xy65557Eh4FAMCVpLl5cH19/dXaAQBA3PghZQCAOcQLAGAO8QIAmEO8AADmEC8AgDnECwBgDvECAJhDvAAA5hAvAIA5xAsAYA7xAgCYQ7wAAOYQLwCAOcQLAGAO8QIAmEO8AADmEC8AgD1OEjh37pxTXl7unDt3zuspLWJ9v+PYfw7W9zuO/edgfb/j2H8OX6X9PsdxHK8DerU1NDQoEAgoFAopPT3d6zmuWd8v2X8O1vdL9p+D9f2S/efwVdrPy4YAAHOIFwDAHOIFADAnKeLl9/tVXl4uv9/v9ZQWsb5fsv8crO+X7D8H6/sl+8/hq7Q/Kd6wAQC4tiTFlRcA4NpCvAAA5hAvAIA5xAsAYA7xAgCYc83Ha8WKFerWrZvatWunIUOGqLq62utJrvzxj3/U2LFjlZWVJZ/Pp1deecXrSXELBoMaNGiQOnbsqM6dO2vcuHE6dOiQ17NcqaioUN++fZWenq709HQNHTpUmzdv9npWiy1ZskQ+n0+PPPKI11Pi9thjj8nn88UceXl5Xs9y5aOPPtJDDz2kTp066brrrlOfPn20Z88er2fFrVu3bhf9N/D5fCotLfVs0zUdr5deeknz5s1TeXm59u7dq379+unrX/+6Tp8+7fW0uDU2Nqpfv35asWKF11Nc27Fjh0pLS7Vr1y5VVVXp/Pnzuvfee9XY2Oj1tLhlZ2dryZIlqqmp0Z49ezRy5Eg98MAD2r9/v9fTXNu9e7d+9atfqW/fvl5Pce3OO+/UiRMnmo633nrL60lx++yzz1RUVKQ2bdpo8+bNev/997V06VLdeOONXk+L2+7du2P+/VdVVUmSxo8f790ob/9e4Ktr8ODBTmlpadPHkUjEycrKcoLBoIerWk6Ss3HjRq9ntNjp06cdSc6OHTu8npKQG2+80Xn22We9nuHK2bNnnZ49ezpVVVVOcXGxM2fOHK8nxa28vNzp16+f1zNa7NFHH3WGDRvm9YxWNWfOHOf22293otGoZxuu2SuvL7/8UjU1NRo9enTTbSkpKRo9erR27tzp4bLkFQqFJEk33XSTx0taJhKJaP369WpsbNTQoUO9nuNKaWmp7r///pj/Hyz54IMPlJWVpdtuu01TpkzRsWPHvJ4Ut1dffVWFhYUaP368OnfurAEDBuiZZ57xelaLffnll3rhhRc0ffp0+Xw+z3Zcs/E6c+aMIpGIunTpEnN7ly5ddPLkSY9WJa9oNKpHHnlERUVFKigo8HqOK++99546dOggv9+vmTNnauPGjerdu7fXs+K2fv167d27V8Fg0OspLTJkyBCtWbNGlZWVqqioUH19vYYPH66zZ896PS0uR44cUUVFhXr27KktW7Zo1qxZ+uEPf6i1a9d6Pa1FXnnlFf3tb3/T1KlTPd2R5ulXR9IoLS3Vvn37TH2v4oI77rhDtbW1CoVCevnll1VSUqIdO3aYCNjx48c1Z84cVVVVqV27dl7PaZExY8Y0/XPfvn01ZMgQ5ebmasOGDfrOd77j4bL4RKNRFRYWavHixZKkAQMGaN++fVq5cqVKSko8Xufec889pzFjxigrK8vTHdfslVdGRoZSU1N16tSpmNtPnTqlrl27erQqOT388MN67bXXtH37dmVnZ3s9x7W2bduqR48eGjhwoILBoPr166ennnrK61lxqamp0enTp3XXXXcpLS1NaWlp2rFjh5YvX660tDRFIhGvJ7p2ww03qFevXqqrq/N6SlwyMzMv+oNOfn6+qZc+Lzh69Khef/11ffe73/V6yrUbr7Zt22rgwIHatm1b023RaFTbtm0z9/0KqxzH0cMPP6yNGzfqjTfeUPfu3b2e1Cqi0ajC4bDXM+IyatQovffee6qtrW06CgsLNWXKFNXW1io1NdXria59/vnn+vDDD5WZmen1lLgUFRVd9CMihw8fVm5urkeLWm716tXq3Lmz7r//fq+nXNsvG86bN08lJSUqLCzU4MGDtWzZMjU2NmratGleT4vb559/HvMnzPr6etXW1uqmm25STk6Oh8uaV1paqnXr1ukPf/iDOnbs2PS9xkAgoOuuu87jdfEpKyvTmDFjlJOTo7Nnz2rdunV68803tWXLFq+nxaVjx44XfY+xffv26tSpk5nvPc6fP19jx45Vbm6uPv74Y5WXlys1NVWTJ0/2elpc5s6dq7vvvluLFy/WhAkTVF1drVWrVmnVqlVeT3MlGo1q9erVKikpUVraVyAdnr3P8d/kF7/4hZOTk+O0bdvWGTx4sLNr1y6vJ7myfft2R9JFR0lJidfTmnWp3ZKc1atXez0tbtOnT3dyc3Odtm3bOjfffLMzatQoZ+vWrV7PSoi1t8pPnDjRyczMdNq2bevccsstzsSJE526ujqvZ7myadMmp6CgwPH7/U5eXp6zatUqrye5tmXLFkeSc+jQIa+nOI7jOPw+LwCAOdfs97wAANcu4gUAMId4AQDMIV4AAHOIFwDAHOIFADCHeAEAzCFeAABziBcAwBziBQAwh3gBAMz5X6/Z8jIF2w9IAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "for i in closest:\n", " plot_a_digit(X_train[i])" ] }, { "cell_type": "markdown", "id": "8659ca0e-17d4-44ec-9b4a-e2fbd01fad72", "metadata": {}, "source": [ "The k Nearest Neighbors Classifier class:" ] }, { "cell_type": "code", "execution_count": 82, "id": "2efd3f56-bbe8-402b-b7bb-697a115a6ceb", "metadata": {}, "outputs": [], "source": [ "from sklearn.neighbors import KNeighborsClassifier" ] }, { "cell_type": "markdown", "id": "0a93b2ee-ea69-4135-9dac-70311badee71", "metadata": {}, "source": [ "TODO:\n", "1. Fit the nearest neighbors classifier with `k=5` on the train split and evaluate it on the test split.\n", "2. Calculate and visualize the confusion matrix.\n", "3. Calculate the F1 score.\n", "4. Compare the confusion matrices and the scores for `k=1`, `k=2`, `k=5`, `k=10` and `k=20`." ] }, { "cell_type": "code", "execution_count": 107, "id": "6919c4e8-900f-4c1e-a861-7c91b6890bcc", "metadata": {}, "outputs": [], "source": [ "k=1\n", "model = KNeighborsClassifier(n_neighbors=k)\n", "model.fit(X_train, y_train)\n", "y_pred = model.predict(X_test)" ] }, { "cell_type": "code", "execution_count": 108, "id": "2bfe2c61-d3f7-4f5d-9f1c-cb52127bd846", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[17, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n", " [ 0, 11, 0, 0, 0, 0, 0, 0, 0, 0],\n", " [ 0, 0, 17, 0, 0, 0, 0, 0, 0, 0],\n", " [ 0, 0, 0, 17, 0, 0, 0, 0, 0, 0],\n", " [ 0, 0, 0, 0, 25, 0, 0, 0, 0, 0],\n", " [ 0, 0, 0, 0, 0, 22, 0, 0, 0, 0],\n", " [ 0, 0, 0, 0, 0, 0, 19, 0, 0, 0],\n", " [ 0, 0, 0, 0, 0, 0, 0, 18, 0, 1],\n", " [ 0, 0, 0, 0, 0, 0, 0, 0, 8, 0],\n", " [ 0, 0, 0, 1, 1, 0, 0, 0, 0, 23]])" ] }, "execution_count": 108, "metadata": {}, "output_type": "execute_result" } ], "source": [ "confusion_matrix(y_test, y_pred)" ] }, { "cell_type": "code", "execution_count": 109, "id": "186179e1-7f43-45b5-8182-82225bf1cc02", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 109, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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X69NmzbZHRbksuRfW49CvBDl5eXq2rWr5syZY3co51RYWKisrCxt2LBBBQUFOn36tAYPHqzy8nK7Q1OrVq00Y8YMFRcXa/Pmzbrhhhs0bNgwffrpp3aHdpZNmzbpxRdfVJcuXewOJczVV1+tgwcPVo7169fbHZIk6fvvv1fv3r1Vr149rVixQp999pn+8Ic/qEmTJnaHJunH/54//3MrKCiQJP3617+2ObIfPfXUU8rPz9fs2bP1+eef66mnntLMmTP1xz/+0e7QJEn/9m//poKCAr366qvatm2bBg8erEGDBmn//v12hwZLHxNks549expZWVmVrysqKozk5GQjEAjYGNXZJJ311Can+eabbwxJRmFhod2hnFOTJk2Ml156ye4wwhw7dsy48sorjYKCAqN///7Ggw8+aHdIhmH8+ESxrl272h3GOT300ENGnz597A6j2h588EGjbdu2RigUsjsUwzAM4+abbzbGjRsXdmzEiBHG6NGjbYron06cOGFERUUZy5cvDzverVs3Y/r06TZFhZ+4pvI/deqUiouLNWjQoMpjderU0aBBg1RUVGRjZJem0tJSSVLTpk1tjiRcRUWFFi9erPLycsu3u7xYWVlZuvnmm8P+H3SKXbt2KTk5WW3atNHo0aP15Zdf2h2SJOnvf/+70tPT9etf/1oJCQm69tpr9ac//cnusM7p1KlTeu211zRu3Dj5fD67w5EkXX/99VqzZo127twpSfrkk0+0fv16ZWZm2hyZdObMGVVUVKh+/fphx2NiYhzTefIy12zv++2336qiokItWrQIO96iRQt98cUXNkV1aQqFQpo4caJ69+6tTp062R2OJGnbtm3KyMjQyZMn1ahRIy1dulQdO3a0O6xKixcv1kcffeTI65m9evXSwoUL1b59ex08eFB5eXnq27evtm/frtjYWFtj27Nnj/Lz8zV58mQ98sgj2rRpk/7jP/5D0dHRGjNmjK2xmS1btkxHjx7V2LFj7Q6l0sMPP6yysjKlpaUpKipKFRUVeuKJJzR69Gi7Q1NsbKwyMjL02GOPqUOHDmrRooX+8pe/qKioSO3atbM7PM9zTfKHdbKysrR9+3ZH/Xbevn17bdmyRaWlpfrrX/+qMWPGqLCw0BG/AHz11Vd68MEHVVBQcFaV4wQ/rwK7dOmiXr16KTU1VUuWLNG9995rY2Q//qKZnp6uJ598UpJ07bXXavv27Zo7d67jkv+f//xnZWZmKjk52e5QKi1ZskSvv/66Fi1apKuvvlpbtmzRxIkTlZyc7Ig/v1dffVXjxo1Ty5YtFRUVpW7dumnUqFEqLi62OzTPc03yr81HIbrZhAkTtHz5cq1bt06tWrWyO5xK0dHRldVC9+7dtWnTJj333HN68cUXbY5MKi4u1jfffKNu3bpVHquoqNC6des0e/ZsBYNBRUVF2RhhuMaNG+uqq65SSUmJ3aEoKSnprF/gOnTooL/97W82RXRu+/bt0+rVq/Xmm2/aHUqYqVOn6uGHH9add94pSercubP27dunQCDgiOTftm1bFRYWqry8XGVlZUpKStLIkSPVpk0bu0PzPNdc86/NRyG6kWEYmjBhgpYuXap3331XrVu3tjukKoVCIQWDQbvDkCQNHDhQ27Zt05YtWypHenq6Ro8erS1btjgq8UvS8ePHtXv3biUlJdkdinr37n3WLaU7d+5UamqqTRGd24IFC5SQkKCbb77Z7lDCnDhxQnXqhP81HhUVpVAoZFNE59awYUMlJSXp+++/16pVqzRs2DC7Q/I811T+Uu09CvFCHD9+PKzS2rt3r7Zs2aKmTZsqJSXFxsh+lJWVpUWLFumtt95SbGysDh06JEmKj49XTEyMrbFlZ2crMzNTKSkpOnbsmBYtWqS1a9dq1apVtsb1k9jY2LPWRjRs2FDNmjVzxJqJKVOmaOjQoUpNTdWBAweUk5OjqKgojRo1yu7QNGnSJF1//fV68skndccdd2jjxo2aN2+e5s2bZ3dolUKhkBYsWKAxY8aobl1n/ZU5dOhQPfHEE0pJSdHVV1+tjz/+WM8884zGjRtnd2iSpFWrVskwDLVv314lJSWaOnWq0tLSHPF3sufZfbuB1f74xz8aKSkpRnR0tNGzZ09jw4YNdodkGIZhvPfee4aks8aYMWPsDs0wDOOcsUkyFixYYHdoxrhx44zU1FQjOjrauOyyy4yBAwca77zzjt1hVclJt/qNHDnSSEpKMqKjo42WLVsaI0eONEpKSuwOq9Lbb79tdOrUyfD7/UZaWpoxb948u0MKs2rVKkOSsWPHDrtDOUtZWZnx4IMPGikpKUb9+vWNNm3aGNOnTzeCwaDdoRmGYRhvvPGG0aZNGyM6OtpITEw0srKyjKNHj9odFgzD4JG+AAB4jGuu+QMAgOoh+QMA4DEkfwAAPIbkDwCAx5D8AQDwGJI/AAAeQ/IHAMBjSP4AAHgMyR8AAI8h+QMA4DEkfwAAPOb/B5EEHd1fkSHCAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.heatmap(confusion_matrix(y_test, y_pred))" ] }, { "cell_type": "code", "execution_count": null, "id": "83236c5c-01ab-402f-a214-578dc836c9e0", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.12.11" } }, "nbformat": 4, "nbformat_minor": 5 }