├── 01 Unsupervised Learning.pdf ├── 02 Clustering.pdf ├── 03_Distance_Metrics_in_ML.ipynb ├── 04 K Means Clustering.pdf ├── 05 Elbow Method.pdf ├── 06_K_Means_Clustering.ipynb ├── 07 Hierarchical Clustering.pdf ├── 08 Dendogram.pdf ├── 09_Hierarchical_Clustering.ipynb ├── 10 DBScan Clustering.pdf ├── 11_DBScan_Clustering.ipynb ├── 12 GMM Clustering.pdf ├── 13_Gaussian_Mixture_Model.ipynb ├── 14 Cluster Adjustment .pdf ├── 15 Silhouette Coefficient - Cluster Validation.pdf ├── 16 Disadvantage & Choosing Right Clustering .pdf ├── 17 Clustering Revision.pdf ├── 18 Clustering Interview Questions .pdf ├── 19 K Modes.pdf ├── 20_K_Modes.ipynb └── README.md /01 Unsupervised Learning.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sandipanpaul21/Clustering-in-Python/0ad56526cd8d59c14387dbae855c0eafd09e26a5/01 Unsupervised Learning.pdf -------------------------------------------------------------------------------- /02 Clustering.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sandipanpaul21/Clustering-in-Python/0ad56526cd8d59c14387dbae855c0eafd09e26a5/02 Clustering.pdf -------------------------------------------------------------------------------- /03_Distance_Metrics_in_ML.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "03 Distance Metrics in ML.ipynb", 7 | "provenance": [], 8 | "authorship_tag": "ABX9TyOIKYef8Rk3gjr3ltV1P/EU", 9 | "include_colab_link": true 10 | }, 11 | "kernelspec": { 12 | "name": "python3", 13 | "display_name": "Python 3" 14 | }, 15 | "language_info": { 16 | "name": "python" 17 | } 18 | }, 19 | "cells": [ 20 | { 21 | "cell_type": "markdown", 22 | "metadata": { 23 | "id": "view-in-github", 24 | "colab_type": "text" 25 | }, 26 | "source": [ 27 | "\"Open" 28 | ] 29 | }, 30 | { 31 | "cell_type": "markdown", 32 | "metadata": { 33 | "id": "UmICao6hMfZS" 34 | }, 35 | "source": [ 36 | "### **Distance Metrics** \n", 37 | "used in both supervised and unsupervised learning, **generally to calculate the similarity between data points.**\n", 38 | "\n", 39 | "**Types of Distance Metrics in Machine Learning**\n", 40 | "1. Euclidean Distance\n", 41 | "2. Manhattan Distance\n", 42 | "3. Minkowski Distance\n", 43 | "4. Hamming Distance\n", 44 | "\n", 45 | "**Few Machine learning algorithim uses Distance Metrics**\n", 46 | "1. Clustering Algorithim\n", 47 | "2. Classification - KNN Classification" 48 | ] 49 | }, 50 | { 51 | "cell_type": "markdown", 52 | "metadata": { 53 | "id": "wF5fKIpsNebO" 54 | }, 55 | "source": [ 56 | "#### **1. Euclidean Distance**\n", 57 | "Euclidean Distance represents the **shortest distance between two points.**\n", 58 | "\n", 59 | "Most machine learning algorithms including **K-Means use this distance metric to measure the similarity between observations.**" 60 | ] 61 | }, 62 | { 63 | "cell_type": "code", 64 | "metadata": { 65 | "id": "bSGqH1KKMp34" 66 | }, 67 | "source": [ 68 | "# Importing necessary libraries \n", 69 | "from scipy.spatial import distance # To calculate distances\n", 70 | "from google.colab import files\n", 71 | "from IPython.display import Image\n", 72 | "#uploaded = files.upload() # To import image from computer/tab" 73 | ], 74 | "execution_count": 1, 75 | "outputs": [] 76 | }, 77 | { 78 | "cell_type": "code", 79 | "metadata": { 80 | "colab": { 81 | "base_uri": "https://localhost:8080/", 82 | "height": 474 83 | }, 84 | "id": "9KaTXQZbOJu6", 85 | "outputId": "d6237fc9-239c-4d4b-a844-82bbe4312cfb" 86 | }, 87 | "source": [ 88 | "print('Euclidean Distance Theory Overview : Calculate by Pythagorous Theorem\\n')\n", 89 | "Image('1A876F28-65F9-4243-B0C2-E4FBC2DDB56D.jpeg', width = 500)" 90 | ], 91 | "execution_count": null, 92 | "outputs": [ 93 | { 94 | "output_type": "stream", 95 | "name": "stdout", 96 | "text": [ 97 | "Euclidean Distance Theory Overview : Calculate by Pythagorous Theorem\n", 98 | "\n" 99 | ] 100 | }, 101 | { 102 | "output_type": "execute_result", 103 | "data": { 104 | "image/jpeg": "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\n", 105 | "text/plain": [ 106 | "" 107 | ] 108 | }, 109 | "metadata": { 110 | "image/jpeg": { 111 | "width": 500 112 | } 113 | }, 114 | "execution_count": 23 115 | } 116 | ] 117 | }, 118 | { 119 | "cell_type": "code", 120 | "metadata": { 121 | "colab": { 122 | "base_uri": "https://localhost:8080/" 123 | }, 124 | "id": "6kn0KZCDP1l5", 125 | "outputId": "297798c5-ef74-4501-b481-8e3b06e0bfe4" 126 | }, 127 | "source": [ 128 | "# Euclidean Distance\n", 129 | "# defining the points\n", 130 | "point_1 = (1, 2, 3)\n", 131 | "point_2 = (4, 5, 6)\n", 132 | "\n", 133 | "print('First Data Points :',point_1)\n", 134 | "print('Second Data Points :', point_2)\n", 135 | "\n", 136 | "#computing the euclidean distance\n", 137 | "euclidean_distance = distance.euclidean(point_1, point_2)\n", 138 | "print('\\nEuclidean Distance b/w', point_1, 'and', point_2, 'is: ', euclidean_distance)" 139 | ], 140 | "execution_count": 2, 141 | "outputs": [ 142 | { 143 | "output_type": "stream", 144 | "name": "stdout", 145 | "text": [ 146 | "First Data Points : (1, 2, 3)\n", 147 | "Second Data Points : (4, 5, 6)\n", 148 | "\n", 149 | "Euclidean Distance b/w (1, 2, 3) and (4, 5, 6) is: 5.196152422706632\n" 150 | ] 151 | } 152 | ] 153 | }, 154 | { 155 | "cell_type": "markdown", 156 | "metadata": { 157 | "id": "ZWkrHAHUna41" 158 | }, 159 | "source": [ 160 | "#### **2. Manhattan Distance**\n", 161 | "##### Manhattan Distance is the sum of absolute differences between points across all the dimensions." 162 | ] 163 | }, 164 | { 165 | "cell_type": "code", 166 | "metadata": { 167 | "colab": { 168 | "base_uri": "https://localhost:8080/", 169 | "height": 400 170 | }, 171 | "id": "Gooz82NHUNGD", 172 | "outputId": "70c1d2ec-ee0d-47cc-b33d-3a08041fe83d" 173 | }, 174 | "source": [ 175 | "print('Manhattan Distance vs Euclidean Distance')\n", 176 | "Image('98236A32-D4FA-4359-B42C-377B289C90BD.png', width = 400)" 177 | ], 178 | "execution_count": 14, 179 | "outputs": [ 180 | { 181 | "output_type": "stream", 182 | "name": "stdout", 183 | "text": [ 184 | "Manhattan Distance vs Euclidean Distance\n" 185 | ] 186 | }, 187 | { 188 | "output_type": "execute_result", 189 | "data": { 190 | "image/png": "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\n", 191 | "text/plain": [ 192 | "" 193 | ] 194 | }, 195 | "metadata": { 196 | "image/png": { 197 | "width": 400 198 | } 199 | }, 200 | "execution_count": 14 201 | } 202 | ] 203 | }, 204 | { 205 | "cell_type": "code", 206 | "metadata": { 207 | "colab": { 208 | "base_uri": "https://localhost:8080/" 209 | }, 210 | "id": "fbQQMjfcoARI", 211 | "outputId": "35acc408-d758-4207-bef5-ff0263289007" 212 | }, 213 | "source": [ 214 | "# Manhattan Distance vs Euclidean Distance\n", 215 | "# defining the points\n", 216 | "point_1 = (1, 1)\n", 217 | "point_2 = (5, 4)\n", 218 | "\n", 219 | "print('First Data Points :',point_1)\n", 220 | "print('Second Data Points :', point_2)\n", 221 | "\n", 222 | "#computing the euclidean distance\n", 223 | "euclidean_distance = distance.euclidean(point_1, point_2)\n", 224 | "print('\\nEuclidean Distance b/w', point_1, 'and', point_2, 'is: ', euclidean_distance)\n", 225 | "\n", 226 | "# computing the manhattan distance\n", 227 | "manhattan_distance = distance.cityblock(point_1, point_2)\n", 228 | "print('Manhattan Distance b/w', point_1, 'and', point_2, 'is: ', manhattan_distance)" 229 | ], 230 | "execution_count": 3, 231 | "outputs": [ 232 | { 233 | "output_type": "stream", 234 | "name": "stdout", 235 | "text": [ 236 | "First Data Points : (1, 1)\n", 237 | "Second Data Points : (5, 4)\n", 238 | "\n", 239 | "Euclidean Distance b/w (1, 1) and (5, 4) is: 5.0\n", 240 | "Manhattan Distance b/w (1, 1) and (5, 4) is: 7\n" 241 | ] 242 | } 243 | ] 244 | }, 245 | { 246 | "cell_type": "markdown", 247 | "metadata": { 248 | "id": "9NvuapSFykzT" 249 | }, 250 | "source": [ 251 | "#### **3. Minkowski Distance**\n", 252 | "\n", 253 | "**Minkowski Distance is the generalized form of Euclidean and Manhattan Distance**\n", 254 | "- If Lamda = 1, then it calculates Manhatten Distance\n", 255 | "- If Lamda = 2, then it calculates Euclidean Distance\n", 256 | "\n", 257 | "**In scipy package, the p parameter of the Minkowski Distance metric of SciPy package** \n", 258 | "1. When the order(p) = 1, it will represent Manhattan Distance \n", 259 | "2. When the order(p) = 2, it will represent Euclidean Distance." 260 | ] 261 | }, 262 | { 263 | "cell_type": "code", 264 | "metadata": { 265 | "id": "RCLL3UdooVRB", 266 | "colab": { 267 | "base_uri": "https://localhost:8080/", 268 | "height": 306 269 | }, 270 | "outputId": "3976e8e5-5aa4-470e-bb0e-50a8625cfcc3" 271 | }, 272 | "source": [ 273 | "print('Manhattan Distance vs Euclidean Distance\\n')\n", 274 | "Image('11E4B729-8426-4200-92D6-C61D3307D082.png', width = 600)" 275 | ], 276 | "execution_count": 10, 277 | "outputs": [ 278 | { 279 | "output_type": "stream", 280 | "name": "stdout", 281 | "text": [ 282 | "Manhattan Distance vs Euclidean Distance\n", 283 | "\n" 284 | ] 285 | }, 286 | { 287 | "output_type": "execute_result", 288 | "data": { 289 | "image/png": "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\n", 290 | "text/plain": [ 291 | "" 292 | ] 293 | }, 294 | "metadata": { 295 | "image/png": { 296 | "width": 600 297 | } 298 | }, 299 | "execution_count": 10 300 | } 301 | ] 302 | }, 303 | { 304 | "cell_type": "code", 305 | "metadata": { 306 | "colab": { 307 | "base_uri": "https://localhost:8080/" 308 | }, 309 | "id": "L8bNZuTMyZeF", 310 | "outputId": "fbe6aef7-087b-482c-cc05-de00860f9f74" 311 | }, 312 | "source": [ 313 | "# Manhattan Distance vs Euclidean Distance\n", 314 | "# defining the points\n", 315 | "point_1 = (1, 1)\n", 316 | "point_2 = (5, 4)\n", 317 | "\n", 318 | "print('First Data Points :',point_1)\n", 319 | "print('Second Data Points :', point_2)\n", 320 | "\n", 321 | "#computing the euclidean distance\n", 322 | "euclidean_distance = distance.euclidean(point_1, point_2)\n", 323 | "print('\\nEuclidean Distance b/w', point_1, 'and', point_2, 'is: ', euclidean_distance)\n", 324 | "\n", 325 | "# computing the manhattan distance\n", 326 | "manhattan_distance = distance.cityblock(point_1, point_2)\n", 327 | "print('\\nManhattan Distance b/w', point_1, 'and', point_2, 'is: ', manhattan_distance)\n", 328 | "\n", 329 | "# computing the minkowski distance\n", 330 | "minkowski_distance = distance.minkowski(point_1, point_2, p=1)\n", 331 | "print('\\nMinkowski Distance (p=1, Manhattan) b/w', point_1, 'and', point_2, 'is: ', minkowski_distance)\n", 332 | "\n", 333 | "minkowski_distance = distance.minkowski(point_1, point_2, p=2)\n", 334 | "print('\\nMinkowski Distance (p=2, Euclidean) b/w', point_1, 'and', point_2, 'is: ', minkowski_distance)\n", 335 | "\n", 336 | "minkowski_distance = distance.minkowski(point_1, point_2, p=3)\n", 337 | "print('\\nMinkowski Distance (p=3) b/w', point_1, 'and', point_2, 'is: ', minkowski_distance)" 338 | ], 339 | "execution_count": 4, 340 | "outputs": [ 341 | { 342 | "output_type": "stream", 343 | "name": "stdout", 344 | "text": [ 345 | "First Data Points : (1, 1)\n", 346 | "Second Data Points : (5, 4)\n", 347 | "\n", 348 | "Euclidean Distance b/w (1, 1) and (5, 4) is: 5.0\n", 349 | "\n", 350 | "Manhattan Distance b/w (1, 1) and (5, 4) is: 7\n", 351 | "\n", 352 | "Minkowski Distance (p=1, Manhattan) b/w (1, 1) and (5, 4) is: 7.0\n", 353 | "\n", 354 | "Minkowski Distance (p=2, Euclidean) b/w (1, 1) and (5, 4) is: 5.0\n", 355 | "\n", 356 | "Minkowski Distance (p=3) b/w (1, 1) and (5, 4) is: 4.497941445275415\n" 357 | ] 358 | } 359 | ] 360 | }, 361 | { 362 | "cell_type": "markdown", 363 | "metadata": { 364 | "id": "aOeTLnhw2GWO" 365 | }, 366 | "source": [ 367 | "#### **3. Hamming Distance**\n", 368 | "- Hamming Distance measures the **similarity between two strings of the same length** \n", 369 | "\n", 370 | "- The Hamming Distance **between two strings of the same length is the number of positions at which the corresponding characters are different.**\n", 371 | "\n", 372 | "Let’s say we have two strings:\n", 373 | "\n", 374 | "**“euclidean” and “manhattan”**\n", 375 | "\n", 376 | "- Since the length of these strings is equal, we can calculate the Hamming Distance. \n", 377 | "- We will go character by character and match the strings.\n", 378 | "- The first character of both the strings (e and m respectively) is different. Similarly, the second character of both the strings (u and a) is different. and so on.\n", 379 | "- **Look carefully** – seven characters are different whereas two characters (the last two characters) are similar:\n", 380 | "\n", 381 | "**“euclide--an” and “manhatt--an”**\n", 382 | "\n", 383 | "- Hence, the **Hamming Distance here will be 7.**\n", 384 | "- **Note that larger the Hamming Distance between two strings, more dissimilar will be those strings (and vice versa)**\n", 385 | "\n" 386 | ] 387 | }, 388 | { 389 | "cell_type": "code", 390 | "metadata": { 391 | "colab": { 392 | "base_uri": "https://localhost:8080/" 393 | }, 394 | "id": "Mjg8Vhnez1fO", 395 | "outputId": "8ec6a00e-4c6b-4b8c-f37f-c7be88ba13b2" 396 | }, 397 | "source": [ 398 | "# Hamming Distance\n", 399 | "# defining two strings\n", 400 | "string_1 = 'euclidean'\n", 401 | "string_2 = 'manhattan'\n", 402 | "\n", 403 | "# computing the hamming distance\n", 404 | "hamming_distance = distance.hamming(list(string_1), list(string_2))*len(string_1)\n", 405 | "print('Hamming Distance b/w', string_1, 'and', string_2, 'is: ', hamming_distance)" 406 | ], 407 | "execution_count": 5, 408 | "outputs": [ 409 | { 410 | "output_type": "stream", 411 | "name": "stdout", 412 | "text": [ 413 | "Hamming Distance b/w euclidean and manhattan is: 7.0\n" 414 | ] 415 | } 416 | ] 417 | } 418 | ] 419 | } -------------------------------------------------------------------------------- /04 K Means Clustering.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sandipanpaul21/Clustering-in-Python/0ad56526cd8d59c14387dbae855c0eafd09e26a5/04 K Means Clustering.pdf -------------------------------------------------------------------------------- /05 Elbow Method.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sandipanpaul21/Clustering-in-Python/0ad56526cd8d59c14387dbae855c0eafd09e26a5/05 Elbow Method.pdf -------------------------------------------------------------------------------- /07 Hierarchical Clustering.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sandipanpaul21/Clustering-in-Python/0ad56526cd8d59c14387dbae855c0eafd09e26a5/07 Hierarchical Clustering.pdf -------------------------------------------------------------------------------- /08 Dendogram.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sandipanpaul21/Clustering-in-Python/0ad56526cd8d59c14387dbae855c0eafd09e26a5/08 Dendogram.pdf -------------------------------------------------------------------------------- /10 DBScan Clustering.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sandipanpaul21/Clustering-in-Python/0ad56526cd8d59c14387dbae855c0eafd09e26a5/10 DBScan Clustering.pdf -------------------------------------------------------------------------------- /12 GMM Clustering.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sandipanpaul21/Clustering-in-Python/0ad56526cd8d59c14387dbae855c0eafd09e26a5/12 GMM Clustering.pdf -------------------------------------------------------------------------------- /14 Cluster Adjustment .pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sandipanpaul21/Clustering-in-Python/0ad56526cd8d59c14387dbae855c0eafd09e26a5/14 Cluster Adjustment .pdf -------------------------------------------------------------------------------- /15 Silhouette Coefficient - Cluster Validation.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sandipanpaul21/Clustering-in-Python/0ad56526cd8d59c14387dbae855c0eafd09e26a5/15 Silhouette Coefficient - Cluster Validation.pdf -------------------------------------------------------------------------------- /16 Disadvantage & Choosing Right Clustering .pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sandipanpaul21/Clustering-in-Python/0ad56526cd8d59c14387dbae855c0eafd09e26a5/16 Disadvantage & Choosing Right Clustering .pdf -------------------------------------------------------------------------------- /17 Clustering Revision.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sandipanpaul21/Clustering-in-Python/0ad56526cd8d59c14387dbae855c0eafd09e26a5/17 Clustering Revision.pdf -------------------------------------------------------------------------------- /18 Clustering Interview Questions .pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sandipanpaul21/Clustering-in-Python/0ad56526cd8d59c14387dbae855c0eafd09e26a5/18 Clustering Interview Questions .pdf -------------------------------------------------------------------------------- /19 K Modes.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sandipanpaul21/Clustering-in-Python/0ad56526cd8d59c14387dbae855c0eafd09e26a5/19 K Modes.pdf -------------------------------------------------------------------------------- /20_K_Modes.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "20 K Modes.ipynb", 7 | "provenance": [], 8 | "authorship_tag": "ABX9TyMrk2Mr4iYgvzKIUk9Vxnx5", 9 | "include_colab_link": true 10 | }, 11 | "kernelspec": { 12 | "name": "python3", 13 | "display_name": "Python 3" 14 | }, 15 | "language_info": { 16 | "name": "python" 17 | } 18 | }, 19 | "cells": [ 20 | { 21 | "cell_type": "markdown", 22 | "metadata": { 23 | "id": "view-in-github", 24 | "colab_type": "text" 25 | }, 26 | "source": [ 27 | "\"Open" 28 | ] 29 | }, 30 | { 31 | "cell_type": "markdown", 32 | "source": [ 33 | "**Custering** is an *unsupervised learning* method whose task is to *divide the population or data points into a number of groups*, such that data points in a group are more similar to other data points in the same group and dissimilar to the data points in other groups. \n", 34 | "\n", 35 | "It is basically a collection of objects based on similarity and dissimilarity between them.\n", 36 | "\n", 37 | "**KMeans** uses mathematical measures (distance) to cluster continuous data. The lesser the distance, the more similar our data points are. Centroids are updated by Means.\n", 38 | "\n", 39 | "**But for categorical data points**, we cannot calculate the distance. So we go for **KModes algorithm**. It uses the dissimilarities(total mismatches) between the data points. The lesser the dissimilarities the more similar our data points are. It uses Modes instead of means.\n", 40 | "\n", 41 | "**Steps in K-Mode**:\n", 42 | "1. Pick K observations at random and use them as leaders/clusters (K to choose from Elbow Method)\n", 43 | "2. Calculate the dissimilarities and assign each observation to its closest cluster\n", 44 | "3. Define new modes for the clusters\n", 45 | "4. Repeat 2–3 steps until there are is no re-assignment required" 46 | ], 47 | "metadata": { 48 | "id": "LbLS41Inmb-S" 49 | } 50 | }, 51 | { 52 | "cell_type": "code", 53 | "source": [ 54 | "# importing necessary libraries\n", 55 | "import pandas as pd\n", 56 | "import numpy as np\n", 57 | "#!pip install kmodes\n", 58 | "from kmodes.kmodes import KModes\n", 59 | "import matplotlib.pyplot as plt\n", 60 | "%matplotlib inline" 61 | ], 62 | "metadata": { 63 | "id": "uMcZ58AknJth" 64 | }, 65 | "execution_count": 1, 66 | "outputs": [] 67 | }, 68 | { 69 | "cell_type": "code", 70 | "source": [ 71 | "# Create toy dataset\n", 72 | "hair_color = np.array(['blonde', 'brunette', 'red', 'black', 'brunette', 'black', 'red', 'black'])\n", 73 | "eye_color = np.array(['amber', 'gray', 'green', 'hazel', 'amber', 'gray', 'green', 'hazel'])\n", 74 | "skin_color = np.array(['fair', 'brown', 'brown', 'brown', 'fair', 'brown', 'fair', 'fair'])\n", 75 | "person = ['P1','P2','P3','P4','P5','P6','P7','P8']\n", 76 | "data = pd.DataFrame({'person':person, 'hair_color':hair_color, 'eye_color':eye_color, 'skin_color':skin_color})\n", 77 | "data = data.set_index('person')\n", 78 | "data" 79 | ], 80 | "metadata": { 81 | "colab": { 82 | "base_uri": "https://localhost:8080/", 83 | "height": 328 84 | }, 85 | "id": "iFFnIJRJnRbU", 86 | "outputId": "073896f8-66d6-4940-c21d-fd1fa93a47a3" 87 | }, 88 | "execution_count": 2, 89 | "outputs": [ 90 | { 91 | "output_type": "execute_result", 92 | "data": { 93 | "text/html": [ 94 | "
\n", 95 | "\n", 108 | "\n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | "
hair_coloreye_colorskin_color
person
P1blondeamberfair
P2brunettegraybrown
P3redgreenbrown
P4blackhazelbrown
P5brunetteamberfair
P6blackgraybrown
P7redgreenfair
P8blackhazelfair
\n", 174 | "
" 175 | ], 176 | "text/plain": [ 177 | " hair_color eye_color skin_color\n", 178 | "person \n", 179 | "P1 blonde amber fair\n", 180 | "P2 brunette gray brown\n", 181 | "P3 red green brown\n", 182 | "P4 black hazel brown\n", 183 | "P5 brunette amber fair\n", 184 | "P6 black gray brown\n", 185 | "P7 red green fair\n", 186 | "P8 black hazel fair" 187 | ] 188 | }, 189 | "metadata": {}, 190 | "execution_count": 2 191 | } 192 | ] 193 | }, 194 | { 195 | "cell_type": "markdown", 196 | "source": [ 197 | "**Scree Plot or Elbow curve to find optimal K value**\n", 198 | "- For KModes, plot cost for a range of K values. Cost is the sum of all the dissimilarities between the clusters.\n", 199 | "- Select the K where you observe an elbow-like bend with a lesser cost value.\n", 200 | "\n" 201 | ], 202 | "metadata": { 203 | "id": "sXNaiUl2njHF" 204 | } 205 | }, 206 | { 207 | "cell_type": "code", 208 | "source": [ 209 | "# Elbow curve to find optimal K\n", 210 | "cost = []\n", 211 | "K = range(1,5)\n", 212 | "for num_clusters in list(K):\n", 213 | " kmode = KModes(n_clusters=num_clusters, init = \"random\", n_init = 5, verbose=1)\n", 214 | " kmode.fit_predict(data)\n", 215 | " cost.append(kmode.cost_)\n", 216 | " \n", 217 | "plt.plot(K, cost, 'bx-')\n", 218 | "plt.xlabel('No. of clusters')\n", 219 | "plt.ylabel('Cost')\n", 220 | "plt.title('Elbow Method For Optimal k')\n", 221 | "plt.show()" 222 | ], 223 | "metadata": { 224 | "colab": { 225 | "base_uri": "https://localhost:8080/", 226 | "height": 1000 227 | }, 228 | "id": "4YBfEadpndMK", 229 | "outputId": "a1473766-621f-4827-c57e-d12ea37fa1a0" 230 | }, 231 | "execution_count": 3, 232 | "outputs": [ 233 | { 234 | "output_type": "stream", 235 | "name": "stdout", 236 | "text": [ 237 | "Init: initializing centroids\n", 238 | "Init: initializing clusters\n", 239 | "Starting iterations...\n", 240 | "Run 1, iteration: 1/100, moves: 0, cost: 15.0\n", 241 | "Init: initializing centroids\n", 242 | "Init: initializing clusters\n", 243 | "Starting iterations...\n", 244 | "Run 2, iteration: 1/100, moves: 0, cost: 15.0\n", 245 | "Init: initializing centroids\n", 246 | "Init: initializing clusters\n", 247 | "Starting iterations...\n", 248 | "Run 3, iteration: 1/100, moves: 0, cost: 15.0\n", 249 | "Init: initializing centroids\n", 250 | "Init: initializing clusters\n", 251 | "Starting iterations...\n", 252 | "Run 4, iteration: 1/100, moves: 0, cost: 15.0\n", 253 | "Init: initializing centroids\n", 254 | "Init: initializing clusters\n", 255 | "Starting iterations...\n", 256 | "Run 5, iteration: 1/100, moves: 0, cost: 15.0\n", 257 | "Best run was number 1\n", 258 | "Init: initializing centroids\n", 259 | "Init: initializing clusters\n", 260 | "Starting iterations...\n", 261 | "Run 1, iteration: 1/100, moves: 1, cost: 9.0\n", 262 | "Init: initializing centroids\n", 263 | "Init: initializing clusters\n", 264 | "Starting iterations...\n", 265 | "Run 2, iteration: 1/100, moves: 0, cost: 9.0\n", 266 | "Init: initializing centroids\n", 267 | "Init: initializing clusters\n", 268 | "Starting iterations...\n", 269 | "Run 3, iteration: 1/100, moves: 0, cost: 9.0\n", 270 | "Init: initializing centroids\n", 271 | "Init: initializing clusters\n", 272 | "Starting iterations...\n", 273 | "Run 4, iteration: 1/100, moves: 1, cost: 9.0\n", 274 | "Init: initializing centroids\n", 275 | "Init: initializing clusters\n", 276 | "Starting iterations...\n", 277 | "Run 5, iteration: 1/100, moves: 3, cost: 9.0\n", 278 | "Run 5, iteration: 2/100, moves: 0, cost: 9.0\n", 279 | "Best run was number 1\n", 280 | "Init: initializing centroids\n", 281 | "Init: initializing clusters\n", 282 | "Starting iterations...\n", 283 | "Run 1, iteration: 1/100, moves: 1, cost: 7.0\n", 284 | "Run 1, iteration: 2/100, moves: 1, cost: 7.0\n", 285 | "Init: initializing centroids\n", 286 | "Init: initializing clusters\n", 287 | "Starting iterations...\n", 288 | "Run 2, iteration: 1/100, moves: 0, cost: 9.0\n", 289 | "Init: initializing centroids\n", 290 | "Init: initializing clusters\n", 291 | "Starting iterations...\n", 292 | "Run 3, iteration: 1/100, moves: 0, cost: 7.0\n", 293 | "Init: initializing centroids\n", 294 | "Init: initializing clusters\n", 295 | "Starting iterations...\n", 296 | "Run 4, iteration: 1/100, moves: 0, cost: 6.0\n", 297 | "Init: initializing centroids\n", 298 | "Init: initializing clusters\n", 299 | "Starting iterations...\n", 300 | "Run 5, iteration: 1/100, moves: 0, cost: 8.0\n", 301 | "Best run was number 4\n", 302 | "Init: initializing centroids\n", 303 | "Init: initializing clusters\n", 304 | "Starting iterations...\n", 305 | "Run 1, iteration: 1/100, moves: 0, cost: 6.0\n", 306 | "Init: initializing centroids\n", 307 | "Init: initializing clusters\n", 308 | "Starting iterations...\n", 309 | "Run 2, iteration: 1/100, moves: 1, cost: 6.0\n", 310 | "Init: initializing centroids\n", 311 | "Init: initializing clusters\n", 312 | "Starting iterations...\n", 313 | "Run 3, iteration: 1/100, moves: 2, cost: 4.0\n", 314 | "Init: initializing centroids\n", 315 | "Init: initializing clusters\n", 316 | "Starting iterations...\n", 317 | "Run 4, iteration: 1/100, moves: 1, cost: 6.0\n", 318 | "Init: initializing centroids\n", 319 | "Init: initializing clusters\n", 320 | "Starting iterations...\n", 321 | "Run 5, iteration: 1/100, moves: 0, cost: 6.0\n", 322 | "Best run was number 3\n" 323 | ] 324 | }, 325 | { 326 | "output_type": "display_data", 327 | "data": { 328 | "image/png": "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\n", 329 | "text/plain": [ 330 | "
" 331 | ] 332 | }, 333 | "metadata": { 334 | "needs_background": "light" 335 | } 336 | } 337 | ] 338 | }, 339 | { 340 | "cell_type": "code", 341 | "source": [ 342 | "# Elbow Curve\n", 343 | "# We can see a bend at K=3 in the above graph indicating 3is the optimal number of clusters.\n", 344 | "# Build a model with 3 clusters\n", 345 | "\n", 346 | "# Building the model with 3 clusters\n", 347 | "kmode = KModes(n_clusters=3, init = \"random\", n_init = 5, verbose=1)\n", 348 | "clusters = kmode.fit_predict(data)\n", 349 | "clusters" 350 | ], 351 | "metadata": { 352 | "colab": { 353 | "base_uri": "https://localhost:8080/" 354 | }, 355 | "id": "LuQVfC6SnvcK", 356 | "outputId": "66163801-106e-483a-9b5d-3d5af5657af8" 357 | }, 358 | "execution_count": 4, 359 | "outputs": [ 360 | { 361 | "output_type": "stream", 362 | "name": "stdout", 363 | "text": [ 364 | "Init: initializing centroids\n", 365 | "Init: initializing clusters\n", 366 | "Starting iterations...\n", 367 | "Run 1, iteration: 1/100, moves: 3, cost: 7.0\n", 368 | "Run 1, iteration: 2/100, moves: 0, cost: 7.0\n", 369 | "Init: initializing centroids\n", 370 | "Init: initializing clusters\n", 371 | "Starting iterations...\n", 372 | "Run 2, iteration: 1/100, moves: 0, cost: 7.0\n", 373 | "Init: initializing centroids\n", 374 | "Init: initializing clusters\n", 375 | "Starting iterations...\n", 376 | "Run 3, iteration: 1/100, moves: 2, cost: 6.0\n", 377 | "Run 3, iteration: 2/100, moves: 0, cost: 6.0\n", 378 | "Init: initializing centroids\n", 379 | "Init: initializing clusters\n", 380 | "Starting iterations...\n", 381 | "Run 4, iteration: 1/100, moves: 1, cost: 8.0\n", 382 | "Run 4, iteration: 2/100, moves: 1, cost: 8.0\n", 383 | "Init: initializing centroids\n", 384 | "Init: initializing clusters\n", 385 | "Starting iterations...\n", 386 | "Run 5, iteration: 1/100, moves: 1, cost: 8.0\n", 387 | "Best run was number 3\n" 388 | ] 389 | }, 390 | { 391 | "output_type": "execute_result", 392 | "data": { 393 | "text/plain": [ 394 | "array([1, 0, 2, 0, 1, 0, 2, 0], dtype=uint16)" 395 | ] 396 | }, 397 | "metadata": {}, 398 | "execution_count": 4 399 | } 400 | ] 401 | }, 402 | { 403 | "cell_type": "code", 404 | "source": [ 405 | "# Finally, insert the predicted cluster values in our original dataset.\n", 406 | "\n", 407 | "data.insert(0, \"Cluster\", clusters, True)\n", 408 | "data" 409 | ], 410 | "metadata": { 411 | "colab": { 412 | "base_uri": "https://localhost:8080/", 413 | "height": 328 414 | }, 415 | "id": "-22ofNEXn5KI", 416 | "outputId": "6baff152-5e67-4645-81ec-150b560323f0" 417 | }, 418 | "execution_count": 5, 419 | "outputs": [ 420 | { 421 | "output_type": "execute_result", 422 | "data": { 423 | "text/html": [ 424 | "
\n", 425 | "\n", 438 | "\n", 439 | " \n", 440 | " \n", 441 | " \n", 442 | " \n", 443 | " \n", 444 | " \n", 445 | " \n", 446 | " \n", 447 | " \n", 448 | " \n", 449 | " \n", 450 | " \n", 451 | " \n", 452 | " \n", 453 | " \n", 454 | " \n", 455 | " \n", 456 | " \n", 457 | " \n", 458 | " \n", 459 | " \n", 460 | " \n", 461 | " \n", 462 | " \n", 463 | " \n", 464 | " \n", 465 | " \n", 466 | " \n", 467 | " \n", 468 | " \n", 469 | " \n", 470 | " \n", 471 | " \n", 472 | " \n", 473 | " \n", 474 | " \n", 475 | " \n", 476 | " \n", 477 | " \n", 478 | " \n", 479 | " \n", 480 | " \n", 481 | " \n", 482 | " \n", 483 | " \n", 484 | " \n", 485 | " \n", 486 | " \n", 487 | " \n", 488 | " \n", 489 | " \n", 490 | " \n", 491 | " \n", 492 | " \n", 493 | " \n", 494 | " \n", 495 | " \n", 496 | " \n", 497 | " \n", 498 | " \n", 499 | " \n", 500 | " \n", 501 | " \n", 502 | " \n", 503 | " \n", 504 | " \n", 505 | " \n", 506 | " \n", 507 | " \n", 508 | " \n", 509 | " \n", 510 | " \n", 511 | " \n", 512 | " \n", 513 | "
Clusterhair_coloreye_colorskin_color
person
P11blondeamberfair
P20brunettegraybrown
P32redgreenbrown
P40blackhazelbrown
P51brunetteamberfair
P60blackgraybrown
P72redgreenfair
P80blackhazelfair
\n", 514 | "
" 515 | ], 516 | "text/plain": [ 517 | " Cluster hair_color eye_color skin_color\n", 518 | "person \n", 519 | "P1 1 blonde amber fair\n", 520 | "P2 0 brunette gray brown\n", 521 | "P3 2 red green brown\n", 522 | "P4 0 black hazel brown\n", 523 | "P5 1 brunette amber fair\n", 524 | "P6 0 black gray brown\n", 525 | "P7 2 red green fair\n", 526 | "P8 0 black hazel fair" 527 | ] 528 | }, 529 | "metadata": {}, 530 | "execution_count": 5 531 | } 532 | ] 533 | }, 534 | { 535 | "cell_type": "markdown", 536 | "source": [ 537 | "Inference from the model predictions: P1, P2, P5 are merged as a cluster; P3, P7 are merged; and P4, P6, P8 are merged.\n", 538 | "\n", 539 | "The results of our theoretical approach are in line with the model predictions. 🙌" 540 | ], 541 | "metadata": { 542 | "id": "Ms9uTc-boMTg" 543 | } 544 | } 545 | ] 546 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Welcome to Clustering (Theory & Code) 2 | 3 | ### 01 Unsupervised Learning (Theory) 4 | * What is Unsupervised Learning & Goals of Unsupervised Learning 5 | * Type of Unsupervised Learning: 1.Clustering, 2.Association Rule & 3.Dimensionality Reduction 6 | 7 | ### 02 Clustering (Theory) 8 | * Definition and Application of Clustering 9 | * 4 methods: 1.K Means 2.Hierarchical 3.DBScan & 4.Gaussian Mixture 10 | 11 | ### 03 Euclidean & Manhattan Distance (Theory) 12 | * Two points are near to each other, chances they are similar 13 | * Distance Measure between two points 14 | 1. Euclidean Distance: Under-root of Square distance between two points 15 | 2. Manhattan Distance: Absolute Distance between points 16 | 17 | ### 04 K-Means Clustering (Theory) 18 | * How Algorithim works (Step Wise Calculation) 19 | * Pre-processing required for K Means 20 | * Determining optimal number of K: 1.Profiling Approach & 2.Elbow Method 21 | 22 | ### 05 Elbow Method (Theory) 23 | * Working of Elbow Method with Example 24 | * 3 concepts: 1.Total Error, 2.Variance/Total Squared Error & 3.Within Cluster Sum of Square (WCSS) 25 | 26 | ### 06 K Means Clustering (Python Code) 27 | * Define number of clusters, take centroids and measure distance 28 | * Euclidean Distance : Measure distance between points 29 | * Number of Clusters defined by Elbow Method 30 | * Elbow Method : WCSS vs Number of Cluster 31 | * Silhouette Score : Goodness of Clustering 32 | 33 | ### 07 Hierarchical Clustering (Theory) 34 | * Two Approaches: 1.Agglomerative(Botton-Up) & 2.Divisive(Top-Down) 35 | * Types of Linkages: 36 | 1. Single Linkage - Nearest Neighbour (Minimal intercluster dissimilarity) 37 | 2. Complete Linkage - Farthest Neighbour (Maximal intercluster dissimilarity) 38 | 3. Average Linkage - Average Distance (Mean intercluster dissimilarity) 39 | * Steps in Agglomerative Hierarchical Clustering with Single Linkage 40 | * Determining optimal number of Cluster: Dendogram 41 | 42 | ### 08 Dendogram (Theory) 43 | * Hierarchical relationship between objects 44 | * Optimal number of Clusters for Hierarchical Clustering 45 | 46 | ### 09 Hierarchical Clustering (Python Code) 47 | * Type of HC 48 | 1. Agglomerative : Bottom Up approach 49 | 2. Divisive : Top Down approach 50 | * Number of Clusters defined by Dendogram 51 | * Dendogram : Joining datapoints based on distance & creating clusters 52 | * Linkage : To calculate distance between two points of two clusters 53 | 1. Single linkage : Minimum Distance between two clusters 54 | 2. Complete linkage : Maximum Distance between two clusters 55 | 3. Average linkage : Average Distance between two clusters 56 | 57 | ### 10 DBScan Clustering (Theory) 58 | * Density Based Clustering 59 | * Kmeans & Hierarchical good for compact & well seperated Data 60 | * Both are sensitive to Outliers & Noise 61 | * DBScan overcome all the issue & works well with Outliers 62 | * 2 important parameters - 63 | 1. eps: Distance between 2 points is lower/equal to eps they are neighbours 64 | 2. MinPts: Minimum number of neighbours/data points with eps radius 65 | 66 | ### 11 DBScan Clustering (Python Code) 67 | * No need to give pre-define clusters 68 | * Distance metric is Euclidean Distance 69 | * Need to give 2 parameters 70 | 1. eps : Radius of the circle 71 | 2. min_samples : minimum data points to consider it as clusters 72 | 73 | ### 12 GMM Clustering (Theory) 74 | * Weakness of K Means 75 | * Expectation Maximization(EM) method 76 | 77 | ### 13 Gausian Mixture Model Clustering (Python Code) 78 | * Probablistic Model 79 | * Uses Expectation-Minimization (EM) steps: 80 | 1. E Step : Probability of datapoint of each cluster 81 | 2. M Step : For each cluster,revise parameter based on proabability 82 | 83 | ### 14 Cluster Adjustment (Theory) 84 | * 2 Steps we normally do for Cluster Adjustement 85 | 1. Quality of Clustering (Cardinality & Magnitude) 86 | 2. Performance of Similiarity Measure (Euclidean Distance) 87 | 88 | ### 15 Silhouette Coefficient - Cluster Validation (Theory) 89 | * Clusters are well apart from each other as the silhouette score is closer to 1 90 | * It is a metric used to calculate the goodness of a clustering technique 91 | * Its value ranges from -1 to 1. 92 | 1. 1: Means clusters are well apart from each other and clearly distinguished 93 | 2. 0: Means clusters are indifferent, or distance between clusters is not significant 94 | 3. -1: Means clusters are assigned in the wrong way 95 | 96 | ### 16 Disadvantage & Choosing Right Clustering Method (Theory) 97 | * Disadvantage of each clustering techniques respectively 98 | * Based on the data, which is the right clustering method 99 | 100 | ### 17 Clustering Revision (Theory) 101 | * Short Description of Each Clustering Alogrithim 102 | * Advantage, Disadvantage 103 | * When to use what 104 | 105 | ### 18 Interview Questions on Clustering (Theory) 106 | * Commonly asked question on Clustering 107 | 108 | ### 19 K Modes (Theory) 109 | * For Categorical variable clustering, use K Modes 110 | * It uses the dissimilarities(total mismatch) between data points 111 | * Lesser the dissimilarities, the more our data points are closer 112 | * It uses Mode for most value in the column 113 | 114 | ### 20 K Modes (Python Code) 115 | * K Mode code in Python 116 | --------------------------------------------------------------------------------