{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "# Clustering: Picking the 'K' hyperparameter\n", "The unsupervised machine learning technique of clustering data into similar groups can be useful and fairly efficient in most cases. The big trick is often how you pick the number of clusters to make (the K hyperparameter). \n", "The number of clusters may vary dramatically depending on the characteristics of the data, the different types of variables (numeric or categorical), how the data is normalized/encoded and the distance metric used.\n", "\n", "\n", "\n", "**For this notebook we're going to focus specifically on the following:**\n", "- Optimizing the number of clusters (K hyperparameter) using Silhouette Scoring\n", "- Utilizing an algorithm (DBSCAN) that automatically determines the number of clusters\n", "\n", "\n", "### Software\n", "- Bro Analysis Tools (BAT): https://github.com/SuperCowPowers/bat\n", "- Pandas: https://github.com/pandas-dev/pandas\n", "- Scikit-Learn: http://scikit-learn.org/stable/index.html\n", "\n", "\n", "\n", "### Techniques\n", "- [One Hot Encoding](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.get_dummies.html)\n", "- [t-SNE](https://distill.pub/2016/misread-tsne/)\n", "- [Kmeans](http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html)\n", "- [Silhouette Score](https://en.wikipedia.org/wiki/Silhouette_(clustering) )\n", "- [DBSCAN](https://en.wikipedia.org/wiki/DBSCAN)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "BAT: 0.3.4\n", "Pandas: 0.23.4\n", "Scikit Learn Version: 0.20.0\n" ] } ], "source": [ "# Third Party Imports\n", "import pandas as pd\n", "import numpy as np\n", "import sklearn\n", "from sklearn.manifold import TSNE\n", "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis\n", "from sklearn.cluster import KMeans, DBSCAN\n", "\n", "# Local imports\n", "import bat\n", "from bat.log_to_dataframe import LogToDataFrame\n", "from bat.dataframe_to_matrix import DataFrameToMatrix\n", "\n", "# Good to print out versions of stuff\n", "print('BAT: {:s}'.format(bat.__version__))\n", "print('Pandas: {:s}'.format(pd.__version__))\n", "print('Scikit Learn Version:', sklearn.__version__)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Successfully monitoring data/http.log...\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
filenamehostid.orig_hid.orig_pid.resp_hid.resp_pinfo_codeinfo_msgmethodorig_fuids...resp_mime_typesresponse_body_lenstatus_codestatus_msgtagstrans_depthuiduriuser_agentusername
ts
2013-09-15 17:44:27.668082-guyspy.com192.168.33.10103154.245.228.191800-GET-...text/html184301Moved Permanently(empty)1CyIaMO7IheOh38Zsi/Mozilla/4.0 (compatible; MSIE 8.0; Windows NT ...-
2013-09-15 17:44:27.731702-www.guyspy.com192.168.33.10103254.245.228.191800-GET-...text/html100631200OK(empty)1CoyZrY2g74UvMMgp4a/Mozilla/4.0 (compatible; MSIE 8.0; Windows NT ...-
2013-09-15 17:44:28.092922-www.guyspy.com192.168.33.10103254.245.228.191800-GET-...text/html55817404Not Found(empty)2CoyZrY2g74UvMMgp4a/wp-content/plugins/slider-pro/css/advanced-sl...Mozilla/4.0 (compatible; MSIE 8.0; Windows NT ...-
2013-09-15 17:44:28.150301-www.guyspy.com192.168.33.10104054.245.228.191800-GET-...text/plain887200OK(empty)1CiCKTz4e0fkYYazBS3/wp-content/plugins/contact-form-7/includes/cs...Mozilla/4.0 (compatible; MSIE 8.0; Windows NT ...-
2013-09-15 17:44:28.150602-www.guyspy.com192.168.33.10104154.245.228.191800-GET-...text/plain10068200OK(empty)1C1YBkC1uuO9bzndRvh/wp-content/plugins/slider-pro/css/slider/adva...Mozilla/4.0 (compatible; MSIE 8.0; Windows NT ...-
\n", "

5 rows × 26 columns

\n", "
" ], "text/plain": [ " filename host id.orig_h id.orig_p \\\n", "ts \n", "2013-09-15 17:44:27.668082 - guyspy.com 192.168.33.10 1031 \n", "2013-09-15 17:44:27.731702 - www.guyspy.com 192.168.33.10 1032 \n", "2013-09-15 17:44:28.092922 - www.guyspy.com 192.168.33.10 1032 \n", "2013-09-15 17:44:28.150301 - www.guyspy.com 192.168.33.10 1040 \n", "2013-09-15 17:44:28.150602 - www.guyspy.com 192.168.33.10 1041 \n", "\n", " id.resp_h id.resp_p info_code info_msg \\\n", "ts \n", "2013-09-15 17:44:27.668082 54.245.228.191 80 0 - \n", "2013-09-15 17:44:27.731702 54.245.228.191 80 0 - \n", "2013-09-15 17:44:28.092922 54.245.228.191 80 0 - \n", "2013-09-15 17:44:28.150301 54.245.228.191 80 0 - \n", "2013-09-15 17:44:28.150602 54.245.228.191 80 0 - \n", "\n", " method orig_fuids ... resp_mime_types \\\n", "ts ... \n", "2013-09-15 17:44:27.668082 GET - ... text/html \n", "2013-09-15 17:44:27.731702 GET - ... text/html \n", "2013-09-15 17:44:28.092922 GET - ... text/html \n", "2013-09-15 17:44:28.150301 GET - ... text/plain \n", "2013-09-15 17:44:28.150602 GET - ... text/plain \n", "\n", " response_body_len status_code status_msg \\\n", "ts \n", "2013-09-15 17:44:27.668082 184 301 Moved Permanently \n", "2013-09-15 17:44:27.731702 100631 200 OK \n", "2013-09-15 17:44:28.092922 55817 404 Not Found \n", "2013-09-15 17:44:28.150301 887 200 OK \n", "2013-09-15 17:44:28.150602 10068 200 OK \n", "\n", " tags trans_depth uid \\\n", "ts \n", "2013-09-15 17:44:27.668082 (empty) 1 CyIaMO7IheOh38Zsi \n", "2013-09-15 17:44:27.731702 (empty) 1 CoyZrY2g74UvMMgp4a \n", "2013-09-15 17:44:28.092922 (empty) 2 CoyZrY2g74UvMMgp4a \n", "2013-09-15 17:44:28.150301 (empty) 1 CiCKTz4e0fkYYazBS3 \n", "2013-09-15 17:44:28.150602 (empty) 1 C1YBkC1uuO9bzndRvh \n", "\n", " uri \\\n", "ts \n", "2013-09-15 17:44:27.668082 / \n", "2013-09-15 17:44:27.731702 / \n", "2013-09-15 17:44:28.092922 /wp-content/plugins/slider-pro/css/advanced-sl... \n", "2013-09-15 17:44:28.150301 /wp-content/plugins/contact-form-7/includes/cs... \n", "2013-09-15 17:44:28.150602 /wp-content/plugins/slider-pro/css/slider/adva... \n", "\n", " user_agent \\\n", "ts \n", "2013-09-15 17:44:27.668082 Mozilla/4.0 (compatible; MSIE 8.0; Windows NT ... \n", "2013-09-15 17:44:27.731702 Mozilla/4.0 (compatible; MSIE 8.0; Windows NT ... \n", "2013-09-15 17:44:28.092922 Mozilla/4.0 (compatible; MSIE 8.0; Windows NT ... \n", "2013-09-15 17:44:28.150301 Mozilla/4.0 (compatible; MSIE 8.0; Windows NT ... \n", "2013-09-15 17:44:28.150602 Mozilla/4.0 (compatible; MSIE 8.0; Windows NT ... \n", "\n", " username \n", "ts \n", "2013-09-15 17:44:27.668082 - \n", "2013-09-15 17:44:27.731702 - \n", "2013-09-15 17:44:28.092922 - \n", "2013-09-15 17:44:28.150301 - \n", "2013-09-15 17:44:28.150602 - \n", "\n", "[5 rows x 26 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Create a Pandas dataframe from the Bro log\n", "http_df = LogToDataFrame('data/http.log')\n", "\n", "# Print out the head of the dataframe\n", "http_df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Our HTTP features are numeric and categorical data\n", "When we look at the http records some of the data is numerical and some of it is categorical so we'll need a way of handling both data types in a generalized way. We have a DataFrameToMatrix class that handles a lot of the details and mechanics of combining numerical and categorical data, we'll use below." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "## Transformers\n", "**We'll now use the Scikit-Learn tranformer class to convert the Pandas DataFrame to a numpy ndarray (matrix). The transformer class takes care of many low-level details**\n", "* Applies 'one-hot' encoding for the Categorical fields\n", "* Normalizes the Numeric fields\n", "* The class can be serialized for use in training and evaluation\n", " * The categorical mappings are saved during training and applied at evaluation\n", " * The normalized field ranges are stored during training and applied at evaluation" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Changing column method to category...\n", "Changing column resp_mime_types to category...\n", "Normalizing column id.resp_p...\n", "Normalizing column request_body_len...\n", "\n", "NOTE: The resulting numpy matrix has 12 dimensions based on one-hot encoding\n", "(150, 12)\n" ] }, { "data": { "text/plain": [ "array([[0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 1., 0.]])" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# We're going to pick some features that might be interesting\n", "# some of the features are numerical and some are categorical\n", "features = ['id.resp_p', 'method', 'resp_mime_types', 'request_body_len']\n", "\n", "# Use the DataframeToMatrix class (handles categorical data)\n", "# You can see below it uses a heuristic to detect category data. When doing\n", "# this for real we should explicitly convert before sending to the transformer.\n", "to_matrix = DataFrameToMatrix()\n", "http_feature_matrix = to_matrix.fit_transform(http_df[features], normalize=True)\n", "\n", "print('\\nNOTE: The resulting numpy matrix has 12 dimensions based on one-hot encoding')\n", "print(http_feature_matrix.shape)\n", "http_feature_matrix[:1]" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# Plotting defaults\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "plt.rcParams['font.size'] = 12.0\n", "plt.rcParams['figure.figsize'] = 14.0, 7.0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "# Silhouette Scoring\n", "\"The silhouette value is a measure of how similar an object is to its own cluster (cohesion) compared to other clusters (separation). The silhouette ranges from -1 to 1, where a high value indicates that the object is well matched to its own cluster and poorly matched to neighboring clusters. If most objects have a high value, then the clustering configuration is appropriate. If many points have a low or negative value, then the clustering configuration may have too many or too few clusters.\"\n", "- https://en.wikipedia.org/wiki/Silhouette_(clustering)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 8, "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.metrics import silhouette_score\n", "\n", "scores = []\n", "clusters = range(2,16)\n", "for K in clusters:\n", " \n", " clusterer = KMeans(n_clusters=K)\n", " cluster_labels = clusterer.fit_predict(http_feature_matrix)\n", " score = silhouette_score(http_feature_matrix, cluster_labels)\n", " scores.append(score)\n", "\n", "# Plot it out\n", "pd.DataFrame({'Num Clusters':clusters, 'score':scores}).plot(x='Num Clusters', y='score')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Silhouette graphs shows that 10 is the 'optimal' number of clusters\n", "- 'Optimal': Human intuition and clustering involves interpretation/pattern finding and is often partially subjective :)\n", "- For large datasets running an exhaustive search can be time consuming\n", "- For large datasets you can often get a large K using max score, so pick the 'knee' of the graph as your K" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "# So we know that the highest (closest to 1) silhouette score is at 10 clusters\n", "kmeans = KMeans(n_clusters=10).fit_predict(http_feature_matrix)\n", "\n", "# TSNE is a great projection algorithm. In this case we're going from 12 dimensions to 2\n", "projection = TSNE().fit_transform(http_feature_matrix)\n", "\n", "# Now we can put our ML results back onto our dataframe!\n", "http_df['cluster'] = kmeans\n", "http_df['x'] = projection[:, 0] # Projection X Column\n", "http_df['y'] = projection[:, 1] # Projection Y Column" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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vK997Wv66U9/2uvze++7fO+919tvvz0kr22gCFAAAADAsFkhaxgx0M56Lnne4KosDQ0NmjhxovLzh6ZnXDgc1vr167V161aVlpbq+OOP7/XYe+65R9dee61mzZql/Px8LV68WG+88UaXKtS1116ryspKFRUVSZKeeuopXXPNNT1e78tf/rJWrFih5cuXq729Xbfccova29vV2to6JK9toAhQAAAAwLB5X9ZtbzAqJK0b1JkTJkzQ1q1bh2yd0H333ad169Zp5syZmj17tp566qlej62rq9PChQtVUVGhiooKVVZWynuvTZs27TpmypQpGT/3zJkz9cADD+jyyy/Xfvvtp61bt+rQQw/dbcrhSMk4QDnn/sk5x5bJAAAAQMbaNPidg/KS5w/cCSecoMLCQi1btiyj40tKSrpUdDo7O1VfX7/r5xkzZuiRRx7Rli1btGjRIp177rnauXOnnNu9sjZlyhT96le/UlNT065bW1ubTjzxxF3H9HReX84991y9/fbbamho0A033KDa2lrNnj17QNcYKgOpQOVJ+oNz7m3n3CLnXHYiHwAAALDXKJI02CpQZ/L8gSsvL9eNN96o73//+1q2bJlaW1sVj8f1zDPP6Ec/+tFuxx988MGKRqN6+umnFY/HddNNNykWi+16/KGHHlJ9fb1CoZAqKqyiFgqFVFVVpVAopA8//HDXsd/73vd06623au3atZKsocXjjz8+qNcReO2113aFuksuuURf//rXNXPmzD265mBlHKC891dK2l/SNZKOkvSuc+4559y3nHOlwzVAAAAAYO91iKSmQZ7bJOngQT/zD3/4Q91222266aabVFVVpSlTpuiOO+7QmWeeudux5eXluuuuu3TxxRdr8uTJKikp6TJF7tlnn9Vhhx2m0tJSLVy4UI8++qiKiopUXFys6667TieddJIqKir0yiuv6KyzztKiRYt0/vnna9y4cTr88MP1zDPP9DnW+fPn65Zbbun18WBK4CGHHKLx48fr17/+9aD/XPaUS+9oMaATnTtM0sOSjpDUKulRSf/gvd/U54nDoKamxq9evXqknxYAAABj2LvvvqtZs2b1c1StpCWyTXIHMm3NyzrwLZFUPfDBjWG9vS/Oude89zV7ev0BNZFwzo1zzv2dc+55SS9IWilpjqRZknZI6jtaAgAAAGPKtORt2wDP25Z2LnLJ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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Now use dataframe group by cluster\n", "cluster_groups = http_df.groupby('cluster')\n", "\n", "# Plot the Machine Learning results\n", "colors = {-1:'black', 0:'green', 1:'blue', 2:'red', 3:'orange', 4:'purple', 5:'brown', 6:'pink', 7:'lightblue', 8:'grey', 9:'yellow'}\n", "fig, ax = plt.subplots()\n", "for key, group in cluster_groups:\n", " group.plot(ax=ax, kind='scatter', x='x', y='y', alpha=0.5, s=250,\n", " label='Cluster: {:d}'.format(key), color=colors[key])" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Cluster 0: 7 observations\n", " id.resp_p method resp_mime_types request_body_len\n", "ts \n", "2013-09-15 17:48:03.495720 8080 GET text/plain 0\n", "2013-09-15 17:48:04.495720 8080 GET text/plain 0\n", "2013-09-15 17:48:04.495720 8080 GET text/plain 0\n", "\n", "Cluster 1: 40 observations\n", " id.resp_p method resp_mime_types request_body_len\n", "ts \n", "2013-09-15 17:44:28.150301 80 GET text/plain 0\n", "2013-09-15 17:44:28.150602 80 GET text/plain 0\n", "2013-09-15 17:44:28.192918 80 GET text/plain 0\n", "\n", "Cluster 2: 22 observations\n", " id.resp_p method resp_mime_types request_body_len\n", "ts \n", "2013-09-15 17:44:30.064238 80 GET image/jpeg 0\n", "2013-09-15 17:44:30.104156 80 GET image/jpeg 0\n", "2013-09-15 17:44:30.725123 80 GET image/jpeg 0\n", "\n", "Cluster 3: 15 observations\n", " id.resp_p method resp_mime_types request_body_len\n", "ts \n", "2013-09-15 17:44:30.061532 80 GET image/png 0\n", "2013-09-15 17:44:30.061532 80 GET image/png 0\n", "2013-09-15 17:44:30.063460 80 GET image/png 0\n", "\n", "Cluster 4: 14 observations\n", " id.resp_p method resp_mime_types request_body_len\n", "ts \n", "2013-09-15 17:44:31.386100 80 GET - 0\n", "2013-09-15 17:44:31.417193 80 GET - 0\n", "2013-09-15 17:44:31.471002 80 GET - 0\n", "\n", "Cluster 5: 10 observations\n", " id.resp_p method resp_mime_types request_body_len\n", "ts \n", "2013-09-15 17:48:10.495720 80 POST text/plain 69823\n", "2013-09-15 17:48:11.495720 80 POST text/plain 69993\n", "2013-09-15 17:48:12.495720 80 POST text/plain 71993\n", "\n", "Cluster 6: 14 observations\n", " id.resp_p method resp_mime_types request_body_len\n", "ts \n", "2013-09-15 17:44:27.668082 80 GET text/html 0\n", "2013-09-15 17:44:27.731702 80 GET text/html 0\n", "2013-09-15 17:44:28.092922 80 GET text/html 0\n", "\n", "Cluster 7: 8 observations\n", " id.resp_p method resp_mime_types request_body_len\n", "ts \n", "2013-09-15 17:44:47.464161 80 GET application/x-dosexec 0\n", "2013-09-15 17:44:47.464161 80 GET application/x-dosexec 0\n", "2013-09-15 17:44:49.221978 80 GET application/x-dosexec 0\n", "\n", "Cluster 8: 13 observations\n", " id.resp_p method resp_mime_types request_body_len\n", "ts \n", "2013-09-15 17:44:40.230550 80 GET application/pdf 0\n", "2013-09-15 17:44:40.230550 80 GET application/pdf 0\n", "2013-09-15 17:44:40.230550 80 GET application/pdf 0\n", "\n", "Cluster 9: 7 observations\n", " id.resp_p method resp_mime_types request_body_len\n", "ts \n", "2013-09-15 17:48:06.495720 80 OPTIONS text/plain 0\n", "2013-09-15 17:48:07.495720 80 OPTIONS text/plain 0\n", "2013-09-15 17:48:08.495720 80 OPTIONS text/plain 0\n" ] } ], "source": [ "# Now print out the details for each cluster\n", "pd.set_option('display.width', 1000)\n", "for key, group in cluster_groups:\n", " print('\\nCluster {:d}: {:d} observations'.format(key, len(group)))\n", " print(group[features].head(3))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "# Look Ma... No K!\n", "### DBSCAN\n", "Density-based spatial clustering is a data clustering algorithm that given a set of points in space, groups points that are closely packed together and marking low-density regions as outliers.\n", "\n", "- You don't have to pick K\n", "- There are other hyperparameters (eps and min_samples) but defaults often work well\n", "- https://en.wikipedia.org/wiki/DBSCAN\n", "- Hierarchical version: https://github.com/scikit-learn-contrib/hdbscan" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of Clusters: 10\n" ] } ], "source": [ "# Now try DBScan\n", "http_df['cluster_db'] = DBSCAN().fit_predict(http_feature_matrix)\n", "print('Number of Clusters: {:d}'.format(http_df['cluster_db'].nunique()))" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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HG3atGnARXf3pbGxUddcc41uvfVWnXvuuSooKFB2drY+8YlP6Ac/+EGf7desWaMDDzywx33z58/Xn//8Z0nS+vXrVVFRoaKiIs2cOVOXX365JOm0006TJJWUlKiwsFDPPPOMJOmuu+7S4sWLNX36dJ111lmqqqrae1znnG699VYtWLBACxYs0L7U19dr9+7duuiii+Sc03HHHafFixfr1VdfHdbvZqQyKkB57/dIekDStc65AufcyZI+Jenu9LYMmEKG+UYNAAD6amxsVGNjo3Jzc4e0X25u7t59h+OZZ55RPB7XOeecM6z9e1uxYoVWrFih3bt3680339Ty7sq7TzzxhCSpoaFBzc3NOvHEE/Xggw/qhhtu0AMPPKCamhqdeuqpuvDCC3scb/Xq1Vq3bt3eEPTxj39c3/3ud/s998yZM3XhhRfqZz/7mTo7O/XMM8+oqqpKp5xyyqg8t6HKqADV7cuS8iS9L+nXkv7Ze08PFDBeqPwDAMCoqaysVCQSGXJlPeecIpGIKisrh3Xeuro6zZgxQ9Ho6NSMy87O1tatW1VbW6vCwkJ98IMfHHDb2267TVdeeaUWL16saDSqq666Shs3buzRC3XllVeqtLRUeXl5kqSHHnpI3/jGwEW3L7zwQl177bWKxWI69dRTdf3112vOnDmj8tyGKuMClPe+3nv/ae99gfd+LovoAuMrmp8/4mNEcnJGoSUAAEx8dXV1Q+59CuTm5qqurm5Y+5aVlam2tnbUijvceeed2rJlixYtWqTjjjtODz300IDbVlVVacWKFSopKVFJSYlKS0vlvVd1dfXebYYSfl577TVdcMEF+uUvf6m2tja98sor+v73v6+H0zTnOuMCFID0+sC55474GPM+9rFRaAkAABNfR0eHIpHhfeSORCLDDkAnnniiYrGYVq9endL2BQUFakmaB93Z2amampq9Py9YsEC//vWv9f7772vlypU6//zztWfPnn571ubMmaPbb79dDQ0Ne2+tra066aST9m4zlB65l19+WQsXLtRZZ52lSCSiQw89VB/72Mf0yCOPpHyM0USAAtDDkd2TQkfimG99axRaAgDAxBeNRtXV1TWsfbu6uoY9BK+4uFjXXnutvvKVr2j16tVqaWlRe3u7HnnkEV1xxRV9tl+4cKHi8bgefvhhtbe367rrrlMikdj7+D333KOamhpFIhGVlJRIsoBXXl6uSCSit956a++2X/rSl3TjjTfqlVdsFk5jY6N++9vfDut5SNLRRx+tN954Q48//ri893rzzTf10EMP6cgjjxz2MUeCAAWgh5ycHB183nnD3n/uWWexiC4AAN3KysoUj8eHtW88HldZWdmwz/31r39dN910k6677jqVl5drzpw5uuWWW/TpT3+6z7bFxcX68Y9/rM9//vOaPXu2CgoKelTle/TRR3X44YersLBQK1as0G9+85u9JdevvvpqnXzyySopKdGzzz6rc845RytXrtQFF1ygoqIiLVmyZJ+9RWeffbZuuOGGfh87+OCDddddd+nSSy9VUVGRTj/9dJ133nn6/Oc/P+zfzUi44ZZGzCQVFRV+w4YN6W4GMKn86XOfU826dUPap2TJEn303nvHqEUAAGSWzZs3a/HixYNu09DQoDVr1qi4uHhIw9a892psbNSyZcv29vggNQO9Ls655733FSM9Pj1QAPr1obvuGlJP1NyzziI8AQDQS3FxsYqLi4fcCxWPx/fui8xCgAIwoBOuvVbn/+1vmrd8udTfBNhIRPPPOUfnvfCCTrnppvFvIAAAGc45p6VLl6qtrU3t7e0p7dPe3q62tjYtXbp0yOXPMfZGpzA8gEkrJydHJ3/72zr5299Od1MAAJiQSktLdfzxx2v9+vXKyclRbm5uv8HIe694PK62tjYdf/zxKi0tTUNrsS8EKAAAAGCMzZo1S6eeeqo2bdqkxsZGRSIR5ebmKhKJqKurS/F4XF1dXSouLtYJJ5xAeMpgBCgAAABgHJSWlmrZsmVqbGxUZWWl6urq1NHRoWg0qrlz52r+/PlDLjaB8UeAAgAAAMaJc04lJSU66qij0t0UDBNFJAAAAAAgRfRAAQAAAOPGS6qStFbS65JaJeVJOlTS6ZLmSWIIXyYjQAEAAADjYquku2UBKltSiaRcSe2SnpL0V1mAukjSIWPemlWrVmnr1q265557xvxckwlD+AAAAIAx94Kk6yXtkoWk2ZIKJMW6/zu7+/5d3du9MCpn/dWvfqWKigoVFhZq1qxZOvvss/XUU0+NyrElqbKyUs45dXR0jNox+/Of//mfWrJkiQoLC3XSSSfp1VdfHdPzDYYABQAAAIyprZJ+JKlcUqkGHqLnuh8vl3RL937Dd9NNN+myyy7TVVddpZ07d2rbtm368pe/rAcffHBExx1NqQSvN954Q5/97Gd12223qaGhQZ/4xCf0yU9+csxD20AIUAAAAMCY8bJhe9Mk5ae4T76kwu79/LDO2tjYqGuuuUa33nqrzj33XBUUFCg7O1uf+MQn9IMf/KDP9mvWrNGBBx7Y47758+frz3/+syRp/fr1qqioUFFRkWbOnKnLL79cknTaaadJkkpKSlRYWKhnnnlGknTXXXdp8eLFmj59us466yxVVVXtPa5zTrfeeqsWLFigBQsW7PO5/PGPf9Spp56qU045RdFoVCtXrlR1dbXWrl07rN/NSBGgAAAAgDFT1X2bPsT9piftO3TPPPOM4vG4zjnnnGHt39uKFSu0YsUK7d69W2+++aaWL18uSXriiSckSQ0NDWpubtaJJ56oBx98UDfccIMeeOAB1dTU6NRTT9WFF17Y43irV6/WunXr9g7F+/jHP67vfve7A57fe9/j3957vfzyy6Py3IaKAAUAAACMmbWyghFDraznuvcbXi9LXV2dZsyYoWh0dGrGZWdna+vWraqtrVVhYaE++MEPDrjtbbfdpiuvvFKLFy9WNBrVVVddpY0bN/bohbryyitVWlqqvLw8SdJDDz2kb3zjG/0e78wzz9TatWu1Zs0atbW16YYbblBbW5taWlpG5bkNFQEKAAAAGDOvy6rtDUeJpC3D2rOsrEy1tbWjNk/ozjvv1JYtW7Ro0SIdd9xxeuihhwbctqqqSitWrFBJSYlKSkpUWloq772qq6v3bjNnzpyUz71o0SL94he/0Fe/+lXNmjVLtbW1Ouyww/oMORwvKQco59z/cs6xZDIAAACQslYNf+WgrO79h+7EE09ULBbT6tWrU9q+oKCgR49OZ2enampq9v68YMEC/frXv9b777+vlStX6vzzz9eePXvkXN+etTlz5uj2229XQ0PD3ltra6tOOumkvdv0t99gzj//fL388suqq6vTd77zHVVWVuq4444b0jFGy1B6oLIk/dE597JzbqVzLj2RDwAAAJgw8iQNtxeos3v/oSsuLta1116rr3zlK1q9erVaWlrU3t6uRx55RFdccUWf7RcuXKh4PK6HH35Y7e3tuu6665RIJPY+fs8996impkaRSEQlJdajFolEVF5erkgkorfeemvvtl/60pd044036pVXXpFkBS1++9vfDut5BJ5//vm9oe6SSy7RJz/5SS1a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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Now use dataframe group by cluster\n", "cluster_groups = http_df.groupby('cluster_db')\n", "\n", "# Plot the Machine Learning results\n", "fig, ax = plt.subplots()\n", "for key, group in cluster_groups:\n", " group.plot(ax=ax, kind='scatter', x='x', y='y', alpha=0.5, s=250,\n", " label='Cluster: {:d}'.format(key), color=colors[key])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "# DBSCAN automagically determined 10 clusters!\n", "So obviously we got a bit lucky here and for different datasets with different feature distributions DBSCAN may not give you the optimal number of clusters right off the bat. There are two hyperparameters that can be tweeked but like we said the defaults often work well. See the DBSCAN and Hierarchical DBSCAN links for more information.\n", "\n", "- https://en.wikipedia.org/wiki/DBSCAN\n", "- Hierarchical version: https://github.com/scikit-learn-contrib/hdbscan\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "## Wrap Up\n", "Well that's it for this notebook, given the usefulness and relatively efficiency of clustering it a good technique to include in your toolset. Understanding the K hyperparameter and how to determine optimal K (or not if you're using DBSCAN) is a good trick to know.\n", "\n", "If you liked this notebook please visit [SCP Labs](https://github.com/SuperCowPowers/scp-labs) for more notebooks and examples, or visit our company page for consulting and development services [SuperCowPowers](https://www.supercowpowers.com)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n" ], "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# This cell is simply for adding some CSS (Ignore it :)\n", "from IPython.core.display import HTML\n", "def css_styling():\n", " styles = open(\"styles/custom.css\", \"r\").read()\n", " return HTML(styles)\n", "css_styling()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.6" } }, "nbformat": 4, "nbformat_minor": 1 }