{ "cells": [ { "cell_type": "markdown", "id": "095c18c2-5055-4ecc-a22b-4d53335c5f24", "metadata": {}, "source": [ "# Homework 3\n", "\n", "Due 11:59PM Monday, March 11 submitted via Blackboard\n", "\n" ] }, { "cell_type": "markdown", "id": "a59cd3e2-83ab-4eb7-9d1a-ae686fc09960", "metadata": {}, "source": [ "In this homework you will explore a couple of different clustering algorithms and understand the impact of various hyperparameters." ] }, { "cell_type": "code", "execution_count": 2, "id": "4584b47c-6700-438e-898b-aa2d239e615c", "metadata": {}, "outputs": [], "source": [ "# Imports\n", "import numpy as np\n", "from sklearn.cluster import KMeans\n", "from collections import defaultdict\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "import random\n", "from sklearn.cluster import AgglomerativeClustering" ] }, { "cell_type": "markdown", "id": "d248872a-7b5c-459c-9f60-0c1b486af768", "metadata": {}, "source": [ "We'll be using the MNIST digits data because it is easy to understand and visualize. The code below loads the raw data where each instance is a 28x28 grayscale image represented as a vector of 784 integers between 0 and 255.\n", "\n", "It also loads the digits (0-9) to which each image corresponds. " ] }, { "cell_type": "markdown", "id": "6590e7e3-ebee-473e-80bf-154136bc84af", "metadata": {}, "source": [ "# Task 0: Get the data\n", "\n", "https://redirect.cs.umbc.edu/courses/undergraduate/478/spring2024/mnist_labels.txt\n", "https://redirect.cs.umbc.edu/courses/undergraduate/478/spring2024/mnist_data.txt\n", "\n", "Put the two files above in the same director as this notebook." ] }, { "cell_type": "code", "execution_count": 14, "id": "24a2670f-5f55-45ce-a2e8-506958795ec6", "metadata": {}, "outputs": [], "source": [ "X = [np.array(list(map(int, x.split()))) for x in open('mnist_data.txt').readlines()]\n", "y = [int(y.strip()) for y in open('mnist_labels.txt').readlines()]" ] }, { "cell_type": "code", "execution_count": 15, "id": "ee11a874-6c3c-4b43-bf0c-b31c5a4e621c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10000\n", "10000\n" ] } ], "source": [ "# Check to ensure that X and y are the same length\n", "print(len(X))\n", "print(len(y))" ] }, { "cell_type": "code", "execution_count": 16, "id": "5d892616-4a0f-4e75-b3e6-9e750171fb22", "metadata": {}, "outputs": [], "source": [ "def plot_digit(digit):\n", " \"Visualize a digit or a cluster centroid\"\n", " \n", " plt.imshow(digit.reshape((28,28)), cmap='gray')\n", " plt.show()" ] }, { "cell_type": "code", "execution_count": 17, "id": "d691ffc1-ef2d-4e74-9b8c-56febe5b577f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The digit is 3\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# You can run this cell multiple times to see different digit examples\n", "idx = random.randrange(len(X))\n", "print(\"The digit is %d\" % y[idx])\n", "plot_digit(X[idx])" ] }, { "cell_type": "markdown", "id": "d4fbd5e1-c220-4db6-b0c0-f7909a0330d0", "metadata": {}, "source": [ "# Task 1: Get familiar with running k-means\n", "\n", "Read through the code below because you'll be using the ideas here for the next task" ] }, { "cell_type": "code", "execution_count": 18, "id": "741cfd03-18a5-40bf-b5bc-dbf607b62b23", "metadata": {}, "outputs": [], "source": [ "# Create a KMeans object with 5 clusters and random point selection\n", "# for cluster initialization\n", "\n", "clst = KMeans(n_clusters = 5, init = 'random')" ] }, { "cell_type": "code", "execution_count": 19, "id": "97bcf7ec-90dc-486b-9d64-9876fea9ab74", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/oates/tmp/env/anaconda3/lib/python3.8/site-packages/sklearn/cluster/_kmeans.py:1416: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n", " super()._check_params_vs_input(X, default_n_init=10)\n" ] }, { "data": { "text/html": [ "
KMeans(init='random', n_clusters=5)
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": [ "KMeans(init='random', n_clusters=5)" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Cluster the data\n", "clst.fit(X)" ] }, { "cell_type": "code", "execution_count": 20, "id": "26ec6d19-e08f-4459-a82e-b8d9d2d92dbe", "metadata": {}, "outputs": [], "source": [ "def get_cm(clst, y):\n", " \"\"\"\n", " Given a cluster object that has been fit and the true labels for the data\n", " return a confusion matrix where cell (i, j) is the number of times true \n", " class label j occurs in cluster i.\n", " \"\"\"\n", " \n", " cm = np.zeros((np.unique(clst.labels_).shape[0], np.unique(y).shape[0]))\n", "\n", " for ypred, ytrue in zip(clst.labels_, y):\n", " cm[ypred][ytrue] += 1\n", " \n", " return cm" ] }, { "cell_type": "code", "execution_count": 21, "id": "2172419a-9050-4e1e-b217-8d9fdfb3dcec", "metadata": {}, "outputs": [], "source": [ "def plot_cm(cm):\n", " \"Plot a confusion matrix\"\n", " \n", " s = sns.heatmap(cm, cmap=\"GnBu\", annot=True, fmt='g')\n", " s.set(xlabel='Digit', ylabel='Cluster')\n", " return s" ] }, { "cell_type": "code", "execution_count": 22, "id": "5b93b190-078a-48ef-b4ef-e247e1e38c51", "metadata": {}, "outputs": [], "source": [ "# Get the confusion matrix for the 10 cluster case\n", "cm = get_cm(clst, y)" ] }, { "cell_type": "markdown", "id": "6413133b-14fc-4d0e-a655-4185b7e6e12a", "metadata": {}, "source": [ "It's hard to tell what you'll see below due to randomness, but typically there is one cluster with almost all of the 0's. Find the row for which the 0 column has a very high count. There is also typically a column that has most of the 1's. The 4's, 7's, and 8's tend to clump into one cluster. Look for the row that has high counts for those columns." ] }, { "cell_type": "code", "execution_count": 23, "id": "19e9e646-eff7-49c0-8051-ceae37437de3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_cm(cm)" ] }, { "cell_type": "code", "execution_count": 24, "id": "a45c43f5-0497-4a9f-8930-dccc0aee0dd5", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Cluster ID 0 centroid\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Cluster ID 1 centroid\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Cluster ID 2 centroid\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Cluster ID 3 centroid\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Cluster ID 4 centroid\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Look at the centroids for all of the clusters\n", "for i in range(len(clst.cluster_centers_)):\n", " print(\"Cluster ID %d centroid\" % i)\n", " plot_digit(clst.cluster_centers_[i])" ] }, { "cell_type": "markdown", "id": "85e51e69-791a-42f1-a1c9-1124b9b3b078", "metadata": {}, "source": [ "# Task 2: Varying k in k-Means\n", "\n", "For values of k in {2, 10, 15} \n", "* cluster the digits\n", "* print the confusion matrices\n", "* plot the cluster centroids\n", "\n", "Note that for k = 2, 2-means must combine distinct digits. For k = 10 you would hope that it has a cluster for each digit in which that digit is by far the most common. For k = 15 the expectation is that there may be clusters, for example, for the same digit but different ways of writing it (e.g., 9 with a straight bottom vs. 9 with a curled tail at the bottom).\n", "\n", "For each of the three cases, write a couple of paragraphs on what you observe about the way k-means has clustered the data, why it has done it that way (e.g., certain digits are visually similar, be sure to say which ones and why), and why the cluster centroids look the way they do. You don't have to talk about all of the clusters, especially in the k = 15 case, but you do need to mention several of them in each case." ] }, { "cell_type": "markdown", "id": "06b67c07-4405-4221-8932-d2462cbf5879", "metadata": {}, "source": [ "# Task 3: Agglomerative Clustering\n", "\n", "Read the scikit documentation on Agglomerative Clustering. There are two important hyperparameters:\n", "* linkage, which can take on values ‘ward’, ‘complete’, ‘average’, ‘single’\n", "* metric, which can take on values “euclidean”, “l1”, “l2”, “manhattan”, “cosine”\n", "\n", "Explore combinations of those hyperparameters with n_clusters = 10 and see how close you can get to the ideal of one majority digit per cluster. \n", "* Write a couple of paragraphs explaining what you tried, what worked and what didn't with example confusion matrices. Include an explanation of **why** you think the best results were a result of the hyperparameters chosen in that case. Note that you may need to dig through the scikit documentation or use the internet to get more information on their effects." ] }, { "cell_type": "code", "execution_count": null, "id": "9f83b067-193a-48bb-82dd-af315f63eaff", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.8.8" } }, "nbformat": 4, "nbformat_minor": 5 }