Skip to content

Instantly share code, notes, and snippets.

@Mimieam
Created July 12, 2020 18:44
Show Gist options
  • Select an option

  • Save Mimieam/19862b09d9aa80b6bf44e149fc146503 to your computer and use it in GitHub Desktop.

Select an option

Save Mimieam/19862b09d9aa80b6bf44e149fc146503 to your computer and use it in GitHub Desktop.
Untitled
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "Untitled",
"provenance": [],
"collapsed_sections": [],
"authorship_tag": "ABX9TyOjcATCz8nSqQjulzutN+01",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/Mimieam/19862b09d9aa80b6bf44e149fc146503/untitled.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "BbL7M1DDG3My",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 469
},
"outputId": "76886d60-06f1-4bca-f5bf-9f373f5ed6ed"
},
"source": [
"!pip install mglearn"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"Collecting mglearn\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/65/38/8aced26fce0b2ae82c3c87cd3b6105f38ca6d9d51704ecc44aa54473e6b9/mglearn-0.1.9.tar.gz (540kB)\n",
"\u001b[K |████████████████████████████████| 542kB 2.8MB/s \n",
"\u001b[?25hRequirement already satisfied: numpy in /usr/local/lib/python3.6/dist-packages (from mglearn) (1.18.5)\n",
"Requirement already satisfied: matplotlib in /usr/local/lib/python3.6/dist-packages (from mglearn) (3.2.2)\n",
"Requirement already satisfied: scikit-learn in /usr/local/lib/python3.6/dist-packages (from mglearn) (0.22.2.post1)\n",
"Requirement already satisfied: pandas in /usr/local/lib/python3.6/dist-packages (from mglearn) (1.0.5)\n",
"Requirement already satisfied: pillow in /usr/local/lib/python3.6/dist-packages (from mglearn) (7.0.0)\n",
"Requirement already satisfied: cycler in /usr/local/lib/python3.6/dist-packages (from mglearn) (0.10.0)\n",
"Requirement already satisfied: imageio in /usr/local/lib/python3.6/dist-packages (from mglearn) (2.4.1)\n",
"Requirement already satisfied: joblib in /usr/local/lib/python3.6/dist-packages (from mglearn) (0.15.1)\n",
"Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib->mglearn) (2.8.1)\n",
"Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib->mglearn) (1.2.0)\n",
"Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib->mglearn) (2.4.7)\n",
"Requirement already satisfied: scipy>=0.17.0 in /usr/local/lib/python3.6/dist-packages (from scikit-learn->mglearn) (1.4.1)\n",
"Requirement already satisfied: pytz>=2017.2 in /usr/local/lib/python3.6/dist-packages (from pandas->mglearn) (2018.9)\n",
"Requirement already satisfied: six in /usr/local/lib/python3.6/dist-packages (from cycler->mglearn) (1.12.0)\n",
"Building wheels for collected packages: mglearn\n",
" Building wheel for mglearn (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
" Created wheel for mglearn: filename=mglearn-0.1.9-py2.py3-none-any.whl size=582638 sha256=026b9fb5be28ba284cc8cb1eba451936ec0b16f0976a0c1d11f3faddc93afab7\n",
" Stored in directory: /root/.cache/pip/wheels/eb/a6/ea/a6a3716233fa62fc561259b5cb1e28f79e9ff3592c0adac5f0\n",
"Successfully built mglearn\n",
"Installing collected packages: mglearn\n",
"Successfully installed mglearn-0.1.9\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "TXgGiP4V-Aot",
"colab_type": "code",
"colab": {}
},
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.cluster import KMeans\n",
"from sklearn.metrics import silhouette_score, accuracy_score\n",
"from sklearn import metrics\n",
"from time import time\n",
"import mglearn\n",
"# import seaborn as sns\n",
"\n",
"# reading the seed data\n",
"data = pd.read_csv('/content/seeds_dataset.csv', sep=',', header=None)\n",
"colHeaders = [\"area\",\"perimeter\",\"compactness\",\"length_of_kernel\",\"width_of_kernel\",\"asymmetry_coefficient\",\"length_of_kernel_groove\"]\n",
"data.columns = colHeaders + [\"target\"]\n",
"\n",
"\n",
"# It is the percent of the total number of objects(data points) that were classified correctly, in the unit range [0..1].\n",
"def purity_score(y_true, y_pred):\n",
" # compute contingency matrix (also called confusion matrix)\n",
" contingency_matrix = metrics.cluster.contingency_matrix(y_true, y_pred)\n",
" # return purity\n",
" return np.sum(np.amax(contingency_matrix, axis=0)) / np.sum(contingency_matrix) \n",
"\n",
"\n",
"def get_metrics(expected_labels, predicted_labels, model, algo_name):\n",
" # Number of clusters in labels, ignoring noise if present.\n",
" n_clusters_ = len(set(predicted_labels)) - (1 if -1 in predicted_labels else 0)\n",
" n_noise_ = list(predicted_labels).count(-1)\n",
" print(f\"Seed Dataset Clusters metrics using {algo_name}: \")\n",
" print('\\tEstimated number of clusters: %d' % n_clusters_)\n",
" print('\\tEstimated number of noise points: %d' % n_noise_)\n",
" print(\"\\tHomogeneity: %0.3f\" % metrics.homogeneity_score(expected_labels, predicted_labels))\n",
" print(\"\\tCompleteness: %0.3f\" % metrics.completeness_score(expected_labels, predicted_labels))\n",
" print(\"\\tV-measure: %0.3f\" % metrics.v_measure_score(expected_labels, predicted_labels))\n",
" print(\"\\tAdjusted Rand Index: %0.3f\"\n",
" % metrics.adjusted_rand_score(expected_labels, predicted_labels))\n",
" print(\"\\tAdjusted Mutual Information: %0.3f\"\n",
" % metrics.adjusted_mutual_info_score(expected_labels, predicted_labels))\n",
" print(\"\\tSilhouette Coefficient: %0.3f\"\n",
" % metrics.silhouette_score(X, predicted_labels))\n",
" print(\"\\tPurity Score: %0.3f\"\n",
" % purity_score( data['target'], model))"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "wyuluzsY-_42",
"colab_type": "text"
},
"source": [
"Applying Clustering to Kmean and DBSCAN\n",
"\n",
"Kmeans\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "nf_R8_rWlKf8",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 472
},
"outputId": "8f68e759-ac39-42af-a4ae-6d8abc423c00"
},
"source": [
"import pandas as pd\n",
"from sklearn import metrics\n",
"from sklearn.cluster import KMeans\n",
"import matplotlib.pyplot as plt\n",
"\n",
"\n",
"# Setting the independent features (input)\n",
"X = data.iloc[:, [0, 1, 2, 3, 4, 5, 6]].values\n",
"\n",
"# Creating the KMeans object and fitting it to the seed data\n",
"t0 = time()\n",
"seed_kmeans = KMeans(n_clusters=3)\n",
"seed_kmeans.fit(X)\n",
"\n",
"# Predicting the cluster labels\n",
"predicted_model = seed_kmeans.predict(X)\n",
"print(\"done in %0.3fs\" % (time() - t0))\n",
"# Finding the final centroids\n",
"centroids = seed_kmeans.cluster_centers_\n",
"\n",
"# plotting the clusters using area and perimeter\n",
"clusters = np.unique(predicted_model)\n",
"for cluster in clusters: \n",
" row_ix = np.where(predicted_model == cluster)\n",
" plt.scatter(X[row_ix, 0], X[row_ix, 1], label=f\"Cluster {cluster+1}\")\n",
"\n",
"# plt.scatter(X[:, 0], X[:, 1], c=predicted_model)\n",
"\n",
"\n",
"plt.scatter(seed_kmeans.cluster_centers_[:, 0], seed_kmeans.cluster_centers_[:,1], s = 100, c = 'Yellow', label = 'Centroids')\n",
"plt.title('Seed Data clustered using Kmeans')\n",
"plt.legend()\n",
"plt.show()\n",
"\n",
"# metrics - # Evaluating the quality of clusters\n",
"expected_label_values = data.target - 1 # expected cluster labels\n",
"predicted_label_values = seed_kmeans.labels_ # predicted cluster labels\n",
"get_metrics(expected_label_values, predicted_label_values, predicted_model, \"Kmeans\" )\n",
"\n",
"\n",
"\n",
"\n"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"done in 0.028s\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "stream",
"text": [
"Seed Dataset Clusters metrics using Kmeans: \n",
"\tEstimated number of clusters: 3\n",
"\tEstimated number of noise points: 0\n",
"\tHomogeneity: 0.693\n",
"\tCompleteness: 0.696\n",
"\tV-measure: 0.695\n",
"\tAdjusted Rand Index: 0.717\n",
"\tAdjusted Mutual Information: 0.692\n",
"\tSilhouette Coefficient: 0.472\n",
"\tPurity Score: 0.895\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "FEsmatsd3e33",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 472
},
"outputId": "dbe1d4a1-b6a4-43b6-b661-35e5fbab04ef"
},
"source": [
"import pandas as pd\n",
"from sklearn import metrics\n",
"from sklearn.cluster import DBSCAN\n",
"import matplotlib.pyplot as plt\n",
"\n",
"\n",
"X = data.iloc[:, [0, 1, 2, 3, 4, 5, 6]].values\n",
"\n",
"t0 = time()\n",
"seed_dbscan = DBSCAN(eps=0.85, min_samples=15)\n",
"seed_dbscan.fit_predict(X)\n",
"\n",
"# fit model and predict clusters\n",
"predicted_model = seed_dbscan.fit_predict(X)\n",
"print(\"done in %0.3fs\" % (time() - t0))\n",
"\n",
"# plotting the clusters using area and perimeter\n",
"clusters = np.unique(predicted_model)\n",
"for cluster in clusters: \n",
" row_ix = np.where(predicted_model == cluster)\n",
" _label = f\"Cluster {cluster+1}\" if cluster != -1 else \"Noises\"\n",
" plt.scatter(X[row_ix, 0], X[row_ix, 1], label=_label)\n",
"\n",
"\n",
"plt.legend()\n",
"plt.title('Seed Data clustered using DBSCAN')\n",
"plt.show()\n",
"\n",
"\n",
"# metrics - # Evaluating the quality of clusters\n",
"expected_label_values = data.target - 1 # expected cluster labels\n",
"predicted_label_values = seed_dbscan.labels_ # predicted cluster labels\n",
"get_metrics(expected_label_values, predicted_label_values, predicted_model, \"DBSCAN\" )\n"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"done in 0.004s\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "stream",
"text": [
"Seed Dataset Clusters metrics using DBSCAN: \n",
"\tEstimated number of clusters: 3\n",
"\tEstimated number of noise points: 110\n",
"\tHomogeneity: 0.467\n",
"\tCompleteness: 0.435\n",
"\tV-measure: 0.450\n",
"\tAdjusted Rand Index: 0.273\n",
"\tAdjusted Mutual Information: 0.443\n",
"\tSilhouette Coefficient: 0.064\n",
"\tPurity Score: 0.686\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "UjNKiDKF3d6n",
"colab_type": "text"
},
"source": [
""
]
},
{
"cell_type": "code",
"metadata": {
"id": "gO57MHYc_E-F",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 785
},
"outputId": "4d101099-ea9d-4cfc-f345-77d64bbb07f5"
},
"source": [
"# getting the features from the data set - we do not use the target\n",
"X = data.iloc[:, [0, 1, 2, 3, 4, 5, 6]].values\n",
"\n",
"kmeans = KMeans(n_clusters = 3, init = 'k-means++', max_iter = 300, n_init = 10, random_state = 0)\n",
"t0 = time()\n",
"# fit model and predict clusters\n",
"y_kmeans = kmeans.fit_predict(X)\n",
"print(\"done in %0.3fs\" % (time() - t0))\n",
"\n",
"\n",
"clusters = np.unique(y_kmeans)\n",
"print( \"culters = \", clusters)\n",
"for cluster in clusters: \n",
" row_ix = np.where(y_kmeans == cluster)\n",
" plt.scatter(X[row_ix, 0], X[row_ix, 1], label=cluster)\n",
"\n",
"plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:,1], s = 100, c = 'yellow', label = 'Centroids')\n",
"plt.legend()\n",
"plt.title('Seed Data clustered using Kmeans')\n",
"plt.show()\n",
"\n",
"labels_true = data.target - 1\n",
"labels = kmeans.labels_\n",
"print(labels, labels_true)\n",
"# Number of clusters in labels, ignoring noise if present.\n",
"n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)\n",
"n_noise_ = list(labels).count(-1)\n",
"\n",
"print('Estimated number of clusters: %d' % n_clusters_)\n",
"print('Estimated number of noise points: %d' % n_noise_)\n",
"print(\"Homogeneity: %0.3f\" % metrics.homogeneity_score(labels_true, labels))\n",
"print(\"Completeness: %0.3f\" % metrics.completeness_score(labels_true, labels))\n",
"print(\"V-measure: %0.3f\" % metrics.v_measure_score(labels_true, labels))\n",
"print(\"Adjusted Rand Index: %0.3f\"\n",
" % metrics.adjusted_rand_score(labels_true, labels))\n",
"print(\"Adjusted Mutual Information: %0.3f\"\n",
" % metrics.adjusted_mutual_info_score(labels_true, labels))\n",
"print(\"Silhouette Coefficient: %0.3f\"\n",
" % metrics.silhouette_score(X, labels))\n",
"print(\"Purity Score: %0.3f\"\n",
" % purity_score( data['target'] -1, y_kmeans))\n",
"\n",
"\n"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"done in 0.033s\n",
"culters = [0 1 2]\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "stream",
"text": [
"[2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0 2 2 0 2 2 2 2 2 2 0 2 2 2 2 2 2 2 2 2 2\n",
" 1 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0 0 0 0 2 2 2 2 2 0 1 1 1 1\n",
" 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1\n",
" 1 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 2 2 2 1 2 2 2 0 0 0 0 0 0 0 0\n",
" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0\n",
" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0] 0 0\n",
"1 0\n",
"2 0\n",
"3 0\n",
"4 0\n",
" ..\n",
"205 2\n",
"206 2\n",
"207 2\n",
"208 2\n",
"209 2\n",
"Name: target, Length: 210, dtype: int64\n",
"Estimated number of clusters: 3\n",
"Estimated number of noise points: 0\n",
"Homogeneity: 0.693\n",
"Completeness: 0.696\n",
"V-measure: 0.695\n",
"Adjusted Rand Index: 0.717\n",
"Adjusted Mutual Information: 0.692\n",
"Silhouette Coefficient: 0.472\n",
"Purity Score: 0.895\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "_3NempVlDGgF",
"colab_type": "text"
},
"source": [
"DBSCAN\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "6lRvfXoDDJPS",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 659
},
"outputId": "76f1379c-08e8-4a50-9054-da2a229f1a98"
},
"source": [
"from sklearn.cluster import DBSCAN\n",
"\n",
"X = data.iloc[:, [0, 1, 2, 3, 4, 5, 6]].values\n",
"model = DBSCAN(eps=0.4)\n",
"\n",
"t0 = time()\n",
"# fit model and predict clusters\n",
"Y_db = model.fit_predict(X)\n",
"print(\"done in %0.3fs\" % (time() - t0))\n",
"print(model.labels_)\n",
"# retrieve unique clusters\n",
"clusters = np.unique(Y_db)\n",
"# create scatter plot for samples from each cluster\n",
"for cluster in clusters:\n",
"\t# get row indexes for samples with this cluster\n",
"\trow_ix = np.where(Y_db == cluster)\n",
"\t# create scatter of these samples\n",
"\tplt.scatter(X[row_ix, 0], X[row_ix, 1])\n",
"# show the plot\n",
"\n",
"plt.legend()\n",
"plt.title('Seed Data clustered using DBSCAN')\n",
"plt.show()\n",
"\n",
"labels_true = Y_db\n",
"labels = model.labels_\n",
"\n",
"print(set(labels_true), set(labels), model.eps)\n",
"# Number of clusters in labels, ignoring noise if present.\n",
"n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)\n",
"n_noise_ = list(labels).count(-1)\n",
"\n",
"print('Estimated number of clusters: %d' % n_clusters_)\n",
"print('Estimated number of noise points: %d' % n_noise_)\n",
"print(\"Homogeneity: %0.3f\" % metrics.homogeneity_score(labels_true, labels))\n",
"print(\"Completeness: %0.3f\" % metrics.completeness_score(labels_true, labels))\n",
"print(\"V-measure: %0.3f\" % metrics.v_measure_score(labels_true, labels))\n",
"print(\"Adjusted Rand Index: %0.3f\"\n",
" % metrics.adjusted_rand_score(labels_true, labels))\n",
"print(\"Adjusted Mutual Information: %0.3f\"\n",
" % metrics.adjusted_mutual_info_score(labels_true, labels))\n",
"print(\"Silhouette Coefficient: %0.3f\"\n",
" % metrics.silhouette_score(X, labels))\n",
"\n",
"print(\"Purity Score: %0.3f\"\n",
" % purity_score( data['target'], Y_db))\n"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"No handles with labels found to put in legend.\n"
],
"name": "stderr"
},
{
"output_type": "stream",
"text": [
"done in 0.002s\n",
"[-1 -1 0 -1 -1 0 -1 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 -1 -1\n",
" -1 -1 -1 -1 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1\n",
" -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1\n",
" -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1\n",
" -1 -1 -1 -1 -1 -1 -1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1\n",
" -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1\n",
" -1 -1 -1 -1 -1 -1 -1 -1 3 -1 2 4 -1 3 -1 4 -1 -1 3 -1 -1 -1 3 -1\n",
" 2 -1 -1 -1 2 4 -1 -1 4 -1 4 -1 -1 3 3 -1 -1 2 -1 2 -1 -1 -1 2\n",
" -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 2 -1 -1 -1 2 -1 -1 -1]\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "stream",
"text": [
"{0, 1, 2, 3, 4, -1} {0, 1, 2, 3, 4, -1} 0.4\n",
"Estimated number of clusters: 5\n",
"Estimated number of noise points: 176\n",
"Homogeneity: 1.000\n",
"Completeness: 1.000\n",
"V-measure: 1.000\n",
"Adjusted Rand Index: 1.000\n",
"Adjusted Mutual Information: 1.000\n",
"Silhouette Coefficient: -0.402\n",
"Purity Score: 0.471\n"
],
"name": "stdout"
}
]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment