{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\"Open\n", "\n", "| - | - | - |\n", "|---------------------------------------------------------------------------|---------------------------------------------------------------------------|---------------------------------------------------------------------------|\n", "| [Exercise 5 (plant clustering)](<#Exercise-5-(plant-clustering)>) | [Exercise 6 (nonconvex clusters)](<#Exercise-6-(nonconvex-clusters)>) | [Exercise 7 (binding sites)](<#Exercise-7-(binding-sites)>) |\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## ML: Clustering" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Clustering is one of the types of unsupervised learning. It is similar to classification: the aim is to give a label to each data point. However, unlike in classification, we are not given any examples of labels associated with the data points. We must infer from the data, which data points belong to the same cluster. This can be achieved using some notion of distance between the data points. Data points in the same cluster are somehow close to each other.\n", "\n", "One of the simplest clustering methods is the *k-means clustering*. It aims at producing a clustering that is optimal in the following sense:\n", "\n", "* the *centre of each cluster* is the average of all points in the cluster\n", "* any point in a cluster is closer to its centre than to a centre of any other cluster\n", "\n", "The k-means clustering is first given the wanted number of clusters, say k, as a *hyperparameter*. Next, to start the algorithm, k points from the data set are chosen randomly as cluster centres. Then the following phases are repeated iteratively:\n", "\n", "* any data point is set to belong to a cluster, whose centre is closest to it\n", "* then for each cluster a new centre is chosen as the average of the data points in the cluster\n", "\n", "This procedure is repeated until the clusters no longer change. This kind of algorithm is called an Expectation-Maximization (EM) algorithm, which is known to converge." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Simple example" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The scikit-learn library has an implementation of the k-means algorithm. Let's apply it to a set of randomly generated blobs, whose labels we throw away." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2020-06-24T19:29:56.268687Z", "start_time": "2020-06-24T19:29:56.098765Z" } }, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2020-06-24T19:29:56.415145Z", "start_time": "2020-06-24T19:29:56.269895Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 2.26403424 1.82613379]\n", " [-0.97647444 2.59138889]\n", " [ 1.10046838 4.02254067]\n", " [-2.82715074 7.11970523]\n", " [ 1.53393915 0.31915668]\n", " [ 0.98362009 5.55389667]\n", " [-1.74452433 2.98606238]\n", " [ 0.35482006 2.9172298 ]\n", " [ 1.83747356 5.14545322]\n", " [ 1.48663347 4.39407536]] [1 2 0 3 1 0 2 0 0 0]\n" ] } ], "source": [ "from sklearn.datasets import make_blobs\n", "X,y = make_blobs(centers=4, n_samples=200, random_state=0, cluster_std=0.7)\n", "print(X[:10],y[:10])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we plot these points, but without coloring the points using the labels:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2020-06-24T19:29:56.493594Z", "start_time": "2020-06-24T19:29:56.416341Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.scatter(X[:,0],X[:,1]);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can still discern four clusters in the data set. Let's see if the k-means algorithm can recover these clusters. First we create the instance of the k-means model by giving it the number of clusters 4 as a hyperparameter." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2020-06-24T19:29:56.606718Z", "start_time": "2020-06-24T19:29:56.494555Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 2.07464749 0.9869902 ]\n", " [-1.36512238 7.70188306]\n", " [-1.70639178 2.9104771 ]\n", " [ 0.86008475 4.31501411]]\n" ] } ], "source": [ "from sklearn.cluster import KMeans\n", "model = KMeans(4)\n", "model.fit(X)\n", "print(model.cluster_centers_)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2020-06-24T19:29:56.695449Z", "start_time": "2020-06-24T19:29:56.607759Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.scatter(X[:,0],X[:,1], c=model.labels_);\n", "plt.scatter(model.cluster_centers_[:,0], model.cluster_centers_[:,1], s=100, color=\"red\"); # Show the centres" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The clustering looks more or less correct. To get a more quantitative measure of success we can get the accuracy score." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2020-06-24T19:29:56.699244Z", "start_time": "2020-06-24T19:29:56.696304Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Accuracy score is 0.24\n" ] } ], "source": [ "from sklearn.metrics import accuracy_score\n", "acc=accuracy_score(y, model.labels_)\n", "print(\"Accuracy score is\", acc)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Oops! Even though the clusters could match almost perfectly to the original, their labels might be permuted. Let's select randomly one point from each cluster and check their labels from the original data labels. Then we use this label for the whole cluster. In essence, we are renaming the clusters, not re-clustering the data." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2020-06-24T19:29:56.703672Z", "start_time": "2020-06-24T19:29:56.700277Z" } }, "outputs": [], "source": [ "import scipy\n", "def find_permutation(n_clusters, real_labels, labels):\n", " permutation=[]\n", " for i in range(n_clusters):\n", " idx = labels == i\n", " new_label=scipy.stats.mode(real_labels[idx])[0][0] # Choose the most common label among data points in the cluster\n", " permutation.append(new_label)\n", " return permutation" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2020-06-24T19:29:56.708674Z", "start_time": "2020-06-24T19:29:56.705657Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1, 3, 2, 0]\n" ] } ], "source": [ "permutation = find_permutation(4, y, model.labels_)\n", "print(permutation)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2020-06-24T19:29:56.713083Z", "start_time": "2020-06-24T19:29:56.710098Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Accuracy score is 0.99\n" ] } ], "source": [ "new_labels = [ permutation[label] for label in model.labels_] # permute the labels\n", "print(\"Accuracy score is\", accuracy_score(y, new_labels))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So, the k-means algorithm seems to work well in this case, but there can be several problems. Firstly, even though an EM algorithm always converges, it might converge to a local maximum. To avoid this, EM type algorithms are usually run several times, each time starting from different random initial values. For instance, in the scikit-learn implementation, the algorithms is restarted by default 10 times. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### More complicated example" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The k-means algorithm can have difficulties when the clusters are not convex shapes:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "ExecuteTime": { "end_time": "2020-06-24T19:29:56.716967Z", "start_time": "2020-06-24T19:29:56.714293Z" } }, "outputs": [], "source": [ "from sklearn.datasets import make_moons\n", "X,y = make_moons(200, noise=0.05, random_state=0)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "ExecuteTime": { "end_time": "2020-06-24T19:29:56.797217Z", "start_time": "2020-06-24T19:29:56.718091Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAD8CAYAAABzTgP2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvAOZPmwAAIABJREFUeJztnX+QHOV557+PViOxiy/sYqkwDAjJDpGMTofW2gISXeWQbCMMtrRBtgXGFXyHS3HOrjqIb8vLmbJkDod1VDEkZ19szuaCDw4kS9xaHDg6bIlKFbEIu17JskAyAoLQGJuNpdWd2bUYrZ77Y3pWPTP99o/pnv4x/f1Ube1M99s9T3fPvM/7Pr9eUVUQQgghVWYlLQAhhJB0QcVACCGkBioGQgghNVAxEEIIqYGKgRBCSA1UDIQQQmqgYiCEEFIDFQMhhJAaqBgIIYTUMDtpAZph3rx5unDhwqTFIISQTDE6OvrPqjrfq10mFcPChQsxMjKStBiEEJIpROQ1P+1oSiKEEFIDFQMhhJAaqBgIIYTUQMVACCGkBioGQgghNVAxEEIIqYGKgRBCSA2ZzGMg+WB4rIQtuw7jFxNTuKi7EwNrFqO/t5i0WIS0PVQMJBXUK4FVS+Zjx2gJU+VpAEBpYgp3Pn4AAKgcCGkxNCWRxBkeK+HOxw+gNDEFRUUJPLL36IxSqDJVnsaWXYeTEZKQHEHFQBJny67DDUpADW1/MTHVeoEIyTlUDCRxgnT2F3V3tlASQghAxUBSgKmzl7r3nYUODKxZ3HqBCMk5VAwEw2MlrBzajUWDT2Ll0G4Mj5UC7Q/LwJrF6Cx01GzrLHTglqsXoLuzMLPtnAK/roTEAaOSck7V8WuK/vHa73S+oCGm1f31xwHAjtGzSujEZDmSyCSGwRLijqia3HwBTiLyIIAPA3hTVf+lw34B8FcArgcwCeBTqvoTa9+tAO6ymt6jqg95fV5fX59yPYZoWDm0GyUHG3+xuxPPDq723G+nXokAlZH/vTcua6rj9fPZQTv5qGUkJEuIyKiq9nm1i2pu/rcArnPZ/yEAl1l/GwH8DQCIyPkANgG4CsCVADaJSE9EMhEfmBy/1e1e++04RReFCTH1+mynMNc7Hz/gauqKWkZC2pFITEmq+vcistClyToA39XK9GSviHSLyIUArgHwtKoeBwAReRoVBfNoFHIRby7q7nQclVcdwl777SP2ZkNMTaN+r8926+SrZrD68wZRdITklbi8eUUAr9veH7O2mbaTmBhYsxiFWbXxP4VZMmPjNzmGB9Ysbhixm3ALMXUb9bt9NuA+ozCdt7ur4HiMXcZWO9sJSTuZCfMQkY0iMiIiI+Pj40mL017Ux4Xa3vf3FnHvjctQ7O6EoGLfr9rjnUbs9XiFmJpG/V9+4iAAYO7ss1/Rnq5CjS/ApHAu6u40nlcVrsqmGfMUIe1GXIqhBOAS2/uLrW2m7Q2o6gOq2qeqffPnz2+ZoHljy67DKE/XjvfL04rPb9s/0xn29xbx7OBqvDp0A54dXD3TMXuZX+xKxITpHCcmyxj43n5MTJVntv22fKamjduMwnTek1Nlo6ID6IMgBIgvXHUngM+JyGOoOJpPquobIrILwJ/bHM7XArgzJpnaFr+ROsNjJUcbPgBMq3qGhpp8AMDZDtor0sftHOUztQrL7j+wy+V0rVt2HTb6J/p7i0a56IMgJCLFICKPouJInicix1CJNCoAgKp+E8BTqISqHkElXPXfWvuOi8h/BvC8daq7q45o0hx+8w6q7dyo74jrGVizuCH00++x9nPcvnWfaxs79R20qZN3ks1P5rSXw9uOlwJmvgTJKlFFJd3ssV8BfNaw70EAD0YhB/GO1HFr54TbSLl6PlPH7meU3d9bxOadB2tMRm74rZXkljS3cmi3sbP2q1CiTgwkJE1kxvlM/OHXFOLXNOLVEff3FlF0cQL7YfPapQ2+gkKHNERLBa2VVO8bAeDLsezm8AYqSuHz2/a7+iLoqyBZhoqhzXCL1PHTzo7fjtgrrNQLp8inLR+9Als+doXRSdwMXp11dZTv5vCutpk2VAxoJjGQkLTBWklthl9TiFO7wizBO86ZjYnJciCbuJsT2C8mX0GUZhevztqPGc7LBOc3MZCQNEPF0Gb47aSj6Mzrz5d227lXZ21SHPZj3Eb8dgXcrPObkDRAxdCG+O2ks9CZ+8Fv9M+qJfPxyN6jNVna9s7apDjE+gy3Mh0dIjWmrqgVLyFxQh8DiYwkSkn4zVQeHithx2ipRikIgPUrzirHgTWLG5LAgcoyo9VMbJM/5S8/foXjrOzZwdW4b8NyAMAdW/exxAbJBFQMOSCODjupUhJ+o39M60rvOXS2vEp/b9FY8+nEZHlm1uCWOV0PS2yQLEJTUpsTVzy93/yJqAkbnlu/veiSiV29liAmuKTuCyFh4IyhzYkrnj6p8Myw4bn1292cw81cC8NWSRahYsgwfkxEcXVMfjveqPGbQ+G3XX9vsWadaTte5cOdnkVS94WQMFAxZBS/tmvT+gOm7c0SNsmtWfza/IP4Bpwysd2uJcyaEoSkEfoYMopf27VpSe+wS307hYjee+OyRMIzow7PDRpq6vYsqqU4nM41PFaqqRPV01XApo8spe+BJA4VQ0bxayI6aShOV93eTAVQk0P73huXzXSEWSeIg9nrWTida3ishIHv7a8pLX5isoyB7ftnjiEkKWhKajGtChWNwunabCglC8TV0owfYcuuww3rTQCVRZLyeh9JeqBiaCGtjGGPwunabAfPSJtamvEjuN2rvN5Hkh5oSmohfvwAQUw59W3Xryhiz6Hxpmsi3dHkOgosEFdLM+Uv3Fauy+t9JOmBiqGFeI2sgySfObXdMVryVYraZC9vtoNngbhGgtadGlizuMHHAFTWocjzfSTpgIqhhXh1vF6mHPsI9K1TpyPPoG22g2eBuPBU7xWjkkgaoWJoIV4dr1uZ5/rZgYkw9ugwHXy7VGZNmnPnzsbJqcr6F6uWzMeWXYdxx9Z9VLYkUagYWohXx+tWwtnPeszVc4SVkZ1P/DiZBh/ee3RmP9eIJkkiGjbTKQH6+vp0ZGQkaTFCU985BKXZFddI8qwc2u06E6xS7O5sm9wQkjwiMqqqfV7tIglXFZHrROSwiBwRkUGH/feJyD7r7+ciMmHbN23btzMKebJCtUyDqTZPPT1dhZmSDt2dBUAqSVEs55w9/JoAGbpKkiC0YhCRDgDfAPAhAJcDuFlELre3UdU7VHW5qi4H8F8APG7bPVXdp6prw8qTNfp7izh3rrdFr7PQgU0fWYpnB1fj1aEbcO7c2ShP18728pxkljX8mgAZukqSIAofw5UAjqjqKwAgIo8BWAfgBUP7mwFsiuBz2wa3UaEAjmYiJplli/oclFVL5mPHaMnVjJj3EGCSHFEohiKA123vjwG4yqmhiFwKYBGA3bbN54jICIDTAIZUddhw7EYAGwFgwYIFEYidHkxOaDf7MpPMsoMpB+V9C87D3ldOYFoVHSK4+t09+KdfTzEEmCRO3CUxbgKwXVXtw6RLLWfIJwDcLyLvcTpQVR9Q1T5V7Zs/f34cssZGMyUVWM45O5jyVf7h5eOYtoI/plXxk6MnMbBmMV4dugHPDq6mUiCJEcWMoQTgEtv7i61tTtwE4LP2Dapasv6/IiLPAOgF8HIEcmWGZvIJmGSWHUzmvfp4wKnyNL78xEE+U5I4ocNVRWQ2gJ8DeD8qCuF5AJ9Q1YN17ZYA+DsAi9T6UBHpATCpqqdEZB6AHwNYp6om/wSA9glXJfnAb2iqE52FDl9lTwjxQ2zhqqp6GsDnAOwC8CKAbap6UETuFhF7lNFNAB7TWk30XgAjIrIfwB5UfAyuSqFdaVV5bpI8TmY/8XksI81IEkSS+ayqTwF4qm7bl+reb3Y47h8ALItChrQRtGqq32J6JHs4mf38RCVVYaQZiRuWxGgBQTt6v8t0kuziVHqk79LzGwolTjisuMdIMxI3VAwtIGhHz5yEfFKvLJxKpLhFmjWzLCshfqBiaAFBO3rmJOQTp4793huX+ers7xo+gEf2Hp2JbKL5kUQJFUML8Oro/WTBMiehvTGZG++9cZln0bzhsVKNUqhC8yOJCq75HCHVyKLSxFRD1Em1o3daB3rHaAnrVxRnCuQVuzsZotjmNLvedvVYU5A5zY8kCjhjiIj6EaCiEpKoqHT0VZPAyqHdjh3CnkPjLK+cI8L4ldza0PxIooCKISKcRoBVpWDv8OloJkA4v5LpWAFofiSRQFNSRPjt8E0/fI708kWYWlemhLlbrl5A8yOJBCqGiPDb4bP4HQHOLtLUjF/J6dj7NizHPf1tmStKEoCmpIgYWLPYdwz6OYVZM+26OwvYvHYpR3o5JMx621yrm7QSKoaI8FPt1CmB6dTpM7HLSgghblAxRIjXKI6lLwghWYA+hhgxOahLE1OspkoISQ1UDDHiFnl05+MHqBwIIamAiiFGnCKSqrDuPiEkLdDHECNVP8LtW/c57meSGyEkDVAxxEx/bxFbdh1mNVUSOaYy3CzPTYJCxZAAQXIeCPGDqVrryGvHsfX511Ge1pntA9v3A2B5bmKGisEnbqOuoCMyPzkP7QBHqvFhCoV2Ks9dnlbcsa1izuTzIE5QMfjAbalOAL6X8cxTR8l1rOPF5J8yledWBZ8HMRKJYhCR6wD8FYAOAN9W1aG6/Z8CsAVANR7z66r6bWvfrQDusrbfo6oPRSFTlJhGY7dv3YcOEUyrNuyrT1rLW0fJZL7W4TTAMFVcdYPPI704Lea159B4bIPK0OGqItIB4BsAPgTgcgA3i8jlDk23qupy66+qFM4HsAnAVQCuBLBJRHrCyhQ1btFC9UrBdEyYhVmyCMuLtwanhZ7ufPwAVi2Z39T5+DzSh9Mzfnjv0YZn3sq8pyjyGK4EcERVX1HVtwE8BmCdz2PXAHhaVY+r6gkATwO4LgKZIqWZaKH6Y/LWUbK8eGswDTD2HBpHd2ch8Pn4PNKH0zOup9WDyigUQxHA67b3x6xt9awXkZ+KyHYRuSTgsYnilpjmhFOEUd46SpYXbw1uA4zNa5c63vNPXr0APV2NSoPPI534HSy2clAZV+bzEwAWquq/QmVWENiPICIbRWREREbGx8cjF7C6XvOiwSexcmh3zTTNXv/eRIeIa139vHWUzaw34PYMSAW3AYbpnt/TvwxjX7oW929YznXFM4DfwWIrB5WiBhu57xOI/D6Azaq6xnp/JwCo6r2G9h0AjqvqeSJyM4BrVPVPrH3fAvCMqj7q9pl9fX06MjISSm47TuWwOwsdjj+cIG2dPicvUUlBCXNf8wTvU/vj9IzrafaZi8ioqvZ5totAMcwG8HMA70cl6uh5AJ9Q1YO2Nheq6hvW6z8C8AVVvdpyPo8CeJ/V9CcAVqjqcbfPjFoxrBza7RjRUbQ67/rOHGj/HIS4cXsG9jWzif8BBgci2aVVUUmxKQbrw64HcD8q4aoPqupXRORuACOqulNE7gWwFsBpAMcB/KmqHrKO/XcA/pN1qq+o6n/3+ryoFcOiwSeN8d6dhQ6OzmLA9AwEwKtDN8QtTubhzKI9iFq5+1UMkfgYVPUpVf09VX2Pqn7F2vYlVd1pvb5TVZeq6hWquqqqFKx9D6rq71p/nkqhFZhsdR0iuQoxTZK8OedbTd7Co9sRU2hyHL43lt2G2THsN0eBhCdvzvlWk7fw6HYkSeVOxQBzBI0pComj2PDURyABCBzFRMxwBpZ9klTurJVkYVqvmVVQo8dUHuTeG5fR0RwRfir40jmdbkxlTuJQ7pwx2OAoNh5o/249XnkkSdqv80az+TlJmlc5Y7BodhTLUVdwaP+OB9MsGGCRw7gIWzzznMKsmWO7OwvYvHZpLM+HisHCaxRrWhkrTxVToyLJKXKesQ9iTOHZVM7R0qwCdgo3PnX6TMvkrIemJAvTD6I0MYXbt+5znHLTJNIcjECKn3rTkQkq52hpdnacdN9CxWAR5AcxVZ7G57ftN9a/56jLHSf79/oVlbWwWSepNfip2Amg6fLdxJlmo8OSNrdSMVgEraBqynEAOOryQ39vEc8OrsZ9G5bjrVOnY683nzf8dih7DkVfoDLPNDs7NvUh5zVRWr0ZqBgs6kexzUKTiH+q5o2JqXLDPprkosXvYOUXE1OschshzVQZBioKpTCrsSd66+3TsTyPSGolxU3UtZKcMBV1c6PIqKRAeN1j1kmKjuGxEm7fus+zXU9XAb8tn2GNpRTQe/f/wYnJxkFTmMKSsdZKakdMpiUHJQ7g7MPij8c/XuYNmuSio7+36LnCW2ehA6pgQEVKmHBQCkA8fgYqBgNOU8D7NyzH1z6+nBE1EeHW8Rc6hPc0YpxWeKuOc6omjpMOZj2AARVJkGRZE+YxuOCVIMSktnAMrFmMO7bucwyfPHfObN7TiKneT7fv7pZdh5ljkhL8lDVpFVQMAWGmc3T09xaNdm/TyJWEw22wAyTbGZEK9j6mu6uAubNn4eRUOdb+hoohAMx0jp4is6BThZ9ZBWkd9X3MickyOgsduG/D8lifARVDAFhfJnqCjlA5Y2s9XrMK0jrS0sdQMQQg6WzEdiTICJUzNtLupKWPYVRSALj4SWvo7y1iYM1iXNTdiV9MTGHLrsOOSTxJ14/JE0xyS4a09DGcMQSAjrnW4HcmkJbRVDvhZJoDwJlZAgyPlTD59mnHfW+dqmQ8x3X/I5kxiMh1InJYRI6IyKDD/j8TkRdE5Kci8iMRudS2b1pE9ll/O6OQp1U0m95O3PE7E0jLaKpdMC3Ws3nnQc7MYqb6LJwynQFgYqoca/2w0DMGEekA8A0AHwRwDMDzIrJTVV+wNRsD0KeqkyLypwD+AsAGa9+Uqi4PK0dc0DEXPW4lz+1wxhYtJoVsqsLKmVnr8FP9Nk4ndBSmpCsBHFHVVwBARB4DsA7AjGJQ1T229nsBfDKCzw0NI1zSgWnhHgBYOPhkQw0qPrNoCNrRc2YWHlOf4/dZxKWco1AMRQCv294fA3CVS/vbAPzA9v4cERkBcBrAkKoORyCTI/aHcl5nAW+9fRrl6UreLe2oyeGWAQ00Phs+n2gwKWRTIT3OzMLh5ktzGxzZiUs5xxqVJCKfBNAHYItt86VWtb9PALhfRN5jOHajiIyIyMj4ePCa8fX21Imp8oxSqEI7ajL09xZdVxUD+GxagWmtgE0fWUpfWgtw86X5WQ8mTuUcxYyhBOAS2/uLrW01iMgHAHwRwL9R1VPV7apasv6/IiLPAOgF8HL98ar6AIAHgErZ7aBC+l3BqmTVo+ePIF5MGdB2aOOOFi/THH8D0eLmS9uy6zDWryhiz6HxmWexasn8mvdxmk2jUAzPA7hMRBahohBuQmX0P4OI9AL4FoDrVPVN2/YeAJOqekpE5gFYiYpjOnKCdCo0KcWPk2O5Htq4o8dumhseK2HzzoMz9at6ugrY9JGl/B1EhJu5qDQxhR2jpdTMzEKbklT1NIDPAdgF4EUA21T1oIjcLSJrrWZbALwDwPfqwlLfC2BERPYD2IOKj+EFtICgazrTbBEv9lBgAI6r6FVjuUn0DI+VMPC9/TWr6Z2YLGNg+37e84jwMhelqd/JzQpu9Y4fACjMEpTPOF8/Vw9LluGxEr78xMGGuG4BcMvVC3BP/7JkBGtTvFbT4+qE0VANgDHd61b3O1zBrQ6n5LQtH7tiZoRaD80WydLfW0TXnEZLpwJ4ZO9RjmIjxsvUWo2g4X0PR39vEc8Orjb2O7NEUnGPc1USwxTqyKSpdGLqrBRgRduI8RMuyUrC0WHyqU2rpsLHmZsZgxtzZ5+9DT1dhdQ4gPKO26yNEUrRMrBmMQqmBc1t8L5HQ9WC0SGN9zwNvoZcK4aq38HucPtt+UyCEhE7A2sWOzqhAZr6oqa/t4gtH7sC3Z0F13a879HR31vEGYOPN2kFnGvFwDLO6aa/t4hbrl7QoBxo6msN/b1F7Nt0Lf5p6Abcv2G5Y/Ib73u0pLUwZK4VA8s4p597+pfhvg3LmYUbM6wkHA9OIawCYNWS+ckIZJEr53M9Jodb0tqa1ML6SMnA+956+nuLGHntOB7Ze3SmLIwC2DFaQt+l5yd2/3M9YzDViuF0mRASF3sOjTfUCpsqT+Pz2/YntoJermcMLONMCEkak+l6WpOr/JxrxQA01orZsusw7ti6j0qCEBILacwhybUpyY5pmcM0ZCES0mqGx0pYObQ7MdNFnvFTchuINyiGisGCoaskr3BQlCz1EWBOSW9AvEExuTclVWHoarrhMqytw21QxHscD/Um7aTL9FAxWDB0Nb04LYk4sH0/Nu88iJNTZSqKkLgtILNyaDeVccykISiGisHCqagVQ1fTgdOItjytM6VMuF53OEyDIgFmtvMex0vSOST0MVj4yfSkgy4Z/Jjz6A9qHlP2rVNsPe9xPuCMwYablnYyZ3AEFQ9+wvmAs6aP0sQUOkQwrcoFZgzYfTbdXQWITQ10dxZqCkvaoc8tHFnxlXHG4BNGLSWH33A+u+mjPjmIs7uz1EchnZgsY9JWVfjU6TPo6XKuskqfW/MEif5K2jqRK8UQ5mYzaik56s18PV0Fx7UDTIvUUoHX4jTIsTNVnoYqWC4mYvwOLtMQPpwbU1JYUxCjlpKl3sxnn5Kf52L6qEIFfhY/9+LkVBn3bVieCbNHVvA7uExD+HBuFEPYm82opXRhVxQrh3Z7KobzOgsMvbTw47O5qLsz8ciYdsN032eJYNHgkzPfyzRYJyIxJYnIdSJyWESOiMigw/65IrLV2v+ciCy07bvT2n5YRNZEIY8TYW8269OnF69nWJgleOvt08zstfDy2XDA0xpM931ateZ72Z0C/07oGYOIdAD4BoAPAjgG4HkR2amqL9ia3QbghKr+rojcBOCrADaIyOUAbgKwFMBFAH4oIr+nqmYDaJNEYQriCCqduI2AO0RQ6JAa5yqQ78ze+gSq7q4CVMFkwRZTf99nWZFzdqbK05g7exY6Cx2Zz3y+EsARVX0FAETkMQDrANgVwzoAm63X2wF8XUTE2v6Yqp4C8KqIHLHO9+MI5KqBpqD2ot7HUOgQlKcb3c/Tqpgsp3Nd3SThICcZ7Pd90eCTjm3S4N+JQjEUAbxue38MwFWmNqp6WkROAnintX1v3bGOVy8iGwFsBIAFCxYEFjINaeYkGuoDCSamyijMEvR0FXBi0t3XYIeBA/7ISux91nCzYiStuDPjfFbVBwA8AAB9fX2myERXkr7ZJBocS2ScUXTNmY2JybIxbNUOZ4v+YGJn60izFSMKxVACcInt/cXWNqc2x0RkNoDzAPza57GE1OAWSGAahfV0FdA1ZzZHvQFJQ+hkO1E/+1q/oog9h8ZT972MQjE8D+AyEVmESqd+E4BP1LXZCeBWVHwHHwWwW1VVRHYC+J8i8jVUnM+XAfjHCGQibYzbFNw0Ctv0kaWp+MFljTSETrYLTrOvHaOlVEY3hg5XVdXTAD4HYBeAFwFsU9WDInK3iKy1mn0HwDst5/KfARi0jj0IYBsqjuq/A/DZVkQkkfbCKeyvOgVnWHG0mPww9M8EJ0tldUS1KXN9ovT19enIyEjSYpAEoUM0HkyLxlDZBmfR4JOO/i8B8OrQDbHIICKjqtrn1S4zzudWwQ4mmzQbSMDnHQxG80VHlsrq5FoxMOKi/XDr+Pm8m4PRfNGQ5iikenJVXbWeLNn8iDdeVSn5vElQoix/nSX/V65nDIy4aC+8Qiv5vEkQopphZtF8mesZAyMu2guvjp/PmwQhihlmGtZWaIZcKwa3sEeSPc7rdK5KWd3O502CEGSGaTI5ZdV8mWtTEiMu2gtpXNStZjufNwmC3yii4bESBrbvnyniWJqYwsD2/QCya67OtWIAGHHRTkwYCujZt/N5E7/4jSL68hMHGyr7lqcVd2zbZ6zblXbzZa5NSaS9oA+BRInfKCJTRV9T7nAWzJe5nzGQ9sFrhJfF6BCSLFHPMIsZ+d5RMZC2wc2HwOQ20iq6Owuea44DldIXzw6ubr1AEUDFQNoK0wiP5aNJq/jwFRfi4b1HPdtlyaRJxUByQdDQQ5qc8kOY5z08VsKO0cachFkCnLH5GLLgV7BDxUByQZDQQ5qc8kPY5+00EwWA3zmngHPnZndhKCoGkguChB7S5JQfwpoYTTPRk1Nl7Nt0bSQyJgHDVUku8BN6ODxWMoYepj0hiTRH2AS0dg2R5oyB5Aav0EO3MgVZ/6ETZ8KukZClUtpB4IyBEAu3UWLWf+jEGaf6WQAw+fZpX4XuslRKOwicMRBiYRo9dncWHH/ojF7KPtXntXnnwZpchBOTZVcndLs/e84YSK5wW3jFVH1189qljufJYjll0kh/bxHnzm0cI5uqoObh2YdSDCJyvog8LSIvWf97HNosF5Efi8hBEfmpiGyw7ftbEXlVRPZZf8vDyEOIG14/6CBmgayWUybOBHFC5+HZhzUlDQL4kaoOicig9f4LdW0mAfyxqr4kIhcBGBWRXao6Ye0fUNXtIeUgxBM/oYleDuqqCcHJ5AQweimrBHFCZ7WUdhDCmpLWAXjIev0QgP76Bqr6c1V9yXr9CwBvApgf8nMJCUzYH7R9xmGC0UvZJMgiTu0aomonrGK4QFXfsF7/EsAFbo1F5EoAcwC8bNv8FcvEdJ+IzA0pDyFGwv6gTVmuVdohTDGvBDEjmpTIqiXzjf6rrOFpShKRHwJ4l8OuL9rfqKqKiGldCojIhQD+B4BbVfWMtflOVBTKHAAPoGKGuttw/EYAGwFgwYIFXmIT0kDYmHO3mUVWyikTM35LbDtV8V21ZD52jJbappSKqGk1CT8HixwGcI2qvmF1/M+oasOvTER+B8AzAP7c5E8QkWsA/EdV/bDX5/b19enIyEjTcpP84jfM0KmdybdQ7O7MTDll0hpWDu3OxHdDREZVtc+rXVjn804AtwIYsv5/30GQOQD+F4Dv1isFEbnQUiqCin/iZyHlIcQVP6NCU2G19SuKNaNCgOYjUqHdHNJhfQxDAD4oIi8B+ID1HiLSJyLfttp8HMAfAviUQ1jqIyJyAMABAPMA3BNSHkJCY4pe2nPiiXCTAAALtUlEQVRovC2zXEl42s0hHWrGoKq/BvB+h+0jAD5tvX4YwMOG49MzxyLEwhR1VJqYinypR9IetFvNJJbEIKSODhFMO/jeOkQSkIZkAbdlZbMIFQMhdTgpBbftJF0kVceonWaTVAyE1FE0ZMEWM2ovzhNeK7K1e/G7qKBiIKSOVtuL2Tm1DreyJyOvHccje4+iOu8rTUzhjq37MPLacdzTv8zxfHl9VlQMhNTRSnsx15RuLabw0NLEVI1SqKIAHtl7FH2Xnt9w//P8rKgYCHHAyV4cxegx7BrDxB1TMTxTQAFQUQ5O9z/Pz4qKgRAfRGW7DpMI1c5mjaiubdWS+Q0zg85Ch2uNK8D5/rdb0loQqBgI8YFXDX6/Jodm1xhuZ7NGVNd21/CBBqUgANavKGLPoXHXqrjdXQWsHNpdo5jCrgedZbiCGyE+cBs9Blm4JUh5ZzvtvDiM27W5rbhnZ3isZPQh7Dk0blzbGQAKHYLf/PZ0wwJOq5bMb+pZtQNUDIT4wK3kQRCTQ39vEetXFGuS5eydoIl2Nmu4OYz9LqG5ZdfhBqVgP7+9rDZwNlmx2N2Jc+fMRvlM7dF5L4FCUxIhPnALYTVVXXVSJsNjJewYLTU4Qr3MJ1kya5j8BXcNH8Cjz72OaVV0iODmqy7BPf3LXB3Gfp2/bgqyeo9MCWiLBp90PK6qUPKgCOrhjIEQH7gt5BLEPOS22I+baahZE1TcmNbVvuW//RgP7z06oxCnVfHw3qO4a/iA8dpMUUROSsCkIAXwvEftVgAvCjhjIMQnptGjn7wHr7Wiqzh1etVjp8rTM2GXpoWBko5cMvkLnn35uGP7R597fSa5zO/6F04dttOMTgDccvUCz+tvtwJ4UUDFQEgEuJkc6qNu3Kjv9OqPnVad6bTSmJAV1OdRnRWY7p/fDjtMUmK7FcCLAioGQlqM11rRVZw6vSBJVmlIyDL5C0y4Vazt7y1i5LXjNX6J9SvMCjiMPyCvvgQT9DEQ0mLcRtH26BiniJcg0UjNRC75DQf1i8lfsPI95zu2v/mqS1xlszvqp1WxY7QUWkbiDWcMhLQY0yjaz3rAQaKRTG1niWDR4JMNJpJWmJ7czDKmqCQTaZgB5RXRDNaY7+vr05GRkaTFIASAt8PXycfQWegwxsTbz3deZwFvvX0a5Wn1PNaPL8N+rGkB+w4RnFH1ZWtvpbN70eCTjrkJAuDVoRsi+Yy8ISKjqtrn1Y4zBkJC4GfUHcS5WX++iakyCrMEPV0FTEyWXY+t/5xZDoXj7CNuk4mpeozXDKLZGYc9QsstyipLuRvtBhUDISHwa+7w69x0Ol/5jKJrzmyMfelaz+Ptn7PQkLhV7Wz9OIrdTDfNmHqcoqyqMtUrFYaRJkco57OInC8iT4vIS9b/HkO7aRHZZ/3ttG1fJCLPicgREdkqInPCyENI3ERdqiLK87lF/Kwc2u1YCygKmdxkDZLg55ZUSFpL2BnDIIAfqeqQiAxa77/g0G5KVZc7bP8qgPtU9TER+SaA2wD8TUiZCImNqMwdVfOKyePXjPnEbY3q0sQUdoyWZiqPmkxP1c928iU0c+1eCq5+v9dMK+mEvnYlbLjqOgAPWa8fAtDv90AREQCrAWxv5nhC0kAUpSrsZSScaNZ84rVGdbVQ3LODq/Hq0A34y49f4Xgtq5bMdyxz4TTjEFTWRDDhpeCCKEBT+Q2Gs4YnrGK4QFXfsF7/EsAFhnbniMiIiOwVkWrn/04AE6p62np/DABVPckUUZg73MwrbufzykFwKzVdxT5CN13LnkPjjr6EPYfGsX5FEXaDlQKuuQZuMgVVgO1cijxpPE1JIvJDAO9y2PVF+xtVVRExzV0vVdWSiLwbwG4ROQDgZBBBRWQjgI0AsGDBgiCHEtJSwmbNmswrAhjzHIJGQ5lmI/UjdKdruWPrPqPcew6NN5i/3BzQ9TJ51X5yo51LkSeNp2JQ1Q+Y9onIr0TkQlV9Q0QuBPCm4Rwl6/8rIvIMgF4AOwB0i8hsa9ZwMQDjHFBVHwDwAFDJY/CSm5Cs0IytPmg0lCmXws8I3U2+ZjrnqMpPMJy1dYQ1Je0EcKv1+lYA369vICI9IjLXej0PwEoAL2gls24PgI+6HU9Iu9OMnyJohxzG5OUmX3dXwfEY0/YoyUop8iwSNippCMA2EbkNwGsAPg4AItIH4DOq+mkA7wXwLRE5g4oiGlLVF6zjvwDgMRG5B8AYgO+ElIeQzNFMdc9mRsvNjtTd5Nu886DjMXEUVGBV1NbBkhiEZJCgZTZaBctWZAu/JTFYXZWQDJKW5C+uftaesCQGIRklCidu2ASxKMtWMFktPVAxEJJToii7HZWdPw2rz5GzUDEQklOiWu8gipkL115IF/QxEJJT0pQgliZZCBUDIbklTY7jNMlCqBgIyS1pShBLkyyEPgZCckuaEsTSJAthghshhOQGJrgRQghpCioGQgghNVAxEEIIqYGKgRBCSA1UDIQQQmqgYiCEEFIDFQMhhJAaMpnHICLjqKwY1wrmAfjnFp07LngN6YDXkA54DWe5VFXnezXKpGJoJSIy4icBJM3wGtIBryEd8BqCQ1MSIYSQGqgYCCGE1EDF0MgDSQsQAbyGdMBrSAe8hoDQx0AIIaQGzhgIIYTUkHvFICIfE5GDInJGRIxefxG5TkQOi8gRERmMU0YvROR8EXlaRF6y/vcY2k2LyD7rb2fccjrhdV9FZK6IbLX2PyciC+OX0owP+T8lIuO2+/7pJOR0Q0QeFJE3ReRnhv0iIn9tXeNPReR9ccvohY9ruEZETtqew5filtELEblERPaIyAtWn/QfHNrE8yxUNdd/AN4LYDGAZwD0Gdp0AHgZwLsBzAGwH8DlSctuk+8vAAxarwcBfNXQ7jdJyxr0vgL49wC+ab2+CcDWpOUOKP+nAHw9aVk9ruMPAbwPwM8M+68H8AMAAuBqAM8lLXMT13ANgP+dtJwe13AhgPdZr/8FgJ87fJ9ieRa5nzGo6ouqetij2ZUAjqjqK6r6NoDHAKxrvXS+WQfgIev1QwD6E5QlCH7uq/3atgN4v4hIjDK6kfbvhS9U9e8BHHdpsg7Ad7XCXgDdInJhPNL5w8c1pB5VfUNVf2K9/n8AXgRQv4RdLM8i94rBJ0UAr9veH0PjA0uSC1T1Dev1LwFcYGh3joiMiMheEUmD8vBzX2faqOppACcBvDMW6bzx+71Yb037t4vIJfGIFilp//775fdFZL+I/EBEliYtjBuWybQXwHN1u2J5FrlY81lEfgjgXQ67vqiq349bnmZwuwb7G1VVETGFml2qqiUReTeA3SJyQFVfjlpWUsMTAB5V1VMi8ieozH5WJyxTHvkJKt//34jI9QCGAVyWsEyOiMg7AOwAcLuq/t8kZMiFYlDVD4Q8RQmAfaR3sbUtNtyuQUR+JSIXquob1rTyTcM5Stb/V0TkGVRGJEkqBj/3tdrmmIjMBnAegF/HI54nnvKrql3Wb6PiD8oaiX//w2LvYFX1KRH5ryIyT1VTVUNJRAqoKIVHVPVxhyaxPAuakvzxPIDLRGSRiMxBxQmaiqgei50AbrVe3wqgYRYkIj0iMtd6PQ/ASgAvxCahM37uq/3aPgpgt1peuBTgKX+d/XctKnbjrLETwB9bETFXAzhpM11mAhF5V9U3JSJXotL3pWWAAaAScQTgOwBeVNWvGZrF8yyS9sQn/Qfgj1Cx050C8CsAu6ztFwF4ytbuelSiBF5GxQSVuOw22d4J4EcAXgLwQwDnW9v7AHzbev0HAA6gEjlzAMBtScttuq8A7gaw1np9DoDvATgC4B8BvDtpmQPKfy+Ag9Z93wNgSdIyO1zDowDeAFC2fgu3AfgMgM9Y+wXAN6xrPABD9F7Kr+FztuewF8AfJC2zwzX8awAK4KcA9ll/1yfxLJj5TAghpAaakgghhNRAxUAIIaQGKgZCCCE1UDEQQgipgYqBEEJIDVQMhBBCaqBiIIQQUgMVAyGEkBr+P+4r1CNX5MZuAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.scatter(X[:,0], X[:,1]);" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "ExecuteTime": { "end_time": "2020-06-24T19:29:56.907772Z", "start_time": "2020-06-24T19:29:56.798139Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "model=KMeans(2)\n", "model.fit(X)\n", "plt.scatter(X[:,0], X[:,1], c=model.labels_);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The clustering does not work well now, since it is not possible to separate the two clusters with a line. We could embed this data set into a higher dimensional space, where the separation is possible. And then apply the k-means clustering." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Alternatively, we can use a different type of clustering algorithm for this case. The *DBSCAN algorithm* is based on densities and works well on data whose density in the clusters is uniform." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "ExecuteTime": { "end_time": "2020-06-24T19:29:57.031491Z", "start_time": "2020-06-24T19:29:56.908627Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from sklearn.cluster import DBSCAN\n", "model = DBSCAN(eps=0.3)\n", "model.fit(X)\n", "plt.scatter(X[:,0], X[:,1], c=model.labels_);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The good news is that DBSCAN does not require the user to specify the number of clusters. But now the algorithm depends on another hyperparameter: a threshold for distance (here 0.3)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Clustering digits" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using scikit-learn we can download a set of 1797 images of handwritten digits with the correct labels 0,1,...,9. The images have quite a low resolution: 8*8=64 pixels. Let's see how our machine learning method works with this kind of data." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "ExecuteTime": { "end_time": "2020-06-24T19:29:57.108650Z", "start_time": "2020-06-24T19:29:57.032324Z" } }, "outputs": [ { "data": { "text/plain": [ "(1797, 64)" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.datasets import load_digits\n", "digits = load_digits()\n", "digits.data.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To get an idea how these data points look like, we plot first ten of these." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "ExecuteTime": { "end_time": "2020-06-24T19:29:57.342886Z", "start_time": "2020-06-24T19:29:57.109430Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, axes = plt.subplots(2,5, subplot_kw=dict(xticks=[], yticks=[]))\n", "for ax, digit in zip(axes.flat, digits.data[:10]):\n", " ax.imshow(digit.reshape(8,8), cmap=\"gray\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's cluster these data points into ten clusters." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "ExecuteTime": { "end_time": "2020-06-24T19:29:57.501105Z", "start_time": "2020-06-24T19:29:57.343728Z" } }, "outputs": [ { "data": { "text/plain": [ "(10, 64)" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model=KMeans(n_clusters = 10, random_state=0)\n", "model.fit(digits.data)\n", "model.cluster_centers_.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So, we have ten cluster centres, which are images with 8x8=64 pixels in them. We can have a look at their appearence:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "ExecuteTime": { "end_time": "2020-06-24T19:29:57.800696Z", "start_time": "2020-06-24T19:29:57.502253Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, axes = plt.subplots(2,5, subplot_kw=dict(xticks=[], yticks=[]))\n", "for ax, digit in zip(axes.flat, model.cluster_centers_):\n", " ax.imshow(digit.reshape(8,8), cmap=\"gray\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One can recognize these numbers with the exception of maybe number eight. What is the accuracy score of this clustering?" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "ExecuteTime": { "end_time": "2020-06-24T19:29:57.808213Z", "start_time": "2020-06-24T19:29:57.802233Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[4, 3, 5, 9, 7, 0, 1, 8, 2, 6]\n", "Accuracy score is 0.793544796884\n" ] } ], "source": [ "permutation3 = find_permutation(10, digits.target, model.labels_)\n", "print(permutation3)\n", "acc = accuracy_score(digits.target, [ permutation3[label] for label in model.labels_])\n", "print(\"Accuracy score is\", acc)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is quite a good result for such a simple algorithm!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "####
Exercise 5 (plant clustering)
\n", "\n", "Using the same iris data set that you saw earlier in the classification, apply k-means clustering with 3 clusters.\n", "Create a function `plant_clustering` that loads the iris data set, clusters the data and returns the accuracy_score.\n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "####
Exercise 6 (nonconvex clusters)
\n", "\n", "This exercise can give four points at maximum!\n", "\n", "Read the tab separated file data.tsv from the `src` folder into a DataFrame. The dataset has two features X1 and X2, and the label y. Cluster the feature matrix using DBSCAN with different values for the eps parameter. Use values in `np.arange(0.05, 0.2, 0.05)` for clustering. For each clustering, collect the accuracy score, the number of clusters, and the number of outliers. Return these values in a DataFrame, where columns and column names are as in the below example.\n", "\n", "Note that DBSCAN uses label -1 to denote outliers , that is, those data points that didn't fit well in any cluster. You have to modify the find_permutation function to handle this: ignore the outlier data points from the accuracy score computation. In addition, if the number of clusters is not the same as the number of labels in the original data, set the accuracy score to NaN.\n", "\n", " eps Score Clusters Outliers \n", " 0 0.05 ? ? ?\n", " 1 0.10 ? ? ?\n", " 2 0.15 ? ? ?\n", " 3 0.20 ? ? ?\n", "\n", "Before submitting the solution, you can plot the data set (with clusters colored) to see what kind of data we are dealing with.\n", "\n", "Points are given for each correct column in the result DataFrame.\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Hierarchical clustering\n", "\n", "Hierarchical clustering works by first putting each data point in their own cluster and then merging clusters based on some rule, until there are only the wanted number of clusters remaining. For this to work, there needs to be a distance measure between the data points. With this distance measure `d`, we can define another distance measure between the **clusters** U and V using one of the following methods (*linkages*):\n", "\n", "* `single`: $d(U, V) := \\min_{u \\in U, v \\in V} d(u,v)$\n", "* `complete`: $d(U, V) := \\max_{u \\in U, v \\in V} d(u,v)$\n", "* `average`: $d(U, V) := \\sum_{u \\in U, v \\in V} \\frac{d(u,v)}{|U||V|}$\n", "* `ward`: tries to minimize the variance in each cluster\n", "\n", "At each iteration of the algorithm two clusters that are closest to each other are merged. After this the distance between the clusters are recomputed, and then it continues to the next iteration.\n", "\n", "Below is an example with a botanical dataset with 150 samples from three species. Each species appears in the dataset 50 times. Each sample point has 4 features, which are basically dimensions of the \"leaves\" of the flower.\n", "\n", "We use the [seaborn](https://seaborn.pydata.org/index.html) library to both to compute the clustering and to visualize the result. The visualization consists of two parts: the *heatmap*, whose rows and/or columns may be reordered so as to have the elements of the same cluster next to each other; and the *dendrogram*, which shows the way the clusters were merged. The colors give the length of the corresponding features." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "ExecuteTime": { "end_time": "2020-06-24T19:29:58.300009Z", "start_time": "2020-06-24T19:29:57.810710Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['setosa' 'versicolor' 'virginica']\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlYAAAI/CAYAAAC1XpeNAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvAOZPmwAAIABJREFUeJzs3X9c1GW+///nMMAo4O8Ef8TuBmp67KTtRyvX0o1CLTXMstLsGFvH2kRSydQ8ZdmSritm22wlax2tVm+brkllpYm/2rSsdsvaslbTE2wILqiI4DAzzPcPv4wgCPhm4M28edxvN27LvGe4rhdrwGuu1/u6Xjafz+cTAAAAGi3E7AAAAACsgsQKAAAgQEisAAAAAoTECgAAIEBIrAAAAAIktK4n3f/+vkkmDbsorknGBQAAMFOdiZW87mYKAwAAIPjVmVj53OXNFUc133//vWbOnOl/nJOTo9TUVN1zzz3+ax9//LEefPBBXXzxxZKkxMREpaSkNHeoAAAAfnWvWHlczRRGdXFxccrKypIkeb1eDRs2TImJiTVeN2jQIK1YsaK5wwMAAKhV3StWXk9zxXFee/bsUWxsrHr27Gl2KAAAAHWqe8XKbc6KVVWbNm3SmDFjan3u888/180336zo6GjNmTNHvXv3buboAAAAzrLV1SvQ9dX7TTKp47KaZb3alJeX69prr9WmTZt00UUXVXuupKRENptNkZGR2rlzp9LT07Vly5amCBcAAKBB6jzHyudxNclHQ+3atUv9+/evkVRJUlRUlCIjIyVJw4cPl8fjUVFR0QV++wAAAIHTokuBmzZt0ujRo2t97ujRo7roootks9m0b98+VVRUqFOnTs0cIQAAwFn17Ao057gFSSotLdXu3bu1cOFC/7W1a9dKkiZOnKjNmzdr7dq1stvtatOmjZYtWyabzWZWuAAAAHXfY1W2a1WTTNp22D1NMi4AAICZ6ikFmrdiBQAAEGxabCkQAAAg2LTKFavy8nKdOHFCXbt2NTsUAABgIXUetyB3edN8mGDmzJk6efKkTp8+rbFjx2r06NF66aWXTIkFAABYU6tJrA4dOqR27dppx44duuqqq7Rz505t3LjRlFgAAIA11VMKdDdTGE3P4znT9/CTTz7R8OHD1bZtW4WE1J1XAgAAXIh6bl63TmIVHx+v++67T99//73S0tJ0+vRps0MCAAAW02JvXi8uLtb//M//6LvvvpPNZtPTTz+tK664wv+8z+dTenq6du7cqTZt2mjx4sXq37//ecf77W9/q7/+9a+69NJLFRERofz8fKWlpTXHtwIAAFqJOhMrn4mlwPT0dF177bX6/e9/r/Ly8horTLt27dLhw4e1ZcsWffHFF3riiSe0bt26Wsfyer2aOHGi3njjDf+1mJgYxcTENOn3AAAAWpe6V6zKzUmsTp48qU8++USLFy+WJIWHhys8PLzaa7KzszVu3DjZbDYNHDhQxcXFKigoUHR0dI3x7Ha7IiIi5HK55HA4muV7AAAArU89pUBPM4VRXW5urjp37qx58+Zp//796t+/v+bPn6+IiAj/a/Lz89WtWzf/427duik/P7/WxEqSLrnkEt11110aOXJktXHuuuuupvtGAABAq1Lntjif290kH/XxeDz6+uuvNXHiRG3cuFFt27ZVZmZmo75Rr9er3r176/vvv9dXX33l/wAAAAiUFrli1a1bN3Xr1k0DBgyQJI0aNapGYhUTE6MjR474Hx85cqTOe6YWLVrUNMECAAD8/+o5INTdNB/16Nq1q7p166bvv/9ekrRnzx7Fx8dXe01CQoI2btwon8+nzz//XO3atTtvGVCSysrKtHz5cv9OwIMHD2rr1q31xgIAANBQde8KLDdnxUqSHnvsMT388MNyu92KjY3VokWLtHbtWknSxIkTNXz4cO3cuVOJiYlq27atnn766TrHe+KJJ9S1a1ft379f0plVsbS0NN1www1N/r0AAIDWoUWWAiWpX79+2rBhQ7VrEydO9H9us9m0YMGCBo/37bff+s+ykqTIyEhVVFQEJlgAAAC14BWrQDv3uAaXyyWfz2dSNAAAwIrqOSDU21xxNLlBgwbpxRdfVHl5uT7++GP97//+rxISEswOCwAAWIjNV8eyzYnkprn/qMP/Nv9N4263WytXrtS2bdvk8/mUkJCg+++/X3a7vdljAQAA1lRnYnX8rqZZ0en4p21NMm5dDh48WGNnYW3XAAAAjKr7uAWPr2k+TPDwww836BoAAIBRdd5jVVEe/LvmioqKVFRUJJfLpYMHD/pvWD958qRKS0tNjg4AAFhJPbsCmyuMpvPWW29p9erVKigo0H//93/7r7dr10733XefiZEBAACrqfMeq6OJw5tk0q7v72yScevy4osv6oEHHmj2eQEAQOtR5z1WFW5bk3w0lNfr1bhx43T//ffXeG7Dhg26+uqrlZSUpKSkJK1bt67OsR544AHt2bNHr732miSpsLBQhw4danAsAAAA9amzFOgtb3gS1BReeeUVxcfHq6SkpNbnb7rpJj3++OMNGiszM1M7d+7U0aNHNXnyZLndbj366KP+NjkAAACNVeeKldcd0iQfDXHkyBHt2LFDt912W0C+0bffflurVq1SRESEpDO9As+XsAEAABhR94pVA5OgpvD0009r9uzZOnXq1Hlfs2XLFn3yySe65JJLNG/ePHXv3v28r23Tpo3CwsKqXbPZzF2RAwAA1lL3ipUnpEk+6rN9+3Z17txZl1122Xlfc91112nbtm1666239Itf/EJz5sypc8xu3brp008/lc1mU0VFhZ5//nn17t273lgAAAAaqs5dgd/2vbFJJr10/7t1Pp+RkaGsrCyFhobK5XKppKREiYmJWrp0aa2v93q9uvLKK/XZZ5+dd8yjR49qzpw52rt3r2w2mwYNGqSlS5eqS5cujfpeAAAAKtWZWH0dP7pJJv2Pg5sa/NqPP/5YL7/8slasWFHtekFBgaKjoyVJ77//vv74xz/q9ddfr3e8srIyVVRUKDIy8sKCBgAAqEed91h5vObdY1WbZ599Vpdddpmuv/56vfrqq9q2bZvsdrs6dOigRYsW1fv1P/zwg3744Qd5vV7/teHDm+asLgAA0PrUuWL1t9ikJpn05zlZTTJuXZYsWaKNGzfqkksuUUjImYTRZrPplVdeafZYAACANdW5YuX22psrjia3detWZWdnq23btmaHAgAALKruUmBFyyoFNkb37t1rHLcAAAAQSHWvWPmsc87T3Llz9cADD2jo0KEKDw/3X7/rrrtMjAoAAFhJ3YlV3cdcBZXMzEwdPXpU33zzjex265Q4AQBAy1FPYmWdFat//OMf2rx5M6etAwCAJlN3YmWzzorVz372M5WWlnJ+FQAAaDL1JFbWWd2JiorS+PHjde2111a7x+qRRx4xMSoAAGAl9SRWzRVGdS6XS3fddZfKy8vl9Xo1cuRIpaamVntNeXm5HnnkEf3jH/9Qx44d9cwzz+jiiy8+75hxcXGKi4tr6tABAEAr1iJXrMLDw7V69WpFRkbK7XZr0qRJGjZsmAYOHOh/zbp169S+fXu9//772rRpk5YuXarly5efd8yUlJTmCB0AALRiLXLFymaz+e+F8ng88ng8NW4637Ztmz9ZGjlypBYuXCifz1fjde+++65uvPFG/elPf6p1Lo5bAAAAgdIiEytJ8nq9Gj9+vH744QdNmjRJAwYMqPZ8fn6+unfvLkkKDQ1Vu3btdOzYMXXu3Lna6/75z3/qxhtv1FdffdVssQMAgNapnuMWzGO325WVlaXi4mJNmzZN3333nfr06XPB41TemzV//nxFRUVVe66kpCQgsQIAAEiq+wTQclvTfFyI9u3b66qrrtIHH3xQ7XpMTIzy8vIknSkXnjx5Up06dTrvOHfffXeDrgEAABhVZ2LltjXNR32KiopUXFwsSTp9+rR2795dY0dfQkKC3njjDUnS5s2bdfXVV9d6+KfH41FZWZkqKip0+vRplZWVqaysTAUFBSorK2vo/08AAAD1qrMU6JWvueKopqCgQHPnzpXX65XP59OoUaN03XXX6dlnn9Vll12m66+/Xrfddptmz56txMREdejQQc8880ytY7344otyOp2y2WzVdhVGRUUpOTm5ub4lAADQCth8Pt95s6cnfto0O+ae+L/ad+g1pYULF+rxxx9v9nkBAEDrUc+uQHNWrJpCZVJVeehopbZt25oVEgAAsJh6dgVaJ7F6//339dRTT6mgoEA2m81/5tU333xjdmgAAMAiWk1itWTJEi1fvlwDBw5USIh1mksDAICWo9UkVh06dNDPf/5zs8MAAAAWVk9iVdFccTS5xMRErVmzRjfddJMcDof/OvdYAQCAQKlzV+CvfnZbk0z68uH1TTJuXfr27ev/nHusAABAU6h7xcpnnRWr/fv3mx0CAACwuDoTK4+FSoGSdOjQIR08eFA33HCDTp06JbfbrY4dO5odFgAAsIi6W9qookk+6jNv3jwNGTJEY8aMqfX5jz/+WP/v//0/JSUlKSkpSU6ns94xN2zYoF//+tdatGiRJCk/P18zZsyo9+sAAAAaqkWWAsePH6/Jkydrzpw5533NoEGDtGLFigaP+corr+gvf/mL7rrrzGnycXFx+ve//93oWAEAACq1yF2BgwcPVm5ubkDHDAsLU2RkZLVrdrs9oHMAAIDWre57rFrwzeuff/65br75ZkVHR2vOnDnq3bt3na/v2LGjDh06JJvNJknKyspSt27dmiNUAADQStRT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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import seaborn as sns; sns.set(color_codes=True)\n", "iris = sns.load_dataset(\"iris\")\n", "species = iris.pop(\"species\") # Remove the species column\n", "print(species.unique()) # The samples seems to be from these three species\n", "sns.clustermap(iris, method=\"ward\", col_cluster=False, cbar_kws={'label': 'centimeters'}); # Cluster only the rows\n", "#plt.colorbar().ax.set_title('This is a title')\n", "#plt.gca().images[-1].colorbar.ax.set_title(\"title\")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "With sharp eye and good will one can discern three clusters in the above heatmap and dendrogram." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "####
Exercise 7 (binding sites)
\n", "\n", "This exercise can give three points at maximum!\n", "\n", "A binding site is a piece of DNA where a certain protein prefers to bind. The piece of DNA can be described as a string consisting of letters A, C, G, and T, which correspond to nucleotides Adenine, Cytosine, Guanine, and Thymine.\n", "In this exercise the length of binding sites is eight nucleotides. They are stored in the file `data.seq`,\n", "and the binding sites there are classified into two classes.\n", "\n", "Part 1. Write function `toint` that converts a nucleotide to an integer. Use the following mapping:\n", "```\n", "A -> 0\n", "C -> 1\n", "G -> 2\n", "T -> 3\n", "```\n", "\n", "Write also function `get_features_and_labels` that gets a filename as a parameter. The function should load the contents of the file into a DataFrame. The column `X` contains a string. Convert this column into a feature matrix using the above `toint` function. For example the column `[\"GGATAATA\",\"CGATAACC\"]` should result to the feature matrix\n", "```\n", "[[2,2,0,3,0,0,3,0],\n", "[1,2,0,3,0,0,1,1]]\n", "```\n", "The function should return a pair, whose first element is the feature matrix and the second element is the label vector.\n", "\n", "Part 2. Create function `cluster_euclidean` that gets a filename as parameter. Get the features and labels using the function from part 1. Perform hierarchical clustering using the function `sklearn.cluster.AgglomerativeClustering`. Get two clusters using `average` linkage and `euclidean` affinity. Fit the model and predict the labels. Note that you may have to use the `find_permutation` function again, because even though the clusters are correct, they may be labeled differently than the real labels given in `data.seq`. The function should return the accuracy score.\n", "\n", "Part 3. Create function `cluster_hamming` that works like the function in part 2, except now using the [hamming](https://en.wikipedia.org/wiki/Hamming_distance) affinity. Even though it is possible to pass the function `hamming` to `AgglomerativeClustering`, let us now compute the Hamming distance matrix explicitly. We can achieve this using the function `sklearn.metrics.pairwise_distances`. Use the affinity parameter `precomputed` to `AgglomerativeClustering`. And give the distance matrix you got from `pairwise_distances`, instead of the feature matrix, to the `fit_predict` method of the model. If you want, you can visualize the clustering using the provided `plot` function.\n", "\n", "**NB!** When submitting your solution, please comment away all `plot` function calls. This might cause tests to fail on the server.\n", "\n", "Which affinity (or distance) do you think is theoretically more correct of these two (Euclidean or Hamming)? Why?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\"Open\n" ] } ], "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.7.3" }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 2 }