Created
November 18, 2018 13:17
-
-
Save mxl00474/0669edd78927fab9e860e89e595c3566 to your computer and use it in GitHub Desktop.
kernel k-means法を試してみる
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "execution_count": 23, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import numpy as np\n", | |
| "from sklearn.metrics import pairwise\n", | |
| "from sklearn.cluster import KMeans\n", | |
| "import matplotlib.pyplot as plt" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## データセットを作成し、正解ラベルで分類してプロット" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 15, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "def make_dataset(N):\n", | |
| " X = X = np.zeros((N, 2))\n", | |
| " X[: N // 2, 0] = 10 * np.cos(np.linspace(0.2 * np.pi, N // 2, num=N // 2))\n", | |
| " X[N // 2:, 0] = np.random.randn(N // 2)\n", | |
| " X[: N // 2, 1] = 10 * np.sin(np.linspace(0.2 * np.pi, N // 2, num=N // 2))\n", | |
| " X[N // 2:, 1] = np.random.randn(N // 2)\n", | |
| " return X" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 22, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<matplotlib.collections.PathCollection at 0x7fd19d3aa518>" | |
| ] | |
| }, | |
| "execution_count": 22, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": { | |
| "needs_background": "light" | |
| }, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "X = make_dataset(500)\n", | |
| "plt.scatter(X[:N//2, 0], X[:N//2, 1])\n", | |
| "plt.scatter(X[N//2:, 0], X[N//2:, 1])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## k-means法で分類しプロット" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 26, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<matplotlib.collections.PathCollection at 0x7fd198f00a58>" | |
| ] | |
| }, | |
| "execution_count": 26, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAD8CAYAAABzTgP2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJztnXuYFOWZ6H8vw2AGNMMgiHKLJMuSiKLGWY+7iVkMLgjBgMSg5rK6mnCMm2PEE6KsPkjcnLMSdiXrxsTFyCYmahgjNxGDqNknObtr4iAw4CqBeIPxhsLgbSJzec8fVcVU11RVV8909fX9Pc883V31Vfc71dX1ft97FVXFMAzDMDwGFFsAwzAMo7QwxWAYhmFkYIrBMAzDyMAUg2EYhpGBKQbDMAwjA1MMhmEYRgamGAzDMIwMTDEYhmEYGZhiMAzDMDIYWGwB+sLw4cP1xBNPLLYYhmEYZcWWLVveUNUR2caVpWI48cQTaW5uLrYYhmEYZYWIvJhknJmSDMMwjAxMMRiGYRgZmGIwDMMwMjDFYBiGYWRgisEwDMPIwBSDYRiGkUFeFIOIrBSR10Vkp2/bMBHZLCK73ceGiGMvdcfsFpFL8yGPYRiG0XfylcfwY+D7wN2+bdcDj6nqLSJyvfv6Ov9BIjIMuAloBBTYIiLrVfVgnuQyjPzQ0gSP3QyH9oLUgHb1fqwfC1MXw+R50cciOJc6IANAu6OPM4wikRfFoKq/FpETA5tnA1Pc5z8B/p2AYgCmA5tV9QCAiGwGzgPuy4dchhFJ1M26bhjMWJp5k25pggevho5257V2hT8e2uuMg57jg8fi67Gu3dHHBWVMqoQMIw+kmfk8UlVfcZ+/CowMGTMa2Ot7vc/dZhi5E3YjDbuBxt2s2w/Aur91nnvHPHazb2wWOtqd8bkeGzwumzLKqkz2Qf0YUx5GnyhISQxVVRHR7COjEZH5wHyAcePG5UUuowLImPn7iLuBZrtZdx3OvEkf2pebTP7xuRzrH5tEoWRTJof2wuqvOn+20jByIM2opNdE5AQA9/H1kDGtwFjf6zHutl6o6gpVbVTVxhEjstaAMiqBliZYfjIsGeo8tjT13v/g1b2VQhDvBuqR5GbtH1M/JrnMwfG5HOsfm1ShJFUmQUUZPJeG4SNNxbAe8KKMLgXWhYzZBEwTkQY3ammau82oVlqaYOl4WFLvzHQP7QU0/IaWi4kn1xu9f8zUxVBbl+xzauuc8bkeGzwuqULpizIJKsojCrgevj3MeQxTxEbVkK9w1fuA/wImisg+EbkCuAX4KxHZDZzrvkZEGkXkRwCu0/nvgSfdv5s9R7RRhbQ0wdqrHDt/GH2Z+XvkcqOvGZR5k548D86/zTHDgGOWCXusH+uM85tpgsciPftkQPRxSRRKX5UJ9Jy74KrLv7JY/VX4doMpiipEVPtl+i8KjY2NamW3y5BsjtHlJ2c3CyGwpC2H8Tg30OCNN5eopGKRa1RSSxOsnk+GMz2K+rGwYGfycwjh59EoK0Rki6o2ZhtXlv0YjDIg7KbmJ8wpnGQFEJz5Z0QXhY2PcLZOnlf6N7hcZZw8D156AppXEqsc/CuNXFZdYc5ui4CqSKwkhpF/oswTQYKmoWymkKDpJMrEUz8W5t4JSw45s+JqulnNuhXmrog2ewXNVrk61kNNUNpjelpS7/iIzOxU1tiKwcg/fXUKT13s+Bi6O3qPizLxlMPMv9Dkck6SrLr8eIok7jsOywUxygpbMRh9Iy6UtK9O4cnzYM4PHCXgUTfMmf1f97zdZNIgzjkeJBcTlJcLYpQltmIwkhOVTBb0F9SPSejQlEzTkHe8KYDCEjznSTLIk3zHfuWRNCvdKAksKsnITksTPHxddBiphxfp0qvkRBgCjZc7NnGj/EjyHedyPZiSKAgWlWTkh0Q3eRdvhugvPWEF4CoT77uLmjD4c0GS+Jyiaj8ZRcEUgxFPLo7koL/AfuCVjfcdB1eUwUCBXDOy7bopOqYYqp1stt/EjuQQf4FRHWSbBCT2ORHhl7A8iUJjUUnVzIZrnUzZsHIIXl2iRHHurr/AfrRGGLnUmvKut9A8ifnONWukjimGaqWlKT5D1lvWR/2o/XV+5q4wJ7IRTa+Q2Aj84bChJkyF5rssia4AmCmpWnnsZrLW1Dm0L+BItiW90Uf85qYkoavZTJiWRJcqphgqmTgbbS51icyRbOSTJNdTEr9EsKGSkTfMlFSpZPgPQvoZ5FqXyDAKydTFxGZhe+TaXc9IhCmGSmTDtY4tNmgq8heti3MIhvUHMIxCMnmeE9CQTTn4ndVx3f6MnLDM50oiUYayr5+BhQMapU7cNV0zCGbf7jyPSsIspf4aJUBJZD6LyERglW/Th4HFqvo935gpOG0/n3c3rVZVq76VK0kzlC0JzSgnkiTRLT/ZKr3mmVQVg6ruAk4DEJEaoBVYEzL0N6o6K01ZKp5EGcqWhGaUKXGTmKSVXk0xJKaQPoapwB9U9cUCfmblEWVLTeKEsyQ0oxJJkoRpTuqcKKRiuBi4L2Lfn4vIdhF5WEQmFVCm8iIu0ij2xyHQeIUloRmVSZLManNS50RBnM8iMgh4GZikqq8F9n0Q6FbVd0RkJvDPqjoh5D3mA/MBxo0bd8aLL1bZwuNIpFEIXnJQmI/BnG9GNdBnJ3V1lX9P6nwu1IphBvBUUCkAqOpbqvqO+3wjUCsiw0PGrVDVRlVtHDFiRPoSlxJxSgF6MpSPlB2Qnr7H1vnMqAYmz3Ou9bl39u4AOPt2Z39cmQ2rwZRBoTKfLyHCjCQixwOvqaqKyJk4yurNAslV+hypaRSDZSgbhkNfndTexKtKVg7ZSH3FICJDgL8CVvu2XSkiV7ovLwR2ish24DbgYi3H5Iq0yFrTyCKNDCMR2ZzUzSvN5+CSumJQ1XdV9VhVPeTbdoeq3uE+/76qTlLVU1X1LFX9z7RlKiuyRVNYpJFhJCNrmQ3tqQxQ5VhJjFIhKloibpZjkUaGkZwjZTZisLBWwKqrlgYbrs3sjeDvfxsabVRdkRSGkTe830xkhJ8vrLWKy8XYiqHYZCt4FxptZI1xDKPPzLrVWW0HzUpeRWHrHmcrhqKSLeLIW9ZatJFh5JdZt8K4s8JXBaG1l7SqIpdMMRSTbBFHifotG4bRJ6ImXLFhrSsdhVLhEzUzJRWTWEeXhaEaRlGInZBVR+SSKYZCERZ1FBtxZGGohlEUsoW1VkHkkimGQhBV/G7CtJDiX1bwzjCKSraw1rqGii/EZ4ohbeKijnY/YhFHhlGKREUu1QyC99+u+Iglcz6nSdLid2YyMozSIyxy6fC7IRVcKy9iyRRDWuRS/M4wjNIkOHFbMjR6bAUpBzMlpYUVvzOMyqNKCvGZYkgLK35nGJVHlRTiM8WQFlb8zjAqjyopxGc+hnwRLLo1YRpsv9eK3xlGpZG0EF8Zk7piEJEXgLeBLqAz2G9URAT4Z2Am8B5wmao+lbZceSWsOur2e+HULzghqVVaodEwKpYjysH3uwcnL2nCNCe/oYx/94VaMZyjqm9E7JsBTHD//gfwQ/exPGhpCp85eHkKC3YWXibDMNInLJw1aCnw8hxeeqKsLAWlYEqaDdzttvN8QkSGisgJqvpKsQVLxIZrovdVgK3RMIwYguGsFVKZtRDOZwUeEZEtIjI/ZP9oYK/v9T53W+nT0uQkvERRAbZGwzByILYy611lkyFdCMXwSVX9OI7J6G9F5FN9eRMRmS8izSLSvH///vxK2FeyhaVZnoJhVBcVkueQumJQ1Vb38XVgDXBmYEgrMNb3eoy7Lfg+K1S1UVUbR4wYkZa4uRE3O6gdUnYOJ8Mw+kmF5DmkqhhEZIiIHOM9B6YBQW/seuCvxeEs4FDZ+BfiZgfnf69wchiGURpUSJ5D2s7nkcAaJyKVgcC9qvpLEbkSQFXvADbihKruwQlX/ZuUZeo7ueQq2GrBMKqTCshzECcYqLxobGzU5ubmwn5oSxOs+1voOtyzrWYQnP5ly1UwDKM3wfwmcO4Zg46G9oNFuV+IyJZgLlkYpRCuWh5suCZTKYDz+uk1cN3zxZHJMIzSJZjnUNfg9HLwynZ7Dbug5CaTVispCXFhqb1qsxuGYbhMnuckuS5pg0FDoLsjc39HOzx8XXFki8EUQxLKIIrAMIwSJ8rp3H6g5EJYTTEkIS6KoG5Y4eQwDKN8iXM6l9iqwRRDEuK+0BlLCyeHYRjlS1zCa4mZpE0xJGHqYqdqYgbi9FUoMaeRYRglShndKywqKYpgzoKV0DYMo7/UDQtfHZSYSdoUQxjBnIVDe2HrT2H27aYMDMPoOzOW9s6HGlDjPC4ZWjKTTjMlhRGVs1BiDiLDMMqMyfOcCWb9WECclUK3uqsIdSaha68qepSSKYYglrNgGEaa+HMbAOjO3N/dAQ/G9HkpAKYYgtiqwDCMQhE12ex4t6i9G0wxBIlbFZSYg8gwjAqmiL0bTDHkguUsGIaRT2Inm8Xr3WCKIUjUF2WNdwzDyDfZJptF6t1giiHIjKUwoDZz24Baa7xjGEb+mTzPSZSNoki9GyyPwcOf0FbX4GwrUs10wzCqiCONfQK9G2rritY3PrUVg4iMFZFfich/i8jTIvKNkDFTROSQiGxz/4pzFjZcC6vnOzHEuDHFne0wd4UTVmZKwTCMNJl1q3O/qR+LIrzKCL7x7t/wiY3DWbu1teDipLli6AT+t6o+5fZ93iIim1X1vwPjfqOqs1KUI56WpvAWfB3tzgrClIIRRbBsSq4ry/4eb1QWk+extusTLFq9g/aOLmdbWzsLVm2j+cUDfGfOKQUTJbUVg6q+oqpPuc/fBp4BRqf1eX0mLm+hDJp2G0WipcnpvuWtMr1uXEnDC/t7vFGRLNu0q0cpuCjwsydeKujKoSDOZxE5ETgd+G3I7j8Xke0i8rCITIp5j/ki0iwizfv378+fcHF5C2XQtNsoEo/d7Kwq/XS0w5ornZo3y0+Ov8lHHW9Noaqal9vaI/ctWf90weRIXTGIyNHAA8A1qvpWYPdTwIdU9VTgX4C1Ue+jqitUtVFVG0eMGJGewH6K5PgxyoCo1aR2kWgFEHW8rVKrmlFDg+X9e2hr74jcl29SVQwiUoujFO5R1dXB/ar6lqq+4z7fCNSKyPA0ZeqF5S1UBi1Nziw9yWw9HyRZTXoriA3X9pYt6nhbpVY1C6dPLLYIQLpRSQLcBTyjqrdGjDneHYeInOnK82ZaMoVieQvlTz/t9Z2dnTQ1NTFlyhQGDx7M4MGDmTJlCk1NTXR2doYfFNq8KQTtcoIbgrJNmNb7+CKGJxqlwZzTS8MNm2ZU0ieALwM7RGSbu+3vgHEAqnoHcCHwNRHpBNqBi1VVw94sFbyokO4OkBrnR1w/1qJDyo0oe/3D12VG/UyY1qvZ0vsTZ/O5z32ON954g29+85tMnz4dgE2bNvGP//iP3H333TzwwAMcddRRme/vXR/e+8sA14yUgI52R47zb7OoJKMXDYNrOfheb7NRw+DakNHpIIW8D+eLxsZGbW5u7t+bBJvxANQMsmY85ciSoWQkBiWlto6vbZ/M/u4Pct9991Fbm/nD6+jo4JJLLuG4447jBz/4Qfx7eauWoIKKRHxllw2jh7VbW1n4i+10dPVc07U1wrILT+33ikJEtqhqY9ZxVasY/u+o8L4LdcPguuf7995GYVl+smuqyY3973bzp99/h+e+NZaGwTWhme4HDhzgIx/5CLt372b48ID7K5iHMGEabPlxspWDDIAPDLXseiOUtVtbWbZpF61t7dSI0KXK6KF1LJw+sV/KIaliqM5aSdaMp7JIau8P8MAznXxmQi0Nciizg5bnn2hpYthPPsVnxr7LA1+bnOmzCPNrbL8XzrgMkOwfrt2Zn7n6q7B0fG5O80I73I2CMef00SycPpHaAY5SAGhta2fh/dsLks9QnbWSrBlPZRG099ePcRR/FiW//13lxKEhN3HPP9HZDh3tfKheeP2NA44i8D4vyq8RlkWflPbAZ8QRNF15Ci3JsUZZsGT903R0Z1p0OrqVRatbUndSV+eKwZrxVBZhpSVmLM26ihg+WHjpUIQptf3AkZvuS28pwweL83r1V/tsukpE0iQ3S5CreKLyFto7ulNfNVSnYojDmvGUF1GhquBE/XhN1+vHOuWN68ceOXTuxwby4O87aPtjtJ/tYLuy4fcdfO4k3+L60F4SmYv6yqG92c1CliBX1SzbtCvV969OU1LdsPBVgyW1lR9xM+eoyrgbroXmlYw8egAXfqyWrz3Uzk8vqGPggMybfWe3ctXGdi78WC3HDQnOoRRHOaQUvLH2Kucx6nqsHxO+arEEuYohKmwV4ktn5IPqXDFYUlvlkOvMuaXJcRK7N/TbZnyAN99Tzrn7j6x7toP3O5X3O5V1z3Zwzk/e40C7ctuMD0R8uKZneuzuiPeFhTncc0mQM8d1yXPT+ZGl42JLZ+SD6lwxABx1TM+qoW6YoyxstVB+JJ05H/FDZI6tqxUe+sJgVj33QZb++lUuvN+Zif3ZqBqu+rNaLppUS21NjNmovc1Nbuvu738S8t4hq9pgQ6mBdbmHvJrjuiyYc/poml88wD1PvJSxLq2rrUm9dEb1KYawxLbD7xRPHiM7cX0Lpi7unVgWnDlnST6rrRG+NOFtvjRhCF5ej1upJQHdqVmTehH8P9oPOP/r3BW53dDjzG+mGEqK78w5hcYPDePbDz59xKx01MD0DT3VZ0p6+LpMpQDOawthLU2y1UGaPK+3k/n82zJvcA9flzgjWURyUAop45mpPLPP6q/mJxLJHNdlxzt/7KnZ1dbekXo+Q/WtGKJCVS2xrTRJMrudPC96ptvSVJ7fbc0gx7yZpNSGF8WUdLZvjuuyIiqfYcn6p1PLZ6i+FYNRXvR3dluOcf11w3pqdiVd7eTS/a2/jmujoETlM6TZn8EUg1Ha9LdvQTmaR9oPOAptw7XJVzu5mJSSmN+Mqqb6TElGeZHEuRxHlNmk1Dm0N/fyGrn8n3HmN6Pqqb4VQ1TcuZXCKE36O7udMC1V8UoKqSm2BEYKDIiIhYjang9SXzGIyHnAPwM1wI9U9ZbA/qOAu4EzcLq3XaSqL6Qm0IylTlZpt88+N6DWSmGUMn2d3bY0OWWwq4WkjYKMsqI7Ihw6ans+SLvncw1wOzADOAm4REROCgy7Ajioqn8CLAfSv0MfdUzP87phMOcHtqyuNLxonkq8WdYOidghlsFcgYyOyHKO2p4P0jYlnQnsUdXnVPUw8HNgdmDMbOAn7vNfAFMlrUByL7nN79Cz5LbKo6UJ1lwZH80jNTD+LwsnUz4ZeBThRfw09ygsK41R8iycPrFX9n1tjaSa/Zy2YhgN+D1i+9xtoWNUtRM4BBybijSW3Fb5JFkp1NbBBXfApeuh5qjocaWK1+AnjEN7k9/osyUPGqVD8OtOOdu+bKKSRGQ+MB9g3LhxfXsTS26rfMIS4oJ4zuuWJhg0BNrfL4xseSOuqqv0RCcFayAFS4scftdKY5QByzbtCk1wW7ZpV2oJbmkrhlZgrO/1GHdb2Jh9IjIQqMdxQmegqiuAFeD0fE5FWqP8SZK34N0ks2UUlywxSiG4z5/fECycF0U55n5UMK0RJbajtueDtE1JTwITRGS8iAwCLgbWB8asBy51n18IPK5eJTPDyJW6hvj9XqOeJCuLsiPKvLQvt//XSmOUFFEO1zQreqWqGFyfwdeBTcAzQJOqPi0iN4vIZ91hdwHHisge4Frg+tQEshyGKkd68hoqbVZcPzajO13mvjHJ/18rjVFyRM2S05w9p+5jUNWNwMbAtsW+538EPp+2HIDlMFQqftt57M9FnSY9485yVhaV4lvy38yjssRDelEAzqRo0JDwkuZG1VI2zue84F3wD1/Xc1Pw5zQY5UeuvoKOdljzP6FUSmv3C8m8mbc0OY17vHMRbEAVpjSsQZURQnUpBg9/7kL7ASe3AewHUo70xVegBWyukxoCS9qcpy1NsHR87xVQp++8eNd2VMMjo2SJ6v3cMLg2ZHR+qD7FEJfLYD+S8qPSfAWJ0Z58g6gVUy59K4yS5abzJ7HwF9vp6OqZzdTWSGxP6P5SfYrBchkqi1Sqp8blCZQQq7/qZHDHJfNVreKsLIYMGnik/0LD4FpuOn9SajkMUI3VVY3KIqzpTJ9wfQ71Y2H8p/LwfgUiWy0oCz0ta9ZubWXh/dszmvL423ymRRUqhhino5UCKD+CZbmTMqDWicbxqGuAuXc6imbf7/IuZlGw0NOyJ66tZ5pUoWKIMRGUYxtIw1EOC3Y6ztioWP4gH/oLOPxez+v2A46tPmkrzXwSVFL5oG6YdWWrAIrR1hOqUTHE3TjMHlv+JDUtPf9rQstHFNrXVDvEKfv+dy87K5a+msWkhiONjObeCdc9b0rB6DPV53yeuhhWzyd05WD22PInIywzzildIs7l87+XGTUETsnwXPpI1NbZ6sDIK9W3Ypg8Dxovp5c92uyxlYNnWpp7J9QMyu3YumEhs/YUk+GC5svJ8+CMy5Ifn2urU6OsiMpVSDOHAapRMQDMuhXmrsiskTQwvW5IRhHJqR6jOJnAR5zZ7rY0Vxdh5svdj2Q/rrbOUXwLdppSqGBuOn9SaJOeNHMYoBpNSX4sA7qyeezmzLpYsYizkvSbdZafnEKORIAw82Wsr0ssa7lKWLu11enF0KXUiNClyuihdSycPjHVHAaoZsUQlQG94Rr7wVUK2YIJpMYpjxF1o007GMFvvvQXApQB4T6G+rHOCsGoeLz8BS9UtUuV2gFSEKUA1WpKgujok8PvWj5DueP1MY4zAXntPZe0RZtj+huMUDesJ7+ifiw0XpH52t9Jzt9iM0wpmA+sqihW/oJH9a4Y4rC6SeVLkmqrwaqjUUxd3Pcub7lULo0qBJhtRWNULMXKX/CoXsVQN8zqJlUicdVW68fmdoMNK9OehFw/J8pkpd09FVSNqmHt1mD348KTiilJRJaJyLMi0iIia0RkaMS4F0Rkh4hsE5HmNGSJxJrzVCaRfgHpWwTP5HlOstjcOzPNQFFd/zw/QC6fE2WysryaqmTZpl3FFiE1H8Nm4GRVnQz8HlgUM/YcVT1NVRtTkiWcyfOcrNMwrNVn+ZLWTdZfdmPBTmdiEcx36KsfICxb23wKVcvLbdGmy7TzFzxSUQyq+ojb7xngCaA0pz7nf8+pU+PHWn2WN4W6yQaL9/Un0Syf72WUPaOGRudUpZ2/4CGaUwJQHz5A5EFglar+LGTf88BBnPCRf1XVFTHvMx+YDzBu3LgzXnzxxfwIeCRMcG9PbftcbcRGaeEP/TTHrVFmrN3ayqLVO2jv6IlOE+CLZ43jO3NO6dd7i8iWJNaZPisGEXkUOD5k1w2qus4dcwPQCMzVkA8SkdGq2ioix+GYn/6Xqv4622c3NjZqc3MeXRKhkSxuwtOsW/P3OUblYUrIyCNeUltrW3sqSW1JFUOfo5JU9dwsAlwGzAKmhikF9z1a3cfXRWQNcCaQVTHkndBIFoXmu2DcWfZDN8IJTigO7XVeg10zRs7cuHYH9zzx0pHsmy5V6mprCpbU5ietqKTzgG8Bn1XV9yLGDBGRY7znwDSgOGmdcRmuD19XODmM8iJsQuH1WTaMHFi7tZWf+ZSCR3tHV1GilNKKSvo+cAyw2Q1FvQNAREaJyEZ3zEjg/4nIduB3wEOq+suU5IknLmLFchqMKKImFNbXw8iRuIzmuCiltEglwU1V/yRi+8vATPf5c8CpaXx+zkxd7DRWN4xcqB8TXmTP8g+MHInLaI6LUkqL6q2V5MdyGoy+YPkHRgFYOH1iwT/TFINHWE4DOKak5SdbYT2jN5Z/YOSJqMS1IYNqCu54hmqulRSkV0tIX4OWQ3uddqAvPWHhq0Ymk+eZIjD6zU3nT2LhL7bT0dXjfq6tEf7PBf3LW+grtmLw45U9qB9L75LNCs0rbeVgGEbemXP6aJZdeCqjh9YhwOihdSy78NSirBbAVgzhREaVqLOisBmiYRj9xEtme7mtnVFuEtt/XP/pYosFmGIIJyraBNJv9WgYRsUTTGZrbWtn0eodAEVbJfgxU1IY2aJKzJxkGEYfKbVktjBMMYSRzVRkma2GYfSRUktmC8MUQxT1Y6P3WWarYRh9pNSS2cIwxRDF1MU4IashWGarYRgpUIxktjBMMUQxeZ5TdjuoHAbUwuF3YclQS3wzDCNnSi2ZLQxTDHHMuhXmrujJbK0bBiJuYT3tSXzbcG2xJTUMo4RZu7WVT9zyOOOvfwhVqBmQOeEsZjJbGBaumg1/Zuvyk0OqrVrfBsMwogmGpra1d1A7QPjg4Fra3us4ksNQKqsFMMWQG3FO5w3XmGIwDCODG9fu4GdPvNRre0e3MnjQQLYunlYEqbJjpqRciHM6H37X/A2GYRwhSil4lEpoahipKQYRWSIirW6jnm0iMjNi3HkisktE9ojI9WnJkxeyJb5ZfoNhGDg+hXtilAKUTmhqGGmvGJar6mnu38bgThGpAW4HZgAnAZeIyEkpy9R34vo2gOU3GIYBwLJNu3plNvsRSic0NYxim5LOBPao6nOqehj4OTC7yDLFc/73ovdZfoNhGGQ3E33xrHEl5WwOkrZi+LqItIjIShFpCNk/GvBXpdvnbitdJs+Dxivold9QWwcTpjmRS5bjYBhVTZyZ6EtnjeM7c0onNDWMfikGEXlURHaG/M0Gfgh8BDgNeAX4p35+1nwRaRaR5v379/fnrfpPML+hfiyc+gXYfq9bfdVyHAyj2vDnKrz7fie1NZmTR6E8lAL0M1xVVc9NMk5E7gQ2hOxqBfxFica428I+awWwAqCxsTHOfFcYgp27lp8MHcHlo5vjANb5zTAqmKhchYYSzlWII7U8BhE5QVVfcV9eAOwMGfYkMEFExuMohIuBL6QlU6rEOZ6bV1oCnGFUKOWaqxBHmj6G74rIDhFpAc4BFgCIyCgR2Qigqp3A14FNwDNAk6pG16QtZWIdz2qhrIZRgWQLSy3lXIU4UlsxqOqXI7a/DMz0vd4I9AplLTumLnZ8ClFBahbKahgVR7aw1FLOVYij2OGqlcORaqwRWCirYVQccSuCUs+Htcv+AAARTElEQVRViMMUQz6ZdauFshpGFRG3Iij1XIU4rIhevpl1q+Nofuxmx3xUP8ZRCtvv7Yla8kJZX3rCopWMsqKzs5N169bx4x//mL1793LMMcdwwQUXcNlllzFs2LBii5c6a7e2smzTLl5ua2fU0DrO+egIHtjSSntH15ExgqMUyiEsNQpRLX7kZ640NjZqc3NzscVIzvKT3fyGEBqvMOVglAWvvPIKM2fOZMiQIVx55ZWcdNJJvPHGG/z0pz/ll7/8Jffddx/nnpsogr0sCYakAtTV1vC5M0bzq2f3H1EWpRyWKiJbVLUx2zhbMRSC2FBWy3MwSp/Dhw8zY8YMLrjgAhYvXoxIj7l02rRp/OY3v2Hu3Lk8/vjjnHJK+c6Uw1i7tZVvP/g0B9/r3au5vaOLXz27n/+4/tNFkCw9zMdQCLI5nptXms/BKGnWrl1LfX19L6XgcfbZZ/Otb32LZcuWFUG69Lhx7Q4WrNoWqhQ8yjUkNQ5TDIVg6mJ6OaQzsDwHo7RZuXIlV111VahS8Lj88stZt24d77zzTgElSw8vRyGbsb1cQ1LjMMVQCLKFsoLlORglzUsvvcSkSZNixxx77LE0NDTw+uuvF0iqdMmWowDlHZIahymGQnEklDWC+jGOOclCWo0S5Oijj+bAgWC/80y6uro4dOgQRx99dIGkSpdsJiIv+qhUHc39wZzPhcRzMDevJCND2stzePBqC2k1SpLZs2dzzz338KlPfSpyzEMPPcRHP/pRjjvuuAJKlh+CYagLp09k1NA6WiOUw9C6WpZ8dlJFKgWwFUPhCSvZff5tsPuR6OqsVrrbKDJf+cpXeOCBB3jyySdD97/11lvceOONfOMb3yiwZP3HczC3trWjQGtbO4tW7+Ccj46grrYmY6xXOnvbTdMqVimAKYbiMHkeLNgJS9qcx8nzsldnNbOSUURGjhzJv/3bv/GZz3yG22+/nbfeegtwzEcbN27k7LPPZsqUKVx00UVFljQ3vMqoQV+CF4b6D3NPYfTQOgQYPbSO5RedVtaJa0mxBLdSIS4JDpyVxYKwyuWGUTiam5tZunQpmzdvZuTIkRw8eJATTzyRq6++mi9+8YuxUUulRlS5bA8Bnr/lM4UTqABYglu5YdVZjTKgsbGR+++/n4MHD/Lqq69yzDHHMGZM+RWIzFYuGyozDDUpphhKhcnzHEezlwkdxEuSa2nKrMM0dbE1ADIKTkNDAw0NYW3cy4NsoaiVGoaaFPMxlBJx1VmnLnaUwoNXW19pw+gn2UJRKzUMNSmprBhEZBXgqduhQJuqnhYy7gXgbaAL6Exi+6p4wqqzequCiL7S3U/exTX/eRRbPvhXJV3AyzAKSbDGkT/ENC4U9UtlXhk1H6TufBaRfwIOqWqvmg+uYmhU1Tdyec+KdD4nYclQonwQ+7qH88nDt1FXW8M/zD3FlINRtcQVvasdICz7/KkALFq9o+LKZWcjqfM5VVOSOCEK84D70vycqiGmGN8oeRNwwuyWbdpVKIkMo6RYu7WVRat3RBa96+hWlm3axZzTR1dtKGoS0nY+nw28pqq7I/Yr8IiIKPCvqroi6o1EZD4wH2DcuHF5F7QsiIlcelmP7XlegdUeDSMJyzbtylgFhOH9PuacPtpW1hH0WTGIyKPA8SG7blDVde7zS4hfLXxSVVtF5Dhgs4g8q6q/DhvoKo0V4JiS+ip3WeNGLnU335Wx1HtPB/Hdzp7IpFFD60JT/O1HYFQ6SSZF1RyGmpQ+KwZVjW3VJCIDgbnAGTHv0eo+vi4ia4AzgVDFYLjMupUt3RMZteW7nMCbvKzH8t3Oeazv/iTgdJQ656MjMuynrW3tXLNqG9es2lbxNV6M6iBq4hPnVAbHx1DNYahJSc35LCLnAYtU9S8j9g8BBqjq2+7zzcDNqvrLbO9dtc5nH94Po7WtnRoRulQZ7f5AvO1xmIIwypG1W1u5Yc0O3j2caS7ygi6gt1PZw6750sh8vpiAGUlERgE/UtWZwEhgjZtCPxC4N4lSMBzi7KMLVm3LenxbeweLVu848l6GUcrERRpBT9CF12LTzKj9IzXFoKqXhWx7GZjpPn8OODWtz69msi2nPbwfk/1ojFLGizQyp3LhsMznCmTh9Im9ygVH4f2Y1m5t5RO3PM746x/iE7c8ztqtrWmKaBiJSRJpBOZUziemGCoQL0a7YXBt1rFeBNOi1Tsy6tFfs2obp337EVMQRsGImpwkiTSq9tpG+caK6FUo3nI6zjZbV1tzxFkdNiNra+9gwaptNL94wBJ/jFSIuj69ZjmQzDRa7bWN8o31Y6giokL8xl//UNZKk8svOs1+eEbeyOZM9vAi7SzSKD+UQlSSUWJEOeWyzcgUzElt5I2kzmRwzEjedWeRRoXDFIMROyPz8Nt543Io7MdqZCOpMxl6HMoWaVRYTDEYR35wcUt77wcanO11uaZIf3a1KYnqJcmkIWktL88HZhQei0oyAEc5bF08jS+dNS7YJijjB5pktuc5Di2iqbq4ce0OFqzadsQs6Z80+K+HJGGlQ+tqrXx8ETHFYGTwnTmnsPyi0zLKEft/oElne8Hy35YnUdl4PZSjghj810Ncns3Qulq+d9FpbLtpmimFImKmJKMXcfbcpFnVkJk8F1bUb8GqbSiY6anESWIeytZDGTIzk71jzJlcmphiMHIiiaPawzMZRJmfvBtJa1u75UuUEH5FMECg23fHD5qHwLnR51ru2pzJpY2Zkoyc8He+isPvl0hy01DgnideMhNTkfFnwUOmUgjiNw9l8xuYI7m8sBWDkTP+2V4SM0NS81NYvkQwEUrccWZ+yp2kJqGkoaTQo/TjVpL2XZUfphiMfpHEJJCL+SmYL7HwF9vp6OqZtvrNT1Y2PDtRGcb9MQn58ecZgPkNKgVTDEbqJMmT8PCbJJZt2pWhFIKElQ2Pso9X0kojaYJhmGINw38ecwkuCJqHzG9QOfRLMYjI54ElwMeAM1W12bdvEXAF0AVcraqbQo4fD/wcOBbYAnxZVQ/3RyajNPEX9YvqMBe80SSZvQZXGP6Vid8+nm2lEXazDT7mW6lEKbGo+j9hs/+omT9kV6x+kpiEoLIUrBFNf1cMO3H6Ov+rf6OInITTwW0SMAp4VET+VFWDV9tSYLmq/lxE7sBRJD/sp0xGCRPmn4gyPSSZvQZXGEnMVcGVRlQ2d/Ax7OYbp1Cibp5hN3i/Emtr72Dh/dt7fU42c1zw/8rFLBRmErKSJ9VLvxSDqj4D4Lbn9DMb+Lmqvg88LyJ7gDOB//IGiHPQp4EvuJt+grP6MMVQJWQzPSycPjHWFNKXFUbY2Fwcrv6bbzaFEqVIkvhbOro14yafVEb//5XULGQmISNIWuGqo4G9vtf73G1+jgXaVLUzZoxRxcw5fTTLLjw1o+GQNwUJZmRDbh28/GNzdbh645PcrIMZ4LkoIb9cSWX0/18Lp0+ktqbXpA2IP4+GkXXFICKPAseH7LpBVdflX6RIOeYD8wHGjRtXqI81ikwus9ek0U/BGXIuDldvPCS/WfflBu//HO95NhnDZv6Q6fS3/gVGErIqBlU9tw/v2wqM9b0e427z8yYwVEQGuquGsDF+OVYAK8Bp1NMHmYwKJ2gfTxqVlEs4rf/mm1Sh5HqDB6gdIBk3+SgZszmDzSxk9IW0wlXXA/eKyK04zucJwO/8A1RVReRXwIU4kUmXAgVbgRiVSV9uhFEO12zO5CQKJTiLT3JM2Kze8gSMQtKv1p4icgHwL8AIoA3YpqrT3X03AJcDncA1qvqwu30j8BVVfVlEPoyjFIYBW4EvuQ7rWKy1p1Eq9DUqyW7wRjFI2trTej4bhmFUCUkVgxXRMwzDMDIwxWAYhmFkYIrBMAzDyMAUg2EYhpGBKQbDMAwjg7KMShKR/cCL/Xyb4cAbeRAn35hcuVGKcpWiTGBy5UIpygT9l+tDqjoi26CyVAz5QESak4RtFRqTKzdKUa5SlAlMrlwoRZmgcHKZKckwDMPIwBSDYRiGkUE1K4YVxRYgApMrN0pRrlKUCUyuXChFmaBAclWtj8EwDMMIp5pXDIZhGEYIFa0YROTzIvK0iHSLSGNg3yIR2SMiu0RkesTx40Xkt+64VSIyKAUZV4nINvfvBRHZFjHuBRHZ4Y5LvYKgiCwRkVafbDMjxp3nnsM9InJ9yjItE5FnRaRFRNaIyNCIcQU5V9n+dxE5yv1+97jX0YlpyeL7zLEi8isR+W/32v9GyJgpInLI990uTlsu93NjvxdxuM09Xy0i8vGU5ZnoOwfbROQtEbkmMKYg50pEVorI6yKy07dtmIhsFpHd7mNDxLGXumN2i8ileRFIVSv2D/gYMBH4d6DRt/0kYDtwFDAe+ANQE3J8E3Cx+/wO4Gspy/tPwOKIfS8Awwt47pYA38wypsY9dx8GBrnn9KQUZZoGDHSfLwWWFutcJfnfgauAO9znFwOrCvC9nQB83H1+DPD7ELmmABsKdS0l/V6AmcDDOP2HzgJ+W0DZaoBXceL8C36ugE8BHwd2+rZ9F7jefX592PWO07LgOfexwX3e0F95KnrFoKrPqOqukF2zgZ+r6vuq+jywBzjTP0BEBPg08At300+AOWnJ6n7ePOC+tD4jBc4E9qjqc6p6GKe3xuy0PkxVH9GeHuFP4HT9KxZJ/vfZONcNONfRVPd7Tg1VfUVVn3Kfvw08Q/n0Up8N3K0OT+B0eDyhQJ89FfiDqvY3cbZPqOqvgQOBzf7rJ+r+Mx3YrKoHVPUgsBk4r7/yVLRiiGE0sNf3eh+9fzzHAm2+G1HYmHxyNvCaqu6O2K/AIyKyxe1/XQi+7i7pV0YsY5Ocx7S4HGd2GUYhzlWS//3IGPc6OoRzXRUE13R1OvDbkN1/LiLbReRhEZlUIJGyfS/FvJ4uJnpSVoxzBTBSVV9xn78KjAwZk8o5S6u1Z8EQkUeB40N23aCqJdEqNKGMlxC/WvikqraKyHHAZhF51p1lpCIX8EPg73F+zH+PY+a6vD+f11+ZvHMlTnfATuCeiLfJ+7kqN0TkaOABnO6JbwV2P4VjMnnH9R2txWm/mzYl+b24vsPPAotCdhfrXGWgqioiBQshLXvFoKrn9uGwVmCs7/UYd5ufN3GWsgPd2V7YmLzIKCIDgbnAGTHv0eo+vi4ia3BMGf36USU9dyJyJ7AhZFeS85hXmUTkMmAWMFVdI2vIe+T9XIWQ5H/3xuxzv+N6nOsqVUSkFkcp3KOqq4P7/YpCVTeKyA9EZLiqplobKMH3kvfrKSEzgKdU9bXgjmKdK5fXROQEVX3FNam9HjKmFccP4jEGx6faL6rVlLQeuNiNGhmPMwP4nX+Ae9P5FXChu+lSIK0VyLnAs6q6L2yniAwRkWO85zhO2J1hY/NFwLZ7QcTnPQlMECd6axDOcnx9ijKdB3wL+KyqvhcxplDnKsn/vh7nugHnOno8SpnlC9eHcRfwjKreGjHmeM/XISJn4twHUlVYCb+X9cBfu9FJZwGHfKaUNIlcrRfjXPnwXz9R959NwDQRaXDNvdPcbf0jbW97Mf9wbmj7gPeB14BNvn034ESV7AJm+LZvBEa5zz+MozD2APcDR6Uk54+BKwPbRgEbfXJsd/+exjGrpH3ufgrsAFrcC/SEoFzu65k4kS9/SFsu93vYC2xz/+4IylTIcxX2vwM34ygugA+4180e9zr6cAG+t0/imP9afOdpJnCld40BX3fPzXYcJ/5fFECu0O8lIJcAt7vncwe+SMIU5RqCc6Ov920r+LnCUUyvAB3uPesKHH/UY8Bu4FFgmDu2EfiR79jL3WtsD/A3+ZDHMp8NwzCMDKrVlGQYhmFEYIrBMAzDyMAUg2EYhpGBKQbDMAwjA1MMhmEYRgamGAzDMIwMTDEYhmEYGZhiMAzDMDL4/3/SGnRReGWhAAAAAElFTkSuQmCC\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": { | |
| "needs_background": "light" | |
| }, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "cls = KMeans(n_clusters = 2)\n", | |
| "pred = cls.fit_predict(X)\n", | |
| "\n", | |
| "for i in range(2):\n", | |
| " target = X[pred == i]\n", | |
| " plt.scatter(target[:, 0], target[:, 1])\n", | |
| " \n", | |
| "# クラスタのセントロイド (重心) を描く\n", | |
| "centers = cls.cluster_centers_\n", | |
| "plt.scatter(centers[:, 0], centers[:, 1], s=100,\n", | |
| " facecolors='none', edgecolors='black')\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## kernel k-means法で分類しプロット" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 27, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "class KernelKMeans(object):\n", | |
| "\n", | |
| " def __init__(self,\n", | |
| " n_clusters=8,\n", | |
| " max_iter=300,\n", | |
| " kernel=pairwise.linear_kernel):\n", | |
| " self.n_clusters = n_clusters\n", | |
| " self.max_iter = max_iter\n", | |
| " self.kernel = kernel\n", | |
| "\n", | |
| " def _initialize_cluster(self, X):\n", | |
| " self.N = np.shape(X)[0]\n", | |
| " self.y = np.random.randint(low=0, high=self.n_clusters, size=self.N)\n", | |
| " self.K = self.kernel(X)\n", | |
| "\n", | |
| " def fit_predict(self, X):\n", | |
| " self._initialize_cluster(X)\n", | |
| " for _ in range(self.max_iter):\n", | |
| " obj = np.tile(np.diag(self.K).reshape((-1, 1)), self.n_clusters)\n", | |
| " N_c = np.bincount(self.y)\n", | |
| " for c in range(self.n_clusters):\n", | |
| " obj[:, c] -= 2 * \\\n", | |
| " np.sum((self.K)[:, self.y == c], axis=1) / N_c[c]\n", | |
| " obj[:, c] += np.sum((self.K)[self.y == c][:, self.y == c]) / \\\n", | |
| " (N_c[c] ** 2)\n", | |
| " self.y = np.argmin(obj, axis=1)\n", | |
| " return self.y" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### linear kernelを使用して分類 →k-means法と同じ" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 29, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<matplotlib.collections.PathCollection at 0x7fd198e7d780>" | |
| ] | |
| }, | |
| "execution_count": 29, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": { | |
| "needs_background": "light" | |
| }, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "kkm_linear = KernelKMeans(n_clusters=2, max_iter=100, kernel=pairwise.linear_kernel)\n", | |
| "y_linear = kkm_linear.fit_predict(X)\n", | |
| "\n", | |
| "plt.scatter(X[y_linear == 0][:, 0], X[y_linear == 0][:, 1], c=\"blue\")\n", | |
| "plt.scatter(X[y_linear == 1][:, 0], X[y_linear == 1][:, 1], c=\"red\")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### ガウスカーネルを用いて分類" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 36, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<matplotlib.collections.PathCollection at 0x7fd198de5390>" | |
| ] | |
| }, | |
| "execution_count": 36, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAD8CAYAAABzTgP2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJztnX2QHGd957+/Xe0CK5lgzerAL2gWgo+KoQ6ftaXgg6MAU8ZW3aEjBSm7RooiiVqkxVXi7qiUXXvnuEhtpYCDlEiQZMWWYzRTYEhi4gOBXwhXCTne1i7ZyDGOZaMVcoy9WhtbYjkkrX73x9PN9PT0yzMz3TP98v1Udc1M9zPTz/T0PL/n+b2KqoIQQghxGRp0BwghhGQLCgZCCCEtUDAQQghpgYKBEEJICxQMhBBCWqBgIIQQ0gIFAyGEkBYoGAghhLRAwUAIIaSFFYPuQDeMj4/rxMTEoLtBCCG54qGHHjqpqmvi2uVSMExMTGBubm7Q3SCEkFwhIvM27ahKIoQQ0gIFAyGEkBYoGAghhLRAwUAIIaQFCgZCCCEtJCIYROSAiDwvIkc8+1aLyAMi8qTzeGHIe7c4bZ4UkS1J9IeQNGg0gIkJQARYsaL1cWLCHA96z/i4aSNinge1IyRLJLVi+CsA1/r23QTg26p6GYBvO69bEJHVAP4YwO8CWA/gj8MECCFJ4R+sh4ftBvdNm4B5x9lvebn1cX4emJpqfX+jAWzdCiwuNvctLprPsTmnXwiFtSUkcVQ1kQ3ABIAjntdPALjIeX4RgCcC3nMDgNs8r28DcEPcudatW6eEBFGvq1arqiLmsV5vPz4yogoEb2Njre+p182+sPb+rVptvrdatXtPp+esVNq/FyE2AJhTm/HcppHVB7ULhl94nov3tWf/JwD8D8/r/wngEyGfPwVgDsDc2rVr07puJCe4AgBQHR42jyLxg67NYN3N4O5uIs33BvUnqXP6v5d7TSqVZpuhodbrEyQoSbmwFQx9MT47HdIeP2O/qk6q6uSaNbER3aTANBpGbeNX62jAHba0BMzMNF8fPx7/+d42Nu29rF0b/Dzpc/q/V5Da6vx58xil7iIkiDQFw3MichEAOI/PB7R5BsDrPa8vdfaRktGJYXdmxgyMtngHWpvButvBfWwMmJ1tvp6dBUZG7N7bzTm932tmBjh7Nv49foEC0EBOArBZVthsaFclfQbATc7zmwB8OuA9qwH8FMCFzvZTAKvjzkUbQ7Gw0eN7VSedqGj8apqkbAy2ahq/eidJu4b3e3VyTbzqrqjr4X5HqqCKA/ppYwDwJQDPAjgL4ASA7QAqMN5ITwJ40B3wAUwCuN3z3m0AjjrbVpvzUTDkjyijsK0e3x0IO9H7d6KLjxrcowzanV4DW4Hitk3KdtKtPSPsOpL80VfB0O+NgiH7dDKw2c523Zmu7Yy6SN47vXpbhQ3w3RrIkxKWpL9QMJCBsXOn3YDT6QogaGDyzr7L7n3TjVdSJyuNOMFM1VP2sRUMYtrmi8nJSWU9hmzSaACbN5uhIg4R4znjehlFGZTHxoD9+4FaLbm+kqY3k43huloFjh0zzgCuR1gY/L2yiYg8pKqTce2YK4l0hOs9NDQUHIk7M2MnFICm902tZgaRatW8Hh5ufaxWOcikRa0G3HknUKlEt/N6XHXjTkvyBQUDicXrSuqmhVAN9ou39fv3u3bWamY2qgqcO9f6eOwYhUKa1GrAyZPmWtfr7QLaL5i7caeNm1CQjGGjb8raRhtD/7CxF3Tq5VIko3AZ6dSdNqo97RH9BVmKfCb5pNEA9u2LVw15Z4azs2Y1EES1amakJ09yBZBnXNVflPrJuyKMCkicnzc2qenp5PtJuoeCgYRiay/wqha89gKRpjCgSqhYuOonG9VTnHpR1UxAqF7KDvRKKjmNhhEAx4+bAX52tvmHHhqKFwwiwMGDHPBJODZeTEDT64mkB72SSCje3DhRxuQ4I6MIsGMHhQKJZnbW3CtxBBmrWY9iMFAwlIygLJxevG6GcfaCgweBPXvS6ScpDrWamUDECQd3IhKWPZf2iP5BwVAybLJwujM32gtIUuzZYyYSrj3Cj62xWhXYu5cZYNOGNoaSYWM3oK6XpE2vti2A0dXdQBtDSYnTzcbZDfyBZ4SkgRvQeP58++rTNoCO0dXpQcFQIKanjQ42SDfrGpWjisdUKpyBkcETZdvy46o9GVmdLBQMBcD1Mtq7N3wJ7s6ugnLjVCoMPCPZwZ87K4q1a1uN1a53HY3UvZGqYBCRN4vIYc/2soh83Nfm3SLykqfNLWn2qWi4f4owLyMvXqOymxtHlQKBZA9v7qx6PTjK2lV7BhmraaTujVQFg6o+oapXqOoVANYBWAJwT0DTf3Tbqeon0+xT0eik/nEn9YsJyQr+KGvXQ85Ve0ZFVi8utid6JPH0U5V0NYCnVNUiBpLY0m02U0LyRpjBOm7CQyN15/RTMFwPUxs6iKtE5BER+aaIvKWPfcoNYcY1m1UA6xmQImMTWW07gSKGvggGERkF8AEAXw04/DCAqqq+DcCfA/hayGdMiciciMwtLCyk19mM0WgAq1aFp64I8+BwDcoMRiNFxyay2jVS03PJEpvc3L1uADYCuN+y7TEA41FtylCPwV+/Ny7fPQuzk7IT9p8ZGzN1RcJqQpSpPggyVo/hBoSokUTkdSJG1ovIephVjIWPTXGx9TTyehmFBQsRUhaijNSHDoU7aSwumhU53VubpJ4SQ0RWAjgO4I2q+pKzbwcAqOo+EbkRwE4A5wD8CsB/U9X/G/WZRU+JwTTFhCQLU8gbbFNiMFdSBuFNTEiycLJlYK6kHGPjacQ6CITYY5tmg95LBgqGAeItmCPSjNKMuoldbyPWQSDEHps61QCDQF0oGAbE9LQxeHkNzIuLwLZt5nlYHQSmryCkO7zG6ZUr24+7QaB0a6WNYSA0GibJV9ilL7qek5AsEFQTAjAegUEeTNVqa92IPELjc4aJM4SJGNdTQkh/iftv5r04EI3PGSbOwEU9JyGDIe6/WZa8SxQMAyBq4B8dZbI7QgaFzaSsDJ5LFAwpE2TICvM6WrUKOHAgv8tUQvKOTUK+MqzoKRhSxFtq05v8Dgj2Ojp1ikKBkEESl5BvbAzYsKH4Xks0PqfE9LSpIBUEvY4IyTaux9L8PDA8bOqnV6tGKNx1V6vXkogRJnmILbI1Pq/oR2fKRpRQAMqhoyQkz9Rqwav3iYnwMqJAPoSDDVQlJUyjAezbF92mDDpKQopI1KRu797iZGilYEiYmZnoBHgi9DoiJK/ETer27SuGzYGCIWHi1ERMfkdIfonzWlItRpwDBUPCRM0odu4sjg6SkDLiei1FUQQbIgVDj/jjFDZsaI9REKFQIKQo7Nlj/s9hFMGGmLpgEJFjIvJjETksIm0+pmL4vIgcFZFHReTKtPuUFEFxCnfdBWzZ0hqjcPAghQIhRcIVDn61UlHiHPrlrvoeVT0Zcuw6AJc52+8C2Os8Zpowl9SlJVNflnEKhBSbPXuAd7yjNUOrP85hft5MHv/pn/I1OcxCHMNGAF9UE2n3fRF5jYhcpKrPDrpjYTBOgRACtMc7FCXOoR82BgVwv4g8JCJTAccvAfAzz+sTzr5MwjgFQkgYRYlz6IdgeKeqXgmjMvqYiLyrmw8RkSkRmRORuYWFhWR72AGMUyCEhFGUOIfUBYOqPuM8Pg/gHgDrfU2eAfB6z+tLnX3+z9mvqpOqOrlmzZq0uhsL4xQIIWEUJc4hVcEgIitF5AL3OYBrABzxNbsXwB843klvB/BSlu0LjFMghIRRlDiHtFcMrwXwXRF5BMAPAXxDVb8lIjtExL18hwA8DeAogL8EkDktnDdW4fRpYGSk9TjjFAghLkWIc0jVK0lVnwbwtoD9+zzPFcDH0uxHL0xPG72ga1dYXDRV1ioV4IUXmkXEqT4ihLi4k0Tv2AGYseP0aTPJzPLYwcjnCBoN40ngNzafOWOqrZ0/b+IVsvjDEkIGy549JrjVDXatVMxYsrjYDIjdvDmbnkoUDBHs2hV+LA96QkLIYKnVzOTx/HkzmTx7tvW4G+OQNU8lCoYIFhfDj+VBT0gIyQ5Rk8moSeggoGDoEsYqEEI6IWoyGTUJHQQUDBFUKsH7V66kXYEQ0hl5mkxSMESwe3e7a+rICHDbbYPpDyEkv9Rqxs4QRNgkdFBQMPjwxizMzAAf+UhrCu077+RqgRDSHfv2GZdVL6OjZhKaJSgYPDQawLZtrfUV7rjDLAHpmkoI6ZVaDThwoHWyuX27mYRmqX6DaFRGuIwyOTmpc3NtNX965oILTPCJn0oFOBlWTYIQQrqk0QC2bm11Yx0ZSU8zISIPqepkXDuuGBymp4OFApA9jwFCSDHYtas9tuHsWeCjHx1Mf1woGGBXY4EQQpImbNL5y18ONiKaggHxNRay5jFACCk+g6zdQMGA+PQWWfMYIIQUg6hJ5yBrN1AwIL7GAj2RCCFpEDfpHFRONgoGGHfUsbHWfayxQAhJm1otm7UbSi8YGg2zXFtaAoaHzb5q1aTLpVAghKSNW9jHXxJ0bGxwaTRSEwwi8noR+Y6I/LOIPCYibfkDReTdIvKSiBx2tlvS6k8Q09MmH/r8vHm9vNz8Mag+IoT0C2/tBsBMUpeWzKR1EAboNFcM5wD8d1W9HMDbAXxMRC4PaPePqnqFs30yxf60EFaEx/0xCInEmzulm3DVXt9PCket1lRrLy+bfYMq5pOaYFDVZ1X1Yef5KQCPA7gkrfN1CovwkK5pNICpqdbcKVNT9oN7r+8nhcVVa3sZRDGfvqTEEJEJAP8A4K2q+rJn/7sB/A2AEwD+FcAnVPWxkM+YAjAFAGvXrl037+p/uu5T+LFq1eRFIiSQiYmm/tHL8LBJqhVXzDfs/bzxSs/QUHhMVRKpeTKTEkNEVsEM/h/3CgWHhwFUVfVtAP4cwNfCPkdV96vqpKpOrlmzJr0OI19508kACFtSLi/brQDC3s+launJSjGfVAWDiIzACIWGqv6t/7iqvqyqp53nhwCMiMh4mn1yYRGeAtFvfb2ND+HSErBli1EO+/sW9n7Wiy09WZmUpumVJADuAPC4qn4upM3rnHYQkfVOf/oiF1mEpyAMQl8fFPgSxPKyUQ77+7ZhQ/v7B+mbSDJDVialaa4Y3gFgM4D3etxRN4jIDhHZ4bT5EIAjIvIIgM8DuF77YPRwYxfOnm2NXWARnhwSZK1bWjLeBd6ZetDMvVtqNWD//mZSffcmsmFpCTh0qPX91ap5zZuPIFyb0decbaqau23dunXaLTt3qoqomimc2cbGVOv1rj+SDBL/j2m7Jfmj1+vm82zPLZLMeUkhqddVR0dbb5nR0WRuVwBzajHGlirymbELBaRbvXyUDcAGfw3YLVvsVw4iwPg4YxhIIN4qb4C5rc6c6XOwm430yNrW7YqhUuEkrnB0Olu3XUnU66rVqrkxqtXW6VrQOcfGzHK02/NWKly2khbqddWRkdbbZGSkt9sEliuGgQ/y3WzdCoao/2W12tVHkizgH8SjZgC2g3TQwO/+I6vV5ARRt+qtKMFFCkHYbbxyZfefaSsYSqVKioIOITnF9SQ4frwZWLZ7t53XUBiLi8EG7U2bwoPTksBWp8nI6VIQVd0t7Z+agsGBDiE5JGyABNq9fnbu7Mx7KIz5+eiw+SQ+P+5fH+aJRUNZaUj7p+5LSoykmZyc1Lm5uY7fNz4eLIWTCDUnA6DT1BKNBrB1a3v19W4QafdiSIqRkWjf6bC8CSImJQcpBGHjFdD9T52ZlBhZIiyojaU7c0o3qSX8s/3h4e4cxFXNAJ0GZ89GZ3nsNXKamV1zQdS4lHaQfKkEAwC8+tXN55UKg9pyje0A6Q6EmzYZvz8vy8vAqlXdqZnSXG0HTRXd7xGkzrKNnKZ9Ije41d0GUcCnNIKh0QC2bWv9v506Nbj+EAviZrZBqSn8/xrvQBjG/HwzAX4n9FMN6/8eqs0Ro5PIadoncoVbwMe7qH3Vq/pwYhvXpaxt3birrloV7plIMkhYrIDfLTPObTMt19K0N/fGdL9fUn7WYZHiDOTJLEnGM8DSXbUUxudGw2gRwsjhJSg+SdUsSNODKC1GR03oK2BWCf4Zvp963V4fyloQuSNJpxkanz1E2fFIRkmiZkGjkT/BUKkYoVCrmRs3TigAndkIbNRvJFOEeSalWZ+hFIIh6gL2NWMhsSeJmgUzM/lbDi4umn5PT9v/8zuxEfgzwzKzKwmgFKqkqEljJ6tw0kdcY6t3xjw21tkgFlUnsYiU6buWiKjxq9OfnKokD6zWlkOSmNmuXp1e/7JGElHdhDj0o+bztSLyhIgcFZGbAo6/QkTudo7/QEQmku4Dq7XllFrNGETPnzePnQiFRgN48cW0epY9unG3JSSEtGs+DwP4AoDrAFwO4AYRudzXbDuAF1X1TQD+DMCnku5HrQZ85CPNSdXwsHnN1UJBcdVQRUwPsXJl8H4RBqkVlEFUdEt7xbAewFFVfVpVzwD4MoCNvjYbAdzlPP9rAFe7daCTotEA7rijOalaXjav+T8qKEFBXF6GhvKrennlK4OVzqqdB6kxNUYu2L3beDB7GR1NN5VP2oLhEgA/87w+4ewLbKOq5wC8BCBRWbhrV3smhDNn6MZaSBqN6CjnsTHgi18E7rorf66sgPFUCrM4zs/bD/RMjZEbajVg+/ZWjcf27elqPHJjfBaRKRGZE5G5hYWFjt47CD9gMgDcwS6MoaGmAbtWM7kG8rZyiBJmIuEDvX91EBQjwdQYmaTRAG6/vVXjcfvt6crwVN1VReQqALeq6vud1zcDgKr+qafNfU6b74nICgA/B7BGIzqWpLsqPfwKRFSeYqAZKuot7rN6dTFmCGFpwKtVE7xmE0Htfk4RbTM5poiRzz8CcJmIvEFERgFcD+BeX5t7AWxxnn8IwN9HCYVuCBMMedQkkBAajfgB/oUX2lUoRRAKQPgM5/jxeJuLl7TzOZOOGYTGY0V6H21sBiJyI4D7AAwDOKCqj4nIJ2GSOd0L4A4AB0XkKIAXYIRHwv3obD/JITYqkNWrOxsk80K1ah6DbCtr19qnEWFqDOKQuo1BVQ+p6r9V1d9W1Vln3y2OUICq/j9V/bCqvklV16vq00n3wf3f2O4nOcGrN7epw3zqVHr1mgeFO5hH5UAKWwVUKkyNQQLJjfG5F4L+MyLAhg2D6Q9JAL9KyAa/a1qeCRrMvYn6K5XmsTChsXt39wGEpNCUQjDUasCWLa02BVXjsUjvvJxSRJWQLa6B2E2TPT5u8sp7lc6/+lXzORPn5ZpBBLiVIokewDT0haNsCfL81OvmMcrbiDd3IXCrT3oXvG7Jjk5lu61XUqrG5ywRploumsq5NKxdm86PF+b2mTU2bTIxGFE5kjqpXUEyzQUXNBeElYrRAjLALQGGQr5p2H6ScYL05t3irZ383vcm85n9IC5xHl1Pc0+jAWzd2qolfPnl9M9bmmExLGaHsTw5xa8374Th4eaMYHgY2LHDrBJmZ4HvfS/5vg4Cup4Wgl27gLNnW/edPZt+Op/SCAZSQLxpuW19j4eGzObOCJaXm14IgzJoJ71s9XokkVwzqHQ+FAykGNiqli68sH0K5uYIGoRO3k3qV693rxobHm56G9XrJk8ChQLpgdIYnyuV8HwjpAC4A+HMTLhROuwmAMx7qtX+eiMEWRG3bOms6E6n5U4JsaA0K4awKm5p5jQnfcZVLdXr7Qnsgej19/BwsgZtG1atah3QazXjfmprM2E8QuEZRAwDUCLBUKsBd97ZVEUPDxuNwswMg9wKSacup8vLrQZtIP0si37VVaNh7B02fXdjFCgUCs0givQAAFQ1d9u6deu0W+p11dFRVfPvM9voqNlPCkK12voD22zVau+fkdY5RVpfj43xhi0B9Xrzlhgebt4yvfz0MMlLY8fY0qwYXFjNrQR0akQOcu3s1RAdp5LyntNNBhhm31BlOouS4cYvuLfE8rJRfc/O9uenL51gYDW3AuMOsDaqGK8nT9BA20twmPuZ3sF8587gwd2bDDDq85jsrlQMKn7hN9gsK7K29aJKilrZc3WeY+p1o2KxUeHYqGI6+bxe1DxxKiuqjUpJ1C3R2+dSldQxLHebY6KC0yoVs3WiinEN0Z3WhO5UzROlsqLaiAyIVOIYROQzAP4zgDMAngKwVVV/EdDuGIBTAJYBnFOLrH+9EuXKzpxjOSbsxxPpvDCuizsg+zOYRtVX7nQQD0sGyMyopSULXpJprRgeAPBWVf13AP4FwM0Rbd+jqlf0QygA0W5ezDmWY8J+vF5/1KBaBjt2hFdL65SoymuklERpLvoVkJuKYFDV+1X1nPPy+wAuTeM83VCrGTug30Wd/8Wck+YA683JdOwYsGdPcoVvWESH+IjSXPQrIDf1Qj0i8r8B3K2q9YBjPwXwIgAFcJuq7rf5zG4K9fhxc6bNzzfT2ler/XMHIyng/qjHj5uVAn9MkkPCPJcrle61oi62hXq6XjGIyIMiciRg2+hpMwPgHIAwrdk7VfVKANcB+JiIvCvifFMiMicicwsLC912+ze4pXBHR5upaebnTaWkLOj4SBf4Z/ZpCwXXPXZoyDzyxiE90mgAp0+373dLdPeL1FYMIvKHAD4K4GpVjc1lLCK3Ajitqv8rrm0SKwbAlMoNMkSvWgWcOtXzx5Mi48YfeI3STGhHemB6Gti3r92vIcmKbamvGGJOfi2APwLwgTChICIrReQC9zmAawAcSaM/YYR5J50+zckfiSHIPdZN301IhzQawUIBaM+12A/S8kr6CwAXAHhARA6LyD4AEJGLReSQ0+a1AL4rIo8A+CGAb6jqt1LqT8fw/00iCbMQ0ueZdMHMTHjA/iBuqVTiGFT1TSH7/xXABuf50wDelsb5bWFMA+masPgD+jyTLojKiDKIW6rUkc+MaSBdw/gDkiBRAfaDuKVKLRgY00C6hvEHJEGiivYN4pYqtWAATKzSwYPN/3elArzqVcDmzfRAJDH02z2WFBa3NpTt/rQpvWAAmv/vgweNm+riojEEMa6BENIPsqaZpGDwEFbEZ8eOwfSHEFJcvPGRMzPAli3Z0UxSMHiIimuYnu5vXwghxWV62qir5+eb2om77jIrhCxoJikYLNm3jyolQkjvNBrA3r3tcQtZio+kYPAQldJWNTs/GiEkv0SV58xK/BQFg4e4JFVZ+dEIIfklqr58VuKnKBg8uHENYWTlRyOEFJOsxE9RMPjYsyc46G1kxBihmWGZENILYSrrQSTLC4OCIYCgoDeR1viGqSkKB0JI5+zeberAeBkdNQ4uWYGCIQRvUOuqVe3xDVnyICCEZBt/zML27a0xCwcOZGe1AKSUXbVohGU+jMqISAghQHsBHjdmIcuptbhisCAq8yED3wghYUxPZz9mIQgKBguiMh8y8I0QEoQrFMLIsvt7aoJBRG4VkWecCm6HRWRDSLtrReQJETkqIjel1Z9eiMpwyMA3Qogft1RnFFl2f097xfBnqnqFsx3yHxSRYQBfAHAdgMsB3CAil6fcp46ZnW13X/WSZclPCOk/UaU6ATOeZCVmIYhBq5LWAziqqk+r6hkAXwawccB9aqNWi86wmmXJTwjpP3GTxR07smt4BtIXDDeKyKMickBELgw4fgmAn3len3D2tSEiUyIyJyJzCwsLafQ1krDAt7ExYMOGpisag98IIVGTxZ07zXiSZXoSDCLyoIgcCdg2AtgL4LcBXAHgWQCf7eVcqrpfVSdVdXLNmjW9fFTX+APfqlWTQ/2OO1rT57K4DyHlwxurcPp0exCbSD6EAgCIRinCkjqJyASAr6vqW337rwJwq6q+33l9MwCo6p9Gfd7k5KTOzc2l09kOGR8PToq1apWpBkcIKT7+WAXApNF59auBF14wK4jZ2cGrj0TkIVWdjGuXplfSRZ6XHwRwJKDZjwBcJiJvEJFRANcDuDetPqVBVHEfrhoIKT5hsQpnz5oJYhYK73RKmjaGT4vIj0XkUQDvAfBfAUBELhaRQwCgqucA3AjgPgCPA/iKqj6WYp/6Ct1YCSk2cW6pefVY7IsqKWnyoEoCjE7x/Pn+9ocQ0j8mJqJT41SrZrWQFQauSioLUcV96MZKSLGJWhFkPVYhCgqGHnGL+wS5sc7OmqXm+Lg5LmKe0/ZASDGImvxlPVYhCgqGBAhyY92/3xzbtq1V1bS4CGzaxOR7hOQNrzuqG680O2smgV7y5JYaBm0MKRKnf8z7zUNIGWg0zOz/9OnW/WNjzQngzIxRK2XFLTUMWxsDBUOKDA3F50s5eDC7NxEhZScuQ2rWjMtx0PicAeKMz8zMSkh2scmQmld31DgoGFJkdrY9LN5PUW8sQvJOXIZUoLiehxQMKVKrmVquq1aFtynqjUVI3ombtOXZHTUOCoaUqdVMzqQ4l1ZmZyUkW8RN2vLsjhoHBUOfiHJpnZpqzc66eTPdWQnpJ7auqACwciVQrxfbo5BeSQMmyqWV7qyEpE9QZtQ8uqLaQHfVnBDl0kp3VkLSodEwA36e8hwlAd1Vc0KUHpPurIQkT6PRVN9GUWaPQQqGATM7226U9lLmm5OQNJiZAZaW4tuV2WOQgmHA1GrGuyEM9+ak5xIhyWAz2SqyK6oNqQgGEblbRA472zERORzS7phTzOewiBTDaNAFe/bEu7P6PZc2bTLxERQQhIQTNKGyWQkU2RXVClVNdQPwWQC3hBw7BmC8089ct26dFpF6XbVaVRUxj/W62V+tqhqRELxVKs22hBDzf6hU2v8rY2OqO3eax6D/kog5XlQAzKnFGJuqKklEBMDvA/hSmucpCrWa8YLw14iNW/ouLpoVBVcPhBj3082bgysrLi0Bhw4ZV9Rq1ewbHjaP1arxAqSLeMruqiLyLgCf0xD3KBH5KYAXASiA21R1v83nFsld1Ya49N0uRXSvI6QTGg0jFOKyGpe15G7q7qoi8qCIHAnYNnqa3YDo1cI7VfVKANcB+JgjSMLONyUicyIyt7Cw0G23c0mc55ILPZhI2Slz4rsk6VowqOr7VPWtAdvfAYCIrADwewDujviMZ5zH5wHcA2B9RNs9GqdzAAALGUlEQVT9qjqpqpNr1qzpttu5JM5zyYUeTKTsxE2OXIcOEk2aNob3AfiJqp4IOigiK0XkAvc5gGsAHEmxP7lmzx6Tn6VSCT5ODyZSFqLqqEetBioVY1sotbeRJWkKhuvhUyOJyMUicsh5+VoA3xWRRwD8EMA3VPVbKfYn99RqwMmTZsCv19sT8tVq4cE7v/ylERDePxEhecIVCJs2tddR37o1vgbzyZMUCrYwV1LBiCsnCjQThPFPQvJCUKI7P67zhZsHqSiJ75KESfRKCj2YSNGw8TQCyu1tZAuT6JWUTj2YaKgmWcfG0wigt1GSUDAUjE48mMIM1bRDkH4TNUGxccMeGaG3UZJQMBQQWw+mMEP14iIFBEkfVxiImPvNO0HxRvLHrQQqFeDOO2lHSBIKhoJi48HEVBtkEHi9i8LsYUtLzVokUZ5GqvQ2SgMKhhIQloPJRifr/YPSHkF6xVVfBuUx8uNOXGq1Zm4jd3LDnEbpQq+kEuP+SeOKlrglRoPaVirA7t2csRE7bL3mAHrOpQG9kkgs7kwszBbhsnZtvD3CH4FKyklUVDJgn8+r7IVyBg0FQ8lxbRFhxmrXUG3zh/ZGoJJyYROVDNipL0VYKGfQUDAQAK0CIshQbesjfvZs0ybhQttEsYmzG3jviSBDMtCMvaH9ICPYVPPJ2lbUCm5Zpl4Pr3oVVAXL5n3eKnUkm7hVBQHV4eHg3y2uwmDQPRFUqZCkDywruNH4TKxpNIBdu+I9SrxGQxtjIw3Y2cLmd/bm27LJz0VDcjag8ZkkTpw9AmiPQLW1TTBeIhs0GsC2bfHC3+vGHKdmZFRy/qBgIB0TJiCCIlBtbRPegQZojYpdsaL1kXaKzgm6nkHXcWYGOHPG7jNdoR9mNwAYlZxbbPRNWdtoY8gP9brRJXdim7CxZ4yNUTcdh9c+YHsdbX8r19bgPxftBtkGljaGgQ/y3WwUDPli5067AccdaGyMmWEDk9dI6n8swoBlYwx229k6C3ivo+21p2DOJ30RDAA+DOAxAOcBTPqO3QzgKIAnALw/5P1vAPADp93dAEZtzkvBkD+8A9rQUPRAk8YKI2pAC+ub2480BErYOSuV4HPV6+aY7feyHeCDPIZGR8PbFUXAlpV+CYbfAfBmAP/HKxgAXA7gEQCvcAb/pwAMB7z/KwCud57vA7DT5rwUDPknSvXQ6Yqhk0EwaKVhI1TiBIrt6iRugAdUR0Za32vbR+/36lYlFNTHMGFF8kdfVUkBguFmADd7Xt8H4CrfewTASQArnNdXAbjP5nwUDMWmUxtDJ4Ogf4bciVDpVKD4hUna6p1uvhdVQuXCVjCk5ZV0CYCfeV6fcPZ5qQD4haqei2hDSog3myYADA+3PnojsoHOK3d529vm7vG3Dcsd5cXvaWXznqBz2fbR+72iPIVc/NeREJdYwSAiD4rIkYBtYz866OnHlIjMicjcwsJCP09NBoCbKlwVOHeu9dGbOhywGwRd3NxPLp0IlW4ESjcDvP9cNn30f68w4VqtGjfjoOtIyG+wWVbEbaAqiQyYbr2SurUxdOM5ZfseWxsDjcGkUzBgG8Nb0Gp8fhrBxuevotX4PG1zPgoGkiTdeCWlZWOI8kpinADplb4IBgAfhLEN/BrAc94ZP4AZGG+kJwBc59l/CMDFzvM3AvghjLvqVwG8wua8FAwkC3TrlcQBngwKW8HAJHqEEFISmESPEEJIV1AwEEIIaYGCgRBCSAsUDIQQQlqgYCCEENJCLr2SRGQBQEzByFDGYQLrsgb71RnsV2ewX51R1H5VVXVNXKNcCoZeEJE5G3etfsN+dQb71RnsV2eUvV9UJRFCCGmBgoEQQkgLZRQM+wfdgRDYr85gvzqD/eqMUverdDYGQggh0ZRxxUAIISSCQgoGEfmwiDwmIudFZNJ37GYROSoiT4jI+0Pe/wYR+YHT7m4RGU2hj3eLyGFnOyYih0PaHRORHzvtUs8cKCK3isgznr5tCGl3rXMNj4rITX3o12dE5Cci8qiI3CMirwlp15frFff9ReQVzm981LmXJtLqi+ecrxeR74jIPzv3/66ANu8WkZc8v+8taffLOW/k7yKGzzvX61ERubIPfXqz5zocFpGXReTjvjZ9uV4ickBEnheRI559q0XkARF50nm8MOS9W5w2T4rIlkQ6ZJOCNW8bgN8B8Ga014m4HK11Ip5CcJ2Ir6C1TsTOlPv7WQC3hBw7BmC8j9fuVgCfiGkz7Fy7NwIYda7p5Sn36xo0izp9CsCnBnW9bL4/gGkA+5zn1wO4uw+/3UUArnSeXwDgXwL69W4AX+/X/WT7uwDYAOCbMAW83g7gB33u3zCAn8P4+ff9egF4F4ArARzx7Ps0gJuc5zcF3fMAVsPUu1kN4ELn+YW99qeQKwZVfVxVnwg4tBHAl1X116r6U5g6EOu9DUREALwXwF87u+4C8F/S6qtzvt8H8KW0zpEC6wEcVdWnVfUMgC/DXNvUUNX7tVkf/PsALk3zfDHYfP+NMPcOYO6lq53fOjVU9VlVfdh5fgrA48hPHfWNAL6ohu8DeI2IXNTH818N4ClV7TZwtidU9R8AvODb7b2Hwsah9wN4QFVfUNUXATwA4Npe+1NIwRDBJQB+5nl9Au1/nAqAX3gGoaA2SfIfATynqk+GHFcA94vIQyIylWI/vNzoLOcPhCxfba5jmmyDmV0G0Y/rZfP9f9PGuZdegrm3+oKjuvr3AH4QcPgqEXlERL4pIm/pU5fifpdB31PXI3xyNojrBQCvVdVnnec/B/DagDapXLcVvX7AoBCRBwG8LuDQjKr+Xb/7E4RlH29A9Grhnar6jIj8GwAPiMhPnNlFKv0CsBfAn8D8kf8ERs21rZfzJdEv93qJyAyAcwAaIR+T+PXKGyKyCsDfAPi4qr7sO/wwjLrktGM/+hqAy/rQrcz+Lo4N8QMwter9DOp6taCqKiJ9cyHNrWBQ1fd18bZnALze8/pSZ5+XRZhl7ApnphfUJpE+isgKAL8HYF3EZzzjPD4vIvfAqDF6+kPZXjsR+UsAXw84ZHMdE++XiPwhgP8E4Gp1FKwBn5H49QrA5vu7bU44v/NvwdxbqSIiIzBCoaGqf+s/7hUUqnpIRPaIyLiqppoXyOJ3SeWesuQ6AA+r6nP+A4O6Xg7PichFqvqso1Z7PqDNMzB2EJdLYWyrPVE2VdK9AK53PEbeACP5f+ht4Aw43wHwIWfXFgBprUDeB+Anqnoi6KCIrBSRC9znMAbYI0Ftk8Kn1/1gyPl+BOAyMd5bozDL8HtT7te1AP4IwAdUdSmkTb+ul833vxfm3gHMvfT3YcIsKRwbxh0AHlfVz4W0eZ1r6xCR9TBjQKoCy/J3uRfAHzjeSW8H8JJHjZI2oav2QVwvD957KGwcug/ANSJyoaP2vcbZ1xtpW9sHscEMaCcA/BrAcwDu8xybgfEoeQLAdZ79hwBc7Dx/I4zAOArgqwBekVI//wrADt++iwEc8vTjEWd7DEalkva1OwjgxwAedW7Mi/z9cl5vgPF6eapP/ToKo0s97Gz7/P3q5/UK+v4APgkjuADglc69c9S5l97Yh2v0ThgV4KOe67QBwA73PgNwo3NtHoEx4v+HPvQr8Hfx9UsAfMG5nj+Gx5sw5b6thBnof8uzr+/XC0YwPQvgrDN2bYexSX0bwJMAHgSw2mk7CeB2z3u3OffZUQBbk+gPI58JIYS0UDZVEiGEkBgoGAghhLRAwUAIIaQFCgZCCCEtUDAQQghpgYKBEEJICxQMhBBCWqBgIIQQ0sL/B/PlpDZE0i+HAAAAAElFTkSuQmCC\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": { | |
| "needs_background": "light" | |
| }, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "kkm_rbf = KernelKMeans(n_clusters=2, max_iter=100, kernel=lambda X: pairwise.rbf_kernel(X, gamma=0.1))\n", | |
| "y_rbf = kkm_rbf.fit_predict(X)\n", | |
| "\n", | |
| "plt.scatter(X[y_rbf == 0][:, 0], X[y_rbf == 0][:, 1], c=\"blue\")\n", | |
| "plt.scatter(X[y_rbf == 1][:, 0], X[y_rbf == 1][:, 1], c=\"red\")" | |
| ] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "clustering", | |
| "language": "python", | |
| "name": "clustering" | |
| }, | |
| "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.3" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 2 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment