Skip to content

Instantly share code, notes, and snippets.

@mxl00474
Created November 17, 2018 14:45
Show Gist options
  • Select an option

  • Save mxl00474/9d76a800211060eb966d6eb6601d06af to your computer and use it in GitHub Desktop.

Select an option

Save mxl00474/9d76a800211060eb966d6eb6601d06af to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [],
"source": [
"from matplotlib import pyplot as plt\n",
"from sklearn import datasets\n",
"from sklearn.cluster import KMeans\n",
"import numpy as np"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 初期設定"
]
},
{
"cell_type": "code",
"execution_count": 81,
"metadata": {},
"outputs": [],
"source": [
"N_CLUSTERS = 5\n",
"N_FEATURES = 2\n",
"N_SAMPLES=1000"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## データを作成し、正解をプロットする。"
]
},
{
"cell_type": "code",
"execution_count": 82,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAD8CAYAAABzTgP2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJztnXt8FfWZ/z/PuSQ5hDZHKjYJQr1U8YpCs4pVadUWLxSxrgWs3bptd1m39lX115+K2mq8AdZfq3bbXdfWtrRrVeoNKFpRsUVtYRu8ICog3ipJEComlpB7nt8fM3MyZ/L9zsyZM3MuOc+bV145Z+Y7c55Mwvf5fp8rMTMEQRAEwSJWbAEEQRCE0kIUgyAIgpCFKAZBEAQhC1EMgiAIQhaiGARBEIQsRDEIgiAIWYhiEARBELIQxSAIgiBkIYpBEARByCJRbAGCsO+++/IBBxxQbDEEQRDKig0bNvyNmcd7jStLxXDAAQegpaWl2GIIgiCUFUT0jp9xYkoSBEEQshDFIAiCIGQhikEQBEHIQhSDIAiCkIUoBkEQBCELUQyCIAhCFqIYBEEQhCzKMo9BEIRo2bp+B/68/A3s2d2LseOqccKcg3Ho8fXFFksoEKIYBGEUYJ/IKQbwEHxN6CoFAABP37MZA31DAIA9u3vx9D2bAUCUQ4UgikEQypyt63dkTeRsfPOc0J3XWePjScocsxjoG8Kfl78hiqFCEMUgCEUmX7PNn5e/MWIitxjoG8KTS18FMFI5qK4b6BvCQJ/6c/bs7vUtk1DeiGIQhCKiW7UD2RO5m/LwmrB5CMp75jrRjx1XLb6HCkGikgShiOhW7c8s25p5v3X9Djz1q9cyE/me3b146levYev6HQCMCdsLyxRkx891FomqGA446mN4+p7NWXI8fc/mjBzC6CEUxUBEPyeinUS0yXZsHBE9QUSvm9/30Vx7oTnmdSK6MAx5BKFU2Lp+B5Ze/Rx+ctEaLL36ucwkah3Xrdp7ugYyY//wmy0YGuSs80ODnFEeJ8w5GIkq7//Ke3b3ZsngdR2Zp8aOq8YpFxyGtze9r/U9CKOLsExJvwTwYwC/sh1bCOApZl5CRAvN91faLyKicQCuA9AEgAFsIKIVzPxBSHIJQs6EZS7RmYna3+jA5nU7tH4BC2vC7e8dVJ7v6RoAMGwesmR2Y8/uXjzxi1exdtkWzJg7GadccBie+MWryrE8BFx856mZ97pxzs8Uc1P5E4piYOa1RHSA4/AcAJ81Xy8F8Ac4FAOA0wE8wcy7AYCIngBwBoB7w5BLEHLFr81fd619QhzoHVSusF95ti0TOeTGnt29vlfjhx5fn5HP+TOo6O0axNP3bMYpFxyGmtpERsnYoZhxL+u+1bVx9HaNVFJ2k1Q+z08oHaL0MXycmdvN1zsAfFwxZgKAd23vt5vHBKEo6Gz+XhO0NSHa7e+qyRaAL6UAGBOu2w6gujauPH7o8fU4bHp9xhSkY6BvCE/88lVXOZ/4xav4428MP0J/j1rwA476WOZ10OcnlBYFcT4zM8MwFQWGiBYQUQsRtezatSskyQQhG91E7GWicQsZDcoJcw52dRDPmDtZeXzr+h3YvG6HPwXk43/lprVtWLtspJ/DYvO6HRm/RdDnJ5QWUYarvkdEDczcTkQNAHYqxrRi2NwEAPvDMDmNgJnvAnAXADQ1NeWlZARBh26V7hXBE/bEV10bz5heVGaho2Y0AkDGgV1TmwCD0ds1mMl8DhOVCcnCnvwW9PkJpUWUO4YVAKwoowsBLFeMeRzATCLax4xammkeE4SioIrUSVTFMqUidOgmvuraeOacl2nHIhanzG7g0OPrccoFh2XuMXZcNT7/tSPQcHA6y3TV0zWQmbzDVgp+sOQI+vyE0iKUHQMR3Qtj5b8vEW2HEWm0BMAyIvoGgHcAzDXHNgG4iJn/hZl3E9GNAP5i3uoGyxEtCMXAGeHjN6rmhDkHj1jZJ6pimDF3cuban1y0xpcM7LDv2B3LFnd/Z23opqt8sBRX0OcnlBZkmP/Li6amJm5paSm2GIKQhVeYplveghOKA2Bj9U8xYMIhaXTs6s6YjXQOY1/3djE1URxgvdVISaIqhlMuOEwm/zKAiDYwc5PXOCmJIQghoVrZ21HtKnTYJ2ceArZv6ci8z0cpWPfT8c2fnIqt63docxYA4PNfO0J2BKMcUQyC4EFYCVuHHl+P9jc6sGltWwRS5o/dT6LbVYwdV+2pAIXyRxSDILgQdsLW6xveC1W+sLAcxNbPq9tVWGU17MpRMp1HH6IYBMEFt4StXBvgHHp8vWvYZ7Gg2PDP1N874GnqsitHQJr6jEZEMQiCC0EStqxqqFZCmFUNtVSxN/bxiz2bWZr6jD5EMQiCCzpbu1tOwjPLtiqroT7xi1cBQp41AEoHN0Uimc7ljfRjEAQXdLZ2t8ge16ihUaIULGpq1WtLyXQub2THIAgueJV4UPkSfGHtHEp8BzF2XDUOOOpj2kgqBo/IfaA4JNO5zBHFIAgu6DKa7RE8dserW/x/Fuz4XmKMHVeNCxedmHmvUwy9XYOIxSkrW5tAkcsnRIsoBkFwwa3Ew9KrnyupshRBiFcRBvtGaqc9u3vxn99cAx4ylIRuHAhKf4o4n8sbUQyC4IEuoavcHawUB0694HAA6u5vvqKVNDuecn82lY4oBkEwyTVRy6uRTqlDILS/0YG3N71v/Bwh+jvE+VzeSFSSIEDdge3pezZnGtCoUJWYLieGBhmb1rYNK7cASqG6Ni5ltkch5ftXLQghEqQlpbNXQqVhlRV39ouQSqvlj5iSBAHBW1La/Q93f2dt3pVPS5VEVQyHTa/PmJ2cpjZRBKMLUQyCgOAtPe2cPPdQ32W1y414ktBwcBqf+fJhxRZFKACRKgYimgzgftuhgwBcy8y328Z8Fkbbz7fMQw8x8w1RyiUITtzyFfxirZqfWbY1s3OIVxGSyTh6ugYy5TWCNMMpNr1dgwUvjidVW4tHpIqBmbcAOBYAiCgOoBXAw4qhzzDzF6KURRDcCLMl5UD/sHIZ7GMQhvD5rx2RuZe2k1uJZ0EXsjhe2OXOhdwopCnpNABvMPM7BfxMQfBNGA1odE7stcu2ZO6t9VuUsFKwKFR4btBy50I4FFIxzAdwr+bcCUT0EoA2AP+XmV9xDiCiBQAWAMCkSZMiE1IQ8kE3cfZ2DbqGvpYaukznQkVgBQ0GEMKhIOGqRFQF4GwAv1Wcfh7AJ5j5GAD/AeAR1T2Y+S5mbmLmpvHjx0cnrCDkgdvE+eflb7iGv/ohURVtHSKKGT2dT73g8KLmJ+ieY6WGBheaQuUxnAngeWYe0deQmT9k5j3m60cBJIlo3wLJJQih4jZx7tndm/eKd6CPXXtB+KG6Nq49x0PDJrVi5ieokgclca5wFMqUdD40ZiQiqgfwHjMzER0HQ1m9XyC5BMEXfiNkDj2+PisqyU51bTyU1p5HntSorXbqhxlzJ2PNPa8pTUX2HYkfn0tUkUNhBgMIuRO5YiCiWgCfB/BvtmMXAQAz3wngPAD/TkQDALoBzGfmMnDDCZVCrhEyqnwGigP9PfnnN1TXxvGZLx+Gjvf2YvuWjkD3sJTXYN9I5TXQx9i6foevCTjqyKEwggGEYERuSmLmLmb+GDN32o7daSoFMPOPmflIZj6Gmacz85+ilkkQciHXchkqM0x1TWJEeepcobix2geAOZdNg1vbAy8bvVuGtl8/SJAyIkJ5IJnPguBBkAgZ52r3Jxet0Y6luFHpVKU4rKQ4lSnlqJPVJqWjZjSi4eC0a8KeW2VYt5/LbjrSIZFD5Y8U0RMED8KIkNGNpRjwua8egdO+erhyDA8NT+hOs0rDwemRuwYyjns5j92cuDpZnRVoc71eKB9kxyAIHgQtl2FfXVfXxhGLZ+8KElWxrMna6grnnHh1iV1/Xv7GyKQ4RmaszkZvyaXC7edSmY7crpeSFuWLKAZB8CBIhIzTMdvbNQiKAzW1CfR0DYy4h5eJRnU8qClIV+jP6+fy2ilU18YxY+5kHHp8vZS0KHNEMQiCD3KNkFGtrnkQSFTHcfEPZmQdd5usLVTmGV34q1uegm7VP3ZcNS5cdKL2OrfPs0hWJ7KUqJS0KF/ExyAIEZDLat7LRKMz75AmLEl3PFe57Gxdv8Mz3NZ+DylpUd6IYhCECMjFYe02WbplHOtCTt1CUYM60v+8/A3PcFv7PaSkRXkjikEQIiCXkg5uk+iFi07Uml7cJlldwb6gpSa8VvrOe0hJi/JGFIMgREAutYaCTqJu53NJvvNTA8lNCanuUexaS0J+UDlWn2hqauKWlpZiiyEIoRE0tNMtce7iO08NVT5VyK5M9uUFEW1g5iavcRKVVAGsenMV7nj+Duzo2oH62npcMu0SzDpoVrHFEmwErQsURq9qP0hRu8pCFEMZkM/EvurNVWj+UzN6BnsAAO1d7Wj+UzMAiHIYBYTRq9ovUtSuchAfQwFY9eYqzHxgJqYsnYKZD8zEqjdX5XRt85+a0d7VDgZnJna/97jj+TsySsGiZ7AHdzx/R04/g1CaiC1fiALxMYSMc3U/Y/8ZWL5tedbkXBOvwZxPzsHa7Ws9dwEzH5iJ9q72Eccbahuw+rzVnvJMWToFrGgmTCBsvHBjjj+dIAjljPgYciAsG7zKbHP/lvtHjOsZ7Mk67mbe2dGlDjvUHXdSX1uvVCz1tbKiFARBTeSmJCJ6m4heJqIXiWjEMp8MfkRE24hoIxFNi1omO/maauyozDZ+0Zl3dBO434n9kmmXoCZek3WsJl6DS6ZdkruQgiBUBIXaMZzCzH/TnDsTwCHm1/EA/sv8XhDcbPBeuwbnTkO1Ms+F9q52zHxgZtbO5ZJpl2TtQoDcJnbrZ5CoJEEQ/BK5j4GI3gbQpFMMRPTfAP7AzPea77cA+Cwza2fZMH0MQW3wTrNRFNTEa9D86WYAMrELgpA/peRjYACriYgB/Dcz3+U4PwHAu7b3281j+S2/fRLUBp+P2cgvPYM9uPrZq8HMqK+tx+KTF4tCEAQhcgoRrnoSM0+DYTK6mIhmeF2ggogWEFELEbXs2rUrNOGC2uDdzEYNtQ2hyAYAQzyUt+9DEAQhFyJXDMzcan7fCeBhAMc5hrQCmGh7v795zHmfu5i5iZmbxo8fH5p8sw6aheZPN6OhtgEEQkNtA5o/3ey6MnebnK0w0rqqutBktJD8A0EQCkGkpiQiqgUQY+a/m69nArjBMWwFgG8R0X0wnM6dbv6FKJh10KycTDRuk7O10yDS18S3iFEMQ+xe495Jvg5uQRAEL6L2MXwcwMPmJJkA8Btm/j0RXQQAzHwngEcBnAVgG4C9AL4WsUx545ZDYCmYzt5Oz/vkqhQAQ5kIgiBESaSKgZnfBHCM4vidttcM4OIo5bATRjKbzmEdoximLJ2C+tp61FXXoaO3IyyxM1jKRArjCYIQFRW1/AwrmU3lsAayHcV7+vYgGUuGJXqGGMWUP8fCZxbipnU3hf55giBUHhWlGMIqKOd0WKvMOwM8gDGJMXnJq2KIh7ShsvdvuV+ilgRByJuKKqIXVUG5o5ceHfjaXGmobcCOrh3Kn8OO5dhuqG3IOMTF9CQIlY3fBLeK2jHkU3dIVzq7kCt0K7/Cj7yWL6K9qx3fe+57+O6z3x1hejp66dE5lwEXBGH0U1GKQeUbSFAC3QPdrr0S3HwThcwrsPIrci2A1z/UjwEeUJ6TxDlBEJxUlGJw+gZS8RQGeAAdvR2uzmidb2Lx+sW+y1/ny5KTl2RMP7MOmoXp9dNDu7ckzgmCYKeiFANgTKqrz1uNxScvRvdg94jzzkly1ZurtEllnX2dqKsOP8PZSUzxa3rn7++E+hmFUnCCIJQ+FacYLNxWyNYkaZmQ3CiE834IQxl5LV9HrhnQBPdMbGncIwiCRcV2cHNbIVuTpJ8Kqp193hnOYdDe1Y5P/fpT6BvqC3R9XXUdUomUUqFI4x5BEOxUrGJwa6xjTZKlZl4JqhQAo0THM/OfARBuK1MJgRWE0UfFKgZVZzQAmDd5XmZyC6MrW6nw0aqPZl7nWjRQhaq/ta5vtSAI5UXF+hgAoDpenXlt2eDXbl+Lm9bdhJPuPWnUKAUA2DuwFzetu0mZixGEsLLIBUEoPSpyx6Bqy2llErd3teP+LfcXS7TI6B/qz/q58l3h68xspWZ+EwQhdypyx1CItpzlQD4r/HyyyAVBKG0qUjGM5lVtQ20D0tVp3+ODPougLVEFQSh9KlIxjNZV7ZKTl2D1eaux8LiFvq8J+iyCtEQVBKE8iEwxENFEInqaiF4loleIaMRSkog+S0SdRPSi+XVtVPLY0fVTyJW6qrqcVudRQiBc9cxVmPnATADw1XM63xW+lUW+8cKNWH3ealEKgjBKiHLHMADgO8x8BIDpAC4moiMU455h5mPNL2c/6EiwVrv5tsns7OtEz0AP5k2eF5JkwWHzn1U59fBxh49QfslYEnVVdbLCFwTBlciikpi5HUC7+frvRPQagAkAXo3qM3PBmhC/99z30D/UH/g+PYM9+P1bvweBPHskhEmMYmBmEJGyd/S6Heswb/I8rN2+VhLQBEHIiYL4GIjoAABTAaxXnD6BiF4ioseI6EiXeywgohYiatm1a1cocs06aBZuPPHGvM1BnX2dBVUKgFGjaeOFG11rNT3+9uMFlEgQhNFC5B3ciGgsgD8CuJmZH3Kc+yiAIWbeQ0RnAbiDmQ/xumfQDm5+CFKgrlyoideI+UgQKpiS6OBGREkADwK4x6kUAICZP2TmPebrRwEkiWjfKGXyws0xratQ6lW5tFSw8hZuWncTjvnVMTh66dE45lfH4KZ1NxVbNEEQSojIfAxERADuBvAaM/9QM6YewHvMzER0HAxF9X5UMvnBWk3f8fwdI3YOOnNRoc1I+eDM7B7iocz7707/brHEEgShhIhyx3AigH8CcKotHPUsIrqIiC4yx5wHYBMRvQTgRwDmcyEaHHhghWE21DYUW5ScyMdX8tutvw1REkEQypkoo5KeBdxtLMz8YwA/jkoGFbmUii63DOlUIqXtuQAYPgZdKRBVZJMgCJVJRRXR8yoV7VQaH636aMEa8YSBlyJr/nQzrn72aqUSyDenQxCE0UNFKQavUtFOpZGMJZGgBAZ4oOCyBqGuug4f9n2oDGFtqG3ArINm4YWdLyirx37p0C8VQkRBEMqAilomupWKVimN/qF+jK0am6kH5GdVXawSGclYEnv69ih3A/bSF1P3m4pUPJU5RyDMmzxPHM+CIGSoKMXgVipapzQ6ezsz9YAWnbTItcZSujqNhcctDKUOkxvp6jTmTZ6XVcBuTGKMcmcTo1gmd8EypXUPdmfOV8erMXW/qZHKKwhCeVFRisGtVLSf/gJWjSXVrqAmXoOFxy1UVh1dcvKSwBFOVqE++72emf8Mvjv9uxmFdcm0S7S+EGbOCsGVrmuCIHhRUT4G+wSpikpydnVTVR+1+iW7RTepeirrbPtupKvTeGb+M5n31mde9cxVmc+05NZhV2zSdU0QBD9UlGIA1JO2dRzQKw2/91Gx6s1VWL5tec6yMnOmL/Pi9YuzdgVWRFVNQh+C6lRs9bX1ylDW0dqfQhCEYEReKykKoqyVFDar3lylDRG1SFencfoBp+Pxtx9HR29H1rlkLAlmDhQZteTkJVnKS9XrWuonCULl4LdWUsXtGAqJNRG7KQX75L12+9oRiiFoSXArPNVOrrsiQRAqE1EMIeL0O+zt36s18wAjJ+8gtv66qjr0DvZ6+kYscjGBCYJQmVRUVFKUWLuD9q72TCc1t6xp1eQdxNZPRJjzyTnSe1kQhNCQHUNIqEJBddhzC+xcMu2SET4ALx9DR28Hlm9bLspAEITQkB2Dyao3V2HmAzMxZekUzHxgZiYayC9+zUA18RosOmmRNjLKmQNx44k34qaTbnLNvpZcBEEQwkR2DPAurucHXShoujqNVCLl29nrFU47ZekU5XWSiyAIQliIYoB7RrBfxaAyA9mzocNCchEEQYiayE1JRHQGEW0hom1EtFBxvpqI7jfPryeiA6KWyUkYGcEqM1AUdn+3sh6CIAhhEOmOgYjiAH4C4PMAtgP4CxGtYOZXbcO+AeADZv4kEc0HcAuAeVHK5SSsVXghQkElF0EQhKiJ2pR0HIBtzPwmABDRfQDmALArhjkAms3XDwD4MRFRIVt86sxApboKl1wEQRCiJGrFMAHAu7b32wEcrxvDzANE1AngYwD+FrFsGWQVLgiCMEzZOJ+JaAGABQAwadKk0O8vq3BBEASDqJ3PrQAm2t7vbx5TjiGiBIA6AO87b8TMdzFzEzM3jR8/PiJxBUEQhKgVw18AHEJEBxJRFYD5AFY4xqwAcKH5+jwAawrpXxAEQRCyidSUZPoMvgXgcQBxAD9n5leI6AYALcy8AsDdAH5NRNsA7IahPARBEIQiEbmPgZkfBfCo49i1ttc9AL4UtRyCIAiCP6RWkiAIgpCFKAZBEAQhC1EMgiAIQhaiGCqczpUr8fqpp+G1w4/A66eehs6VK4stkiAIRaZsEtyE8OlcuRLt37sW3GOUAhloa0P794y4gLrZs4spmiAIRUR2DBXMzttuzygFC+7pwc7bbi+SRIIglAKiGCqYgfaRFWXdjguCUBmIYqhgEg0NOR0XBKEyEMVQ4kTpHN7vsktBNdlNf6imBvtddmlonyEIQvkhzucSJmrnsHWPnbfdjoH2diQaGrDfZZeK41kQKhxRDCWMm3M4yOTduXKlUgmIIhAEwY6YkkoAnbkoTOewtfsYaGsDmDO7D8lbEATBiSiGIuM2YYfpHA4amioJcIJQeYhiKDJuE3aYzuEguw/ZZQgFZeMy4LajgOa08X3jsmJLVLGIYigybhN23ezZaLjxBiQaGwEiJBob0XDjDYF8AkF2H5IAJxSMjcuAld8GOt8FwMb3ld8W5VAkxPlcZBINDcaKXHEcQJZz2HIet11xpTaCyOlgHvuZGdjzx7XKz/DafUgCnFAwnroB6O/OPtbfbRyfMrc4MlUwkewYiOhWItpMRBuJ6GEiSmvGvU1ELxPRi0TUEoUspc5+l10KSiazjlEyOWLC9mPWab/+erRdcWXWmI5778tWCkQA4Gv3odtNUF1drj+mILjTuT2341FT4WatqExJTwA4ipmnANgK4CqXsacw87HM3BSRLCWPs8W1quW1l1mn/frr0XHvfYBXu2xmJBobcciapzxNUmM/M0N9iw8/FD+DEC51++d2PEryNWuNAqUSiWJg5tXMPGC+XQegCL/d8mDnbbcDAwPZBwcG0H7zoqyIIJUpCDDMOhml4BO/pqA9f1yrPjE0JH4GIVxOuxZIprKPJVPG8ULjZtbyYpT4SgrhfP46gMc05xjAaiLaQEQL3G5CRAuIqIWIWnbt2hW6kMVCN+FzRwfarlyYMQvpoFQqJ6UAZJuCVOGo1jGdbJbcsmsQQmPKXGD2j4C6iQDI+D77R8XxL+Rj1spHqZQQgZ3PRPQkgHrFqWuYebk55hoAAwDu0dzmJGZuJaL9ADxBRJuZWblMZea7ANwFAE1NTR72kuKjdQLbso4BGDZ/3cQ/NOT6GZRMgvfuzVk27ujA1ukn4CNnnoHOhx/JLrlx9TWGKcu5i1EgvRuEUJkytzQczXX7myt+xXEvSs1XEhBS2bNDuTHRPwP4NwCnMbPn7EVEzQD2MPP/8xrb1NTELS2l66t21jhSQTU1iNXUYLCjI/cPIDKimT74AOju9h7vch9Pn4QHlr9CEEYNljnIvvJPpvztYG47SqNUJgKXbQpXzgAQ0QY//tyoopLOAHAFgLN1SoGIaonoI9ZrADMBFP/JhYDKUeyEe3oCKYVEYyMOf+1VYzLORykAeSsFQEJXhVFIPmatUvKV5EFUeQw/BlANwzwEAOuY+SIiagTwM2Y+C8DHATxsnk8A+A0z/z4ieQpKlJOlLlIocuJxYHBwxGHp3SCMSoKataxrnrrBMB/V7W8ohVIwkeVAJIqBmT+pOd4G4Czz9ZsAjoni84uNLmnNCaXTQE+P5+7CTse996Hzsd+j4ZqrQzEFjZApmRzhY6CaGtR98Zwsf4R1XHo3CIKDUvGV5IGUxIgAVY0jFdzRAcRy/xVwRwfarro6HKWQSiGeTg+X3Fh0MxoXLxpRhqPhuutCK88hCKExCnIGSpHInM9RUqrOZ3skEtXVIQZgsLMzE5XU+djvDWVQgsTTaXz8mqtlohfyZ+OywphS3JzEQLYMh8wEXl89UiaVrM5ry9AUpMOv81kUQ0ioIpEsE0ymVlEEpp+woXQaDaIghKDkE9GTK7oIoNQ4YKB7ZD6BnWQKOObLwEu/yR4XrzL+jw71j7znmbeUvYIQxVBgvBLCygmqqUHDjUZCjrT9FHKikOGazXnW7KIYwO65QllEpeAKiF/FINVVQ2I0hW1yTw/aLr8i61jY/aaFUUqhErw2LgNAMIonBCQXpQBUVLVXUQwh4TcSqZzJp9+0UCHkkzXshtMX0NcFtVIgILUP0L07v8/T4VfBFcrPEhESlRQSykgks8T1aMK+M9K1/ZR2oBXMadcadno78ar8ErxUhem0Ez8bvgBnkllY+FFwo6CQnuwYQsJaRTvrIzlj/8sdK6HN6Wy3TE17n39+ZP0lMUEVhEdeaMWtj29BW0c3GtMpXH76ZJwzdULh7+f0W+brx1QVptNRN9GRZKbYveRDX5cxwetW/xuXAQ9fBLAjGbTMzFDifI6YTAhrLmamUo1eIkLj929B3ezZeme7LkNaaipFxiMvtKJ5xSvo6M6OpEkl41h87tGBlMMjL7TiqodeRnf/8O+SAFwwfRJuOudo/YVROJ+b0/DlS4glgUSVaWaCEUkERGBWIqDp68AXfphtMkrtA/T+fWREk/265uKGqxe1VpIwTN3s2ThkzVNInz/f/0XxONLnzzcSz4qAs6OcRXr+vMyqX+tsVygF1/FCXlgTuFMpAEB3/yBufXxLoPve+viWLKUAGFPz/6z7Kx55oVV/oZvzOWgymh/zTWocgKFhpQAYCiESXwMDLXcDv/s/2Saj7t0uSgHFaToUEFEMBULb9EbFwAA67r0vWOUbsXIdAAAXfklEQVTVPLGyn+1KidJpNN76fTRcdx0AYxekzdiOx9X3lZpKkaCawO20dQQrtOh2XfOKV/QX6ia/1D7B7e6qwnROuncDQ/rnEAktd/s3cZVZIT3xMeSBs+eCW5x/uayYrSJ9NGYMYGZtW/WQMuYjjalLaioVHq+JvzEdzAnbmE6hVXPvju7+zK7B7oM45bDxSHT9I67g/8QY6hu+wJrUdQ1sfNndy3wNW2b5D+JjCIgu09leP8iuOBCLac0spUQ8ncaQs7BfIgEiAve7bJMBpM+fj4brrstJYQr5MfWG1fhgr/r3kq+P4dL7X9SejxEwpJk6zo49iysSy9BI76NnTD3GnHkD8NACaMNL3ezuqkzqcqS5s9gSAJDM58jROV8tJ6ufZj2jDadiFIKjiwiyH69LJfFhT79ygt5nTBLXzT4yr6ikI773GPb255gE5mBCOoXnFp4a3Cmtu67cqJtYErkMohgi5rXDj9BHDmkicyoBiT7KH1VEUCoZxz9+agIe3NDq6lMAgHQqiRevmxmKHJc/8BL6B4PPEQTgrSWz/NdQciaGjQal4KSISqLoJTHMVp3/CmCXeehqZn5UMe4MAHcAiMNo4rMkKpnCxDXTuUKVAlA+vpRi4pUfoHIod/cP4t7172LQx0Ku0xGhFDQfwRrznWUv+fpcFRkfh58GNk7l0fku8i57UYpYjnfAXTkUMXs6yp7PzfDo4UxEcQBbAXwewHYAfwFwPjO/6nbvUtgxdK5cafREsDW08UWp5ii44dPHAMiOwQu33cDTm3ehraM7lGlwgqkAWt7ZjXvW/XXEPXMxNalk9kPOPg6t2WgUKgfA3YwWUZXaou8YfHIcgG1mNzcQ0X0A5gBwVQylQN3s2Xjv5kU5hZRSTQ2YKP9ezc77ptPgPXtyV1I+SDQ2ZiKKvLK6JfpoGN0qXbcb+J91fw3181s7ul2dxx/s7cdVD70MAJ4Tt3Xe+nnSY5JahzdgTOPKnYkzGQwAuj8YXg1r6xCxkacQVf2jYtH5rpEL8YUfjjynyvYuYPZ01IrhW0T0VQAtAL7DzB84zk8AYF8ibAdwfMQyhcZgp/9IA2uCbbviytDl4I4OpE6Yju4/rwv1vs7VvzPaint6Mv4U6+dzOp4rMULJucJu7ejOTMJB8wqiwEqA82tWso/TRUNlnM1OnCtg+yRvmVZ0xe/qJo68ZrTQcrfx3akcClWlVkNewcFE9CQRbVJ8zQHwXwAOBnAsgHYAP8jzsxYQUQsRtezatcv7gpBRFYbzk7RFNTVovPX7OGTNU6ibPTuyRK+wlYJu9W9FW2X8K4ODmbEqpZAZy5ypm1RKRfUeeaEVJy5ZgwMXrsKJS9a4Z/X6RLcruPXxLYHzCqIiqKK6bvaRSCWzkxlTyTguP32y+gKvekfWOWcim5UYVqAJsShs+OXIY7pEwQJlT+elGJj5c8x8lOJrOTO/x8yDzDwE4KcwzEZOWgFMtL3f3zym+qy7mLmJmZvGjx+fj9g5o5vgxn5mhrq3s1lVVdUX2W8/6KLgIrdFZqdgg3t60LbwqhETvm7szttuD1nwYFgr+1bTrm+t7PNVDrrJtq2jG5efPnnEhFpM0mOSgZTjOVMnYPG5R2NCOgWCsVNw9Sf4mdi7PzBs6HUTAZDx3bKp5zUhlniVYx4cWSpEle1dwOzpKKOSGpjZClH5IgCVl+UvAA4hogNhKIT5AL4clUxB0U1we/64Fg033pCTqURVhTX5iUmhr/iDYBXIc8OtRpKziqpubKlELrmt7HON/7f7FGJEyiiexnQqc183+79FDEB+WQTe7Onp15q9Wt7ZnYmEihPh/OMnZhXQc5qXXPETeuo2+Z92LfDIN91rEelo+vqwyaZUsZ5N57vAQ/9qHrQpNIobrUhHQVTSr2GYkRjA2wD+jZnbiagRRljqWea4swDcDiNc9efMfLPXvQsdlaTNWSDC4a+F4ycvdmtQv9FEXnLa7+OVBFhsDly4SpeLa8Te+8RP1I4zQsctY9kiGSfUViXQ2d2PxnQKe/sGPK+JmjHJGM791P6ZCCrf4a9eGcy6HsxWRFKyFujvUl/rRmoccOVb+bcBLQUKGJUUWQESZv4nZj6amacw89nW7oGZ2yylYL5/lJkPZeaD/SiFYqDzC4TpLyiYiSmVGtFAyOlPcGu04yWnfTegGltKkUs6e3+ufgBdIbs4kdbMct3sI5GMu5s4+gcZtdUJvLVkFp5beCqum31kTnJFwd7+IfzPur/mbn6bMjfbTJQaZ1ZEtZmMXl+tUBym6g6iFADDYX3LgcGuLTWsqKQCUOxw1bJgv8suVdZFCnOCc5qY8qmtlGhs1IaTNtxwfdbnOM1fugY8lozWuLaFV6n7LtiUpcpsVkpRSZefPlmZU6B1oGrQ+RSGmLU7j3OmTsgy1eho7ejGsdevBhHQUeTdgg7f5rcpc91XuxkTSphQaUQz1U0EDplpKD97wlquzYQK5IQXxeCDQk1w9om3/frr0XHf/bknwxFlzDRjpk1zldk6ZzmD62bP1vpT2m9elLk2I6MPZWn/mUoNZ3x+0K5nukqk1s5DldMAAA9uaPWVUazqtVBqhBKGS/GRnc/ypgQS4yynsU4p5lIksEBRSVIrqQTJpwCfH/u9W2XYtiuu1Cqjxlu/nzXJV2KOggpdNvPicw1Hrcr/UI4J8F5MyLedaD5+AMtH8frq0iyl4cxyVib7eexsKijzWVCgWrX7wa95672bF2lDTt1mq5233Y662bNHKAQ/0UyjnZpkLDP5p1NJNJ9tlJs4cckapf9htCkFIDuiyVkJNms3pqsBVDcxWNE8imdPmKVYkdVuAlIl+yVTwLk/Bf66zshr4EGAYkAiZfhXKJ7tY4g4OkkUQwmSUzinR+axk86VK/VlPDx8GgPt7Z4+iEpDtVvoHRgOMi2lTOdCYG8nqgqDnfDu7/APL1+XXSjPKih32rUKs4q58k+NAwZ6RzqhVavoUkyGs5uA3MpdXLYpOwtaVVjQTwG+PCnztkijk1wyqg9/ZRMO3/xaJrPai3ySyxINDSWftFZo3HIhgOAd1MqZto5u7XOZ+Pyt7jWAnAlu595lNLm58i3gmjZjVa1KgAOGe0qXkgnJovPd4eS1XMpduCmRCJEdQwmiioJCIoH42LEYtLXbDLJCD5pcZpmpdLWeSiVprdC4ZTkD6sinfCkx6/kIGtMp7XPZj3epE5GtSdEZuWRN9nazk7Mi6cZlwGNXBo8+opjh9PHdMzrgb8CzJpTCsVykmkmiGEqQKKOgXPtIOInHgaGhrM/fedvt6qS1iGpAlTpuEUmWjb27f9C1FWaulLJSIBhmo7gm+3snjUc9FLXOVJOiHzNKGK0/eSi3h5ocY2RgD/Z5j3XS320oIqdy0ZW70GWMRxydJKakEqVu9mwcsuYpHP7aq77NRH5QJqglEqBkMusQ1dSgccniEZ9f6klrhUZV+yiVjOOUw8Zn6jABw0ohlYyVeuWenCHbd2uq04Xhrp307/5rALmZUaydxEP/Wvh+0P1dRvSAlaCXK31dyNZEpC93UaSaSaIYKoy62bPRcOMNSDQ2AkRINDaicfEiNCy6OeuYroie6vpK7vOsKyb3u5faleajnv4h3Dbv2MILGiHs+O7GHTunKgvlPTJ44shCflozyrvA8ouLG3k01A9U1QLNHaaCyAc2wmxVqPwueYas+kHyGAQhZB55odW1SN6EdAo7OnsCt8ssZ1R1qHR5IBvGXoox3QrfFcUM80/RIUMxbFxmKKogpiXnvSKm6LWSBGG0oytXbUUk6Wjr6Mb5x09UnvvK9Em4fZTtKOyoorR0EUzf75+nNqP4UQpVtSGs5L1gMwoKwJyf+LuENFNugTKa/SKKQRAC4NbLwSt3IUaEpk+Mw1emT0LcLGgYJ8JXpk/CTecYxfZSydH3X1NXh0r3vJbuOU5tRvFDvBo48xYjvNWpXLSY/gKKZ393w+4Qr1Mr+wzJFPCprxW1z4JfxJQkCAE4cckaZTTSBHNFrDpnx1mG2+KRF1rRvOKVsqiPpCJOhCFmNKZTOOWw8b7Kc7s9S2Wb0FsO9BeaGq8aXsl7FeirmziynlEuEU/W9boEPfv9dZnfBUBKYghChLjlL9w271jP3AV7RVIrrLW1o7vkcxTcsCu7XMphXH76iblVuT3zFn9Newb7hrOJdVVMrX4NKqzJ2i6vzuHduV09XjXpe1WZLQFkxyAIAdCtcq0Vc10qmSmV7fU/rBSVQa4y2Qvo6ZzJv/qHd7LLYQCZkhaPDJ6YW5XbjcuAhy/yUY3V5iB2ruaDFKXT1WFyFskrUYq6YyCi+wFY6j4NoIOZR3jUiOhtAH8HMAhgwI/AglBMvFb3VqRRR3c/kjHCbfOOzYzXUWpKATBk8mMWS8YJt553TNYk7loOA+q8hHMu25RbVVZrMvcy9dTtP7xL6e8eLu2tMh35QWUuKkEfQb5E4uFi5nnMfKypDB4E8JDL8FPMsaIUhJLG7nAGjMnTntzlpH+I0bziFZxy2PiyTGpr6+j2bFo07x8mjpjQLTPb2bFn8WzVt/Fm9ZfxbNW3jXIYKoKWd7Bi/HXRR/EqoznOym8Pr/J50Ls/gp/PLHBeQaGJNPSBiAjAXAD3Rvk5glAIVCtha2WtW/V3dPfjwQ2tJbkr8KIxncI5UycgnUpqxzy4oXVEW8/GdApnx57FkuTPsH/sb4gRsH/sb/ok4XxCNafMNXwE5/40W0GkxhmOZ1W70HyL0E2Za5iNmjuM76NMKQDRh6ueDOA9Zn5dc54BrCaiDUS0wO1GRLSAiFqIqGXXLs3KQxAixKtgno4wC+gVCrvzt/nsI0eU/bCwV5K1uPz0ybgyuQxjKDvhy5hsHNohLDOMpSCaO4ersU6ZW7QidOVOYMVARE8S0SbF1xzbsPPhvls4iZmnATgTwMVENEM3kJnvYuYmZm4aP358ULEFITC6EtqN6RT2GaNfVZcD+4xJjijrYZmIrLIfOpyK8ZypE9BI72tGc2HNMLrdSIkllJUagZ3PzPw5t/NElABwLoBPudyj1fy+k4geBnAcgLVBZRKEKFGV0LavrC9/4CX0Dw4bjZJxQm1VQpmTsM+YJMZUJdDW0Y26VBJdfQNZ1wbBqmiaa9vQVDKO62Yf6er8PWfqBK0TXaUwSVsVtMDROxXiLA6bKE1JnwOwmZmVezYiqiWij1ivAcwEUPrxXkLFoiuYd87UCcbEed4xWeduPe8YpRnGmoifW3gq3loyC7XVibyVQioZxw/mHoO3l8zCW4tn4fZ5x2ZkSaeS2GdMMiPXV6ZP0u4O3NBVklU6qItUFXQEFeIsDpvI8hiI6JcA1jHznbZjjQB+xsxnEdFBAB42TyUA/IaZb/Zzb8ljEMoJbbKXyYELV+WV60AALjDLaUSN18+SRREzfAU1fvMYJMFNEIqMLlnOIhkjzDtuIp7evEs7Tls+QhBsSEkMQSgT3Np/plNJNJ89bP/X7S7cIqNyWuULAkQxCELRsSZpP5O3WytRFc7yFFYVWPvnCoITUQyCUAJYDmwvvCKjnOjKU1gF/ARBhSgGQYgQP2acXEw9uewugOBJeUJlI4pBECLCjxkniKnH7+4CyN30JAiAdHAThMhwM+PkMiYfcso9EAQT2TEIQkT4MeNEberJ1fQkCIAoBkGIDD9mnEKYenIxPQkCIKYkQYgMP2YcMfUIpYjsGAQhIvyYcYpl6pGkN8ENKYkhCBWGriez32J6QvnitySGmJIEocKIOhJKKH9EMQhChSFJb4IXohgEocJw60QnCIAoBkGoOCQSSvAiL8VARF8ioleIaIiImhznriKibUS0hYhO11x/IBGtN8fdT0RV+cgjCII3bp3oBAHIP1x1E4y+zv9tP0hERwCYD+BIAI0AniSiQ5nZWXD+FgC3MfN9RHQngG8A+K88ZRIEwQNJehPcyGvHwMyvMbMqlGEOgPuYuZeZ3wKwDcBx9gFERABOBfCAeWgpgHPykUcQBEHIn6h8DBMAvGt7v908ZudjADqYecBljCAIglBgPE1JRPQkgHrFqWuYeXn4ImnlWABgAQBMmjSpUB8rCIJQcXgqBmb+XID7tgKYaHu/v3nMzvsA0kSUMHcNqjF2Oe4CcBdgZD4HkEkQBEHwQVSmpBUA5hNRNREdCOAQAP9rH8BGLY6nAZxnHroQQMF2IIIgCIKavGolEdEXAfwHgPEAOgC8yMynm+euAfB1AAMALmXmx8zjjwL4F2ZuI6KDANwHYByAFwB8hZl7fXzuLgDvBBY8m30B/C2ke0WByJcfIl9+iHz5UWryfYKZx3sNKssiemFCRC1+ikoVC5EvP0S+/BD58qPU5dMhmc+CIAhCFqIYBEEQhCxEMZiRTiWMyJcfIl9+iHz5UeryKal4H4MgCIKQjewYBEEQhCwqTjGYVVxfNL/eJqIXNePeJqKXzXEF6yNKRM1E1GqT8SzNuDPMyrXbiGhhAeW7lYg2E9FGInqYiNKacQV9fl7Pw8ypud88v56IDohaJttnTySip4noVbMa8SWKMZ8lok7b7/3aQslnfr7r74sMfmQ+v41ENK2Ask22PZcXiehDIrrUMaagz4+Ifk5EO4lok+3YOCJ6goheN7/vo7n2QnPM60R0YZRyBoaZK/YLwA8AXKs59zaAfYsgUzOA/+sxJg7gDQAHAagC8BKAIwok30wACfP1LQBuKfbz8/M8AHwTwJ3m6/kA7i/g77QBwDTz9UcAbFXI91kAvyv035vf3xeAswA8BoAATAewvkhyxgHsgBGPX7TnB2AGgGkANtmOfR/AQvP1QtX/DRg5W2+a3/cxX+9TrN+77qvidgwWZnXXuQDuLbYsATgOwDZmfpOZ+2AkCc4pxAcz82oeLny4DkYpk2Lj53nMgVHBFzAq+p5m/g1EDjO3M/Pz5uu/A3gN5Vcwcg6AX7HBOhjlbBqKIMdpAN5g5rASXAPBzGsB7HYctv+N6apFnw7gCWbezcwfAHgCwBmRCRqQilUMAE4G8B4zv645zwBWE9EGs4BfIfmWuV3/uWY76qd6bSH4OoxVpIpCPj8/zyMzxlRsnTAq/BYU04Q1FcB6xekTiOglInqMiI4sqGDev69S+ZubD/1irpjPDwA+zszt5usdAD6uGFMqz9GVfBv1lCQ+K8KeD/fdwknM3EpE+wF4gog2m6uESOWD0ajoRhj/UW+EYe76ehif6xc/z88seTIA4B7NbSJ7fuUKEY0F8CCMEjEfOk4/D8M8ssf0Kz0Co8ZYoSj53xcZHR7PBnCV4nSxn18WzMxEVLYhn6NSMbBHRVgiSsDoPPcpl3u0mt93EtHDMMwVofxH8ZLPJudPAfxOccpP9drA+Hh+/wzgCwBOY9NwqrhHZM9PgZ/nYY3Zbv7+62BU+C0IRJSEoRTuYeaHnOftioKZHyWi/ySifZm5IHV2fPy+Iv2b88mZAJ5n5vecJ4r9/EzeI6IGZm43zWw7FWNaYfhDLPYH8IcCyJYTlWpK+hyAzcy8XXWSiGqJ6CPWaxgO102qsWHjsNt+UfO5fwFwCBk9s6tgbK9XFEi+MwBcAeBsZt6rGVPo5+fneayAUcEXMCr6rtEptbAxfRl3A3iNmX+oGVNv+TyI6DgY/zcLorh8/r5WAPiqGZ00HUCnzWxSKLS7/GI+Pxv2vzFdtejHAcwkon1MM/FM81hpUWzvdzG+APwSwEWOY40AHjVfHwQjsuUlAK/AMKEUSrZfA3gZwEYYf2gNTvnM92fBiG55o8DybYNhI33R/LrTKV8xnp/qeQC4AYYCA4AaAL815f9fAAcV8JmdBMM0uNH23M4CcJH1dwjgW+azegmGU//TBZRP+ftyyEcAfmI+35cBNBVKPvPza2FM9HW2Y0V7fjAUVDuAfhh+gm/A8Fk9BeB1AE8CGGeObQLwM9u1Xzf/DrcB+Fohn6PfL8l8FgRBELKoVFOSIAiCoEEUgyAIgpCFKAZBEAQhC1EMgiAIQhaiGARBEIQsRDEIgiAIWYhiEARBELIQxSAIgiBk8f8BXza0mkXFIQcAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"dataset = datasets.make_blobs(centers=N_CLUSTERS, n_features=N_FEATURES, n_samples=N_SAMPLES)\n",
"samples = dataset[0]\n",
"labels = dataset[1]\n",
"\n",
"for i in range(N_CLUSTERS):\n",
" #target = samples\n",
" target = samples[labels == i]\n",
" plt.scatter(target[:, 0], target[:, 1])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## sci-learnのk-means法で分類し、結果をプロットする。"
]
},
{
"cell_type": "code",
"execution_count": 83,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x7f8987824128>"
]
},
"execution_count": 83,
"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": [
"cls = KMeans(n_clusters = N_CLUSTERS)\n",
"pred = cls.fit_predict(samples)\n",
"\n",
"for i in range(N_CLUSTERS):\n",
" target = samples[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')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 自分で実装したk-means法で分類し、結果をプロットする。"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {},
"outputs": [],
"source": [
"class MyKMeans(object):\n",
" \"\"\"KMeans 法でクラスタリングするクラス\"\"\"\n",
"\n",
" def __init__(self, n_clusters=2, max_iter=300):\n",
" \"\"\"コンストラクタ\n",
"\n",
" Args:\n",
" n_clusters (int): クラスタ数\n",
" max_iter (int): 最大イテレーション数\n",
" \"\"\"\n",
" self.n_clusters = n_clusters\n",
" self.max_iter = max_iter\n",
"\n",
" self.cluster_centers_ = None\n",
"\n",
" def fit_predict(self, samples):\n",
" \"\"\"クラスタリングを実施する\n",
"\n",
" Args:\n",
" features (numpy.ndarray): ラベル付けするデータ\n",
"\n",
" Returns:\n",
" numpy.ndarray: ラベルデータ\n",
" \"\"\"\n",
" # 要素の中からセントロイド (重心) の初期値となる候補をクラスタ数だけ選び出す\n",
" samples_indexes = np.arange(len(samples))\n",
" np.random.shuffle(samples_indexes)\n",
" initial_centroid_indexes = samples_indexes[:self.n_clusters]\n",
" self.cluster_centers_ = samples[initial_centroid_indexes]\n",
"\n",
" # ラベル付けした結果となる配列はゼロで初期化しておく\n",
" pred = np.zeros(samples.shape)\n",
"\n",
" # クラスタリングをアップデートする\n",
" for _ in range(self.max_iter):\n",
" # 各要素から最短距離のセントロイドを基準にラベルを更新する\n",
" new_pred = np.array([\n",
" np.array([\n",
" self._euclidean_distance(p, centroid)\n",
" for centroid in self.cluster_centers_\n",
" ]).argmin()\n",
" for p in samples\n",
" ])\n",
"\n",
" if np.all(new_pred == pred):\n",
" # 更新前と内容が同じなら終了\n",
" break\n",
"\n",
" pred = new_pred\n",
"\n",
" # 各クラスタごとにセントロイド (重心) を再計算する\n",
" self.cluster_centers_ = np.array([samples[pred == i].mean(axis=0)\n",
" for i in range(self.n_clusters)])\n",
"\n",
" return pred\n",
"\n",
" def _euclidean_distance(self, p0, p1):\n",
" return np.sum((p0 - p1) ** 2)\n"
]
},
{
"cell_type": "code",
"execution_count": 86,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/data/clustering/lib/python3.6/site-packages/ipykernel_launcher.py:45: DeprecationWarning: elementwise == comparison failed; this will raise an error in the future.\n"
]
},
{
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x7f89876f59e8>"
]
},
"execution_count": 86,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAD8CAYAAABzTgP2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJztnXuYFOWZ6H/vdM9MDwPOcGeGS1AUlRiiyBFQwVuCF0JQY4hJzsZcNhzPSc6i2dWIGheNUYybNWY3G9dcNuasN0xUJGgEownmAgmgIgoiElQYboozytyY6fnOH901VHdXVVd3V3X3MO/veeaZnuqvqt6umfne73uvYoxBURRFUSwqSi2AoiiKUl6oYlAURVFSUMWgKIqipKCKQVEURUlBFYOiKIqSgioGRVEUJQVVDIqiKEoKqhgURVGUFFQxKIqiKClESy1APgwbNsyMHz++1GIoiqL0KdavX/+OMWZ4tnF9UjGMHz+edevWlVoMRVGUPoWIvOlnnJqSFEVRlBRUMSiKoigpqGJQFEVRUlDFoCiKoqSgikFRFEVJQRWDoiiKkoIqBkVRFCUFVQyKovTSsnw5r597HptPnMTr555Hy/LlpRZJKQF9MsFNUZQELcuXs++u79O9ezeRujp6ANPSQrShgRFXX0Xd3Lm+zo02NDDwrFm0PPY4pqMDgO6mJnZ/6yYAz+soRx5ijCm1DDkzdepUo5nPSn+nZflydn/rpt6JPB2JxWj49i2Ok7rjuSLgMB9EGxs57tnfBia3UjpEZL0xZmq2cWpKUpQSUojpZt9d33dVCgCmo4Pd37nN/7kui8Tu3bt9y6QcGahiUJQSYa3au5uawJhe041dOXgpDj8TtmludlQ2uUz20YYG9T30M1QxKEqJcFq1m44O9iZX+U6Ko+nab7L75puBxITt9z7p+D1XYjEGnjUrqwJTjiwCUQwi8jMR2Scim2zHhojIKhF5Pfl9sMu5VyTHvC4iVwQhj6KUA26rbOt4d1OT43nx5Cp/73duczT3ND/4EC3LlzPi6quQWCyrHN1NTRmrfD/nRhsbafj2LRz8/WpHBeakcJQjg0CczyIyCzgI/MIYc1Ly2HeBA8aYJSJyHTDYGPPNtPOGAOuAqYAB1gOnGmPe87qfOp+VMEiP0skW1ZPtWunOXYnFqLvk4pTIHzci9fXEm5td37ccwnaZAVc/QUKAhHM52tjIiKuvAqDpmmtdx564+VUANp84yfm6tjEQ7PNTwqGozmdjzGrgQNrhecB9ydf3ARc7nHo+sMoYcyCpDFYBFwQhk6Lkgh97v9e56TsDNzNR89JHsioFwFMpwGEfQd3cuRz37G85cfOrNH73Du9dQHJyt4ehRurrHYdG6up6X4vttR27OaqQ56eUH2H6GEYaYywP1x5gpMOY0cDbtp93Jo8pSlFxm8izmUvcJkQ3MxHxeCDyOvkI6ubOpe6SiyESyXq+6eig6dpvuiqgeHMzu2++OTGxt7Y6X6OtrXfiz/f5KeVJURLcjDFGRAqyWYnIAmABwLhx4wKRS1Es3KJ0skXvuE2IRCIFKQGpr8e4TNoSi/Waguy0LF9Oy2OP+79vFjNy84MP0fLUbzBdXY7vx5ube3ce+T4/pTwJc8ewV0QaAJLf9zmM2QWMtf08JnksA2PMvcaYqcaYqcOHZ21Zqig54Ralky16x3Xii8d9OYadkPp6Gm643vF8qa+n7pKL2XfX99l84iS2Tp/Blukz2HziJJquW+TLTJULbsqp9/3kriDf56eUJ2EqhicAK8roCmCZw5ingdkiMjgZtTQ7eUxRiopTlI7bytyO64SYjOiJNjYmnL4+zDvWPRtuuJ66uXNTzo82NtJ453dpuOF6Wh57vNd0FW9uTkzexgRmpsqV7t27835+SnkSiClJRB4EzgaGichO4J+BJcBSEfkK8CYwPzl2KnClMebvjTEHROTbwF+Tl7rFGJPuxFaU0LGiZ3KNqhlx9VWO0UfWudb5m0+c5E+OSy7uPcd+vsXW6TMC3xUUSrShIe/np5QnWitJUQrET5imV95CCiIQi0F7O5CIGhp04QUc/P1qf+d7XToWg1gsq3nIEctnklZPyasek1J++A1XVcWgKEWgZflymhZdD93dpROipqZX4TjReOd3s+Y1aK5C38avYtCy24riQZAToYhQ0mWYh1KINjYmXrhEU1m+FCfzlnLkobWSFMWFIJO29t31fdewz1Jjr4fk6MCORjFtbY4F9LS43pGJmpIUxQU3v4BXfwK3HYZrWYlSY+0Q3PIuRJBoNEWpWX4FwNHxrj6H8kVNSYpSIG7OXrfj6fWRrGqobRs2EG1oKNh5DGCMYWNHB+va2ogDE6urmVlbS0Qk94uJHFYGbqGuxmTsdOwZzW7ZzqoY+jZqSlIUN9xyD1yOuzW/aX7woay1j/ywuaODT7+5g2t3N/FOvJuDPXH+8913mL39DVZ+8H7uFyxgB9Pd1KTZzkcwumNQFDfcVtEux70mRNPW5to60w9bOzv46s63uXb4CD5x1FFU2HYIL7S38Y2mJuIGLjzqqLyu74TEYlTEYq5KLVJX5/ieZjv3fXTHoCgu9EbqOBx3crpmnRCNQWpqXK/rxe379vEPw4bzybq6FKUAcErNAP5j9Bhu3beXjp6enK/thJW5PfKG6xMKzYEegGja2jIa1WznIwBVDIrigluZB8eOZtffQPd7nm1EADAeIaNubO/s5I3OTi52KX8NcGIsxodjMZ7+4IOcr5+O5VzvDU112eWY5mYkTWmk/6z0TVQxKIoLTvWKXDuadXV55gnYydUJvamjg2kDaqnKMunOrK3l5Y4cFE9NjePh7qYmNp9wIlumz6Bl+XLEpWcDIpmO6a4uLbV9BKA+BkXxwCmhq+nab7qM7jtILEbDLYne0fvu+r6jsjLNzTQtuh6prHS+iMtOQp3PfR/dMSj9nlyTtIrtXD0pFmNtWyuHsjiu/9Daykkx511ACiJEx4ym6bpFNF1zLd1794Lb5N/dnbP5S53PfR9VDEq/Jp/sZiffQ5gcU13NhOpqlrW0uI7Z0tHBpo4OLhg0KPsFjaFr2xupOQx5ZGVLfb2W2j5CUcWg9GvyaUmZ7ntw65scJNcNH8Hd7+zniZYWetJ2Di+1t/O/d+3k+hEjiVUE/y8dcVEADTdc7+iD0eS2vo+WxFD6Na6lKpLVRP2ydfqMQJLYvHi1o4Nv7dnNwZ4ezh04kCqp4K9tbezp7uKbI0Zw/qDgchh6iUZpvP02QHstHAloSQxF8YFbqYpc7eQjb7g+o25Q0EyKxfjlh8bzUrIkRjeGvx86hFm1A4mGFCYqAwcCWlW1vxGqKUlEjheRF21f74vIVWljzhaRFtuYm8KUSVHsBNWS0jIvpZiVkpN1pL4+EfIp4u7k9YmIcHJNDX8/dChXDh3GuQMHhaYUIBGZlG9F2XzRiq2lJ9QdgzHmNeBkABGJALuAxxyGPm+M+USYsiiKE0G3pOyx7xiMQWIxRiZ7OEMOndzKiGIWxnMqRLj7W4m1ou5YikcxTUnnAW8YY94s4j0VJStBmUncHNm7v3MbdXPn0rJ8eZ9TChbFyk3wCgZQxVA8iqkYLgcedHlvhoi8BDQB/2SMeSV9gIgsABYAjBs3LjQhFSVf3CZP09zM7ptvpuWxx/O/eAEF+HIiSwe3sNGKreVBUcJVRaQK+CTwiMPbG4APGWM+Cvwb4PjfY4y51xgz1Rgzdfjw4eEJqyh54jV5Ni99pDDHdBGUQrSxkcYlt5c0N8HtGWrSXHEpVh7DhcAGY8ze9DeMMe8bYw4mXz8JVIrIsCLJpShZ8esM9Zw83Up454Jbf4gccK17RGJV7lYfqlhmnKCCAZTCKJZi+CwuZiQRGSXJkowiclpSpneLJJeieJJLZnTd3LnhJrsVqFyspDS34nmSrN5aN3cuxz37W07c/GpvlVUnwogeKrViUhKErhhEpBb4OPCo7diVInJl8sfLgE1JH8MPgMtNX8y6U45Ics2MHnnD9aGVy4g2NlL/2cvzPt+aYF1LYx865Pta+ZQS8YtfxaSER+jOZ2NMKzA07dg9ttf/Dvx72HIoSj7k6gxND38NyjdgmVPq5s7lg6d+455l7eKkjjY29spm2tocT3U77oRGDx3ZaK0kRfEgH2eofcWbtVtbNOpe1jqJ1NenmFNG3uBSCluE+ss/E5qN3m46cgu71eihIwNVDIriQaHOUMdKrElTTrSxkcbbb6Phtu94KpDIgAEpq/C6uXOpu+xTGeMkGmXAlClZbfRuDmgvx3S66cgNjR46MtBaSYriQb6Z0S3Ll/eeI3V1RGIx4i0tGefbx7nh9N7B36/OOGZ1T8vmMK4AMtzY0WjCMe2Ck+koHbvCtH8uLbrX91DFoChZyDUzOr2sg2lupicWo/G7d6RcJ32cG06rcFdTjkdmtdv9pL6eBlvZDsfrZjERRRsbeyd/LWvR91FTkqIEjN9IplxX4Sm45TR45Dq43S/dVOUoRzKU1YloY2PKLiWfHhdKeaE7BkUJGL+RTJ6rcBFvE4xbToNHrkO+5SZali+H1lbf19WyFn0fVQyKEjB+ezy4jkuuwD3v0djoem6hcqWz767vYzxaf/r+XOqY7jOoKUlRAsZvJFMhEU8Dz5qV0/FC7ue10g/6cynlge4YFCVg/EYyFdILwikqyet4Ifdz2wEQiTiWqwi6x4VSfLTns6L0QYLqVe0Hp2gmicW0hlEfRHs+KwA8/sIu7nz6NZqa22msr+Ga84/n4lNGl1ospUCKacfXHUD/QxVDmVPIxP74C7tY9OjLtHclIlV2Nbez6NGXAVQ59HFGXH2V4yo+LDt+UF3ulL6BKoYQKXS1XujEfufTr/Wea9HeFefOp19TxdDH0VW8EiaqGAIiXQmcc8JwfrV+l+OkDvhSGIVO7E3N7TkdV/oWuopXwqJfK4ag7O9OK/v717xFumuwvSvO1Q+/mHLcaxdQ6MTeWF/DLoexjfXOjVoURVGgOI16dojIyyLyoohkhBJJgh+IyDYR2SgiU8KWCQ5P5rua2zEcnqAff2FXztdyWtm7xXo5Hbd2Aem4TeB+J/Zrzj+emsrUEgk1lRGuOf94X+critI/KdaO4RxjzDsu710IHJf8mgb8KPk9VAox06TvNJxW5bmyq7mdo69bkbJzueb841N2IpDbxG59Do1KUhQlF8rBlDQP+EWynecaEakXkQZjTKiFVfI10ziZjQT3HUIu2HcuEMzEfvEpo1URKIqSE8VQDAZYKSIG+E9jzL1p748G3rb9vDN5LFTFkK/93c1sFJRygMTO5R+XvsTVD7+oq3xFUYpOMWolnWmMmULCZPQ1EXEv5uKBiCwQkXUism7//v0FC5Wv/d1tR2GA0fU1uLRZz5m4MQX7PhRFUfIhdMVgjNmV/L4PeAw4LW3ILmCs7ecxyWPp17nXGDPVGDN1+PDhBct18Smjuf3Sj/RO5qPra7j90o9kXZnX1Tj3562vqeSP153L35bMod5lDEBEclcdbs5pRVGUMAjVlCQitUCFMeaD5OvZwC1pw54Avi4iD5FwOreE7V+wyMf+7jav2497zf3xPGtTBeHgVhRF8UPYPoaRwGOSmCmjwAPGmN+IyJUAxph7gCeBi4BtQBvwpZBlKojmNue69O+1dXHGkme55vzjXccUQj47DUVRlHwIVTEYY7YDH3U4fo/ttQG+FqYcEFwym1d4quUPqB9QyXsBKwf7TkML4ymKEib9olFPkMlsTk5rO+1dcYzBc0w+WDuGx1/YxTWPvJTyWa555CV1TiuKEhjlkMcQOkEWk7PnFrjtHFrau/j89HH895q38hPYAWvHsPiJV+jqSfVTdPUYFj26kcVPvEJze2KnMnhAJf8898O6k1AUJWf6hWIIupic5bQ+5ZaVjiYjAzy49u3MEwtgdDK/wpr402nv6qG9q6f35/faurjmly+x7s0DPLdlv5qdFEXxTb9QDIUWk3Oy6QMc7Oh2PSff6CMnKiskr/pGXXGTUsxvV3M7Vz/8Ilc9/CKjVUkoiuJCv1AMbjWHzjlhOGcsedZzNe3WEyFWWZFh0gmLOz/90V65Bufo2E6X0K4ktGmPoihO9AvF4FRzaPzQmozVtH2itHYJTjuN9q54hs8iLCrSolTnTG4IzHehTXsURXGiXygGSE1me/yFXRl9ESA1wzh9h1Eqegwpk/dzWwovB2JHm/YoipJOv1EMdu58+jXXgndNze2OUUxOBFk4z4um5nYef2EXNy9/JfD8CG3aoyhKOv1SMXitkhvra3yvovNRCj2drXTufBXT3UV0SCNVw8f7us9VD7+Yx90SRESIG5OhyLRpj6IoTvRLxeAWpSQkHNVeOQr50tPZxnu/+y/aNq+matSxSFUNh/a+QaR2MPWzvkDN+JMDvV/KvY1hx5I5gbYy1cxrRTly6ZeKwSlKSYDPTx/XO8EF6WPo6Wxj74OLqBo5gYa//xHRgUMAMD1x2ret5d1ff4/BH7+S2uPPCOR+6VjmoiCa9rhFaVnXVxSl79PvFIO12m3viqeYVuoHJEpln3zzStcksnxp/sP9VA4/miEX/F/EVgxPKiIMmHg60bqR7H3oBmrGn0xFdW2g9wbY/0EHJ9+8kpb2roJX+EFmkSuKUp70i1pJFvaaSZBqb3+vrYv/XvNW4Eqhp6uD1leeo/7Mz6UoBTtVIycQG38KBzc9G+i9LQ7FDc3tXYE0/gk6i1xRlPKjXykGv9FGQXJo73ai9SOJ1o3wHDdg4ul0vPlSUWQqpPGPWxSTRjcpypFDv1IMJVnV9nQj0eqsw6SyCuLuJTb8kEvPhnyfRb4tURVF6TuEphhEZKyIPCcir4rIKyKy0GHM2SLSIiIvJr9uCkseKM2qNjq4ka79b9JzqMNzXOeuzVQOHes5xmvaHzygks9OG+u73He+zyLflqiKovQdwnQ+dwP/aIzZICKDgPUissoY82rauOeNMZ8IUY5enKKR8qWmMsLtl34ka9JZdNAwqsdMonXTMwya4vwxezrbOLjxGUZ9bonnPQ1QGRG64pkZFJaPpLYqwoDKCtpslVadZC9khR9EdJOiKOVLaDsGY8xuY8yG5OsPgM1ASWcT+2q3UCw7/ZzJDVnH1s/8PM1/eID2N9ZlvNfT2cr+x25lwMQZVA4dk/3GJrE7cKP1UByD8D+nj+td1Q8eUEl9TaWu8BVF8YWYAMtDu95EZDywGjjJGPO+7fjZwK+AnUAT8E/GmFeyXW/q1Klm3brMSTYXbnz85UCK0dVURnztQDp2vso7y+4gOriB2hNmJhLc9rxO6yu/o3bSWQw+76tIhT8z0OhkdrbXb250fQ1/vO5cn59CUZT+gIisN8ZMzToubMUgIgOB3wPfMcY8mvbeUUCPMeagiFwE3G2MOc7lOguABQDjxo079c033yxYthsff5kH176dd+8Eq9SEX0y8m7bX19Dxtw2Y7kNEBzcwcPLHiR7lHbHkRH1NZdbQWgHNTFYUpZeyUAwiUgn8GnjaGPOvPsbvAKYaY97xGhfEjiGdM5Y861gGI9fJvxyx/CGqHBSlf+NXMYQZlSTAT4HNbkpBREYlxyEipyXleTcsmbxwCsMUEp3Y3MJAcwkPLSX2vIUbH3+ZCYueZPx1K5iw6ElufPzlEkunKEq5EWZU0hnA3wEvi4hVGvR6YByAMeYe4DLgf4tIN9AOXG6K4fRwwN7MZ1dze0q5DLcdQ7nsJGoqK4hVRjyjo5qa2zP8KnFjen++9eKPhC6noih9g6I4n4MmH1NSLhVB3cxK5cxol4qx9vf3tHQ4KrOICG/cflGY4imKUgb4NSX1iyJ62SqCpiuNvqYUwDuT2cpbcOvpUC47H0VRyoN+URLDqyKovbCeVWSub3gODjN4QGVvddh0IiK9jue+7itRFKU49AvF4FUR1ElpGLzLT5QTlRFhzuQGDnZk1lmqjAjfm//R3l1RddT5U312mncpDkVR+hf9QjF4VQR1UxoGejOH/ayoKyuEykjquAqBoBfjlRFJyWK+87KP8tyW/XT1ZJqDaquivUph0aMvZ5TJEIH/OX2cOp4VRUmhX/gYnGokWXZ3tzae9szhdB9FOhER7vz0RwEcHdxHX7cir/7QFhUCPSYhk5PT/GoX30FLMgHOrdx4Y12NKgVFUTLoF4rBHorqFJXkpjTSz3cqmJeePOYU6ZSvQ9tNEVhYTnM3pWPtlLS5jqIoudAvFAO4VwTNpjTSz88l7BUSk3drZ+59FiylcOfTr3H1wy9SV1OJCDS3JdpznnPCcH61fpfrLsau3NwUkzbXURTFiX6Tx1BsHn9hV9aS3G4IcPqEIWx4q8V14rcn4KWTvtNwMoVpmQxF6X9oHkMJyeaTsBDg89PHAXD/mrd6J3oD/OmNA55+Cbf3BDKqqvrdFSmKooAqhsCwm5gqfBTes6/qz1jybMZEn+8+zs08pM11FEXxiyqGAEjfIfhRCvZVfb5O4HRzkvZeVhQlCPpFHkPYuIWDOuE0ebut8r1SICw/hPZeVhQlaHTHEAB+V/z1NZUs/uSHMyZvtzyLT506mue27KepuZ1YZQXttgQ1A2x4q0WVgaIogdPvFUOu4adOuIWDRkToMSbrdf04h50qvlr1nlQxKIoSJP1aMWSruuoXtxV/Lqv5bM5hTVJTFKVY9Gsfg1fV1Vy4+JTR3H7pR0K193vVe1IURQmS0HcMInIBcDcQAX5ijFmS9n418AvgVBJtPT9jjNkRtlwQ7Co87HBQr3pPiqIoQRLqjkFEIsAPgQuBScBnRWRS2rCvAO8ZY44F7gLuCFMmO31pFV6MXYmiKAqEv2M4DdhmjNkOICIPAfOAV21j5gGLk69/Cfy7iEgxej/3tVW4JqkpilIMwvYxjAbetv28M3nMcYwxphtoAYamX0hEFojIOhFZt3///kCE01W4oihKJn0mKskYcy9wLySK6AV1XV2FK4qipBL2jmEXYO8bOSZ5zHGMiESBOhJOaEVRFKUEhK0Y/gocJyJHi0gVcDnwRNqYJ4Arkq8vA54thn9BURRFcSZUU5IxpltEvg48TSJc9WfGmFdE5BZgnTHmCeCnwP8TkW3AARLKQ1EURSkRofsYjDFPAk+mHbvJ9roD+HTYciiKoij+6NeZz4qiKEomqhgURVGUFFQx9GNWbF/B7F/OZvJ9k5n9y9ms2L6i1CIpilIG9Jk8BiVYVmxfweI/LaYj3gHA7tbdLP7TYgDmHDOnhJIpilJqdMfQT7l7w929SsGiI97B3RvuLpFEiqKUC6oY+il7WvfkdFxRlP6DKoZ+yqjaUTkdVxSl/6CKoUwJ2zG8cMpCYpFYyrFYJMbCKQsDvY+iKH0PdT6XIcVwDFvXuXvD3exp3cOo2lEsnLJQHc+KoiB9sSzR1KlTzbp160otRmjM/uVsdrfuzjjeUNvAystWlkAiRVGOBERkvTFmarZxakoqQ4J2DGu+gqIouaCmpBKzYvuKDHPOqNpRjjuGfBzDmq+gKEquqGIoIW6T9rxj57Fs27KUPIN8HcNe+QpeisFJYakiUcJi69o9/HnZGxw80MnAIdXMmDeBidM0Qq5UqCmphLhN2qt3rmbx6YtpqG1AEBpqG1h8+uK8JuZ8zFKWwtrduhuD6VVYaoJSwmDr2j08d/8WDh7oBODggU6eu38LW9dqTk2pUMVQQrwm7TnHzGHlZSvZeMXGXodzPn6CfPIVNCtaKSZ/XvYG3Yd6Uo51H+rhz8veKJFESiimJBG5E5gLHALeAL5kjGl2GLcD+ACIA91+vOVHEnXVdTR3ZjyWjEk7m59gxfYV3L72dloOtQBQX13P+ePPZ/XO1Y6+imxmKc2KVoqJtVPwezxM1KSVICwfwypgUbKD2x3AIuCbLmPPMca8E5IcZcuK7Ss4eOhgxvHKisqMSdtrBf/Cvhd4+LWHU95r7mzOOGbRUNuQ1V/g5vxOT4hTlCAYOKTaUQkMHFJdVDksk5a1e7FMWoBv5XCkKJZQTEnGmJXGmO7kj2uAMWHcpy9z94a76e59RIeJSkJX281GTpM0JHYObgrACSsPIpuvYuGUhQiScbw93s6ta271fT9F8cOMeROIVqVORdGqCmbMm1BUOQo1aR1JvpJi+Bi+DDzl8p4BVorIehFZUARZygY3s0x7vJ0b/3BjiuPXjQrJ7dfndS07Xorjka2P5HRPRcnGxGmjOOfzJ/TuEAYOqeacz59Q9JV2oSatI8lXkrcpSUSeAZx+czcYY5Ylx9wAdAP3u1zmTGPMLhEZAawSkS3GmNUu91sALAAYN25cvmIXBT+hnm7mGsBxJ5FOLBLLMC/5YeZDM7nutOt6fRN2OWeNmcXqnavZ07oHg3NGfI/pYcX2FRq6qgTKxGmjSm5yKdSkVU6+kkIJrSSGiHwR+F/AecaYNh/jFwMHjTH/km1sOZfESHcU27Hb929dc2tOZiDrfPsknuv5FrFIzDFXIpfz8w2fVZRyJd3HAAmTlt/dy33X/9FVsVxx2xmBypovfktihBWVdAFwLXCWm1IQkVqgwhjzQfL1bOCWMOQpJk6OYgt7NNHqnY4bI1fS6ySd+eCZecvYEe/gka2P0GN6sg92OT9bgpyi9DWsyT9f5/GMeRMcFUuxfSVBEFZU0r8D1STMQwBrjDFXikgj8BNjzEXASOCx5PtR4AFjzG9CkqdoZAvptCbVXEM/27raUkw4VmhqvuSrFCw0dFU5EinEpFWoYiknQlEMxphjXY43ARclX28HPhrG/UuJl+/AwjIH+XUGQ0IRXPf8dbyw7wVunH5joWJSIRW+lIPbOG3ooyiZlIOvJAi0VlLALJyy0NXHYCEiOSkFO/n6FexUVlRy6XGXZvUxuPkitKGPUg4cKTkD5YgqhoCxN8Bxm/wLNeMUGjLa1dPFb/72G+YdO683Cik9KskeTXXKiFO0oJ6SlWJO1H6T0VR55Ic26gkAt/DUFdtXcPOfbqY93l5qEbNSV1XHommLdMJX8qLQiJ5c8YoAmjFvQq8ySMcuk5PSAFi99DU6W+MAxGqjzJw/8YhRJiWNSupPuNUxemHfC3mHg/rFGENPRw8VVRVIJDNTORdaDrVw4x8SvgtVDkqueCXPgdkIAAAc+ElEQVR3hTGpeuUMpCuodJmeX7oVIGPH8dtfbKanx2BP4elo7ea3v9gM+C+LcSSgiqFA3OoYFRIOmo1D7x7i3VXv0vx8Mz1dPRCHgZMHMvTjQxk4aWDe1+023dy+9vaMgnxWQpyiuFHM5K6ta/cgFeD07yUVuCoFi47Wbp5fujVjXE/cJakzbkJTcOWKKoYCcQvbDEsptG1v463vv0X96fVMWDyBquFV9HT20LymmV0/28XgWYMZ8ckReV8/PQy2ubOZG/5wA6A7CcWdMAvh2U0+sdoonR3djkohWlWRVSlYdLRmry5gx6+CO1J8GtqPoUDcwjZzrWPkh3h7nLfufovGLzUy6vJRVA2vStyruoIhZw1hwrcm0PzHZt7f8H6w9zVxlvxlSe/P2kNaScepEB7A+JOGFnTd9MJ0Ha3dmHjmOKkgpd5S0Pi5rhbRU3pZOGVhRjnqWCTGpyd+OvAy1c1/bmbAcQM46pSjHN+P1kUZedlI3nk6+CrmVt+IbN3dVGmUiI1L4a6TYHF94vvGpUW9/cRpozhheuYiacuaPQVNjE6+CydMT0IGNwVVCBUR8ZW97GSe6ndF9JQE9vBUpzDPRc8vci1Ilyvv/+V9hl0wzHPMUaccRdPPm+hq7qKyvjKQ+9rJ1t3Nq6GQEhIbl8Lyf4CuZPRby9uJnwEmz8/vmr/+Bqz/OZg4SARO/SJ84l89T9mx6d2MY4U6oP2acKwVfXr2sRuV1RG6Oh22HulIwsfwzH2vsuq/Xk2JXrKbjMafNNTVPNUXi+ipYgiAOcfMcZz4rGN+lYOVZVxfXU9nd2dGmGu8NU603vtXJlEhMihCT1sP1OfwIbJQV1UHeHd381IaqhhCYuNSeOxKMuwrXe3w21vyUwy//gas++nhn0388M8eysHLAZ2v7d3Nd2FHItDZ2s0Pr3w26/UsfCkF6I1QsnwaVvSSwfQ+8oMHOtm0usn1EsVuOBQEakoKmTnHzKGuus7XWMth3dzZ7Jj7EK2LcmjfIe9rdPbQ3dJNZFAkZ1kbahv4zPGfybyvRFk0bRHg3UNaW4IWGWun4GR0B2jZmd911/88t+NJ3CbA6tpI3rZ3P6YhE89hog+AnrhxfeRO9MUieqoYikBLZ2EF7yzqT6/nwO8PeN9rbQu1E2uJDsptMxiRCAunLOTG6TeyZOYSGmobEISG2gZuPfPW3hX/rDGzMs61SmR4KQ0lBH57y2HzkRN1eTZOdJv1TPyw/8LBp+HWiU2QvG3vbr6LPoP0zfwHVQx5kKuDNaiJ8aipR9H1ThfvPptpywXo3N3J3kf3MuxCbz+EE/HkZODUvOfuDXcz+b7JnPngmTz6+qMZ51ptQN0c8VpXKQQ2Lk34EtyorIHzbgr+vi1vw+P/B5Z9LXl/k/i+7GtM/N0Mzol9j4HRA4Dp7cRWiO1969o9vPIHdzNN2dP3CksAWhIjZ5wa8Tg1rrFPsEdVHUVbdxtdPV0F379zbyc7/mUHNR+qYci5Q4iNiRE/GKf5T80c+P0BRn1mFIPPHJzXteur6+no7iioeQ84O+IVn2xcmtgJtOxMrPjPuynTT5DubE5HInDJPfk7nhf7M316UlkDc38Ak+fn3cDGqcxGX6Sc8hn8lsRQxZAjs38527E4nr2RjpPyiEqUuIkHEqEUb4/T/Mdm3nv+Pbre7aKiuoKjphzFkHOHUN1QOkdXejMhJUecJnzbBHtYaWTZKVjj8+Wuk7zv4Ze6sXD1Jl91lJyc09kii/oSEoGPfWFSyZWDKoaQmHzf5KyTuyCBhaj2JQRh4xUbSy1G38VtQq4bm9g5eO0SLC79capS8LMDSSfbjsQ3AosT+S9eUUluiiOsnUI83s1LO/7IX15fxQft71FbPYgpE85myoRzqIqGu7Aq9e6h5Ioh2cP5q8D+5KHrjTFPOoy7ALgbiJDo7rYkfUw65bhjUHTH4AuviXpxPa5G6Zoh0O4deIBEEnGV1nXBeYKvGQIX3uGtIFJ2J+IulxfJHUM23ExNbvWQCuGd93fzo6cWMahmCGeceBFDBzXQ0vYua177Dbve3c6VF36HMUPDjSLyU3U2rNIa5aIYDhpj/sVjTATYCnwc2An8FfisMeZVr2uXm4+hPxGVKFWRKtq6U1t5O/lZ+iVeE7+bqeijn4PXVwZjvrGIVEG8C9cJPReTk/0zSYV71JLP66dPel7mIon4u50f2g+1csevruTsky7h7I9cmvH++m3P8as//4hrL/0P6mtzD+DIBS//SpglzP0qhlJHJZ0GbDPGbDfGHAIeAuaVWCZP5hwzh8WnLw6lFlI+BF12w46V12APXf3UxE/15mVYz6ChtkGVAhye+O3ROsv/4XB5Cqfw0q72RPJYkEoBIH4Iz1W+lQDnh8nzEyv/xc0JpzYuJd4lknivbmyGUti6dg/3Xf9Hfnjls6z6r1dTchrcGDikmupYcDm4f9m6irHDjnVUCgCnHnsOpxwzi9WvLAvsnm5YSX9OeJUwLxZhz25fF5GNIvIzEXEKlRkN2P8jdiaPZSAiC0RknYis279/v9OQojHnmDn42WlVSEXvhGplDgdJhVRw8vCTA79uLBJjycwlrLxsJTdOv5GVl61k4xUbWThlIcu2Les1pfWYnt5w1HSl0C9rJrlN/NYEnG/CWVjkI8/k+TD1y2Qoh8qahNJY3JxQImlKwZ7g5odoVQUz5k3IuQqqF3/e8hQzJ33Sc8ysD8/jz1ue9PX/XSjP/OJVR+VQzBLmbhSkGETkGRHZ5PA1D/gRMAE4GdgNfK+Qexlj7jXGTDXGTB0+fHghl8oZp0kuW25CZUUlt515Gxuv2MjKy1ayaNqiwFf3PaaHNXvWBHpNr9V/tjpJFtkK7ZUFYRSdc5toreP5JpyFRc3g/J7DJ/4VLr03sTNw2SHY8VsIz8qctvIfJk4bFWg5iXc/2MPoLP6DkfVjae9spSvuXWEgCEwcx12A22cuZmmNgvZpxpiP+RknIj8Gfu3w1i5grO3nMcljZYNbh7Z5x85z7dDm1NzGqdjehwZ9KPCJPV/8+AjcSlvsbt3Niu0rUj5jWddMCrronGWDdzPdWArBb2RRseg86PwcXvhv2PEH7wJ6k+f7flZ+VrrpIarWhDlj3oTAchmqotW0dR6kNuZcnRigs6udHnqIRoIvQOnEwQOdvc53y9leXRtBKgTTc/jvyW+F16AIrYieiDQYY6zwnUsAp/CEvwLHicjRJBTC5cDnwpIpH9wmudU7V7P49MU5JXM5Fdu7dc2tPPzaw6HI7peG2gZfiWijake5RmTZq6iWfc0kL5NProohW2inPQPZuvajX81+XYlArA7a30solvYDcKg1N9my0XMI0ufbrnb42+8P/2wV0Fv300Q0ExyWyU/oK9kL4UWrKhh/0tCMVpur/sszBsUX1bWR3v7NHxl/Ouu2PcOFp37Bdfy6bc9y0rhpRfUhWs/GisCy5LVT7PD3MD/9d0XkZRHZCJwDXA0gIo0i8iSAMaYb+DrwNLAZWGqMeSVEmXLGa5Kbc8ycXvv7ystW5rUavnH6jTTUNhQqZt5YIaZ+ZHcqeWFhNymVfc2kbCafXPCqV+RkYpk8//AE64WJQ1XtYZt9pAwqdLYfSIbMOjjWPfAqhGeZjXZsejeUvIVZ84/vfT1z0idZ/coy3nnfeXHzQXszK194kLM+fEngchSKm9kpLEJTDMaYvzPGfMQYM9kY80lr92CMaTLGXGQb96QxZqIxZoIx5jthyZMvxZjkvCbcXIlFYtRX+6u37VTHyMtpbEVkuWEp0bKvmeRm68/HB+CqTCTDCduL34mn5e3D9v9sOQylwGdk08Rpo1K6qw0cUs3HvzSJr91zLlfcdgYTp40KxbFaXRvhdw+81vvz6KHHcNHUL/L9J65m3bZn6Y4nStT09MTZuONP3LVsIadN/DjHj5kSqAwnzWqkIuISyZUDxXQ+az+GLCycstCxNlKQk5zdNl9I8pxlEgIcZZ537Dye3vF0bze26rRVqJM/5brnr+OFfS9w4/Qbe2V1k9NSll7Ni8oCJ1t/vkXn6sa4ZCuPcc5pAHjpAf/XDzqMNWh8yjdx2ijPGPxYbbSwCCSHHDwnk8zMSXMZNqiBVS8+xCN//DfqBwzj/fYDDB3UwCf+x5eZMuGs/GVwYNb845k4bRQNE+oLLvlRTOezlsTwQXrF0TAnuXx9DulZx04yg7PCsJzOXlndS2Yu6f3MfgsJljX5lIpwu45b0tpLD2Qej9YEvvpvPWR4cFMXT23rpr0Ljh1SwVenVPKRkbn35MgPKewZAj/5x987TuR+iNVGmTl/Ys4TbXPrfj5ob6a2+iiGDBqZ172zkWsimxvFTnBTxVBm5FNyo7Kikm+f8e2sk/LMh2b27hbs1FXVMaBygOd9/SiePqMUgmTjUnjqm4cne6vcRLZidwHxzPZuPverdmaMjXD5hysZVA3rm3r48YZDzPpQhJ/NqyEWLdyM4QvHgn/+FG8u3dfspE+YbuU1giRaJXQf8j9vfu2ec3tfp2d9jz9pKDs2veud/Z2MVgqiNIZfxaCmpDIj18gdp9BYJ1ZsX+GoFABaDrXQcsi7mZAlV7pCuH3m7f1TIYDzbqHbCv0MP5ltXVOcz/6qnV/Nr2HWhw7/K39iInzzzCo+/2g7X1rWzoOfGhC6LECqz8ElHHhr+yzHGkCekUsupZqsnYJ9oiyGHT4XpWAPbkrfIRw80MmWNXt6FZuT0tiyZk/K+Ofu3wKE3/xHFUOZ4RUSapGP2SY9CS0fudxyOoD+qRy8wl7dfA8Bsvh3ndx2bnWKUrCIRYUHLq3h2H87yIt74pw8qkhmpZadrs9l66MreO7ACMeJzilfwb4b8FtUzh6eWg7YiwB6lbqwfDD2z3Tf9X/0HB8mqhjKDCdnd1SiDKwaSEtnS95mm0JyCCxne9knrhUbr7DXS+8NNZlt5/s9rNkZZ+mna1zHVEeFBVOq+PH6Q/xwjvu4QKkb4/pc/rzvQrp7nCc6yw7vNvlnc15vXbuH55duzU8p5Fk81telKxJmMq8dUVDHg0QVQ5kRVkSP207ErXdEhVRgjEm5/6LnFzleu2wS14qNV0SSZU9/7MrgyoPa2P5eDycMq2BApbf/4H+MjnDXmuDqDXkjiefhUhL1YI9zKRtrokuf/K3Ce267BPsuoiD8KoU8FIi1Y8hWLNDtuFvnu7BRxVCGOGVIF4pb2K1TaQ83U5WbcimbxLVi4xb2etzsw013QsqgjUWFgz5s3R90mpCdz9ZsaZs1nRRhRSUDB/Zw8GCmSctponOyx9vt66Vo+xmtFHri0BMPbnshEVxLXbiZ14pRGkMVQz/BaydyyohTfO1QipHT0aewdgX26JvjZsOGX4DV3zvoTjNJTh5Vwd5Ww+b9cU4c7u4/ePiVLs6fkOu/eS5LY+OvaYIIM6a38tzqel8TnZs9/ncPvMYz970a1mP1pPuQSVQqSeZcFJx7QWLH7oa1OwqjYU9WuTRcVckFDVPNwh1He+cpBNh55qbnOti0r4dfzq+hQjInmDU7u/nEA+38beFABlUXKWTVi7qxbD39mYyJDjInvyDqJIWFPTfh9w9sYdPqpsCuFzaax6AoYeIWp7/YR9+NSFWykY6Nikq4+D8Srx9dgJ8Ve0e34cL72xhSI9x2bjXHD4v0Hn9oUxfXrurk5xfHuOi44lQKzc7hHtAWbt3KopUVgfZiCAO7YitUkdlzHcKkr3RwU5S+R7ZObV5IBE75u9RCejVDEkqht5S1v8VaLCo89fkBTBpWwVk/b2PKfx7k7J+3Mu6ugzy0qYtll9cUUSn42JE41KJyMxkZjGvhvWzEaqOcNKsx7/P9Yvd7ZHMIV9dGqK51NvkVs9SFX9THoCi54pW/UDPE25Rk4olSGU6Nbaws6hyIRYVvnxvjxlnVbNgdp6MbjhlcwYfqi73mM4lqsi07Ew2ADh1M3RW51KJyi9bpbI3z8S9N8t0b2s6hjjgNE+pT6hO5EauNcuypI3qzj60sY+t7NqxwW7e+EfYkPLfdUTH7LPhFFYOi5Eq2/IVlX8s0FdmxZwhb5qiawdDRkrf/oToqzBhbwn/nurGJarIWPktieIVkpoev+rXn98QNzy/dyle+N4uJ00a5lsmI1Ub5yvdmAZBeOi+XqKeDBzp9OYpL6UzOFVUMipIrfvIXrEnRzSzU8nZqw55yKatdVZvo/ZCLPOm7ATel4HB8xrxZvlfRZ33uBABfysHun3AL+5w5f6Lr+U6TeHdn3NHvYZmCsiXh+R1TDoTifBaRhwGrQ0Y90GyMyehaLyI7gA+AONDtxykC6nxWSkTvxPY2riGd6a0wrXyGvoK9EF62CCs4XDTQUoi5Vpud+wPX+klu+F3Nf+2ec1OS4AotRudmCgqi6mmxKJuoJBH5HtBijMno6JFUDFONMe/kck1VDErRcWzh6RHvP/UrCeXw62/Aup+5jytHLLPQxqXebUitz2jHTRG6hemmm6B8ki3rubo2wqz5xwc+kfut2VSulEV1VRERYD5QnFgsRQkLxxaeHpP9+p/DuOnJpjx9SCnAYR/K5PmpJcXTeemBxGe0+w7c/C9uvpM8q9BaJpmta/fwzC9eTbm8RBINcrIVrSvkvkc6YYcuzAT2GmNed3nfACtFZL2ILAhZFkXJn1wnMBP37gddztjDSi+8I2HyccKptWeu7VHzaadqY+K0UXzsC5NS2oZ+7AuTPNuFFrNFZl8l7x2DiDwDOKnOG4wxy5KvPws86HGZM40xu0RkBLBKRLYYY1a73G8BsABg3Lhx+YqtKPmRaxltiRSlJ0PhpJnD0h3J1m7AzaSU/hnPu8kjQS/LvfLEbRVfyiJ0fZ28dwzGmI8ZY05y+FoGICJR4FLAtU+lMWZX8vs+4DHgNI+x9xpjphpjpg4f7lylUVFC47ybMlfOlTVwtEuP4FO/6L4arhmSsK0jidcSQK+EfK5RWQNTv3xYlrqxzvkVk+cnxziQ/hk9E/RM9nsFyIx5EzKS3Mo1b6DcCNPH8DFgizHGcdkkIrVAhTHmg+Tr2UCGg1pRygKngnlWGOavv5HwKZh4alSSW4SOPYrnrpMKD1VNb6npmUeRXLXXjc2tR7NbJVmnFX/dWJdw3vwczfnSl/IGyo3QopJE5OfAGmPMPbZjjcBPjDEXicgxJHYJkFBQDxhjvuPn2hqVpPQZsiV6La4nq3O6sibTV2HFXjpN8PZ71gxOHGt/z1fv5YI+i32ckxIJeYegZKdswlXDQBWDcsSQLc/ByhNwig4q58nWrxJRiooW0VOUvoCT78KiovKw2amqNvN9p6igcmHy/ITZaHFz4rsqhT6FKgZFKSWT5ydW/ZZz13Ii1409XHEVvOszubFxaWJHsrg+8d1P9VdFQWslKUrp6S237YFXfSYn0u38Vmlw636K4oHuGBQlDPyu1v2OcwuXdcsD8CoNrihZ0B2DogSN39V6Lqt6r3BZJ/IxPSlKElUMihI0Xqt1+0Tud5yFH5OTRa6mJ0WxoaYkRQkav6v1MFf1uZqeFMWGKgZFCRq3VXn6cb/j8iEl2qk4JSiUIwc1JSlK0PgtH5FLmYl8yMX0pCg2dMegKEHjd7VeilW95jYoPtCSGIrSX9AaRv0eLYmhKEoqmtug+EQVg6L0FzS3QfGJKgZF6S+EGQWlHFGoYlCU/oLmNig+KUgxiMinReQVEekRkalp7y0SkW0i8pqInO9y/tEisjY57mERqSpEHkVRPNDcBsUnheYxbCLR1/k/7QdFZBJwOfBhoBF4RkQmGmPiaeffAdxljHlIRO4BvgL8qECZFEVxQ3MbFB8UtGMwxmw2xrzm8NY84CFjTKcx5m/ANuA0+wAREeBc4JfJQ/cBFxcij6IoilI4YfkYRgP2Cl47k8fsDAWajTHdHmMURVGUIpPVlCQizwCjHN66wRizLHiRXOVYACwAGDduXLFuqyiK0u/IqhiMMR/L47q7gLG2n8ckj9l5F6gXkWhy1+A0xi7HvcC9kMh8zkMmRVEUxQdhmZKeAC4XkWoRORo4DviLfYBJ1OJ4DrgseegKoGg7EEVRFMWZQsNVLxGRncAMYIWIPA1gjHkFWAq8CvwG+JoVkSQiT4pIY/IS3wS+ISLbSPgcflqIPIqiKErh9MkieiKyH3gzgEsNA94J4DphofIVhspXGCpfYZSjfB8yxgzPNqhPKoagEJF1fioNlgqVrzBUvsJQ+Qqj3OXzQktiKIqiKCmoYlAURVFS6O+K4d5SC5AFla8wVL7CUPkKo9zlc6Vf+xgURVGUTPr7jkFRFEVJo18phmRp7xeTXztE5EWXcTtE5OXkuKI1lxaRxSKyyybjRS7jLkiWM98mItcVUb47RWSLiGwUkcdEpN5lXFGfX7bnkUy0fDj5/loRGR+2TLZ7jxWR50Tk1WSJ+oUOY84WkRbb772oDRKy/b4kwQ+Sz2+jiEwpomzH257LiyLyvohclTamqM9PRH4mIvtEZJPt2BARWSUirye/D3Y594rkmNdF5Iow5SwIY0y//AK+B9zk8t4OYFgJZFoM/FOWMRHgDeAYoAp4CZhUJPlmA9Hk6zuAO0r9/Pw8D+D/APckX18OPFzE32kDMCX5ehCw1UG+s4FfF/vvze/vC7gIeAoQYDqwtkRyRoA9JGLxS/b8gFnAFGCT7dh3geuSr69z+t8AhgDbk98HJ18PLtXv3eurX+0YLJIlv+cDD5Zaljw4DdhmjNlujDkEPESizHnoGGNWmsPVcNeQqG9Vavw8j3kkyrpDosz7ecm/gdAxxuw2xmxIvv4A2EzfqyI8D/iFSbCGRI2zhhLIcR7whjEmiOTWvDHGrAYOpB22/425tRA4H1hljDlgjHkPWAVcEJqgBdAvFQMwE9hrjHnd5X0DrBSR9cmqrsXk68nt+s9ctqN+SpoXgy+TWEU6Uczn5+d59I5JKrYWEiVYikrShHUKsNbh7Rki8pKIPCUiHy6qYNl/X+XyN3c57ou5Uj4/gJHGmN3J13uAkQ5jyuU5ZqXQDm5lh88y4Z/Fe7dwpjFml4iMAFaJyJbkKiFU+Uh0r/s2iX/Ub5Mwd305iPv6xc/zE5EbgG7gfpfLhPb8+ioiMhD4FXCVMeb9tLc3kDCPHEz6lR4nUXiyWJT970sSbX8/CSxyeLvUzy8FY4wRkT4d7nnEKQaTpUy4iERJtCM91eMau5Lf94nIYyTMFYH8o2STzybnj4FfO7zlp6R53vh4fl8EPgGcZ5KGU4drhPb8HPDzPKwxO5O//zoSZd+LgohUklAK9xtjHk1/364ojDFPish/iMgwY0xR6uz4+H2F+jfnkwuBDcaYvelvlPr5JdkrIg3GmN1JM9s+hzG7SPhDLMYAvyuCbDnTH01JHwO2GGN2Or0pIrUiMsh6TcLhuslpbNCk2W0vcbnvX4HjROTo5CrqchJlzosh3wXAtcAnjTFtLmOK/fz8PI8nSJR1h0SZ92fdlFrQJH0ZPwU2G2P+1WXMKMvnISKnkfi/LIri8vn7egL4QjI6aTrQYjObFAvXXX4pn58N+9+YWwuBp4HZIjI4aSaenTxWfpTa+13sL+DnwJVpxxqBJ5OvjyER2fIS8AoJE0qxZPt/wMvARhJ/aA3p8iV/vohEdMsbRZZvGwkb6YvJr3vS5SvF83N6HsAtJBQYQAx4JCn/X4BjivjMziRhGtxoe24XAVdaf4fA15PP6iUSTv3Tiyif4+8rTT4Bfph8vi8DU4slX/L+tSQm+jrbsZI9PxIKajfQRcJP8BUSPqvfAq8DzwBDkmOnAj+xnfvl5N/hNuBLxXyOuXxp5rOiKIqSQn80JSmKoigeqGJQFEVRUlDFoCiKoqSgikFRFEVJQRWDoiiKkoIqBkVRFCUFVQyKoihKCqoYFEVRlBT+P9+7OT1VaXvsAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"cls = MyKMeans(n_clusters = N_CLUSTERS, max_iter = 10000)\n",
"pred = cls.fit_predict(samples)\n",
"\n",
"for i in range(N_CLUSTERS):\n",
" target = samples[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')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## ここから先は実装の確認で使ったときのゴミ"
]
},
{
"cell_type": "code",
"execution_count": 87,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(1000, 2)"
]
},
"execution_count": 87,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"samples.shape"
]
},
{
"cell_type": "code",
"execution_count": 98,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(3, 3)\n",
"[[1 2 3]\n",
" [3 4 5]\n",
" [5 6 7]]\n"
]
}
],
"source": [
"a=np.array([[1,2, 3],[3,4, 5],[5,6, 7]])\n",
"print(a.shape)\n",
"print(a)"
]
},
{
"cell_type": "code",
"execution_count": 99,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([3., 4., 5.])"
]
},
"execution_count": 99,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.mean(axis=0)"
]
},
{
"cell_type": "code",
"execution_count": 102,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"50\n",
"50\n"
]
}
],
"source": [
"print(np.sum(a[1] ** 2))\n",
"print(a[1][0]**2 + a[1][1]**2+a[1][2]**2)"
]
}
],
"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