{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " Self organizing maps (SOM) \n", "
\n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
\n", "
\n", " Introduction " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Self-organizing maps is a discretized representation of the multidimensional input space of the training samples in a 2D map of nodes and is therefore a method to do dimensionality reduction. \n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "An example of the use of SOM in art:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import HTML\n", "\n", "HTML('')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this algorithm, the map space is defined beforehand, usually as a finite two-dimensional region where nodes are arranged in a regular hexagonal or rectangular grid. There are no lateral connections between nodes within the lattice.\n", "\n", "Each node has a specific topological position (an x, y coordinate in the lattice) and contains a vector of weights of the same dimension as the input vectors. The scheme of SOM is:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![SOM 3](SOM3.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
\n", "
\n", " Algorithm " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Initialize each node’s weights randomly\n", "* Choose a random vector from training data and present it to the SOM\n", "* Calculate the distance between the input vector and the weights of each node, according to " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\\begin{equation*}\n", "D = \\sqrt {\\sum_{i=1}^n{(x_i-W_i)}^2} \n", "\\end{equation*}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compare the distances among all nodes, the lowest value distance is defined as the Best Matching Unit (BMU)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Calculate the neighborhood radius around BMU by " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\\begin{equation*}\n", "\\sigma (t) = \\sigma_0 \\exp \\left(\\frac {-t}{\\lambda}\\right) \n", "\\end{equation*}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\\begin{equation*}\n", "\\lambda = \\frac {n}{ln \\sigma_0} \n", "\\end{equation*}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Where $\\sigma$ $(t)$ is the radius of neighborhood at step $t$, $t$ is the iteration step, $\\sigma_0$ is the initial radius of the complete array nodes, $\\lambda$ is a normalization factor, and $n$ is total number of iterations. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![SOM 4](SOM4.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In each iteration the neighborhood changes of size." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![SOM 5a](SOM5a.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Change the weights of each node in the BMU’s neighborhood in order to become more like the BMU. Nodes closest to the BMU are altered more than the nodes furthest away in the neighborhood according to" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\\begin{equation*}\n", " W (t+1) = W(t) + \\Theta(t) L(t) \\left ( x - W(t) \\right) \n", "\\end{equation*}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\\begin{equation*}\n", "L(t) = L_0 \\exp \\left ( \\frac{-t}{\\lambda} \\right)\n", "\\end{equation*}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\\begin{equation*}\n", "\\Theta (t) = \\exp \\Biggl( \\frac{-d^2}{2 \\sigma^2(t)} \\Biggr) \n", "\\end{equation*}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Where $W(t+1)$ is a new weight, $W(t)$ the old weight, $L_0$ is called learning factor, $d$ is the distance between a neighbor node and BMU, and $\\Theta$ is a factor that takes into account the neighborhood." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Repeat steps for all vectors over enough iterations for convergence" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The node obtains a color according to with the factor $D$ and the chosen vector. If a node is close to a BMU it is similar but it is far away, then it is different. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![SOM6a](SOM6a.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![SOM6b](SOM6b.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
\n", "
\n", " Strengths/Weaknesses " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
\n", "
\n", " Summary " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Unsupervised learning algorithm.\n", "\n", "Used for clustering.\n", "\n", "Dimension reduction." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
\n", "
\n", " Example " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Imagine that you are in a valley where the hight is determined by a fractal. The group of people is spread across the land and everyone wants to stay in sight of the others at similar hight.\n", "In this example, the people is our nodes. We will use the SOM algorithm to make the people gather in clusters.\n", "\n", "You will first find the person with similar hight, and call that person the BMU. Now everyone that is close enought to be seen, will be your local nbh and they will approach the BMU. This local nbh will shrink with time. Notice that when there are abrupt changes on hight the BMU may not be in your local nbh.\n", "\n", "The following algorithm implements the previous stragety, we will use the nbh radius as before but the weights will be updated with the rule $ W(t+1) = W(t) + c \\left ( x - W(t) \\right) $." ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "80ea9d977cb24a9f81fc3b689bed18af", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(IntProgress(value=0, max=500), HTML(value='')))" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "\n", "import numpy as np\n", "from tqdm import tqdm_notebook\n", "import matplotlib.pyplot as plt\n", "import cmath\n", "from copy import copy\n", "\n", "class node():\n", " \"\"\"The points consist of a coordinate and the color.\"\"\"\n", " def __init__(self,x,y,v):\n", " self.c = x+y*1j\n", " self.v = v\n", "\n", "\n", "def mandelbrot( h,w, maxit=500 ):\n", " \"\"\"Returns an image of a variant of the Mandelbrot fractal of size (h,w).\"\"\"\n", " y,x = np.ogrid[ -1.5:1.5:h*1j, -1:2:w*1j ]\n", " c = x+y*1j\n", " z = c\n", " divtime = maxit + np.zeros(z.shape, dtype=int)\n", "\n", " for i in tqdm_notebook(range(maxit)):\n", " z = z**5 + c\n", " diverge = z*np.conj(z) > 2**2 # who is diverging\n", " div_now = diverge & (divtime==maxit) # who is diverging now\n", " divtime[div_now] = i # note when\n", " z[diverge] = 2 # avoid diverging too much\n", "\n", " return divtime\n", "\n", "\n", "Mandel = mandelbrot(500,500)\n", "\n", "fig = plt.figure()\n", "\n", "ax = fig.add_axes([0., 0., 1., 1., ])\n", "# Hide grid lines\n", "ax.grid(False)\n", "ax.axis('off')\n", "# Hide axes ticks\n", "\n", "plt.imshow(Mandel)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This will be the valley." ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [], "source": [ "###Here we define the auxiliary functions \n", "def decay(iteration,totalIterations):\n", " return np.exp(-iteration/totalIterations)\n", "\n", "def findNbh(indexX,indexY,nodes, sigma):# a local NBH of nodes[indexX][indexY] of radius sigma\n", " copyNodes=np.ravel(nodes)\n", " OrderedCopyNodes = sorted(copyNodes, key=lambda item: abs(item.c- nodes[indexX][indexY].c))\n", " ind = 0\n", " initial = OrderedCopyNodes[ind]\n", " while abs(initial.c- nodes[indexX][indexY].c)" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "1db5b32086f843c4a9dd7df1770700fe", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(IntProgress(value=0, max=4), HTML(value='')))" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--In iteration 0 we have radius 100.0\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--In iteration 1 we have radius 31.62277660168379\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--In iteration 2 we have radius 9.999999999999998\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--In iteration 3 we have radius 3.1622776601683786\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "\n", "### We are going to select nodes on the Mandelbrot set\n", "nodes = np.zeros((6,6),dtype=object)\n", "for x_values in range(2,8):\n", " for y_values in range(2,8):\n", " nodes[x_values-2][y_values-2]=node(50*x_values,50*y_values,Mandel[50*x_values,50*y_values])\n", " \n", "fig = plt.figure()\n", "\n", "ax = fig.add_axes([0., 0., 1., 1., ])\n", "# Hide grid lines\n", "ax.grid(False)\n", "ax.axis('off')\n", "# Hide axes ticks\n", "\n", "plt.imshow(Mandel)\n", "\n", "copyNodes = np.ravel(nodes)\n", "for mark in tqdm_notebook(copyNodes):\n", " plt.scatter(mark.c.real, mark.c.imag, s=5, c='red', marker='o')\n", "\n", "plt.show()\n", "\n", "\n", "\n", "### parameters\n", "numberOfIterations = 4\n", "sigma_0=100\n", "L_0=.1\n", "\n", "for iteration in tqdm_notebook(range(numberOfIterations)):\n", " dist = sigma_0*decay(iteration,numberOfIterations/np.log(sigma_0))\n", " print('--In iteration ', iteration,' we have radius ',dist)\n", " for i in range(20):\n", " x_values = np.random.randint(0,6)\n", " y_values = np.random.randint(0,6)\n", " BMUc = findBMU(x_values,y_values,nodes).c\n", " for nearNodes in findNbh(x_values,y_values,nodes, dist):\n", " nearNodes.c = nearNodes.c + L_0*(BMUc-nearNodes.c)\n", " nearNodes.v = Mandel[int(nearNodes.c.real)%500, int(nearNodes.c.imag)%500] \n", " Julia2 = copy(Mandel)\n", " fig = plt.figure()\n", "\n", " ax = fig.add_axes([0., 0., 1., 1., ])\n", " # Hide grid lines\n", " ax.grid(False)\n", " ax.axis('off')\n", " # Hide axes ticks\n", "\n", " plt.imshow(Julia2)\n", "\n", " copyNodes = np.ravel(nodes)\n", " for mark in copyNodes:\n", " plt.scatter(mark.c.real, mark.c.imag, s=5, c='red', marker='o')\n", " plt.show()\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can find other nice 3D representations of SOM in:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "https://demogng.de/js/demogng.html?model=SOM " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
\n", "
\n", " Homework \n", "\n", "This homework is based on https://github.com/ANNetGPGPU/ANNetGPGPU\n", "\n", "Modify the code so that:\n", " \n", " The nodes don't move. \n", "\n", " Instead, after we select a node, we calculate a radius of a nbh and then we change the color (weight) of the pixels in that nbh to the color in the center.\n", " The code should have just a couple of iterations.\n", " On each iteration only 4 nodes are selected randomly.\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Try modifying the background image, use a picture or modify the way we color the local nbh. \n", "![SOM 8](SOM8.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " \n", "Try this code with other images.\n", "
\n", "
\n", "
\n", " References " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "+ http://www.ai-junkie.com/ann/som/som1.html (info)\n", "\n", "+ https://www.youtube.com/watch?v=_Euwc9fWBJw (video)\n", "\n", "+ http://neupy.com/2017/12/09/sofm_applications.html (applications)\n", "\n", "+ http://blog.yhat.com/posts/self-organizing-maps-2.html (python code)\n", "\n", "+ https://demogng.de/js/demogng.html?model=SOM (demo 3D)\n", "\n", "+ https://github.com/ANNetGPGPU/ANNetGPGPU (art application)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "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.6.5" } }, "nbformat": 4, "nbformat_minor": 2 }