{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Blog Post: Spectral Clustering\n", "\n", "In this blog post, you'll write a tutorial on a simple version of the *spectral clustering* algorithm for clustering data points. Each of the below parts will pose to you one or more specific tasks. You should plan to both:\n", "\n", "- Achieve these tasks using clean, efficient, and well-documented Python and \n", "- Write, in your own words, about how to understand what's going on. \n", "\n", "> Remember, your aim is not just to write and understand the algorithm, but to explain to someone else how they could do the same. \n", "\n", "***Note***: your blog post doesn't have to contain a lot of math. It's ok for you to give explanations like \"this function is an approximation of this other function according to the math in the written assignment.\" \n", "\n", "### Notation\n", "\n", "In all the math below: \n", "\n", "- Boldface capital letters like $\\mathbf{A}$ refer to matrices (2d arrays of numbers). \n", "- Boldface lowercase letters like $\\mathbf{v}$ refer to vectors (1d arrays of numbers). \n", "- $\\mathbf{A}\\mathbf{B}$ refers to a matrix-matrix product (`A@B`). $\\mathbf{A}\\mathbf{v}$ refers to a matrix-vector product (`A@v`). \n", "\n", "### Comments and Docstrings\n", "\n", "You should plan to comment all of your code. Docstrings are not required except in Part G. \n", "\n", "## Introduction\n", "\n", "In this problem, we'll study *spectral clustering*. Spectral clustering is an important tool for identifying meaningful parts of data sets with complex structure. To start, let's look at an example where we *don't* need spectral clustering. " ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from sklearn import datasets\n", "from matplotlib import pyplot as plt" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "n = 200\n", "np.random.seed(1111)\n", "X, y = datasets.make_blobs(n_samples=n, shuffle=True, random_state=None, centers = 2, cluster_std = 2.0)\n", "plt.scatter(X[:,0], X[:,1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Clustering* refers to the task of separating this data set into the two natural \"blobs.\" K-means is a very common way to achieve this task, which has good performance on circular-ish blobs like these: " ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from sklearn.cluster import KMeans\n", "km = KMeans(n_clusters = 2)\n", "km.fit(X)\n", "\n", "plt.scatter(X[:,0], X[:,1], c = km.predict(X))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Harder Clustering\n", "\n", "That was all well and good, but what if our data is \"shaped weird\"? " ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "np.random.seed(1234)\n", "n = 200\n", "X, y = datasets.make_moons(n_samples=n, shuffle=True, noise=0.05, random_state=None)\n", "plt.scatter(X[:,0], X[:,1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can still make out two meaningful clusters in the data, but now they aren't blobs but crescents. As before, the Euclidean coordinates of the data points are contained in the matrix `X`, while the labels of each point are contained in `y`. Now k-means won't work so well, because k-means is, by design, looking for circular clusters. " ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "km = KMeans(n_clusters = 2)\n", "km.fit(X)\n", "plt.scatter(X[:,0], X[:,1], c = km.predict(X))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Whoops! That's not right! \n", "\n", "As we'll see, spectral clustering is able to correctly cluster the two crescents. In the following problems, you will derive and implement spectral clustering. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Part A\n", "\n", "Construct the *similarity matrix* $\\mathbf{A}$. $\\mathbf{A}$ should be a matrix (2d `np.ndarray`) with shape `(n, n)` (recall that `n` is the number of data points). \n", "\n", "When constructing the similarity matrix, use a parameter `epsilon`. Entry `A[i,j]` should be equal to `1` if `X[i]` (the coordinates of data point `i`) is within distance `epsilon` of `X[j]` (the coordinates of data point `j`), and `0` otherwise. \n", "\n", "**The diagonal entries `A[i,i]` should all be equal to zero.** The function `np.fill_diagonal()` is a good way to set the values of the diagonal of a matrix. \n", "\n", "#### Note\n", "\n", "It is possible to do this manually in a `for`-loop, by testing whether `(X[i] - X[j])**2 < epsilon**2` for each choice of `i` and `j`. This is not recommended! Instead, see if you can find a solution built into `sklearn`. Can you find a function that will compute all the pairwise distances and collect them into an appropriate matrix for you? \n", "\n", "For this part, use `epsilon = 0.4`. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Part B\n", "\n", "The matrix `A` now contains information about which points are near (within distance `epsilon`) which other points. We now pose the task of clustering the data points in `X` as the task of partitioning the rows and columns of `A`. \n", "\n", "Let $d_i = \\sum_{j = 1}^n a_{ij}$ be the $i$th row-sum of $\\mathbf{A}$, which is also called the *degree* of $i$. Let $C_0$ and $C_1$ be two clusters of the data points. We assume that every data point is in either $C_0$ or $C_1$. The cluster membership as being specified by `y`. We think of `y[i]` as being the label of point `i`. So, if `y[i] = 1`, then point `i` (and therefore row $i$ of $\\mathbf{A}$) is an element of cluster $C_1$. \n", "\n", "The *binary norm cut objective* of a matrix $\\mathbf{A}$ is the function \n", "\n", "$$N_{\\mathbf{A}}(C_0, C_1)\\equiv \\mathbf{cut}(C_0, C_1)\\left(\\frac{1}{\\mathbf{vol}(C_0)} + \\frac{1}{\\mathbf{vol}(C_1)}\\right)\\;.$$\n", "\n", "In this expression, \n", "- $\\mathbf{cut}(C_0, C_1) \\equiv \\sum_{i \\in C_0, j \\in C_1} a_{ij}$ is the *cut* of the clusters $C_0$ and $C_1$. \n", "- $\\mathbf{vol}(C_0) \\equiv \\sum_{i \\in C_0}d_i$, where $d_i = \\sum_{j = 1}^n a_{ij}$ is the *degree* of row $i$ (the total number of all other rows related to row $i$ through $A$). The *volume* of cluster $C_0$ is a measure of the size of the cluster. \n", "\n", "A pair of clusters $C_0$ and $C_1$ is considered to be a \"good\" partition of the data when $N_{\\mathbf{A}}(C_0, C_1)$ is small. To see why, let's look at each of the two factors in this objective function separately. \n", "\n", "\n", "#### B.1 The Cut Term\n", "\n", "First, the cut term $\\mathbf{cut}(C_0, C_1)$ is the number of nonzero entries in $\\mathbf{A}$ that relate points in cluster $C_0$ to points in cluster $C_1$. Saying that this term should be small is the same as saying that points in $C_0$ shouldn't usually be very close to points in $C_1$. \n", "\n", "Write a function called `cut(A,y)` to compute the cut term. You can compute it by summing up the entries `A[i,j]` for each pair of points `(i,j)` in different clusters. \n", "\n", "There is a solution for computing the cut term that uses only `numpy` tools and no loops. However, it's fine to use `for`-loops for this part only -- we're going to see a more efficient approach later. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compute the cut objective for the true clusters `y`. Then, generate a random vector of random labels of length `n`, with each label equal to either 0 or 1. Check the cut objective for the random labels. You should find that the cut objective for the true labels is *much* smaller than the cut objective for the random labels. \n", "\n", "This shows that this part of the cut objective indeed favors the true clusters over the random ones. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### B.2 The Volume Term \n", "\n", "Now take a look at the second factor in the norm cut objective. This is the *volume term*. As mentioned above, the *volume* of cluster $C_0$ is a measure of how \"big\" cluster $C_0$ is. If we choose cluster $C_0$ to be small, then $\\mathbf{vol}(C_0)$ will be small and $\\frac{1}{\\mathbf{vol}(C_0)}$ will be large, leading to an undesirable higher objective value. \n", "\n", "Synthesizing, the binary normcut objective asks us to find clusters $C_0$ and $C_1$ such that:\n", "\n", "1. There are relatively few entries of $\\mathbf{A}$ that join $C_0$ and $C_1$. \n", "2. Neither $C_0$ and $C_1$ are too small. \n", "\n", "Write a function called `vols(A,y)` which computes the volumes of $C_0$ and $C_1$, returning them as a tuple. For example, `v0, v1 = vols(A,y)` should result in `v0` holding the volume of cluster `0` and `v1` holding the volume of cluster `1`. Then, write a function called `normcut(A,y)` which uses `cut(A,y)` and `vols(A,y)` to compute the binary normalized cut objective of a matrix `A` with clustering vector `y`. \n", "\n", "***Note***: No for-loops in this part. Each of these functions should be implemented in five lines or less. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, compare the `normcut` objective using both the true labels `y` and the fake labels you generated above. What do you observe about the normcut for the true labels when compared to the normcut for the fake labels? " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Part C\n", "\n", "We have now defined a normalized cut objective which takes small values when the input clusters are (a) joined by relatively few entries in $A$ and (b) not too small. One approach to clustering is to try to find a cluster vector `y` such that `normcut(A,y)` is small. However, this is an NP-hard combinatorial optimization problem, which means that may not be possible to find the best clustering in practical time, even for relatively small data sets. We need a math trick! \n", "\n", "Here's the trick: define a new vector $\\mathbf{z} \\in \\mathbb{R}^n$ such that: \n", "\n", "$$\n", "z_i = \n", "\\begin{cases}\n", " \\frac{1}{\\mathbf{vol}(C_0)} &\\quad \\text{if } y_i = 0 \\\\ \n", " -\\frac{1}{\\mathbf{vol}(C_1)} &\\quad \\text{if } y_i = 1 \\\\ \n", "\\end{cases}\n", "$$\n", "\n", "\n", "Note that the signs of the elements of $\\mathbf{z}$ contain all the information from $\\mathbf{y}$: if $i$ is in cluster $C_0$, then $y_i = 0$ and $z_i > 0$. \n", "\n", "Next, if you like linear algebra, you can show that \n", "\n", "$$\\mathbf{N}_{\\mathbf{A}}(C_0, C_1) = \\frac{\\mathbf{z}^T (\\mathbf{D} - \\mathbf{A})\\mathbf{z}}{\\mathbf{z}^T\\mathbf{D}\\mathbf{z}}\\;,$$\n", "\n", "where $\\mathbf{D}$ is the diagonal matrix with nonzero entries $d_{ii} = d_i$, and where $d_i = \\sum_{j = 1}^n a_i$ is the degree (row-sum) from before. \n", "\n", "1. Write a function called `transform(A,y)` to compute the appropriate $\\mathbf{z}$ vector given `A` and `y`, using the formula above. \n", "2. Then, check the equation above that relates the matrix product to the normcut objective, by computing each side separately and checking that they are equal. \n", "3. While you're here, also check the identity $\\mathbf{z}^T\\mathbf{D}\\mathbb{1} = 0$, where $\\mathbb{1}$ is the vector of `n` ones (i.e. `np.ones(n)`). This identity effectively says that $\\mathbf{z}$ should contain roughly as many positive as negative entries. \n", "\n", "#### Programming Note\n", "\n", "You can compute $\\mathbf{z}^T\\mathbf{D}\\mathbf{z}$ as `z@D@z`, provided that you have constructed these objects correctly. \n", "\n", "#### Note\n", "\n", "The equation above is exact, but computer arithmetic is not! `np.isclose(a,b)` is a good way to check if `a` is \"close\" to `b`, in the sense that they differ by less than the smallest amount that the computer is (by default) able to quantify. \n", "\n", "Also, still no for-loops. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Part D\n", "\n", "In the last part, we saw that the problem of minimizing the normcut objective is mathematically related to the problem of minimizing the function \n", "\n", "$$ R_\\mathbf{A}(\\mathbf{z})\\equiv \\frac{\\mathbf{z}^T (\\mathbf{D} - \\mathbf{A})\\mathbf{z}}{\\mathbf{z}^T\\mathbf{D}\\mathbf{z}} $$\n", "\n", "subject to the condition $\\mathbf{z}^T\\mathbf{D}\\mathbb{1} = 0$. It's actually possible to bake this condition into the optimization, by substituting for $\\mathbf{z}$ the orthogonal complement of $\\mathbf{z}$ relative to $\\mathbf{D}\\mathbf{1}$. In the code below, I define an `orth_obj` function which handles this for you. \n", "\n", "Use the `minimize` function from `scipy.optimize` to minimize the function `orth_obj` with respect to $\\mathbf{z}$. Note that this computation might take a little while. Explicit optimization can be pretty slow! Give the minimizing vector a name `z_min`. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def orth(u, v):\n", " return (u @ v) / (v @ v) * v\n", "\n", "e = np.ones(n) \n", "\n", "d = D @ e\n", "\n", "def orth_obj(z):\n", " z_o = z - orth(z, d)\n", " return (z_o @ (D - A) @ z_o)/(z_o @ D @ z_o)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Note**: there's a cheat going on here! We originally specified that the entries of $\\mathbf{z}$ should take only one of two values (back in Part C), whereas now we're allowing the entries to have *any* value! This means that we are no longer exactly optimizing the normcut objective, but rather an approximation. This cheat is so common that deserves a name: it is called the *continuous relaxation* of the normcut problem. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Part E\n", "\n", "Recall that, by design, only the sign of `z_min[i]` actually contains information about the cluster label of data point `i`. Plot the original data, using one color for points such that `z_min[i] < 0` and another color for points such that `z_min[i] >= 0`. \n", "\n", "Does it look like we came close to correctly clustering the data? " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Part F\n", "\n", "Explicitly optimizing the orthogonal objective is *way* too slow to be practical. If spectral clustering required that we do this each time, no one would use it. \n", "\n", "The reason that spectral clustering actually matters, and indeed the reason that spectral clustering is called *spectral* clustering, is that we can actually solve the problem from Part E using eigenvalues and eigenvectors of matrices. \n", "\n", "Recall that what we would like to do is minimize the function \n", "\n", "$$ R_\\mathbf{A}(\\mathbf{z})\\equiv \\frac{\\mathbf{z}^T (\\mathbf{D} - \\mathbf{A})\\mathbf{z}}{\\mathbf{z}^T\\mathbf{D}\\mathbf{z}} $$\n", "\n", "with respect to $\\mathbf{z}$, subject to the condition $\\mathbf{z}^T\\mathbf{D}\\mathbb{1} = 0$. \n", "\n", "The Rayleigh-Ritz Theorem states that the minimizing $\\mathbf{z}$ must be the solution with smallest eigenvalue of the generalized eigenvalue problem \n", "\n", "$$ (\\mathbf{D} - \\mathbf{A}) \\mathbf{z} = \\lambda \\mathbf{D}\\mathbf{z}\\;, \\quad \\mathbf{z}^T\\mathbf{D}\\mathbb{1} = 0$$\n", "\n", "which is equivalent to the standard eigenvalue problem \n", "\n", "$$ \\mathbf{D}^{-1}(\\mathbf{D} - \\mathbf{A}) \\mathbf{z} = \\lambda \\mathbf{z}\\;, \\quad \\mathbf{z}^T\\mathbb{1} = 0\\;.$$\n", "\n", "Why is this helpful? Well, $\\mathbb{1}$ is actually the eigenvector with smallest eigenvalue of the matrix $\\mathbf{D}^{-1}(\\mathbf{D} - \\mathbf{A})$. \n", "\n", "> So, the vector $\\mathbf{z}$ that we want must be the eigenvector with the *second*-smallest eigenvalue. \n", "\n", "Construct the matrix $\\mathbf{L} = \\mathbf{D}^{-1}(\\mathbf{D} - \\mathbf{A})$, which is often called the (normalized) *Laplacian* matrix of the similarity matrix $\\mathbf{A}$. Find the eigenvector corresponding to its second-smallest eigenvalue, and call it `z_eig`. Then, plot the data again, using the sign of `z_eig` as the color. How did we do? " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In fact, `z_eig` should be proportional to `z_min`, although this won't be exact because minimization has limited precision by default. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Part G\n", "\n", "Synthesize your results from the previous parts. In particular, write a function called `spectral_clustering(X, epsilon)` which takes in the input data `X` (in the same format as Part A) and the distance threshold `epsilon` and performs spectral clustering, returning an array of binary labels indicating whether data point `i` is in group `0` or group `1`. Demonstrate your function using the supplied data from the beginning of the problem. \n", "\n", "#### Notes\n", "\n", "Despite the fact that this has been a long journey, the final function should be quite short. You should definitely aim to keep your solution under 10, very compact lines. \n", "\n", "**In this part only, please supply an informative docstring!** \n", "\n", "#### Outline\n", "\n", "Given data, you need to: \n", "\n", "1. Construct the similarity matrix. \n", "2. Construct the Laplacian matrix. \n", "3. Compute the eigenvector with second-smallest eigenvalue of the Laplacian matrix. \n", "4. Return labels based on this eigenvector. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Part H\n", "\n", "Run a few experiments using your function, by generating different data sets using `make_moons`. What happens when you increase the `noise`? Does spectral clustering still find the two half-moon clusters? For these experiments, you may find it useful to increase `n` to `1000` or so -- we can do this now, because of our fast algorithm! " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Part I\n", "\n", "Now try your spectral clustering function on another data set -- the bull's eye! " ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "n = 1000\n", "X, y = datasets.make_circles(n_samples=n, shuffle=True, noise=0.05, random_state=None, factor = 0.4)\n", "plt.scatter(X[:,0], X[:,1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are two concentric circles. As before k-means will not do well here at all. " ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "km = KMeans(n_clusters = 2)\n", "km.fit(X)\n", "plt.scatter(X[:,0], X[:,1], c = km.predict(X))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Can your function successfully separate the two circles? Some experimentation here with the value of `epsilon` is likely to be required. Try values of `epsilon` between `0` and `1.0` and describe your findings. For roughly what values of `epsilon` are you able to correctly separate the two rings? " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Part J\n", "\n", "Great work! Turn this notebook into a blog post with plenty of helpful explanation for your reader. Remember that your blog post should be entirely in your own words, without any copying and pasting from this notebook. Remember also that extreme mathematical detail is not required. " ] } ], "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": 4 }