Skip to content

Instantly share code, notes, and snippets.

@bistaumanga
Created February 28, 2014 18:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bistaumanga/9276217 to your computer and use it in GitHub Desktop.
Save bistaumanga/9276217 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": "LOF"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "heading",
"level": 1,
"metadata": {},
"source": "Improving performance of Local outlier factor with KD-Trees"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Local outlier factor (LOF) is an outlier detection algorithm, that detects outliers based on comparing local density of data instance with its neighbors. It does so to decide if data instance belongs to region of similar density. It can detect an outlier in a dataset, for which number of clusters is unknown, and clusters are of different density and size. It's inspired from KNN (K-Nearest Neighbors) algorithm, and is widely used. There is a [R implemantation available.](http://www.rdatamining.com/examples/outlier-detection)"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "The naive approach to do this is to form all pair euclidan distance matrix, and then run knn query to proceed further. But this approach just sucks, as it is $\\Theta(n^2)$ in terms of both space and time complexity. But, this can be improvd with [KDTrees.](http://en.wikipedia.org/wiki/K-d_tree), and already its [implementation](http://scikit-learn.org/stable/modules/neighbors.html) exists in python, thanks to scipy, so lets use this to find outliers.\n"
},
{
"cell_type": "heading",
"level": 4,
"metadata": {},
"source": "Synthetic dataset"
},
{
"cell_type": "code",
"collapsed": false,
"input": "%pylab inline\nimport numpy as np\nnp.random.seed(2) # to reproduce the result",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "Populating the interactive namespace from numpy and matplotlib\n"
},
{
"output_type": "stream",
"stream": "stderr",
"text": "WARNING: pylab import has clobbered these variables: ['dist']\n`%pylab --no-import-all` prevents importing * from pylab and numpy\n"
}
],
"prompt_number": 229
},
{
"cell_type": "code",
"collapsed": false,
"input": "dim = 2 # number of dimensions of dataset = 2\n# cluster of normal random variable moderately dense\ndata1 = np.random.np.random.multivariate_normal([0, 1500], [[100000, 0], [0, 100000]], 2000)\n\n# very dense\ndata2 = np.random.np.random.multivariate_normal([2000, 0], [[10000, 0], [0, 10000]], 2500)\n\n# sparse\ndata3 = np.random.np.random.multivariate_normal([2500, 2500], [[100000, 0], [0, 100000]], 500)\n\n# mix the three dataset and shuffle\ndata = np.vstack((np.vstack((data1, data2)), data3))\nnp.random.shuffle(data)\n\n# add some noise : zipf is skewed distribution and can have extreme values(outliers)\nzipf_alpha = 2.25\nnoise = np.random.zipf(zipf_alpha, (5000,dim)) * np.sign((np.random.randint(2, size = (5000, dim)) - 0.5))\ndata += noise",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 230
},
{
"cell_type": "heading",
"level": 4,
"metadata": {},
"source": "Naive approach to LOF"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Pairwise Euclidean distance calculation with DistanceMetric implementation in scikit-learn. In this, we just compute all-pair euclidean distance, i.e. $d(i, j) = \\|x(i)-x(j)\\|_2$."
},
{
"cell_type": "code",
"collapsed": false,
"input": "from sklearn.neighbors import DistanceMetric\n # distance between points\nimport time\ntic = time.time()\ndist = DistanceMetric.get_metric('euclidean').pairwise(data)\nprint '++ took %g msecs for Distance computation' % ((time.time() - tic)* 1000)",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "++ took 740 msecs for Distance computation\n"
}
],
"prompt_number": 231
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Performing KNN query.In this step, the nearest k neighbors are identified $N_k(i)$, and radius is the distance of k-th rearest neighbor of a datapoint.\n$$ r(i) = \\max_{k \\in N_k(i)} d(i, k) $$"
},
{
"cell_type": "code",
"collapsed": false,
"input": "tic = time.time()\nk = 17 # number of neighbors to consider\n# get the radius for each point in dataset (distance to kth nearest neighbor)\n# radius is the distance of kth nearest point for each point in dataset \nidx_knn = np.argsort(dist, axis=1)[:,1 : k + 1] # by row' get k nearest neighbour \nradius = np.linalg.norm(data - data[idx_knn[:, -1]], axis = 1) # radius\nprint '+++ took %g msecs for KNN Querying' % ((time.time() - tic)* 1000)",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "+++ took 4800 msecs for KNN Querying\n"
}
],
"prompt_number": 232
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Then LRD(Local Reachability distance) is calculated. For this, first reach distance $rd(i, j)$ is computed between point concern $x(i)$ and its neighbors $ j:j\\in N_k(i)$, which is the maximum of euclidean distance or radius $r(i)$ of point concerned. Then, LRD is the inverse of mean of reach distance of all k-neighbors of each point.\n$$ rd(i, j) = \\max{\\{d(i, j), r(i) }\\} for\\ j\\in N_k(i) $$\n$$LRD(i) = \\frac{|N_k(i)|}{ \\sum_{j \\in N_k(i) }{rd(i, j)}} $$"
},
{
"cell_type": "code",
"collapsed": false,
"input": "# calculate the local reachability density\ntic = time.time()\nLRD = []\nfor i in range(idx_knn.shape[0]):\n LRD.append(np.mean(np.maximum(dist[i, idx_knn[i]], radius[idx_knn[i]])))\nprint '++++ took %g msecs for LRD computation' % ((time.time() - tic)* 1000)",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "++++ took 429 msecs for LRD computation\n"
}
],
"prompt_number": 233
},
{
"cell_type": "markdown",
"metadata": {},
"source": "finally, the outlier score $LOF$ is calsulated.\n$$ LOF(i) = \\frac { \\sum_{j \\in N_k(i)} {\\frac{LRD(j)}{LRD(i)} }} { |N_k(i)|} $$"
},
{
"cell_type": "code",
"collapsed": false,
"input": "# calculating the outlier score\ntic = time.time()\nrho = 1. / np.array(LRD) # inverse of density\noutlier_score = np.sum(rho[idx_knn], axis = 1)/ np.array(rho, dtype = np.float16)\noutlier_score *= 1./k\nprint '+++++ took %g msecs for Outlier scoring' % ((time.time() - tic)* 1000)",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "+++++ took 9.99999 msecs for Outlier scoring\n"
}
],
"prompt_number": 234
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Now lets se the histogram of Outlier score, to choose the optimal threshold to decid weather a data-point is outlier is not."
},
{
"cell_type": "code",
"collapsed": false,
"input": "weights = np.ones_like(outlier_score)/outlier_score.shape[0] # to normalize the histogram to probability plot\nhist(outlier_score, bins = 50, weights = weights, histtype = 'stepfilled', color = 'cyan')\ntitle('Distribution of outlier score')",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 235,
"text": "<matplotlib.text.Text at 0x36030588>"
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\n/wBQ63mQKpchMwAAAABJRU5ErkJggg==\n",
"text": "<matplotlib.figure.Figure at 0x359e0860>"
}
],
"prompt_number": 235
},
{
"cell_type": "markdown",
"metadata": {},
"source": "It can be observd that, the optimal outlier score threshold to decide weather a data-point is outlier is outlier or not is around 2 for most of the cases, so lets use it to see our sesults."
},
{
"cell_type": "code",
"collapsed": false,
"input": "threshold = 2.\n# plot non outliers as green\nscatter(data[:, 0], data[:, 1], c = 'green', s = 10, edgecolors='None', alpha=0.5)\n# find the outliers and plot te outliers\nidx = np.where(outlier_score > threshold)\nscatter(data[idx, 0], data[idx, 1], c = 'red', s = 10, edgecolors='None', alpha=0.5)\n",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 236,
"text": "<matplotlib.collections.PathCollection at 0x3640e6a0>"
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nRFRUlPFXv1XytbW1wePxICYmBrNmzcLevXsBWCffN11dXYiNjTUWJg1KvgG7O/Kbrl69yq6uLpJk\nVlYWs7KySJKPHz+m2+1mR0cH/X4/nU4nu7u7SZJz5sxhWVkZSXLx4sUsLCwkSR45coTbtm0jSZ49\ne5apqamDHaeXJ0+e8OnTp0xISGB5ebkxbpV8/+bLly90Op30+/3s6Oig2+1mVVXVUE/LlDt37rCi\nooJRUVHGWGZmJvfv30+S3Ldv32+dp0Oprq6OlZWVJMmPHz8yLCyMVVVVlslHki0tLSS/Lq7xeDws\nLi62VD6SPHjwINPS0rh8+XKSg3N+DpvS+F5+fj7Xr19PkszJyeG+ffuMfd9WWr1586bHaqwzZ85w\ny5Ytxs+UlpaS7Hs11lD4sTSslu9HJSUlTE5ONl7/uLpuuPP7/T1KIzw8nPX19SS/fvCGh4eT7N9x\nHE5WrlzJa9euWTJfS0sLZ8+ezUePHlkqX01NDRMTE3nz5k0uW7aM5OCcn8Pm8tT3/qaHBa2e7/u5\nAv/LN1I1NDTAbrcDAOx2OxoaGgD07zgOFy9evEBlZSU8Ho+l8nV3dyMmJgZ2u924FGelfBkZGcjN\nzTW+mQMYnPOz30tu+8PqDwuayfe3sdlsQz2FP8Zms434fJ8+fUJKSgoOHTqEsWPH9tg30vONGjUK\n9+/fR3NzM5KTk3Hr1q0e+0dyvitXrmDSpEmIjY39169A+VP5BrU0rl271uf+EydOoKCgoMd3TwUH\nB6OmpsZ4/fr1azgcDgQHBxvfd/X9+Lf3vHr1ClOnTsWXL1/Q3NxsLA3+k/5fvp8ZSfn648d8NTU1\nPf5nM9LY7XbU19dj8uTJqKurw6RJkwD82nEMDg4e9Hn/TGdnJ1JSUpCeno5Vq1YBsFa+b4KCgrB0\n6VKUl5dbJl9JSQkuX76MgoICtLW14cOHD0hPTx+cfAN9na2/CgsLOWvWLDY2NvYY/3YDp729nc+f\nP+eMGTOMGzhxcXEsLS1ld3d3rxvF3542P3PmzLC6UZyQkMB79+4Zr62W70ednZ2cMWMG/X4/29vb\nR9SNcLL3PY3MzEzj2rDX6+11o/FXjuNQ6u7uZnp6Onfv3t1j3Cr5Ghsb+e7dO5Lk58+fOX/+fF6/\nft0y+b5XVFRk3NMYjHzDpjRCQ0M5ffp0xsTEMCYmxlgdRJLZ2dl0Op0MDw+nz+czxu/du8eoqCg6\nnU7u2LHDGG9ra+OaNWsYGhpKj8dDv98/mFF+Kj8/nw6Hg2PGjKHdbueiRYuMfVbI15df07B1AAAA\no0lEQVSCggKGhYXR6XQyJydnqKdj2tq1azllyhQGBgbS4XAwLy+Pb9++ZWJiIl0uF5OSkowPJvLX\nj+NQKi4ups1mo9vtNv7NFRYWWibfw4cPGRsbS7fbzejoaB44cIAkLZPve0VFRcbqqcHIp4f7RETE\ntGG5ekpERIYnlYaIiJim0hAREdNUGiIiYppKQ0RETFNpiIiIaSoNERExTaUhIiKm/QcywqMNAJjY\nywAAAABJRU5ErkJggg==\n",
"text": "<matplotlib.figure.Figure at 0x2c706f98>"
}
],
"prompt_number": 236
},
{
"cell_type": "markdown",
"metadata": {},
"source": "We have seen the results of LOF with naive approachfor KNN queries. Now lets see optimisations with KD-Trees."
},
{
"cell_type": "heading",
"level": 4,
"metadata": {},
"source": "Using KD Trees"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "KD-Trees insertion and KNN query."
},
{
"cell_type": "code",
"collapsed": false,
"input": "from sklearn.neighbors import KDTree as Tree\ntic = time.time()\nBT = Tree(data, leaf_size=5, p=2)\n# Query for k nearest, k + 1 because one of the returnee is self\ndx, idx_knn = BT.query(data[:, :], k = k + 1)\n\nprint '++ took %g msecs for Tree KNN Querying' % ((time.time() - tic)* 1000)",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "++ took 122 msecs for Tree KNN Querying\n"
}
],
"prompt_number": 239
},
{
"cell_type": "markdown",
"metadata": {},
"source": "LRD computation."
},
{
"cell_type": "code",
"collapsed": false,
"input": "tic = time.time()\ndx, idx_knn = dx[:, 1:], idx_knn[:, 1:]\n# get the radius for each point in dataset\n# radius is the distance of kth nearest point for each point in dataset \nradius = dx[:, -1]\n# calculate the local reachability density\nLRD = np.mean(np.maximum(dx, radius[idx_knn]), axis = 1)\n\nprint '++ took %g msecs for LRD computation' % ((time.time() - tic)* 1000)",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "++ took 8.99982 msecs for LRD computation\n"
}
],
"prompt_number": 240
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Now, rest is same, so, i'm just replicating the rsult for completion."
},
{
"cell_type": "code",
"collapsed": false,
"input": "# calculating the outlier score\ntic = time.time()\nrho = 1. / np.array(LRD) # inverse of density\noutlier_score = np.sum(rho[idx_knn], axis = 1)/ np.array(rho, dtype = np.float16)\noutlier_score *= 1./k\nprint '+++++ took %g msecs for Outlier scoring' % ((time.time() - tic)* 1000)\n\n# plotiing the histogram of outlier score\nweights = np.ones_like(outlier_score)/outlier_score.shape[0] # to normalize the histogram to probability plot\nhist(outlier_score, bins = 50, weights = weights, histtype = 'stepfilled', color = 'cyan')\ntitle('Distribution of outlier score')\n\n#plotting the result\nthreshold = 2.\n# plot non outliers as green\nfigure()\nscatter(data[:, 0], data[:, 1], c = 'green', s = 10, edgecolors='None', alpha=0.5)\n# find the outliers and plot te outliers\nidx = np.where(outlier_score > threshold)\nscatter(data[idx, 0], data[idx, 1], c = 'red', s = 10, edgecolors='None', alpha=0.5)",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "+++++ took 4.00019 msecs for Outlier scoring\n"
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 241,
"text": "<matplotlib.collections.PathCollection at 0x36ad0b38>"
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\n/wBQ63mQKpchMwAAAABJRU5ErkJggg==\n",
"text": "<matplotlib.figure.Figure at 0x2b737080>"
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nRFRUlPFXv1XytbW1wePxICYmBrNmzcLevXsBWCffN11dXYiNjTUWJg1KvgG7O/Kbrl69yq6uLpJk\nVlYWs7KySJKPHz+m2+1mR0cH/X4/nU4nu7u7SZJz5sxhWVkZSXLx4sUsLCwkSR45coTbtm0jSZ49\ne5apqamDHaeXJ0+e8OnTp0xISGB5ebkxbpV8/+bLly90Op30+/3s6Oig2+1mVVXVUE/LlDt37rCi\nooJRUVHGWGZmJvfv30+S3Ldv32+dp0Oprq6OlZWVJMmPHz8yLCyMVVVVlslHki0tLSS/Lq7xeDws\nLi62VD6SPHjwINPS0rh8+XKSg3N+DpvS+F5+fj7Xr19PkszJyeG+ffuMfd9WWr1586bHaqwzZ85w\ny5Ytxs+UlpaS7Hs11lD4sTSslu9HJSUlTE5ONl7/uLpuuPP7/T1KIzw8nPX19SS/fvCGh4eT7N9x\nHE5WrlzJa9euWTJfS0sLZ8+ezUePHlkqX01NDRMTE3nz5k0uW7aM5OCcn8Pm8tT3/qaHBa2e7/u5\nAv/LN1I1NDTAbrcDAOx2OxoaGgD07zgOFy9evEBlZSU8Ho+l8nV3dyMmJgZ2u924FGelfBkZGcjN\nzTW+mQMYnPOz30tu+8PqDwuayfe3sdlsQz2FP8Zms434fJ8+fUJKSgoOHTqEsWPH9tg30vONGjUK\n9+/fR3NzM5KTk3Hr1q0e+0dyvitXrmDSpEmIjY39169A+VP5BrU0rl271uf+EydOoKCgoMd3TwUH\nB6OmpsZ4/fr1azgcDgQHBxvfd/X9+Lf3vHr1ClOnTsWXL1/Q3NxsLA3+k/5fvp8ZSfn648d8NTU1\nPf5nM9LY7XbU19dj8uTJqKurw6RJkwD82nEMDg4e9Hn/TGdnJ1JSUpCeno5Vq1YBsFa+b4KCgrB0\n6VKUl5dbJl9JSQkuX76MgoICtLW14cOHD0hPTx+cfAN9na2/CgsLOWvWLDY2NvYY/3YDp729nc+f\nP+eMGTOMGzhxcXEsLS1ld3d3rxvF3542P3PmzLC6UZyQkMB79+4Zr62W70ednZ2cMWMG/X4/29vb\nR9SNcLL3PY3MzEzj2rDX6+11o/FXjuNQ6u7uZnp6Onfv3t1j3Cr5Ghsb+e7dO5Lk58+fOX/+fF6/\nft0y+b5XVFRk3NMYjHzDpjRCQ0M5ffp0xsTEMCYmxlgdRJLZ2dl0Op0MDw+nz+czxu/du8eoqCg6\nnU7u2LHDGG9ra+OaNWsYGhpKj8dDv98/mFF+Kj8/nw6Hg2PGjKHdbueiRYuMfVbI15df07B1AAAA\no0lEQVSCggKGhYXR6XQyJydnqKdj2tq1azllyhQGBgbS4XAwLy+Pb9++ZWJiIl0uF5OSkowPJvLX\nj+NQKi4ups1mo9vtNv7NFRYWWibfw4cPGRsbS7fbzejoaB44cIAkLZPve0VFRcbqqcHIp4f7RETE\ntGG5ekpERIYnlYaIiJim0hAREdNUGiIiYppKQ0RETFNpiIiIaSoNERExTaUhIiKm/QcywqMNAJjY\nywAAAABJRU5ErkJggg==\n",
"text": "<matplotlib.figure.Figure at 0x2cd17908>"
}
],
"prompt_number": 241
},
{
"cell_type": "markdown",
"metadata": {},
"source": "The results are same, and should be."
},
{
"cell_type": "heading",
"level": 4,
"metadata": {},
"source": "Putting everything together"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Lets create a class, to combine evrything together. It will be important in evaluating performance. From above results, we note that the most time is spent for KNN querying."
},
{
"cell_type": "code",
"collapsed": false,
"input": "import numpy as np\nimport matplotlib.pyplot as plt\nimport sys\nfrom sklearn.neighbors import DistanceMetric\nfrom sklearn.datasets import make_blobs\nfrom sklearn.neighbors import KDTree as Tree\n\ndef exit():\n sys.exit()\n\nclass LOF:\n def __init__(self, k = 3):\n self.k = k\n \n # a function to create synthetic test data\n def generate_data(self, n = 500, dim = 3):\n \n n1, n2 = n / 3, n / 5\n n3 = n - n1 - n2\n \n # cluster of gaussian random data\n data1, _ = make_blobs(n1, dim, centers= 3)\n \n # cluster of uniform random variable\n data2 = np.random.uniform(0, 25, size = (n2, dim))\n \n # cluster of dense uniform random variable\n data3 = np.random.uniform(100, 200, size = (n3, dim))\n \n # mix the three dataset\n self.data = np.vstack((np.vstack((data1, data2)), data3))\n np.random.shuffle(self.data)\n \n # add some noise : zipf is skewed distribution\n zipf_alpha = 2.5\n noise = np.random.zipf(zipf_alpha, (n,dim)) * \\\n np.sign((np.random.randint(2, size = (n, dim)) - 0.5))\n self.data += noise\n \n # KNN querying with naive approach\n def _knn_naive(self):\n\n # distance between points\n # import time\n tic = time.time()\n dist = DistanceMetric.get_metric('euclidean').pairwise(self.data)\n # print '++ took %g msecs for Distance computation' % ((time.time() - tic)* 1000)\n tic = time.time()\n # get the radius for each point in dataset (distance to kth nearest neighbor)\n # radius is the distance of kth nearest point for each point in dataset \n self.idx_knn = np.argsort(dist, axis=1)[:,1 : self.k + 1] # by row' get k nearest neighbour \n radius = np.linalg.norm(self.data - self.data[self.idx_knn[:, -1]], axis = 1) # radius\n # print '+++ took %g msecs for KNN Querying' % ((time.time() - tic)* 1000)\n # calculate the local reachability density\n LRD = []\n for i in range(self.idx_knn.shape[0]):\n LRD.append(np.mean(np.maximum(dist[i, self.idx_knn[i]], radius[self.idx_knn[i]])))\n return np.array(LRD)\n \n # knn querying with KDTrees\n def _knn_tree(self):\n \n #import time\n # tic = time.time()\n BT = Tree(self.data, leaf_size=5, p=2)\n \n # Query for k nearest, k + 1 because one of the returnee is self\n dx, self.idx_knn = BT.query(self.data[:, :], k = self.k + 1)\n\n # print '++ took %g msecs for Tree KNN Querying' % ((time.time() - tic)* 1000)\n \n dx, self.idx_knn = dx[:, 1:], self.idx_knn[:, 1:]\n # get the radius for each point in dataset\n # radius is the distance of kth nearest point for each point in dataset \n radius = dx[:, -1]\n # calculate the local reachability density\n LRD = np.mean(np.maximum(dx, radius[self.idx_knn]), axis = 1)\n return LRD\n\n def train(self, data = None, method = 'Naive') :\n \n # check if dataset is provided for training\n try:\n assert data != None and data.shape[0]\n self.data = data\n n = self.data.shape[0] # number of data points\n \n except AssertionError:\n try:\n n = self.data.shape[0] # number of data points\n except AttributeError:\n print 'No data to fit the model, please provide data or call generate_data method'\n exit()\n try:\n assert method.lower() in ['naive', 'n', 'tree', 't']\n except AssertionError:\n print 'Method must be Naive|n or tree|t'\n exit()\n \n # find the rho, which is inverse of LRD\n if method.lower() in ['naive', 'n']:\n rho = 1./ self._knn_naive()\n \n elif method.lower() in ['tree', 't']:\n rho = 1./ self._knn_tree()\n\n self.score = np.sum(rho[self.idx_knn], axis = 1)/ np.array(rho, dtype = np.float16)\n self.score *= 1./self.k\n \n def plot(self, threshold = None):\n \n # set the threshold\n if not threshold:\n from scipy.stats.mstats import mquantiles\n threshold = max(mquantiles(self.score, prob = 0.95), 2.)\n self.threshold = threshold\n # reduce data to 2D if required\n if self.data.shape[1] > 2:\n from sklearn.decomposition import PCA\n pca = PCA(n_components = 2)\n self.data = pca.fit_transform(self.data)\n \n # plot non outliers as green\n plt.figure()\n plt.scatter(self.data[:, 0], self.data[:, 1], c = 'green', s = 10, edgecolors='None', alpha=0.5)\n \n # find the outliers and plot te outliers\n idx = np.where(self.score > self.threshold)\n plt.scatter(self.data[idx, 0], self.data[idx, 1], c = 'red', s = 10, edgecolors='None', alpha=0.5)\n plt.legend(['Normal', 'Outliers'])\n \n # plot the distribution of outlier score\n plt.figure()\n weights = np.ones_like(self.score)/self.score.shape[0]\n plt.hist(self.score, bins = 25, weights = weights, histtype = 'stepfilled', color = 'cyan')\n plt.title('Distribution of outlier score')\n",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 225
},
{
"cell_type": "heading",
"level": 4,
"metadata": {},
"source": "Performance Evaluation"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Lets create a function to evaluate te performance."
},
{
"cell_type": "code",
"collapsed": false,
"input": "def perf_test(n_list = None, methods = ['Tree', 'Naive'], plot = False):\n \n import time\n if not n_list: n_list = [2 ** i for i in range(7, 14)]\n result = []\n result.append(n_list)\n for m in methods:\n temp = []\n for n in n_list:\n tic = time.time()\n lof = LOF(k = 5)\n lof.generate_data(n = n, dim = 2)\n lof.train(method = m)\n temp.append(1000000 * (time.time()-tic))\n print 'Took %g msecs with %s method for %d datapoints' % \\\n ((time.time() - tic) * 1000, m, n)\n result.append(temp)\n if plot:\n fig, ax = plt.subplots()\n ax.set_xscale('log', basex=2)\n ax.set_yscale('log', basey=10)\n \n plt.plot(result[0], result[1], 'm*-', ms = 10, mec = None)\n try : \n plt.plot(result[0], result[2], 'co--', ms = 8, mec = None)\n except IndexError:\n pass\n plt.xlabel('Number of data points $n$')\n plt.ylabel('Time of execution $\\mu secs$')\n plt.legend(methods, 'upper left')\n plt.show()",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 226
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Now, lets compare the performace of 2 methods- Naive and KDTree implementations."
},
{
"cell_type": "code",
"collapsed": false,
"input": "perf_test(methods = ['Tree', 'Naive'], n_list = [2 ** i for i in range(4, 14)], plot = True)",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "Took 2.00009 msecs with Tree method for 16 datapoints\nTook 1.99986 msecs with Tree method for 32 datapoints\nTook 2.00009 msecs with Tree method for 64 datapoints\nTook 3.00002 msecs with Tree method for 128 datapoints\nTook 4.99988 msecs with Tree method for 256 datapoints\nTook 11.0002 msecs with Tree method for 512 datapoints\nTook 20.9999 msecs with Tree method for 1024 datapoints\nTook 48.0001 msecs with Tree method for 2048 datapoints"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\nTook 106 msecs with Tree method for 4096 datapoints"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\nTook 179 msecs with Tree method for 8192 datapoints"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\nTook 3.00002 msecs with Naive method for 16 datapoints\nTook 3.00002 msecs with Naive method for 32 datapoints\nTook 6.00004 msecs with Naive method for 64 datapoints\nTook 13 msecs with Naive method for 128 datapoints\nTook 30.9999 msecs with Naive method for 256 datapoints"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\nTook 82.9999 msecs with Naive method for 512 datapoints"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\nTook 249 msecs with Naive method for 1024 datapoints"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\nTook 834 msecs with Naive method for 2048 datapoints"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\nTook 3734 msecs with Naive method for 4096 datapoints"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\nTook 15796 msecs with Naive method for 8192 datapoints"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\n"
},
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAY8AAAEaCAYAAADpMdsXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XdYU3f7P/B3ENkgIEMJKFiUISgIatXyaN2t1Vb7VdwW\nrIo+glpbtbaPIrXDltZKqatqrYOhVqWO4qDiquIorrpHGGEpBAgJK8n5/YHkJwKSQMYhuV/X1euS\n5OScN6nmzvlMDsMwDAghhBAlGGg7ACGEkNaHigchhBClUfEghBCiNCoehBBClEbFgxBCiNKoeBBC\nCFEaFQ9CCCFKo+JBCCFEaYbaDvAq2dnZiIiIgI2NDbp164alS5dqOxIhhBCw/M7j5s2beP/997F1\n61akp6drOw4hhJDnNF48QkND4ejoCF9f3zqPJycnw9PTE127dsWaNWsAAP3798fmzZsxZMgQjBw5\nUtNRCSGENIKj6bWtzp49CwsLC0yfPh03b94EAEilUnh4eODkyZPgcrno3bs34uPjcezYMQQEBCAo\nKAjjx4/H3r17NRmVEEJIIzR+5xEUFAQbG5s6j126dAnu7u5wdXVF27ZtMXHiRCQlJWHw4MFYt24d\n5s6dCzc3N01HJYQQ0ghWdJjz+Xy4uLjIf3Z2dkZaWhp69OiBffv2Nfl6LpeLnJwcdUYkhBCd4+Tk\nBD6f36zXsqLDnMPhtOj1OTk5YBiGVf8NHDhQ6xlaQya25qJMlEkfcrXkSzcrigeXy0VWVpb856ys\nLDg7Oyt1jsjISKSmpqo4WfO5urpqO0I9bMwEsDMXZVIMZVIcm3KlpqYiMjKyRedgRfEIDAzEgwcP\nwOPxUFVVhcTERIwZM0apc0RGRmLQoEHqCdgMbPqLUouNmQB25qJMiqFMimNTrkGDBrW+4jFp0iT0\n798f9+/fh4uLC3799VcYGhoiNjYWI0aMgLe3N4KDg+Hl5aXUedl258GmQlaLjZkAduaiTIqhTIpj\nUy5V3HlofKiuOnA4HOjAr0EIIRrVks9OVoy2UhdbW1sIBAJtx2g1bGxsUFRUpO0YhJBWQGeKR22f\nx4u3hgKBgO5IlNDSUW+EkNYhNTW1xc38Ot1sRc1ZyqH3ixD90pJ/86wYbUUIIaR10ZniwbbRVoQQ\nwlY02uq55jZbbVy7EWGLwlp0bVWcgy2o2YoQ/ULNVs2QnZ2NH1b90Ox1XVpyDgsLC1haWsLS0hIG\nBgYwMzOT/xwfH9/sPIQQoik6UzyUbbZKWJ+ARSWLkLA+odnXbO45ysrKIBQKIRQK0blzZxw+fFj+\n86RJk+THSSSSZmcjhJDGULPVc4o0W62NWoubR2/C0sQSAFDFr0Lww2AkuifCiGsEABBWCOH7ti8W\nrVjU4HVUcY6Xubm5YevWrRg8eDBSU1MxdepUREREYO3atRg+fDi2b9+ONWvWYMuWLSguLsaQIUOw\nceNG+bL2Fy9exEcffYQ7d+6gc+fOWLduHQYOHKjEu9fw+0UI0X00SVABIREhCD8UjmGnh8ECFvLH\ngx8GAw8BIYRIDExESESIWs/RlPz8fAgEAmRmZkIqlSImJgZ//PEHzpw5A3t7e4SHh+O///0v4uLi\nwOfz8c4772DXrl0YOXIkTp48iffffx93796FnZ1dszMQQkhT9ObOAwCKi4sRPiwcwVeC63z4CyHE\nFmzBLMyq83hDylCGLdiCD/FhvXMkBiYi9kQsrK2tFc7+8p3HiBEjIBQKYWRUcyfj7e2N2NhYDB48\nGACQm5uLzp07o7y8HNHR0fj333+xY8cO+flGjhyJyZMnY/r06QpnqEV3HoToF7rzUJC1tTV+OvET\nFvZdiA/ufyB//Pduv+O3tN8U/tB/o/iNBs+hbOFoiL29vbxwAACPx8PYsWNhYPD/u6cMDQ2Rn5+P\njIwM7N27F4cOHZI/J5FI5IWGEELURWeKR0PLkzSkrKwMdqV24BnykOKWgqFPhsKu1A4ikUjhD35V\nnKMxLy8R0qlTJ/z666/o169fvWM7deqEadOmYfPmzS26JiFEv6hieRKdGm2lyJLHcbFxyJPmIW9h\nHrbc3ILchbnIk+Yh7uc4ha+linMoKiwsDMuXL0dmZiYA4OnTp/jjjz8AAFOnTsWhQ4dw/PhxSKVS\nVFRUIDU1tUXDjwkhuk8V+3nozJ2HosyszLDsxDL49PQBACz7bhluTb2FM3+e0eg5GvPynceCBQvA\nMAyGDx+OnJwcODg4YOLEiRgzZgycnZ2RlJSEJUuWYNKkSWjTpg369u2L9evXtzgHIYS8il51mJNX\no/eLEP1CM8wJIYRolM4UD1oYkRBCFEMzzJ+jZivVoPeLEP1CzVaEEEI0iooHIYQQpVHxIIQQojQq\nHoQQQpRGxYMQQojSqHi0Ml9//TVmzZql7RiEED2nM8uTKLowolgsRlRsLNL5fFQCMAbgz+ViZXg4\nTE1NFbpWS8/h6uqK8vJyPHnyBGZmZgCALVu2YPfu3Th16tQrX/vpp58qlJEQQhqjioURdap4NEUs\nFmNoWBgujBoF9Okjf/x4fj7OzJmDlE2bmvzwV8U5AEAmk2HdunVUDAghGiUWi5F86RLSBYIWnUev\nmq2iYmNrPvQdHes+4eiIC6NGITImRiPn4HA4+PjjjxEdHY2SkpJ6zy9YsACdOnVCu3btEBgYiHPn\nzsmfi4yMxLRp0wAAb731Fn7++ec6r+3ZsycOHjwIALh79y6GDRuG9u3bw9PTE3v37m0yGyFEd9V+\n+V3TuTOOjx3bonPpVfFI5/Prf+jXcnTENQWWMlfFOQAgMDAQgwYNQnR0dL3n+vTpg+vXr0MgEGDy\n5MkYP348qqqqANQUntqVdydPnoz4+Hj5627fvo3MzEyMGjUKIpEIw4YNw9SpU/H06VMkJCRg3rx5\nuHPnjkL5CCG6p9Evv82gV8Wjsonnj5eWgpOaisgnTxp8PvLJExxv4E6hzjVeWlK9MRwOB1FRUfjp\np5/w7NmzOs9NmTIFNjY2MDAwwEcffYTKykrcu3cPAMAwjHw5gffeew/Xrl1DVlYWAGD37t14//33\n0bZtWxw+fBhubm6YMWMGDAwM4Ofnh3HjxtHdByF67JVffpWkV8XDuInnh1tZgRk0CJFubg0+H+nm\nhuHt2r36GkqsE9O9e3e88847+Oabb+rs4xEdHQ1vb29YW1vDxsYGJSUl9QoMAFhaWmLUqFHyu4+E\nhARMmTIFAJCRkYG0tDTY2NjI/4uLi0N+fr7C+QghuqVChefSq+Lhz+UCjX145uXBj8vVyDletGrV\nKvzyyy/y3f/OnTuH7777Dnv37kVxcTEEAgHatWvX6OJlkyZNQnx8PC5cuICKigq8+eabAGq2qB04\ncCAEAoH8P6FQWK+PhBCiH0okEtwtK1PZ+fSqeKwMD0e/I0fqf/jn56Pf0aOIjIjQyDle9NprryE4\nOBjr1q0DAAiFQhgaGsLOzg5VVVWIiopCaWlpo69/++23kZGRgZUrV2LixInyx9955x3cv38fu3bt\nQnV1Naqrq3H58mXcvXtXqXyEkNbvH6EQAVeuwMnevvEvv0rSq+JhamqKlE2bsITHw/D9+zHwwAEM\n378fS3g8hYfYquIcL1uxYgXEYjE4HA5GjBiBkSNHolu3bnB1dYWpqSk6deokP/bFDnMAMDIywrhx\n45CSkoLJkyfLH7ewsMDx48eRkJAALpeLjh074tNPP5V3vBNCdB/DMFjP52PEjRtY7eaGv1eubPjL\nbzOwej+Pc+fOYffu3ZBIJLh9+zbOnz/f4HG0n4dq0PtFiG5hGAZRGRmY7OCArs8nJJeXlyMyJgbX\n+Hwc/+mnZv+bZ3XxqJWUlISCgoJGl+Wg4qEa9H4Rol9a1WZQoaGhcHR0hK+vb53Hk5OT4enpia5d\nu2LNmjV1nouLi6vTJEMIIUS7NF48QkJCkJycXOcxqVSK+fPnIzk5Gbdv30Z8fLx8MltmZibatWsH\nc3NzTUclhJBWo1QiAa+8XGPX0/jaVkFBQeDxeHUeu3TpEtzd3eHq6goAmDhxIpKSkuDl5YVt27Yh\nNDS0yfO+uLaVIgskEkKIrrgmFGLC7dv4oEMHLO/cudHjVLEgYi1WLIzI5/Ph4uIi/9nZ2RlpaWkA\nFFvwUJnjCCFEVzAMg825ufj8yRP86O6OKU3MHn/5i/WqVauafW1WFA+Ogkt6vIqiS7ITQoguEEok\nmHP/Pm6JRDjn7w+P56OpFKEzS7JzuVz5+kwAkJWVBWdnZ6XO0dCdh42NjUoKk76wsbHRdgRCiIIO\nFRbCvE0bXOzVC2Zt2ij12tov2q3+ziMwMBAPHjwAj8eDk5MTEhMT66wW21xFRUUqSEcIIewz2dER\nk1W0yGFzaHy01aRJk9C/f3/cv38fLi4u+PXXX2FoaIjY2FiMGDEC3t7eCA4OhpeXl1LnjYyMVFlH\nECGE6LLU1NQW9xO3ikmCTaHJbYQQXSaSSmGuZNOUIlrVJEF1oTsPQoiuYRgG23Jz4XP5MsRSqcrO\nS3cez9GdByFE15RJJJj34AH+EQqxt3t3eKlhojTdeRBCiA65VVaG3v/8A0MOB5cCAtRSOFqKFaOt\nVIHmeRBCdEGZRIJRN28iys0NMzp0UMs1VDHPQ6lmK5FIhLKyMjhqcXhYQ6jZihCiS8okElgYqv+7\nfUs+O5VKt2vXLhgbG2P//v2ws7PDhAkTMHLkyGZdmBBCSMM0UThaSqk+D1NTU3h7e6OoqAjbtm17\n5faohBBCdJdSxaNXr15ISEhATEwMtm/fDolEoq5cSqOhuoSQ1kQslSL07l3sKyjQ+LU1PlQ3MzNT\nvp/2jh070LNnT/Ts2bNFAVSB+jwIIWwkFosRFRuLdD4flQCMAfhzuZgQGorpjx+jl6Ul1nftqrVm\nqpZ8dipVPCZNmoTffvsNRkZGyMrKwq1bt/DWW28168KqRMWDEMI2YrEYQ8PCcGHUKODFQUb5+TBM\nSMBP33+POW5uWl28VWPzPIYPHw4jIyMAgIuLC6uarQghhE2iYmPrFw4AcHSEZOJEPNm7t1Wv+q1U\n8XBwcEBwcDAOHTqE69ev49atW+rKpTTq8yCEsEk6n1+/cNRydMQ1Pl+zgV6gleVJ7t+/L+8sDwsL\nQ5cuXVoUQBWo2YoQwjaDFizA6bFjG31+4IEDSF23ToOJ6tPYPI+8vDwYGBjgq6++QkFBAdq1a9es\nixJCiK4zbur5Vv6FV6lmq99//x2ZmZk4deoUbG1tsW/fPnXlIoSQViuvshLVlpZAfn4jB+TBj8vV\nbCgVU6p4VFVVYfDgwRCJRDA0NIS1tbW6chFCSKt0rrgYgVevov/Uqeh35Ej9ApKfj35HjyIyIkI7\nAVVEqWYrT09PBAUFwd3dHRKJBDdu3MCoUaPUlY0QQloNhmEQw+fjq4wMbPf0xFvt26N80yZExsTg\n2vnzqORwYMww8ONyEblpE0xNTbUduUWUXhjx2bNnSEpKgomJCYKDg1nR78HhcLBy5UpaVZcQohUi\nqRSz7t3DHbEYv3fvji4sLwy1q+quWrVKM5MEN23axMqFEWm0FSFEm4QSCdZkZuKzzp1hqobtYtVF\nY5MEaWFEQgipz9LQEKu7dGlVhaOldGZhREIIIZrT7D3MT5w4AQcHB1oYkRCiV55WVcG8TRuY6cBd\nhsaarTIzM+V/NjY2hkgkatZFCSGkNbpUWorAq1dxtLBQ21G0Tqmhups2bcI///wDIyMj+Pn5obKy\nEv3791dXNkIIYQWGYbA5Nxf/e/IEm7t1w3v29tqOpHXNaraqrKxEWloaMjIyMG3aNHXkUgo1WxFC\n1KVcKsW8Bw9wubQU+3180M3MTNuRVEZjzVY7d+7ErVu3YGxsjP/85z+wtbVt1kXVgVbVJYSow9eZ\nmaiQyXCxVy+dKRwaX1X36NGjSElJwc2bNyEWi1FSUoLY2Fj069dPvs+HNtCdByFEXapkMrTlcFr1\n3huN0dhOgi8Si8VIS0vD+fPn8fjxY2zbtq1ZAVSBigchhChPK8WDTah4EEKI8jTW50EIIbrqmlCI\nMTdvokom03aUVoGKByFE7+3Iy8OwGzcwxdERRgb0sagIpeZ5EEKILqmUybDo4UOkCARI9fNDd3Nz\nbUdqNRQuHhUVFfj999/B4/Hka1pxOBysWLFCbeEIIURdyiQSDL1+HU7GxrgcEAArQ/ourQyF3613\n330X1tbWCAgIgImJiTozyTEMg88//xxCoRCBgYGYPn26Rq5LCNF95m3a4H+urnjb1lYnh+Gqm8LF\ng8/n49ixY+rMUs/BgwfB5/NhZ2cHZ2dnjV6bEKLbOBwORrVvr+0YrZbCPUP9+/fHjRs3WnzB0NBQ\nODo6wtfXt87jycnJ8PT0RNeuXbFmzRoAwP379zFgwABER0djw4YNLb42IYQQ1VC4eJw9exYBAQHo\n1q0bfH194evrix49eih9wZCQECQnJ9d5TCqVYv78+UhOTsbt27cRHx+PO3fuwNnZGdbW1jVBaQQE\nIaSZ/hWJcIdWAVcphZut/vzzTwCQtw02d2JJUFAQeDxenccuXboEd3d3uLq6AgAmTpyIpKQkLFiw\nAOHh4Th79iztTU4IaZbEggLMf/AAm7p1gxeNplIZhYuHq6srrl27hrNnz4LD4SAoKEhlG0Hx+Xy4\nuLjIf3Z2dkZaWhpMTU2xZcsWhc7x4iJfgwYNomJDiB4Ri8WIio1FOp+PSgDGAHo4OaFi1CgcLSvD\niR494Gdpqe2YWpeamqqyBWQVLh7r1q3DL7/8gnHjxoFhGEydOhWzZs1CREREi0OoYqRDS1eIJIS0\nTmKxGEPDwnBh1CigTx/548fz82EdGYl/t22DExUOAPW/WK9atarZ51K4I2HLli1IS0tDVFQUvvji\nC1y8eBG//PJLsy/8Ii6Xi6ysLPnPWVlZSo+uoiXZCdFPUbGxNYXD0bHuE46OKB4/HutosE09qliS\nXale6Bc7rVXZgR0YGIgHDx6Ax+OhqqoKiYmJGDNmjFLniIyMpKYqQvRQOp9fv3DUcnTENT5fs4Fa\ngUGDBrW4eCjcbBUSEoK+ffvKm60OHjyI0NBQpS84adIknD59GoWFhXBxcUFUVBRCQkIQGxuLESNG\nQCqVYubMmfDy8lLqvLXFgwoIIfqlsqnnaQJgParo+1BqSfarV6/i3Llz4HA4eOONN9CrV68WXVxV\naEl2QvTTs6oqjFy4EFcnTGj0mOH79+NYTIwGU7UeLfnsVGoxl4CAAAQEBDTrQoQQoioMw2Bnfj4+\nefQIr1lbA/n5DTdd5eXBj8vVfEA90GTxGDBgAM6fPw8LC4t6o6I4HA5KS0vVFk4Z1GxFiH54IBZj\n7v37KJJIcLRHD3j36oUhc+bU7zTPz0e/o0cRuWmT9sKylMabrdiKmq0I0Q9x+fmIePAAyzt3RgSX\nC8PnA3fKy8sRGRODa3w+KjkcGDMM/LhcREZEwNTUVMup2Usj29AuXbpUvubUqx7TBioehOiHh2Ix\nDDkcuFJBUAmNbEN7/Pjxeo8dPXq0WRdVB5rnQYjuczczo8KhAqqY59HknceGDRuwfv16PHr0CK+9\n9pr8caFQiAEDBmD37t0tCqAKdOdBiG5hGAaVMhlM2rTRdhSdptZmq5KSEggEAnz66af45ptv5I9b\nWlrC1ta2WRdVNSoehOiOzIoK/PfBA3Q1NcUP7u7ajqPT1DpUt127dmjXrh08PT2xffv2OhcFwJpt\naGm0FSGtm5Rh8FN2NlZnZGCBszOWdOqk7Ug6S6OjraKjo+UFo7y8HIcPH4a3tze2bdvWogCqQHce\nhLRu6UIhZt27B0tDQ2zs1g0eZmbajqQXNDLa6mWVlZUYPnw4Tp8+3awLqxIVD0Jaty8zMuBkZIQP\nOnSg/cQ1SGMzzF8kEonApwXHCCEq8FnnztqOQJSkcPF4cc9xmUyGgoIC1vR3EEII0SyFi8fhw4fl\ntzeGhoZwdHRE27Zt1RZMWdRhTgi7yRgGW3Nz4W5qijdtbLQdR69ptMN8xowZWLduHaytrQEAAoEA\nixcvpg5zQkiTbotEmHP/PiQMg1+6dYOPhYW2IxFoqM/j+vXr8sIBADY2Nvjnn3+adVFCiH6okErx\nZWYmNubkYJWrK+Y4OaENdYjrBIWLB8MwKCoqkk8MLCoqglQqVVswQkjrN+rmTVgbGuJaYCC4xsba\njkNUSOHisXjxYvTr1w8TJkwAwzDYu3cvPvvsM3VmI4S0cvHe3nAwMtJ2DKIGCheP6dOnIyAgAH/9\n9Rc4HA4OHDgAb29vdWZTCnWYE6IZYrEYUbGxSOfzUQnAGIA/l4uV4eH1lj+nwsFOtJ/Hc9RhTohm\niMViDA0La3Djpb5HjuDUpk20f0YropEl2WUyGXbu3ImoqCgAQGZmJi5dutSsixJCWqeo2Nj6hQMA\nHB2RNmoUImmvcL2hcPGYN28eLly4gLi4OACAhYUF5s2bp7ZghBD2SefzG94rHAAcHXGNVp3QGwr3\neaSlpSE9PR3+/v4AAFtbW1RXV6stGCGEfSqbep6G4eoNhe88jIyM6gzNffr0KQwMFH45IUQHNDXY\n1pj6HvWGwp/+4eHhGDt2LAoKCrB8+XIMGDAAn376qTqzEUJYxp/LBfLzG34yLw9+XK5mA5Fmy87O\nbtHrFW628vf3R2BgIE6ePAkASEpKQn5jf4kIIToht7ISHV+Y3LcyPBxn5sxpcLRVv6NHEblpkxZS\nkuZIWJ/QotcrPFTXx8cH06ZNw5IlS1BeXo6lS5fi8uXLuHjxYosCqAKHw8HKlStpngchKpJZUYGl\njx/jH6EQt3r3RtsXmqjLy8sRGRODa3w+KjkcGDMM/LhcREZE0DBdFlsbtRY3j96EpYklsouzkZGZ\ngauCq+rfDEokEmHp0qW4evUqhEIhJk+ejGXLlrGi34PmeRCiGiKpFGsyM/Ezn4/5XC6WdOoE8zZt\ntB2LqEBxcTHCh4Uj+EowLFCzMOWbeFP98zwMDQ1hamoKsViMiooKdOnShRWFgxCiGqcEAnheuoQH\n5eVIDwzEKjc3Khw6xMrUCl+s+AI7OuxAGcpafD6FP/379OkDExMTXLlyBWfPnkVcXBzGjx/f4gCE\nEHZwMTZGgrc34r290cnERNtxSAsxDAPRHRGy12XjxqgbOG9/HoVfFuKzaZ9hj8ueFp9f4Q7zLVu2\noHfv3gCAjh074o8//sCOHTtaHIAQwg7uZmZw13YI0iJVz6ogOCmA4IQAguMCwACwHWGLDiEd4LXT\nC21t2yI7OxsOOx3AM+QBkuZfi9a2IkTPiKVSlEmltGihDpBVyVDydwkExwUoOl6E8gflsB5oDZvh\nNrAdbgvTrqbgvDRx89tl3+LGthvwmeGDT6M/VX+HuUwmw+7du/HkyROsWLECmZmZyMvLQ58+fZp1\nYVWi4kFI0xiGQXxBAZY9foxFzs5Y5OKi7UhESQzDQHxPLC8WJWdKYOZlBtvhtrAZZgOr161gYPTq\n3ojYr2IxaNQg+PT0adFnp8LFIywsDAYGBvjrr79w9+5dFBUVYfjw4bhy5UqzLqxKVDwIebVLpaVY\n8PAhqmUy/Ojujjde2BWUsFt1YTUEJ2uKheCEAEBNU5TNcBvYDLZB2/Ztm31ujWxDS2tbEdI6zbl3\nD4cKC/GlmxtmdOgAA1p/Sis2rt2IsEVhTR4nq5Kh9EJpTbE4LoD4nljeFNVpSSeYdqvfFKUNChcP\nbaxtlZqaiv/973/w8fHBxIkTMXDgQLVejxBd9H/29oh+7TVYGir8z52oWHZ2Nn5Y9QNGTxgN7ktL\nuDAMg/L75fJiUXymGGbdzGAz3AavRb8Gq35NN0Vpg8J/m15e22rfvn1YvXq1OrPBwMAAlpaWqKys\nhLOzs1qvRYiuGmZrq+0Iei9hfQIWlSxCwvoELP5yMaqLqiFIEcj7LiADbEbYwHGaIzy3e7aoKUpT\nlBptdefOHaSkpAAAhgwZAi8vL6UvGBoaiiNHjsDBwQE3b96UP56cnIyFCxdCKpXiww8/xNKlS8Ew\nDDgcDgoKCvDRRx9h165dDf8S1OdBCO6KRPAwM2NFk4a+e3EpEACoyq5C8KNg7LLZBaaagVQsRYVV\nBbz6eeHjHz6GmYd2/r9ppMNcVc6ePQsLCwtMnz5dXjykUik8PDxw8uRJcLlc9O7dG/Hx8fLiVFVV\nhSlTpmDv3r0NnpOKB9FnOZWVWP74MY4LBLgSEAAn46YWTifq1tBSIC8SQojEwETEnoiFtRYHL2ik\nw1xVgoKCwOPx6jx26dIluLu7w9XVFQAwceJEJCUl4e7duzh27FjN/4jwcE1HJUTrxGIxomJjkc7n\noxI1+2n4c7lYGR4OGBnhh+xsrM3KwiwnJ9zt0wdW1K+hdbIqGaqOV2GW8SysNVyLmZKZdQoIWwpH\nSzX5N23atGnYuXMnfvzxRyxcuFAtIfh8PlxeGHPu7OyMtLQ0LFu2DGPHjlXoHJGRkfI/0+q6RBeI\nxWIMDQurWf78hflUx/PzkTxrFoo+/BB97OxwKSAAXWg1W62ryKpA7uZc5G7JhamHKTwjPLF10FZ8\nFPQRPrj/gfy437v9rrXCkZqaitTUVJWcq8nicfXqVeTk5GDbtm2YPn16vedtVdAZp4q2vheLByG6\nICo2tv6+GQDg6Ijro0dj0pkziFuxQjvhCACAkTEQnBQgZ0MOik8Xw3GKI3qe7Anz7uYAakZZ2ZXa\ngWfIQ4pbCoY+GQq7UjuIRCKtFI+Xv1ivWrWq2edqsniEhYVhyJAhePz4MQICAuo8x+Fw8Pjx42Zf\nvBaXy0VWVpb856ysLKVHV0VGRtIdB9Ep6Xx+nTuOOhwdUXj+vGYDEbnqomrkbc9DzoYcGJgZgPtf\nLjx3esLQou5HalxsHPKkebBbaIctq7dg7edrkfdbHuJ+jsMnX32ipfSquQNRaob5xo0bW3SxWjwe\nD6NHj5Z3mEskEnh4eCAlJQVOTk7o06dPnQ7zplCHOdFFgxYswOlXNNsOPHAAqevWaTARKb1cipz1\nOXh64Cnav9Me3HlcWPWzarT15MWlQGrdun4LZ/48g3nL5mkqdqM00mG+ceNGXL9+HWfOnAGHw0FQ\nUBB69uz+zF3SAAAgAElEQVSp9AUnTZqE06dPo7CwEC4uLoiKikJISAhiY2MxYsQISKVSzJw5U+lh\nwHTnQXSJoLoameXlrzzGmL4waYRULEVBQgH46/mQFErgFOaEvg/6wsi+6YUl5y+fX+8xn54+dYqJ\nNmj0zmPdunX45ZdfMG7cODAMg4MHD2LWrFmIiIhoUQBVoDsPoitKJRL8mJ2NmOxsOB06hJu9etXv\n8wCAvDwsycjAmqVLNR9ST4jvi5GzIQd5O/Ng9boVuPO4sB1hC04b3ZlHo5F5Hr6+vrh48SLMzWs6\ngkQiEV5//fU6E/20hYoH0RUD09PR2cQEKzp3BpfDwZA5c+p3mufno9+RI0jZtIn2DFcxmUSGwj8K\nkbMhB2U3ytAxtCM6zu4IUzfdfJ81Ns/jxbWs2LYFLTVbEV1wrEcPmLyw9WvKpk2IjInBtfPnUcnh\nwJhh4MflIpIKh0pV5lQid0sucjbnwMTVBNx5XNi/bw8DY3Z9zqmKRputfvjhB2zfvr1Os9UHH3yA\nRYsWtSiAKtCdByFEWQzDoDi1GDnrcyA4KYB9sD24c7mw6Fl/Rriu0tjyJFevXsW5c+fkHea1y7Nr\nGxUP0lpIZDLsyM/H5pwcnPb3hzHL7uB1QVNLn1cXVyN/Rz5yNuQABgB3HheO0xxhaKV/s/Nb1dpW\n6sDhcLBy5UpqtiKsJWUYxOfnY1VGBjoZG+MLNzf0b9dO27F0TnZ2Ngb7DMapf0/VW/pcmC5EzoYc\nPN37FDYjbMCdx0W7oHZ6uZBkbbPVqlWrqHjowK9BdNRfAgHmP3gAG0NDfOHmhsE2NtqOpLOil0fD\n/GtziJeLsfjLxZBWSPF071PkrM9BJb8SHWd3RMcPO8K4Ay0eCdCdBxUPwmpppaUQVFdjhK2tXn7L\nVad6S5/zqxD8MBgJnRPASBlU5VWh3LwcPd7qgWU7l8HAkJoJX0TFg5qtCNFLrWXpc7bRaLOVTCbD\n7t278eTJE6xYsQKZmZnIy8tDn8bW3tEguvMgbHBKIICvuTnsjJqeeUxU51nmM/w36L+YljlNJ5c+\nV6eWfHYqfA83b948XLhwAXFxcQAACwsLzJun/bVZCNG2v0tKMOTaNcy6dw8ZlZXajqM3xA/FeLDg\nAe763cVC/4XY47KnzvPaXPpcHyg8Ni0tLQ3p6eny4bm2traorq5WWzBC2O5KaSlW8Hj4VyTCCldX\nTHd0RFsaeqtWDMNAcEKA7JhsCNOE6PhhRwReC8Qzg2dw6O3AmqXP9YHCf9ONjIwglUrlPz99+pRV\ns8wjIyNVtskJIU15Ul6Osf/+i3fat8f9vn0xs2NHKhxqJCmTgL+Bj8vdL+PRx49gP9Yer2e+ji5f\nd4FJJxP50ud5C/Ow5eYW5C7MRZ60ZulzUl9qamqL90BSuM9j165d2LNnD65evYoZM2Zg3759WL16\nNSZMmNCiAKpAfR5EFV615WtDS4FUy2RUMNSs/Ek5+LF85G3Pg/VAa3AjuLAeaF1v1Brblz5nK42N\ntrpz5w5SUlIAAIMHD4a3t3ezLqpqVDxIS9XZ8pUWIdQqhmFQfKoY2THZKDlXgo4hHeH0XyeYutL7\nr2o0VJeKB2mhZd9+izWdOze8/Hl+PpbweLT8uZpJxVLk784HP4YPRsqAG8FFh2kd0Ma8TdMvJs2i\nkVV1L1++jK+++go8Hg8SiUR+4Rs3bjTrwoSwSVNbvl6jLV/VpiKzAvz1fORtrdk347W1r8FmiA1N\nqGQ5hYvHlClTEB0dDR8fH1Z1lBOiCk0NsK2kDzKVYhgGJWdLkB2TjeK/itFhRgf4X/CHmbuZtqMR\nBSlcPOzt7TFmzBh1ZmkR2s+DtERTKx3Rlq+qIa2QoiC+APwYPqRiKbjhXHj+6glDS/1b0VabNLqf\nx/Hjx5GYmIihQ4fC6PkMWg6Hg3HjxrUogCpQnwdpqVf2edCWry1Wya8Efz0fub/kwjLAEtyI51u6\nGtAdnTZppMN8ypQpuHfvHrp3716n2erXX39t1oVViYoHUVSpRIItubm4JxZjk4eH/PHy8nLa8rUZ\nXrV3BsMwKL1QiuyYbAiOC+A4xRHc+VyYeVDTFFtopHh4eHjg7t27rOzEouJBmpJdUYEYPh9bc3Mx\nzMYGi11c0NvKqs4x5eXlNVu+8vl1t3yNiKDC0YDG9s6QVcpQsKemaaq6qBrccC46hnSEYTtqmmIb\njRSPkJAQfPzxx+jevXuzLqROVDzIqyx48AA78/Mxo0MHLOBy4UqFQCVe3jujMrcSORtzkLMpBxa+\nFuAu4KL9W+3BacO+L5ykhkaKh6enJx49egQ3NzcYGxvLL8yGobpUPMirnC4uRg9zc9i0bavtKK1a\nY3tnxDvHQ1YlQ3VhNaraV8Fvgh+W/LREy2mJIjRSPDIyMhp8vHPnzs26sCpR8SBE/WjvDN2j1uIx\nYMAAnD9/HhYWFvX6OzgcDkpLS5t1YVWi4qHfiqursTk3F+dLSnDQx4eV/XK6oFpQjUdxj/DZ8s8Q\nUhpCe2foALXu51E7FrisrAxCobDOf2woHLVoVV39k1FRgY8ePkSXtDTcFImwytWVCoeKSUokyNuR\nhxujbuBi54uQpEjw9Q9fY5/7vjrH0d4ZrYtGVtXt1asX/vnnnxZdRN3ozkP/fPLoEbbl5iK0Y0dE\ncLlwMTHRdiSdISmV4Nkfz/B0z1MUpxbD+k1rOExwQPvR7WFoZYjs7Gz82PtH+Dzzke+dcdPuJhZd\nWVRn1BVhP7XeedCHMmGjSQ4OePz66/jutdeocKiApEyC/Ph83Bp7CxecL+Bp4lPYj7dHv6x+8E3y\nheMURxha1Qy1pb0zCKDA8iRPnz7FDz/80GAR4XA4+Oijj9QSjBCg5stLQ01RvSwttZBGt0hFUhQe\nKUTBngIITgjQbkA72E+wh8c2D7S1aXxkmpmVGZadWCbfO2PZd8twa2rN3hlEfzRZPKRSKYRCoSay\nED3S1MZLhdXV2JiTg8OFhTjv7w8D6stQCalYiqI/i1CwpwBFyUWwet0KDhMc4LHZA21tFRvKPH/5\n/HqP+fT0qbMRE9F9TfZ5+Pv7Iz09XVN5moX6PFqXV2285H/oEPouXYrEkhK8Z2eHj5yd4WNRf1go\nUZy0Qoqi5CI8TXyKwj8LYRloCYcJDrAbZwcjOyNtxyNapJH9PAhRlajY2PqFAwAcHZE+ejSM4+Jw\nKzISTsZNrXWrX161jtTLZJUyFB0vQkFiAQoPF8LS3xL2wfZwX+cOIwcqGKTlmiweJ0+e1EQOokea\n2njJSiSiwvGS7Oxs/LDqB4yeMLrREU2yKhkEJwQo2FOAwkOFMPc1h8MEB7wW/RqMO9D7SVSryeLR\nvn17TeQgekTcxPO08VJ9CesTsKhkERLWJ2Dxl4vlj8uqZRCkCPB0z1M8S3oGMy8zOExwQJevusCY\nSwWDqA/rm61EIhEGDRqEyMhIjBo1SttxSDNJGQbHioqwKScHV0tKXnksbbzUyDpSCEbinkQsOLcA\nEoEEgjwBHMscMa3nNNhPsIdrlCtMnGnYMtEM1hePb7/9FsHBwdqOQZopt7ISW3NzsSU3F/ZGRpjT\nsSNe8/TE2vz8Rjde8qOJZgiJCEH4oXAMOz2szjIgwQ+DgYc1y4HsdN6JpSeXokOPDlpMSvSVxjcj\nDw0NhaOjI3x9fes8npycDE9PT3Tt2hVr1qwBAJw4cQLe3t6wt7fXdEyiIkseP0ZmZSV+9/HB5YAA\nfOjkhC8XLEC/I0eA/Py6B+fno9/Ro4iMiNBOWBaxtrbGTyd+QkLPBJShrM5ztetIbb65mQoH0RqF\nV9VVlbNnz8LCwgLTp0/HzZs3AdTMJfHw8MDJkyfB5XLRu3dvxMfHY/fu3RCJRLh9+zZMTU1x4MCB\nBieM0VDd1oc2XmocwzAoPlWMnA05yDyeiZ2cnZhdMlv+/PZu2/Fj2o+0jhRpsVY1VDcoKAg8Hq/O\nY5cuXYK7uztcXV0BABMnTkRSUhJWr14NAPjtt99gb2//ykXvXlzka9CgQRg0aJCKk5OGyBgGp4qL\ncUckwnxnZ4VfZ2pqSnuCv6RaUI283/KQszEHHEMOuPO4MI8yh9NgJ/BEPPk6UnaldhCJRFQ8iNJS\nU1NVtoAsK/o8+Hw+XFxc5D87OzsjLS1N/vOMGTOaPEdLV4gkynlWVYXteXnYlJsLEwMDhFM/RbOV\nXilFzoYcPP39Kdq/3R4ev3ig3RvtwOFw8O2yb5EnzYPdQjtsWb0Faz9fi7zfataR+uSrT7QdnbQy\nL3+xXrVqVbPPxYrioYpltCMjI+mOQ0Nm3buHvQUFeNfODr95eqKflRUtha4kqViKgoQC5GzIQfWz\nanSc0xF97/etN4GP1pEi6qCKOxCN93kAAI/Hw+jRo+V9HhcvXkRkZCSSk5MBAF9//TUMDAywVMFm\nDerz0KzjRUUItLSELW3rqjTxPTFyNuYgb2cerF63AncuF7YjbWmfb6IVrarPoyGBgYF48OABeDwe\nnJyckJiYiPj4eG3H0msMw6BEIoF1AwViuK2tFhK1XrJqGZ4lPUPOhhyI/hWhY2hHBFwJgKmrfg8M\nIK2bxovHpEmTcPr0aRQWFsLFxQVRUVEICQlBbGwsRowYAalUipkzZ8LLy0up81KzlWoUV1djZ34+\nNuXkoK+VFbZ6emo7UqtVkV2B3M25yN2SC1N3UzjNdYL9OHsYGGt8hDwhdbTaZitVo2arxjW19DlQ\nc5eRVlqKTbm5OPD0KUba2mKOkxMGWVtTX4aSGBkDwUkBcjbkoPh0MRwmO8ApzAkWPrQyMGGfVt9s\npQp051FfnaXPX1iI8Hh+Ps7MmYOUTZtgamqKaobBokeP8J6dHe737QsHI1p1VVnVhdXI/TUXuZty\nYWBuAO5cLjx3esLQQmf+iREdQncez9GdR8OWffst1nTu3PAyIPn5WMLj0VyLFmAYBqVpNcNsC/8o\nRPvR7eE01wlWr9PoM9I6qHUPc9J6pfP5DRcOAHB0xDU+X7OBWpGNazc2+pxUJEXOLzm4GnAVd6bc\ngbmPOfo86AOvHV5o168dFQ6iF3Tmnpqareorb+J5Wvq8YY3tnSG6LULOhhzkx+WjXVA7dPm6C2yG\n2YBjQO8jaV2o2eo5araq71F5ObzCwlAdEtLoMcP378exmBgNpmodopdHw/xrc4iXi7Fo5SI8O/AM\n/A18lN8rR8cPO6Lj7I4wcaGlz0nrRx3mpB43ExOEeHhgMy193qTG9s7YtWEXZn43EwZmBqiyr0Kv\n2b2waNUiLaclhB3ozqMVK6yuxt6CAoyxs2tw29by8nIMmTOn/n7h+fnod+SIfLSVvisuLkb4sHAE\nXwmus3dGrdol0GNPxNJihESn0J0H9KfPo1Imw+HCQuzKz8dfAgFG2tpiiI1Ng8eampoiZdOmmqXP\nz5+vu/Q5FQ5UZFVAkCKA4KQAUzKmYJPxJsysnFmngFDhILqI+jye05c7j8SCAsy7fx89LSww1dER\n79vbo52hztR/tasurkZxajEEJ2sKhqRQAush1rAZagObITaotKnEwr4L8cH9D+Svob0ziC6jOw89\nMcDKCtcCA+FiQp21ipBVylB6sRSCkwIUnSiC+F8xrPpbwWaoDbzjvWHR06LOSKnC7ELYldqBZ0h7\nZxDSFJrnwTL5VVWIe3l71uecTUyocLwCI2NQdr0MWd9n4cZbN3De/jweffIIjIxBl6+7oP/T/uh5\nrCc6fdIJlv6W9YbYxsXGIU+ah7yFedhycwtyF+YiT1qzdwYhpC6dufNozX0eYqkUSc+eYWd+Pv4u\nKcEYOzuMt7dHWwOq7U2pyKyQN0MJUgQwbGcIm6E26DirI7zivNDWRvFl42nvDKIvqM/judbc57H8\n8WNsyMlBX0tLTOvQAe/Z2cG8TRttx9KojWs3ImxRmELHVguqUXzqhX6LYklNn8XzfguTznRnRoii\nWvLZqTPFY3hERL3VYjVNkRVsX/Z3SQm6mJigQwNDbfVBdnY2BvsMxql/T9WZzV1LVilDyd8l8mIh\nviNGuwHt5AXD3NecZngT0kxUPDgc4NQprc5fqLOC7UtzKgIOH8b30dEY2Ng6U3rsxdnci79cXNNv\ncaMMghM1xaL071KYdTeDzVAb2A6zhdXrVrQfBiEqQsWjtngAWlsttqkVbN+4fh1nv/pKo5nYqMHZ\n3A+DsdthN8AAEoEEIkMRuvXohgWfLoD1IGu0tabtbglRBxqq+yJHR8QePYqTV67gamBgvaeFEgkC\nr16t97hFmzYtOj6dz6+zZ8bLmczKypT4JXTX9NnTEZ4QjnFp4+pMxptSMAXA80l5fon4+NjHNDyW\nEBbTneKxfTvg5wf4+aG7lRV2e3s3eJhZmzb4w9e33uONNYQoenxlE/H0cQVbRsZAfFeM0kulEF4S\novRSKcR3xJjlPgvr7ddjxtMZNJubEC1QxWgr3SkeH3wg/6MNh4OuZmYNHtaGw4FHI8+15PimuruN\nW3/rYJMq+ZUoTSuVFwvhVSHa2reFVR8rWPW1guM0R1j4WaCNaRv4F/vXm839e7ffqXAQogG10xpW\nrVrV7HPoTvGopaXVYv25XBzXoxVsJSUSCK8I69xVMFUMLPtawqqPFVyWuMCqtxXatm+4v6KsrIxm\ncxPSiunWsJX8fPQ7ehSREREav/TK8HD0O3IEeHl2uBYzvexVu+O9iqxKhtLLpeD/zMedGXdwyesS\n/ub+Dd4qHqoLq+EwyQH+5/3Rv6A/ehzuAdcVrmg/sn2jhQOg2dyEtHY6M9rqP7Nn4/UuXRAZEaG1\neR7l5eWIjInBxUePcOmfm+gT0EPrmWo1NZ+iFiNjUP6wvM4dheimCKbuprDqYwXLPjV3FmbdzWBg\n2PzvHrFfxWLQqEHy2dwAcOt6zWzuecvmNfu8hBDF0VBdDgfRy6Ox+MvF2o4CoP7cBTZoLFNlXqW8\nSAgvCSG8LIShtaG8SFj2sYRlL0u0MdevWe+E6AMqHhwOwtzDYMQ1AgAIK4TwfdsXi1ZoZte3xuYu\nJLonsi5TPDceHCMOpEIpSkpLwDXg4oOBH/z/u4reVjByNNJIRkKIdlHx4HBwCjWTBIUQYgu2YBZn\nFiw49XeFU4cypgxbmC34EB82uhMdGzPF+8bj59M/w6aRzaQIIbqNJgkC2I7t6IZuuB1wG9uPbdf4\niJ0BxQMQMTKi3lamQgiRGJDIvkyBiVh/Yj2NbCJED9Gqus/V3nloe9e34uJi1u1Ex8ZMhBB2aMmd\nh84M1c0wzJDPE9CWF+cubO26lTIRQnSWzhQPNswTYOPcBTZmIoS0fjrT58GGXd/YuBMdGzMRQlo/\nnenz0IFfgxBCNIr6PAghhGgUFQ9CCCFKY3XxuHv3LubOnYsJEyZg69at2o5DCCHkOVYXD09PT2zY\nsAEJCQk4duyYtuMopaUTcNSBjZkAduaiTIqhTIpja67m0njxCA0NhaOjI3xf2p0vOTkZnp6e6Nq1\nK9asWSN//NChQxg1ahQmTpyo6agtwsa/KGzMBLAzF2VSDGVSHFtzNZfGi0dISAiSk5PrPCaVSjF/\n/nwkJyfj9u3biI+Px507dwAAo0ePxp9//onffvtN01FbhMfjaTtCPWzMBLAzF2VSDGVSHFtzNZfG\n53kEBQXVexMvXboEd3d3uLq6AgAmTpyIpKQkFBQUYP/+/aioqMCbb76p6agtwsa/KGzMBLAzF2VS\nDGVSHFtzNRcrJgny+Xy4uLjIf3Z2dkZaWhoGDhyIgQMHNvl6JycncDgcdUZsFsqkODbmokyKoUyK\nY1suJyenZr+WFcWjpW8on89XURJCCCGKYMVoKy6Xi6ysLPnPWVlZcHZ21mIiQgghr8KK4hEYGIgH\nDx6Ax+OhqqoKiYmJGDNmjLZjEUIIaYTGi8ekSZPQv39/3L9/Hy4uLvj1119haGiI2NhYjBgxAt7e\n3ggODoaXl5emoxFCCFGQTiyMSAghRLNY0WxFCCGkddGp4iESidC7d28cOXJE21EA1MwoDQoKwty5\nc3H69GltxwEAMAyDzz77DBEREdixY4e24wAAzp07h7lz52LWrFkYMGCAtuPIZWdnY9y4cZg5c2ad\nVQ+06fbt2wgODsa8efPw+++/azXLkydP8OGHH2L8+PEAav79zZgxA7Nnz0ZcnHY2G3s508s/syFT\nUlISZs+ejYkTJ+LEiROsyNSsdQQZHbJixQrmu+++Yw4fPqztKAzDMMzp06eZt956iwkJCWEePnyo\n7TgMwzDM/v37mRkzZjCLFy9mUlJStB2njoMHDzKbN2/Wdgy5o0ePMrt27WIYhmGCg4O1nKbG999/\nz5w9e5ZhGIYZM2aMltPU+L//+z+GYRhmx44d8n972n6/ajM19rM2vJxBIBAwM2fO1FKaGi9nkkql\nzPjx4xV6bau788jKysKbb76J7t27w8fHBzExMQCAEydOwNvbG/b29qzJFBQUhKNHj+Kbb77BypUr\nWZHp/v37GDBgAKKjo7FhwwZWZKoVFxeHyZMnazTTq3L1798fmzdvxpAhQzBy5EhWZJo2bRoSEhKw\nZMkSFBYWajXLy16c7NumTRtWZNIkZTOtXr0a8+fPZ00mpdcRVEc1U6fc3FwmPT2dYRiGEQqFTLdu\n3Zjbt28zn332GbNw4UJm+PDhzLvvvsvIZDKtZ6pVWVmp8W8+jWXatWsXs2fPHoZhGGbChAmsyMQw\nDJORkcHMmjVLo3mayrV27VrmzJkzDMNo/ptrU3+nJBIJ8+6777IiS+17s3PnTvmdx8SJE1mRqbGf\ntZlJJpMxS5YsYU6ePMmaTC9S9I6WFTPMldGhQwd06NABAGBhYQEvLy/k5ORg9erVAIDffvsN9vb2\nGl0GoKFMfD4fd+/exbFjx1BcXIzw8HCN5WksU05ODsaNG4fw8HCcPXsWgwYNYkUmLy8vbNu2DaGh\noRrN01SuwYMHIyoqCnFxcXBzc2NFJjMzM3z11VcQiURYsmSJVrM4Ojpi+fLlSE9Px5o1axAeHo75\n8+fjyJEjap+n1VSma9euYc2aNZg1a1adn5cuXarVTN988w3Mzc2RkpKC0tJSPHz4EHPmzNF6pn79\n+im/jqBq6pt2PHnyhOnUqRMjFAq1HUWOMimGjZkYhp252JSJTVlqUSbFqDpTqy0eQqGQCQgIYA4c\nOKDtKHKUSTFszMQw7MzFpkxsylKLMilGHZlaZfGoqqpihg8fzqxdu1bbUeQok2LYmIlh2JmLTZnY\nlKUWZVKMujK1uhnmDMNgxowZaN++PdauXavtOAAok6LYmAlgZy42ZWJTllqUSTFqzaTSUqQBZ8+e\nZTgcDtOzZ0/Gz8+P8fPzY/7880/KRJl0KhebMrEpC2ViT6ZWd+dBCCFE+1rdJEFCCCHaR8WDEEKI\n0qh4EEIIURoVD0IIIUqj4kEIIURpVDwIIYQojYoHIYQQpVHxIIQQojQqHoQQQpRGxYNonIGBAT7+\n+GP5z9HR0Vi1alWLz8vj8eDr69vi8ygiJiYG3t7emDZt2iuPi4yMxPfff9/o8yUlJRrb0bGp/eE1\nmYW0flQ8iMYZGRnhwIED8m1UNblx16swNatMK3Tshg0bcPLkSezcufOVxzX1uwkEAqxfv17hjC1x\n/vx51mQhrR8VD6Jxbdu2xezZs+ut8pmRkVHnzqH2jiQjIwOenp4ICQmBh4cHpkyZguPHj2PAgAHo\n1q0bLl++LH+NRCLB1KlT4e3tjfHjx6O8vBwAsGvXLvTt2xf+/v4ICwuDTCYDUHO34uHhgRkzZsDX\n1xfZ2dl1Mv3www/w9fWFr68v1q1bBwAICwvD48ePMXLkSPz444/1fr8vv/wSHh4eCAoKwr179+QF\nZOzYsQgMDISPjw9++eUXAMCyZcvw6NEj+Pv7y3e5a+i4F/F4PHh6ejb4ezaWGajZSa729V5eXpg9\nezZ8fHwwYsQIVFRU1MsiFosxatQo+Pn5wdfXF3v27Hnl/1eiZ1SyvCIhSrCwsGBKS0sZV1dXpqSk\nhImOjmYiIyMZHo/H+Pj4yI+Ljo5mVq1axfB4PMbQ0JC5desWI5PJmICAACY0NJRhGIZJSkpi3nvv\nPYZhanZK43A4zN9//80wDMOEhoYy0dHRzO3bt5nRo0czEomEYRiGmTt3LrNjxw75awwMDJi0tLR6\nOa9cucL4+voyYrGYKSsrY7p3785cu3aNYRiGcXV1ZQoLCxt9TXl5OVNaWsq4u7sz33//PcMwDFNU\nVMQwDMOIxWLGx8eHKSoqqvc7N3Tcy9dp7PdsKrOFhYX89YaGhsz169cZhqnZy37Xrl31suzbt6/O\nvvIlJSV1cpw5c4ZZsGABs3//fmb//v3MF198Ue/9ILqL7jyIVlhaWmL69OmIiYl55XHM82YkNzc3\ndO/eHRwOB927d8fQoUMBAD4+PuDxePLjXVxc0K9fPwDA1KlTce7cOfz111+4evUqAgMD4e/vj7/+\n+gtPnjyRv6Zz587o06dPvWufO3cO48aNg6mpKczNzTFu3DicOXPmlXnPnj2LcePGwcTEBJaWlhgz\nZoz8d1i3bh38/PzQr18/ZGdn48GDBw02kzV03Msa+j2Vyezm5oYePXoAAAICAuq8h7V69OiBEydO\nYNmyZTh37hysrKzqPF97R+Xs7IyxY8c2mJPoLioeRGsWLlyIrVu3QiQSAQAMDQ3lzUkA6jTFGBsb\ny/9sYGAAIyMj+Z8lEon8uRf7GBiGAYfDkW+Ik56ejvT0dNy9excrVqyQH2dubt5gvtrXvny+V2no\nNQCQmpqKlJQUXLx4EdeuXYOfnx8qKirqvb6h4yorKxu8TkO5FM384vvZpk2bOu9hra5duyI9PR2+\nvr74/PPP8cUXX9R5/o033sCjR4/Qu3dvlJSUwNDQsNH3hegeKh5Ea2xsbDBhwgRs3boVHA4Hjo6O\nKCgoQFFRESorK3H48GGlO9MzMzNx8eJFAEBcXByCgoIwZMgQ7Nu3D0+fPgUAFBUVITMzs8lzBQUF\n4Wqfo1wAAAGpSURBVODBgygvL4dIJMLBgwcRFBT0ytf85z//wcGDB1FRUQGhUIjDhw8DAEpLS2Fj\nYwMTExPcvXtXntHS0hJCoVD++saOU+T3bG7mWi9nyc3NhYmJCaZMmYKPP/4Y//zzT53jy8vLYWJi\nAgA4evQohg0bhgsXLih0LdL60VcFonEvFoTFixcjNjYWQM2dx4oVK9CnTx9wuVx4e3s3+JqXf37x\nzx4eHvj5558RGhqK7t27Y+7cuTAxMcHq1asxfPhwyGQytG3bFuvXr0enTp0aPHctf39/fPDBB/Im\nrVmzZqFnz55NviY4OBg9e/aEg4MD+vTpAw6Hg5EjR2Ljxo3w9vaGh4eHvMmpffv2GDBgAHx9ffH2\n22/jiy++aPC4lzX0eyqTuaH309bWVp7lrbfewtChQ/HJJ5/I7/ReHsb777//YuDAgQBqCs+jR4+a\nHA5MdAftJEhIK8Pj8TB69GjcvHlT21GIHqNmK0JaIbbMjSH6i+48CCGEKI3uPAghhCiNigchhBCl\nUfEghBCiNCoehBBClEbFgxBCiNKoeBBCCFEaFQ9CCCFK+3+y7kvgl4Ts7gAAAABJRU5ErkJggg==\n",
"text": "<matplotlib.figure.Figure at 0x2bd7f4a8>"
}
],
"prompt_number": 243
},
{
"cell_type": "markdown",
"metadata": {},
"source": "We see that KDTree outperforms Naive method for narge $n$, but it may not do well for small number of datasets. In my PC, i cannot run Naive method beyond $2^{13}$ datapoints, or else i receie MemoryError. So, lets evauate te performance of KDTrees upto 1Million datapoints."
},
{
"cell_type": "code",
"collapsed": false,
"input": "perf_test(methods = ['Tree'], n_list = [2 ** i for i in range(4, 21)], plot = True)",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "Took 2.00009 msecs with Tree method for 16 datapoints\nTook 2.00009 msecs with Tree method for 32 datapoints\nTook 1.99986 msecs with Tree method for 64 datapoints\nTook 3.00002 msecs with Tree method for 128 datapoints\nTook 6.00004 msecs with Tree method for 256 datapoints\nTook 9.00006 msecs with Tree method for 512 datapoints\nTook 20 msecs with Tree method for 1024 datapoints\nTook 50 msecs with Tree method for 2048 datapoints"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\nTook 108 msecs with Tree method for 4096 datapoints"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\nTook 194 msecs with Tree method for 8192 datapoints"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\nTook 396 msecs with Tree method for 16384 datapoints"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\nTook 837 msecs with Tree method for 32768 datapoints"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\nTook 1741 msecs with Tree method for 65536 datapoints"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\nTook 3596 msecs with Tree method for 131072 datapoints"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\nTook 7824 msecs with Tree method for 262144 datapoints"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\nTook 18207 msecs with Tree method for 524288 datapoints"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\nTook 40017 msecs with Tree method for 1048576 datapoints"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\n"
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\n",
"text": "<matplotlib.figure.Figure at 0x36e579e8>"
}
],
"prompt_number": 244
},
{
"cell_type": "markdown",
"metadata": {},
"source": "We can see, algorithm is scaling well with data-set size $n$. If we analyse the complexity of algorithm, its linearithmin , i.e. $\\Theta (n\\log{n})$."
},
{
"cell_type": "code",
"collapsed": false,
"input": "",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 228
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment