{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Sebastian Raschka, 2016 \n", "`mlxtend`, a library of extension and helper modules for Python's data analysis and machine learning libraries\n", "\n", "- GitHub repository: https://github.com/rasbt/mlxtend\n", "- Documentation: http://rasbt.github.io/mlxtend/\n", "\n", "View this page in [jupyter nbviewer](http://nbviewer.ipython.org/github/rasbt/mlxtend/blob/master/docs/sources/_ipynb_templates/regressor/linear_regression.ipynb)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Sebastian Raschka \n", "last updated: 2016-06-26 \n", "\n", "CPython 3.5.1\n", "IPython 4.2.0\n", "\n", "matplotlib 1.5.1\n", "numpy 1.11.0\n", "scipy 0.17.1\n", "mlxtend 0.4.2.dev0\n" ] } ], "source": [ "%load_ext watermark\n", "%watermark -a 'Sebastian Raschka' -u -d -v -p matplotlib,numpy,scipy,mlxtend" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Kmeans" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A implementation of k-means clustering." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "> from mlxtend.cluster import Kmeans" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Overview" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Clustering falls into the category of unsupervised learning, a subfield of machine learning where the ground truth labels are not available to us in real-world applications. In clustering, our goal is to group samples by similarity (in k-means: Euclidean distance).\n", "\n", "The k-means algorithms can be summarized as follows:\n", "\n", "1. Randomly pick k centroids from the sample points as initial cluster centers.\n", "2. Assign each sample to the nearest centroid $\\mu(j), \\; j \\in {1,...,k}$.\n", "3. Move the centroids to the center of the samples that were assigned to it.\n", "4. Repeat steps 2 and 3 until the cluster assignments do not change or a user-defined tolerance or a maximum number of iterations is reached." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### References\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- MacQueen, J. B. (1967). [Some Methods for classification and Analysis of Multivariate Observations](http://projecteuclid.org/euclid.bsmsp/1200512992). Proceedings of 5th Berkeley Symposium on Mathematical Statistics and Probability. University of California Press. pp. 281–297. MR 0214227. Zbl 0214.46201. Retrieved 2009-04-07." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Examples" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Example 1 - Three Blobs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Load some sample data:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "from mlxtend.data import three_blobs_data\n", "\n", "X, y = three_blobs_data()\n", "plt.scatter(X[:, 0], X[:, 1], c='white')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Compute the cluster centroids:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Iteration: 2/50 | Elapsed: 00:00:00 | ETA: 00:00:00" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Iterations until convergence: 2\n", "Final centroids:\n", " [[-1.5947298 2.92236966]\n", " [ 2.06521743 0.96137409]\n", " [ 0.9329651 4.35420713]]\n" ] } ], "source": [ "from mlxtend.cluster import Kmeans\n", "\n", "km = Kmeans(k=3, \n", " max_iter=50, \n", " random_seed=1, \n", " print_progress=3)\n", "\n", "km.fit(X)\n", "\n", "print('Iterations until convergence:', km.iterations_)\n", "print('Final centroids:\\n', km.centroids_)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Visualize the cluster memberships:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "y_clust = km.predict(X)\n", "\n", "plt.scatter(X[y_clust == 0, 0],\n", " X[y_clust == 0, 1],\n", " s=50,\n", " c='lightgreen',\n", " marker='s',\n", " label='cluster 1')\n", "\n", "plt.scatter(X[y_clust == 1,0],\n", " X[y_clust == 1,1],\n", " s=50,\n", " c='orange',\n", " marker='o',\n", " label='cluster 2')\n", "\n", "plt.scatter(X[y_clust == 2,0],\n", " X[y_clust == 2,1],\n", " s=50,\n", " c='lightblue',\n", " marker='v',\n", " label='cluster 3')\n", "\n", "\n", "plt.scatter(km.centroids_[:,0],\n", " km.centroids_[:,1],\n", " s=250,\n", " marker='*',\n", " c='red',\n", " label='centroids')\n", "\n", "plt.legend(loc='lower left',\n", " scatterpoints=1)\n", "plt.grid()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## API" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "## Kmeans\n", "\n", "*Kmeans(k, max_iter=10, convergence_tolerance=1e-05, random_seed=None, print_progress=0)*\n", "\n", "K-means clustering class.\n", "\n", " Added in 0.4.1dev\n", "\n", "**Parameters**\n", "\n", "- `k` : int\n", "\n", " Number of clusters\n", "\n", "- `max_iter` : int (default: 10)\n", "\n", " Number of iterations during cluster assignment.\n", " Cluster re-assignment stops automatically when the algorithm\n", " converged.\n", "\n", "- `convergence_tolerance` : float (default: 1e-05)\n", "\n", " Compares current centroids with centroids of the previous iteration\n", " using the given tolerance (a small positive float)to determine\n", " if the algorithm converged early.\n", "\n", "- `random_seed` : int (default: None)\n", "\n", " Set random state for the initial centroid assignment.\n", "\n", "- `print_progress` : int (default: 0)\n", "\n", " Prints progress in fitting to stderr.\n", " 0: No output\n", " 1: Iterations elapsed\n", " 2: 1 plus time elapsed\n", " 3: 2 plus estimated time until completion\n", "\n", "**Attributes**\n", "\n", "- `centroids_` : 2d-array, shape={k, n_features}\n", "\n", " Feature values of the k cluster centroids.\n", "\n", "- `custers_` : dictionary\n", "\n", " The cluster assignments stored as a Python dictionary;\n", " the dictionary keys denote the cluster indeces and the items are\n", " Python lists of the sample indices that were assigned to each\n", " cluster.\n", "\n", "- `iterations_` : int\n", "\n", " Number of iterations until convergence.\n", "\n", "### Methods\n", "\n", "
\n", "\n", "*fit(X, init_params=True)*\n", "\n", "Learn model from training data.\n", "\n", "**Parameters**\n", "\n", "- `X` : {array-like, sparse matrix}, shape = [n_samples, n_features]\n", "\n", " Training vectors, where n_samples is the number of samples and\n", " n_features is the number of features.\n", "\n", "- `init_params` : bool (default: True)\n", "\n", " Re-initializes model parameters prior to fitting.\n", " Set False to continue training with weights from\n", " a previous model fitting.\n", "\n", "**Returns**\n", "\n", "- `self` : object\n", "\n", "\n", "
\n", "\n", "*predict(X)*\n", "\n", "Predict targets from X.\n", "\n", "**Parameters**\n", "\n", "- `X` : {array-like, sparse matrix}, shape = [n_samples, n_features]\n", "\n", " Training vectors, where n_samples is the number of samples and\n", " n_features is the number of features.\n", "\n", "**Returns**\n", "\n", "- `target_values` : array-like, shape = [n_samples]\n", "\n", " Predicted target values.\n", "\n", "\n" ] } ], "source": [ "with open('../../api_modules/mlxtend.cluster/Kmeans.md', 'r') as f:\n", " print(f.read())" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "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.5.1" } }, "nbformat": 4, "nbformat_minor": 0 }