{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Parallelization of cluster and validation: Kmeans, Majority Vote on half moons" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAFzCAYAAAAg407BAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAA3OUlEQVR4nO3df5Bc11Un8O+Z1owZWfYkGinBsayRt1YEzA6GuHGSzW7Wy2CwZIJsF7BOJrLKgRWycFau3arEW6qNS1BDBVfBWhSRFRVxoiRTeFMg/0ISWTKQZTdsWI/A9lgYI2FLsmITyzIrR9ZsZjRz9o/bT/P69b3vR/f72f39VKk03f00uv3rnXfvPfdcUVUQERG59BXdACIiKjcGCiIiCsVAQUREoRgoiIgoFAMFERGFYqAgIqJQy4puQBZWrVql69atK7oZRESVceTIkTdUdbXtsa4MFOvWrcP09HTRzSAiqgwROel6jENPREQUioGCiIhCMVAQEVEoBgoiIgrFQEFERKEYKIiIKBQDBRERhWKgICKiUAwUREQUioGCSmtmEnhoHbCrz/w9M1l0i4h6EwMFldLMJPD43cC5kwDU/H3g48CDqxgwiPLGQEGlMzMJHNgMLM63PjZ7Fnhqa7JgwZ4JUWcYKKhUvJ4E1H3M/AVgamf83/fU1uaeSdJAQ9TrCg0UIvKIiLwuIs87HhcR+V0ROS4iz4nI+/JuIyUTdvVueyx431O/au9JBJ07Ga93MLXTBBa/JIGGiABRDbl0y/o/F/kwgPMAvqyq/8Ly+EYAnwSwEcD7AexW1fdH/d56va4sM56fmUlz4j13EoCgqTfQvxz4yD7z81Nbm0/atQFANV5gcKkNAANXmCEpqQG6sPT30EijTTYC3PGVRrtPAUNrgbEJYHS8/bYQVZmIHFHVuu2xQvejUNW/EJF1IYdsggkiCuDbIvIOEblKVV/Lp4UUxRvauRQAAtcd/qv34JX9wlzn///CnAkSgAkO/r+dQQIA1MyDeO31hqQABguioLLPUVwN4BXf7dON+6gkbEM7QedORZy0ixIS1IhoSdkDhVjus46VichWEZkWkekzZ85k3CzynDsVfczgStjfyRKKO/dB1EvKHihOA7jGd3sNgFdtB6rqPlWtq2p99Wrrtq+UgcGV4Y/3L2/8kMJU2OCw7/dliJlRRM3KHiieBHBXI/vpAwDOcX4iX52sQRgaMRPZs2923o7+5cCG3cD1W5BL78Q1DMU1GdSLCp3MFpE/AHATgFUichrAAwD6AUBV9wI4BJPxdBzABQB3F9PS3hScqLZN+DqDgAD3nTA/XsqIatPQyFJG0tROOHsnXrZTIoEsLT//sNrMJHB4x9LEOcAJcOodRWc9fTTicQXwazk1hwKi1iCEnbT9Q1JjE62psXEMDgOfeqP5PueciACfuWjJwgrhBSBXIBtaa/4+uB2Y3gvrc/VeDwYK6mZlH3qiArlOyudOmtTSsF7C3PeWhmVGx5MPGXlDTUHeydt1/+i4Ge6SWvjvHxoxPZ7RcRMsbHMfc+fDg4QnzoQ+UZUxUJCT66QMIHJyemEOeGzLUrA4dij633iBxJvbsF2l207q/cvN/Z7RceD2/eET3/6TuxfIJPBtmD0bHSSAiNeJqAsUOvRE5dbukJFHF5bG8EOvuiX+ymjv8agV1d7tx7bY5y38J/eZSeDZ/YAu2p5EeHuCQYqoGzFQkFPUyTYObwx/aK1jHmBkadI7SbvizAl4xwSDXfDkHmfRoM3gsBke4/wEdTsOPVGo0XHHlXYC507FGzLKgjdnMTQC03OxDGu1M8dQv8dMtDNIUC9gj4IiuXoDlwhw7U8BJ77pHuaJO2SUhageSOTzs7h1T2dtIqoSBgq65FIV2FNL6a2zbzomhRvrD/xrHGypqf5eQ9who7yNTTQXCIwyNJJpc4hKh4GCALSe5P0Ly+bfDhwsQH1b61V1kb2GToyOm21W4/AHPn9grcpzJWoHAwUBSDihq410V4uy9hqiuPauGBwGBlYsBYP1G81rdeDjaFrVzVXa1M0YKHrUwe3AkX3tZzN12yIzWyqwt+jPO/HH3XuDgYK6DbOeetDB7cD0w+0HCaD7FpnFyY6Ku/cGUbdhj6IHHdnX2b+vDXTnIrOoYbM4QUD6TGVZb84CaC4myLUXVEUMFD2ok54EYPao7sUTXZw0Wv82rI/fbdag+F/v2bPAE58wP/fia0jVxEDRpS5l5JxcKr89OAxc/H+d/+409peooqQlTRbn7fcvzHEug6qFgaILBSddvStaf8prJ7ptfiKuYPqvSPur1jmXQVXCQNGF2q1dFNR/OQANr5PUa/zzGLs62GmvV4MtVROznrpQWler8xeiM4HIra/fvS/G3Hluo0rVwR5FF0pau8i1hahXo4mBwW5w2D2cJzXgfb8CHP2a/ZjZs1ygR9XBHkUXGptA7He2rx+4YWsxlV2rbsNuWF/n2oB5TZ/dHz4v5N9WlqjMGCi6VYxJ1sFh4LYvmppNHGJKbnQcuOPL5nX0DA4Dmx4xJU7izBNxUpuqQFRjlsyskHq9rtPT00U3I1f+AnXSF7JWQoAHOtxfgqLt6kOsarTtbNxElAUROaKqddtj7FF0AS8d9txJABq+oI7ZNvmI+zpfeMMElYfW2Se3ZybNY2HHEGWNgaILxE6HFc475MW2o5/N/NsAdKn6rD8QBC8AbMcQ5YGBogvEGudu7CHBeYd8NBUZhDtN1i84uW27AOAEOBWB6bFdwJUOK32AKjfVKUowtTjOvIX/fXRdAHACnPLGHkUXGJswaa5BfcuAO75iJksZJIoXd97CG1pyHc95JsobA0UXGB0HLruy9X6v+ByVQ9x5C28ewnY817dQERgouoSroiuHKcojOG/h4t8pj+tbqAw4R1Ex/vUS/rkH1zwFhynKxZu38HYZdPECPEuoUBkU2qMQkVtE5EUROS4i91seHxKRp0TkWRE5KiJ3F9HOsghLl+QwRbUcOxT+OAM8lUlhgUJEagA+B2ADgOsAfFRErgsc9msA/lZVrwdwE4DfFpGBXBtaImHpkhymqJaoIcH1G/NpB1EcRfYobgRwXFVfUtU5AI8C2BQ4RgFcISICYAWANwFczLeZ5TAz6a4Ie+6Ue0iKysVbaR2VJhvV4yDKU5FzFFcDeMV3+zSA9weO+T0ATwJ4FcAVAP6dart7ilXTzCRweEfE7nQKHNiMSycfb0gKYLAok+DOg2GYhEBlUmSPwrY/WPA662cBPAPgPQB+HMDviYglERQQka0iMi0i02fOnEmznYXxTiyxtjANvHLzF4ADH2d9oDJJsvOgN0fBWk9UBkUGitMArvHdXgPTc/C7G8ABNY4DeBnAD9t+maruU9W6qtZXr16dSYPzlsaWpqwPVB5xewleEoIteeHAZpMxRZSnIgPF0wDWi8i1jQnqO2GGmfxOARgDABF5N4D3Angp11YWKM0tTbnwrniuTKbBYXsSgvVCQYHpvQz8lK/C5ihU9aKI3Avg6wBqAB5R1aMisq3x+F4AvwHgSyIyAzNU9WlVfaOoNudtcGXIsJMg1n4HHo55F29sonWOon+52SnPNpfkfM90KdONKA+FLrhT1UMADgXu2+v7+VUAP5N3u8pgZhL4/lvux/uXA4vzpkzHJSHBg3n5xfNO7HGz08L2Pk+yJzpRp7gyu6QO7zCBwGX+bVMIcHDYlO/wTjqA/aqVC+/KIclK67GJ5my2JmIuJtiroDwwUJTQwe3xMp0W54GBFcCnLINxXFNRfaPjwKlvOUp9qMlqm9rJ95eyxz2zS2ZmMuQq0oZ7YHe9XbZE8oDBYfdcB1Ec3DO7QqZ2ItEkNeceul9UtVnA9EAPbDZBhestKG0MFCWTJDuJcw+9wbUxVYvAynwGC0oLA0XJRPYQGsMQLPrXO1wbU4Xh2hlKEyezS8aWa+8ZGuHEZa9ybUwVhmtnKC0MFCW0bHApUHCSkoDwNRUugyuzaQv1Hg49lYitCODF2eLaQ+UxNgF7GU2iHDBQlEjYxkTU20bHkSgbDmhvuIrIhkNPBQpuNsRyDRRmaMT+WZAaoAuW45k6TSlhj6IgthLSYUMLTHUk177oN2zlfumULQaKgrhKSLsc3pFpc6gCXPui37oHuH6L6VkA5u/rtzABgtLDoaeCJE1djLXLHXU9W1HBmUng2f1Lw0+6YG6v/RCDBaWDPYqCcPyY0jAzCTy2hUkQlC0GioK4xpv7L7cfPzicfZuoWrx5LttENsAFd5QeBoqCuMabP/L51ro+ff1m0R2RX9Se6tLHJAhKB+coChJMjQ2W5uB+EhQlqsegC6bHAfDzQ51hoCiAN2TgXQ161T49DBIUR5yyHt5cBT9D1AkGigIc3mGffDy8w5TssAUQftEpKKyApB/nKqhTnKPI2cykO9V19iyzVyi+4DyXt46ihXIzI+oMA0XO2jnp84qQXEbHgftOmO1wb9/fmknn4WZG1AkGipyFnfRdKbBcc0FxNPUwLNg7pXYxUOTMddL39p1gzR7qhNfDcNUNY++U2sFAkTPXQjtvcyLb2gpOZFNSrgsS9k6pHcx6ypl30nelwNpq+RAlMTMJzJ23PzZ33jzOzxglwUCRs6iFdkSdCK7RCZo9y5RrSo6BIiczk2adhD81luskKG1RZT0ALsKj5DhHkQPbXtgeZqJQmuJOVnNSm5JgoMhB1FUev7SUlriT1UNrzQXMQ+uAXX1ckEfhCg0UInKLiLwoIsdF5H7HMTeJyDMiclRE/kfebUxDVD0eVvmktIxNALWB6OPWb2zdipcL8silsEAhIjUAnwOwAcB1AD4qItcFjnkHgD0Afl5VfxTAL+bdzk7NTCJ0L2xgqconv6SUBg3ZUtdz9GssF0PxFdmjuBHAcVV9SVXnADwKYFPgmI8BOKCqpwBAVV/PuY0d8XYfC9sL28MvKaVhaiewOB99nKveGIdByabIQHE1gFd8t0837vP7IQDvFJFvisgREbnL9ctEZKuITIvI9JkzZzJobjJRu4/Z8EtKner0M8QFeWRTZKCwDcgEr72XAbgBwK0AfhbAfxGRH7L9MlXdp6p1Va2vXr063Za2IU6aYhC/pNSpuJ+hwWGWi6H4igwUpwFc47u9BsCrlmP+RFXfVtU3APwFgOtzal9Hkl7Z8UtKabCViAnySsawXAzFVeSCu6cBrBeRawF8B8CdMHMSfk8A+D0RWQZgAMD7AfzXXFvZpji7jw2NcIU2pcv7DD22xT7sKbXmgMDPHMVRWI9CVS8CuBfA1wG8AOBrqnpURLaJyLbGMS8A+BMAzwH4PwB+X1WfL6rNSUT1DoZGlvYRuO8Ev7CUntFxQBftj+kCcGAz101QMqJxcukqpl6v6/T0dNHNwIOrHNklAtzxFQYHys5D66J7tH39wG1f5OeQDBE5oqp122NcmZ0h2/4SEKC+jV9OylacuYrFeVN/jCgKiwJmKKqkOFFWgp8911oe13oKIj8Gioxxfwkqiv+ztyuiOgBVU17bFjBQEPWAwWF778G1TzuVX3DvkSy3LeAcBVEP2LC7tVig1MzfrB5bTbZFvVmVAmKgSBlLN1MZjY4Dmx5ZWmA3OAz01Rq9DFaPrSTXot4sSgExUKTI6wqydDOV0ej40tqdgRXAwlzz4yxMWS2uci2DK9P/vxgoUpRnV5CoE3lejVI2XHuPfP+t9C9OGShS5PzyRSx8Isqb62qUhSmrY3QcGLii9f7F+fQvThkoUnJwO0L3neDwE5WJbUFebQCYO8/5tSqZfdN+f9o9QwaKFBzcDkw/HH4Mh5+obJYNLv08sMLsjMfJ7WrJq2fIQJGCI/uij+HYb+eYUZYOL+nCv65i7u3WnfE4v1Z+tp5hFlsWcMFdCuLsYsex387kubio21k31XIMm/ICp9zyKhPEHkUKvIVLLn393JSoU8woS0+S5Ape4JQbS3iUmP/NGVxpAoWrVzE4bFbF8qq3M66TGzPKkgv7vPpx18VyYwmPEgsuqps9CywGFi5JH1C/B3hAgU+9wSDRqZlJ2HdYh7mfcxXJhAUJr3csNeD6LfzslhlLeJSYdXw34MprgFv35NOeXjC1E+7UY+XwU1JDI44HZCmI6ALw7H4G4TJz9rJZwqN4cd4ETgCmK+r15Osd38ykWSvRQtASjDkHVF5hvews5pUYKBKK8yYMrmQaZ5qiXnNOuMZjS4sFGqXGXVlPnAMqJWcvW7KZV2KgSMhVX8XTt8x8EVkYMD1jEyZzzKY2wAnXuFzDpgMrwoej+NktH2cvWrOZV2KgaIM6rr4Gh4HFi633swvfmdFxYNll9scGruCEa1xhhQDHJmAfyuAcUCk5V2S7An6HGCgSmtrZuoIVMG/QwAr3v+M4evuc4+pw17qhVmHlHkbHwUV3FZLXimwPA0VCYZkGYV8ojqO3L+yKNova+90q6uTiuhrlZ7d8RseBj+xb2ohqaMTczqp3zUCRQFSmgfMLldEEU68IC8Bz3+MYelxRJ5e8r1KpM95GVHd8xdw+sDm75BmuzE4gTqaBf6Wk91h9G8fROzG01t2TW5gz7wtf33hGx92vVV51gygdM5PA4R3NWWxZrc5moEggbqYBv2jpWr8RmN4LjqHnICyQUHkEy3f4eckzDBQFcV3Z+sd2+UVL18ykWSEctikUx9Cp10RViEh7/QvnKBKwraFgHn+2or4QHEOnXhTVi46qaJ0UA0VCwTUUrjUV1LmZyfAro6wzPYjKKqoXHac6cBKFBgoRuUVEXhSR4yJyf8hxPykiCyLyC3m2L8i2hiKLjcxpaQzWZWjEZHwwSKSLuwhWgy1DzS/thXeFBQoRqQH4HIANAK4D8FERuc5x3G8B+Hq+LWwVtrKV0hU25MThpmwES+iz/Ex5eanOg8Otj2Xx/SiyR3EjgOOq+pKqzgF4FMAmy3GfBPBHAF7Ps3E2rsVdnExNX1jw5XBTNriLYLWMjpv9bu74avYL74rMeroawCu+26cBvN9/gIhcDeB2AD8F4CfDfpmIbAWwFQDWrk3/zD0zaRZ3BXGb02yEZZgxSGSDPeZqyiPTssgehaMEWZOHAHxaNXpqRlX3qWpdVeurV69Oo31NpnaaxV1Bl13JE1cWuEo4f66eMcvmU5GB4jSAa3y31wB4NXBMHcCjInICwC8A2CMit+XSugDXVRWL0mUj71o2ZBY2Bi/fagPA99/ivEXZ5J10UOTQ09MA1ovItQC+A+BOAB/zH6Cq13o/i8iXAPyxqj6eYxsvcQ6FcH4iM8GSEt5YOYNF+lwLG2296CxW/lJ8wVXZ504CB+4CHrsL0EWzhuKGrelux1xYj0JVLwK4Fyab6QUAX1PVoyKyTUS2FdUul/Ubk91PnWMWTn7i7AXvx3mL4ljfq0UTJACzhmL6YeDg9vT+T9EuXDFWr9d1eno61d/50Dr35Op9J1L9r6jB9ZpLzXwpWEsrPbv6EFomJYif++LEfa+kBnzGspGa83iRI6patz3GldkRvLHAsH0oKBuu11YXwB5GypIMoTKpoFhx36s0V2czUIRoGvpw4MY52YnzhWCefzqiVvr6MamgWLHfK8feOe1goAiRdNyW0hX3C8FeXee8LLOok0v9HgaJogUzAl3v2cDl6f2fDBQh4pyAmB6bnaYvRAhmnqUjTgA4dohDfWXg7W73wKL7mLm30/v/GChCxDkB8SSVLe8LERYsOF6enqjPM+eFysf1nqV5bmKgCBE19MHyHfnh8FI+4gz3cV6oXPKoYsBAEWJ0HLh+i/txlu/IT1jSAE9a6WkZ/3Zg4C6Wf2X21E5znsqyigG3Qg1xabWqA+cnyoEnrXT5i8w51w9xyLUwtpXZz+7PNhuNPYoQUVlP/LLkJywo833IDoszlo+rHPxjW7KbO2KgCBF2pcovS76cwUD4PmSJxRnLJ2whalaJBhx6CuEqBCg1flnyNjbR3N2+RFksMGt57HdA8bnOS0B2BRvZowjh6nbfvp9fnLy1rKnwTbQyZZN6SVRmWhZzdgwUIdjtLrFAUTSmbFKv8M5LUrM/nsWcHYeeIrDbXQ7BTA8bZj9lY2ZyaU8QVuwtB+/1D34nspo7ZaCgSohTd4vZT+k7uB2Y3otLPThvmA9gsChacGOvLIM4A4VD8Cpq/UZT54ZXVcWI6i0wCy19M5PNQcLDHe7KI68RDwYKC9uClumHlx7nVVX+wjI9BoeBDbv5XqRtaiecG+RwmC9/ly5eTzY271ow86Z5XLRyMtsizjAHJ0/zNTYBdznlFQwSWQgLBhzmy1dwbxxvU6K8Mv4YKCziXi3xqio/o+Pg1W3OuMixPMIuXucvAId3ZPv/M1BYxL1a4lVVvlylxvk+ZMOary9AfRt7cHmLuhiaPQs8uIolPHIVp9QyJ0/zx7pD+bKtI6pvM0kdu/pMwUAucsxHnIuh2bPZDUMxUFjYviDXjgHif7VS3I+W4vHKvnsLjaRmbvPqNjunvgW8dRqAAm+9Akx/vjFOrlwRn6exCbP/TZSs5k4jA4WI/LCIjInIisD9t6TfnPLwbzU4NgGc+p+A+rYdnH8bePxufkny5JV99ybydMHc5nuQjYPbTbbfpdd7EUBg600mdeRjdNzsfxNH7iU8ROQ/AHgCwCcBPC8im3wP/2b6zSmnqZ3Awlzr/Yvz/JLkyVVeme9BNo7si3cckwnyEXf/myJKePx7ADeo6nkRWQfgD0VknaruRg8Nvrjy9wF+SfLkeh/4HmTD60lEYTJBPsLWEnmymrOLGnqqqep5AFDVEwBuArBBRH4HPRQoJORV4pckHzOTcH7i+B5kw1V0zo/JBPmxJXPUBsyC06yLlkb1KP5RRH5cVZ8BgEbP4ucAPAJgNP3mlM/MZPPcRBC/JPlwrhJmTn9mbtjaXJHA03+5GfJjKZv8eKuy5y/kvyobiO5R3AXgH/13qOpFVb0LwIcza1WJhI1/Dw7zS5IX5/CSmsVGD65iymbabt0D1O9pzjKr3wN85PONYZBT5vvB1ztbtlXZXk8ur/NPaI9CVU+HPPat9JtTPmHj3xt259eOXhc2Pjt7duln1uFK1617zB+PrQ4aX+9sOffIvsv8XIYeRaZE5BYReVFEjovI/ZbHx0XkucafvxSR6/Nuo2v8m72JfK3fGP9YZkJlY2YSeGwLM8/y5twjezG/FP3CAoWI1AB8DsAGANcB+KiIXBc47GUA/0ZVfwzAbwCImbCXnrEJM2HkVxtgbyJvxw4lO56ZUOnyehKuTCi+3tkJS9bIK0W/yB7FjQCOq+pLqjoH4FEA/nUaUNW/VNV/atz8NoA1Obex0Y7w25S9pCciZkKlK6qiMl/v7EQla+QRpIsMFFcDeMV3+3TjPpdfBnA40xZZTO00UduPC+3yl+RExJTN9IWdjPh6Z2t0vJEC65BHkC4yUNiy4q3X6iLyb2ECxaedv0xkq4hMi8j0mTNn2m7UzKTJnPEyaLjIqxxclUwB8yXKI5e8l7lORlLj652HDbtbh8ABU/8pjyBd5A53pwFc47u9BsCrwYNE5McA/D6ADap6Nvi4R1X3oTGHUa/X2xocsmV0QGANX+xq5yvP/YGp1dhE83cDACBmzsLrXfO9yM7ouCnQeOTzS+u6+i83qcrdvhXq0wDWi8i1AL4D4E4AH/MfICJrARwAsFlV/z7rBlnHYS1Bgl3tYuS1PzC1agrUXi+78d04d9Jk3/iPo3RdKojpX/yb41xpYUNPqnoRwL0Avg7gBQBfU9WjIrJNRLY1DvsMgGEAe0TkGRGZzrJNcYaTBofZ1abe5FVUto2XL85nv8taLyu6IGaRPQqo6iEAhwL37fX9/CsAfiWv9sQpusX9manXzToGgF33U2dmJoufK+XGRT5xdrbjJHY5zEw2ynaI+ZPlNpBERfHmTV3ymitloPBp2tnOgZPYxZuZNGPi/ivY2bPAE59gsMiDK1Wz//J829ELwtav5DlXykAR4I3D1u+xP56klARlw7a2BTCbS3F9Szb8aeMui/MM1GkLGwrPc66UgcLBVTIiaSkJSl/Y8B+HBtPXVL1U3XMRDNTpCt2DZSTfuVIGCovQyaOIyW7KXtjwH4cG0xdVvsOPgTo9ZdqDhYEiIGryKM6uX5StsQmzItVm5T/Pty29IMnJn4E6PWF7sOSdeclAERB19RR3H2HKzug4cNsXgT5LSYOXp4CD2/NvUzeLffLnboOpGlxpvz8s2SYrDBQBUVdPRbxJ1Gp03B20j+RejL67xUkbhwD1bVxjlJaZSeD7b7XeXxsoJhgzUASEXT2xdEfx/Nk3rkDBXl+6mtLGG4UX6/c0377jK8074VH7vA2ibJl9A1cUE4wLXZldRtbiZzC54xt284qpSMGijS6cR0of62zlI2qDqNk3822Phz2KAO/qyb+oiEGiHOJm39wQkoxAVGZl3SCKgSJgZtIUNwuu+n1qKxcTFS1q/khqwLVjZq2Lt58I37P0Bfds4WucnrDPeF57T1j/72L+23Lyun22BUXcQL54rqupwWEzTq4LwMt/trQw7NxJBvi0BRff8TVOV1iP4bIrixvVYKDwier2cTFRsWzZN7UBkx0S3CPBwwCfrqLLXXe7sB5DUfMTAANFk8jUWC4mKpQt+2bgCnt2iB8DfHpcryVf43SE7Y9d5PmHgcKHqbHl5xVtfGDR/B3nKosBPj3OvbP7OGeRlh/9JbTUeCr6/MNA4eMqDcFd7cppZtKcoMIU/QXrNq7qyboAzlmkwNvytGkIVYDrtxR7/mGgCAqMcfctY2psGYXmmzeuxoZGGODTNDMZb9U75yzaZ50nVeDo1wppziUMFD6HdwCLF5vvW7zIvYDLyJV4IDWzSvgBNUNTDBLpiFoIFsQ5i/a4XrfZs8X20hgofLgXcHW4vlDeiYx5/ulKUmoc4LxQu8JetyJ7aQwUVElhX6gnPsE8/7Ql6SFwXqh9Ya9bkb00BgofV1qa634qztgEnLt/Lcw1356/wOHDTjmznWqtBQI5L9Q+psdWwIbd7g1xeEVaLqPjsO/+5VD0GG/V2RY79i8Hbt9vqsb6U5YZJDqzYbf9tWZ6bEl4G+IEIzprPZVT0r1B2Kton61Y5rLB4trTzWwLS4vupTFQBIyOAwMrWu9nyl/52K5yXT1CgL2KNFycXfqZF1C9g4HCgmUKqsF25WXrEfox2LePdZ7yUcbCi9y4qGFm0nzgz50CRAC1jH8z5a98XBvqHPi4/XgG+/bxAip73u52wfUq8xfM/UAxQ1DsUaA1guti6zFF1oKnZMqaOVJ1rteOr2k6Dm4HDmwO3+K3qJ4FAwXiLSbiPszVUsbMkapzZT7xNe3czCQwvReRmXxFDfUVGihE5BYReVFEjovI/ZbHRUR+t/H4cyLyvizaEafrrIvFjxNSfGXMHKm6ptcUZg2FNySyS7gKvhNTOxE73buIob7C5ihEpAbgcwBuBnAawNMi8qSq/q3vsA0A1jf+vB/Aw42/UzW01rfxTQgvmvNkUw2u+QtKzj+HN7jSDMV6+4B4vW1v0hXg655UkpN/EUN9RfYobgRwXFVfUtU5AI8C2BQ4ZhOAL6vxbQDvEJGr0m6IrUvtwom7cuN+zukLzuHNnnVvFsUsqPbEPfkXNdRXZKC4GsArvtunG/clPaZjwWGKwWE4y0Nw4q68yphW2A2SFgTkxVQ8/ouaufNmW98wRQ6fFpkeazsVB0fp4hxjDhTZCmArAKxdm/xsHhym8E46/i8IJ+7KzZXn/9gWk00ytNa8fxwWSSbpiZ8XU9GC55fZs+GLRSGmPEpRiuxRnAZwje/2GgCvtnEMAEBV96lqXVXrq1ev7rhxnAytntDS4+xhtC3JiZ8XU/HYLmoW51HakYwiexRPA1gvItcC+A6AOwF8LHDMkwDuFZFHYSaxz6nqa3k1kJOh1RInKaHohUtVNDbR2ruuDQADV5grYamZYDw0wh6biz8ZIPRzahkvKcMarsIChapeFJF7AXwdQA3AI6p6VES2NR7fC+AQgI0AjgO4AODuotpL5Tc2YfaiCJYZD/IWLgE8qcXhvUb+Ex0DQnzBYaZzJ2F6DjHTYS+7svjXWtRWq6Li6vW6Tk9PF90MKsCDq+LvSDg0Uuy4L/WGh9bFS793ElPCPWsickRV67bHuDKbusrsm/GPZXYO5aHTz1nR8xMAAwV1mSRfqjJ8Aan7dfI5K0tyAAMFdRXXHhXBHPWyfAGp+7lqZLkKV0oNpcu0ZJlx6irBidfBleY2s3OoKK5kAMC+VqsswcGPgYK6jpfWHMw20YWlnkTZvojU3cJS7auQTcahJ+pa3JGNyiy4tqKsQQJgj4K6GHdko7Kyra0o89oe9iioa3FHNiqrqvV2GSioa7nKx194g/WeqDgHt7sX4JW1t8uhJ+pao+PAqW8B0w833z//NvD43UvHEGXt0nxExArtsvZ22aOgrnbskP3+xfnydvOpuzTtkxKizGt7GCioq4V15Tuqv0MUU9yNn8q4fsLDQEFdLawrL7X82kG9K868g9TKGyQABgrqcmFdeV3Irx3Uu+LMO9ywNft2dIKBgrra6Li7ps7QSL5tod7kyr7z9F8O3Lonv/a0g4GCut6G3faibGWdOKTu4m2r7BJn/qJoDBTU9bwvalPPQoDDO4BdAvz6MvP3Q+u4voKyEdqzLWlKrB/XUVDPuDi79PP82+YPsDRXUfYyClRdB7fbd14sw37YcbBHQT0hbopimcsoUDXNTALTe+2PlWE/7DgYKKgnJCmNUNYyClRNUzsBqP2xJFv3FomBgnoCt0ilooRdeFTls8ZAQT0hKkXRw2woSpu3y6JNVT5rnMymnuCNAz+2xb3QTmrNcxRVGDum6uq/vDqfMfYoqGeMjgO372/tWfT1A7WB1uwnpspSGlzzEFVYP+FhoKCe4q2pGBoBIObvy64EFuaaj2P2E6VhZhIQx1m2KvMTAIeeqAcFN7rf5fgiM/uJOuGVF7cNdVZtLow9Cup5ris76TNBhCu2qR2utTtSK3dJcRsGCup5rowoXQCgZs7iwGazupYoLlePVBerFSQABgqilnkL6z4ValbXsmdBUWYmTS/UtciuSnMTHgYK6nmX9jM+Zb7Ezn0qlBPcFC5q29OqzU14CgkUIrJSRP5URI41/n6n5ZhrROTPReQFETkqIjuKaCt1t6YvtkZvj8oJbgoTVlNsaKR6cxOeonoU9wOYUtX1AKYat4MuAvhPqvojAD4A4NdE5Loc20g9IG6xQE8Vhw0oHzOTIRcaAtx3oppBAiguUGwCsL/x834AtwUPUNXXVPWvGz9/D8ALAK7Oq4HUG5L0EGoDwNx5ZkJRK69n6hJWxqMKigoU71bV1wATEAC8K+xgEVkH4CcA/FXIMVtFZFpEps+cOZNmW6mLxe0hDA4Dqo09BZSrt6lZVM907nvV/qxkFihE5Bsi8rzlz6aEv2cFgD8CcJ+qvuU6TlX3qWpdVeurV6/utPnUI+IWCwSAxfnm21y9TV6GU9Tc1sJctT8rma3MVtWfdj0mIt8VkatU9TURuQrA647j+mGCxKSqHsioqdTDvDHjqZ3hX3bb7mQAJ7d7mTfcFHeOq8qflaKGnp4EsKXx8xYATwQPEBEB8AUAL6jq7+TYNuoxo+NmonFoJPm/5eR27+qlRIiiAsVnAdwsIscA3Ny4DRF5j4gcahzzIQCbAfyUiDzT+LOxmOZSL0gyDAUAEGA9P5E9K0kPoarrJzyFFAVU1bMAxiz3vwpgY+Pn/wVAcm4a9bCoPSv6L29cQXorbhV4dj+w9kPVTXuk9g2tjZ6bAExPdWyi2p8Rrswm8nHtWdG/HFj2A2gpy8AJ7d4Vpwd6x1ervX7Cw0BBFGDbs+Ij+9wb0FR5kpKS8zKdDmwGlg2695sYHK5+gPBwPwoii+CeFYA7M6rKk5SUzMwk8MQnlja6cmXD9S8HNuzOr11ZY4+CKCbXxDUntHvH4R2tuyFe0phRrXJNJxf2KIhiOnYo2f3UfVw9CACAmiBx34m8WpMfBgqimFxzEZyj6E7B8vNx0lu79bPAoSciB2/S0isC6CrsxjmK7mMrP//UVpMiHUb6ql3TyYU9CiKLYHmGcydN9di+/uaaT1VfSEV2tlXX8xdMJtPCXGvdL48uLFWR7aY5CvYoiCxsJ4qFOeCyK83JwrNsMN92UT5cQ0izbwK3fTG83Es3rq1hoCCycJ4ozgIXZ5tvs9x493ENJw6tXaoN9oDCWTui2+YqGCiILFwnCqnZhyS67Qqy19lWXduGGcMCSjdhoCCycJ0obDWgADOH4Z/4Zg+j2kbHgTUfbL5vzQdb5x3iBpSqY6AgsnCV8XCOTUtrhgyDRXUd3A68PNV838tTwG9c1vy+uj4n3TSRDQCiqtFHVUy9Xtfp6emim0FdyLpZjaClWCDQvYuvesGvL3P3Hvv6zYR21wUDkSOqWrc9xh4FUQJNV5Awcxa2IAGYngV7FdXkChKASY3ttTkpBgqihEbHG/WdJPyEAgAHPg48uIoBo2qkFv54t2U1RWGgIEpoZhKY3gtnTyKIKbTlFVx9771HN2wN/3fdltUUhYGCKKGpnYgdJDxMoS0fV5mOmUng1j3AtS17cBp9/d2X1RSFgYIooXaHHXptuKLsXGU6vIB+1zfMDnX+lfiDw905kR2FtZ6IEgrbK7k24N6voNeGK8rOWQ34pEmPPXZoqXLsht29Fxz82KMgSsi6V7IA9XuATY80X4F6unERVtWFBe7ph7kuxo+Bgiih4CKrwWFTgnx6rxm22LDbDFl0+yKsqrMGfIden2PigjuiDtgW4PUvjw4Mtk1xGEjyNzNpUpjjGhrp3veKC+6IMuKaEH3qV921n2zZNgc2m3FxytfoeHjJ8KBeHYZij4KoA7v6EC9VtlHmY2gEmDvv2HtZgDu+0p1Xq2VmLcsSoRvLs7BHQZSR2JlMjWBy7qQjSDSO6eVx8KLYCvvV7wnvafRaqjPTY4k6MDaRbIw7Sq+dgIpimyOy9RAeWmdPhe61VGf2KIg6MDpuT4dtV6+dgIoQtiI7qFf2m4jCQEHUoQ2746dZevovR8s2mr14AsqLv6bTY1vi71LYK/tNRClk6ElEVgL4bwDWATgB4JdU9Z8cx9YATAP4jqr+XF5tJIrLO2n4hzLWb2ys7D2Jlv0q+pcDH/m8+fnwjqU5i2WDeba6dwQnq527FDqG/UbHey8wBBXVo7gfwJSqrgcw1bjtsgPAC7m0iqhNo+NmjPuBRdMruFT+YQSob7NfkZ76FjD75tLvCFaZdVU2pWRsKcw2HPZzK2oyexOAmxo/7wfwTQCfDh4kImsA3ApgAsB/zKltRG0LXr2eOwk8u791uMJVqtw/BPL43WaTHO/3PH63+bnXr26jBCeqXXW5gubOm3/L17dVUT2Kd6vqawDQ+PtdjuMeAvApAItRv1BEtorItIhMnzlzJrWGEiURVZHUf5xzZ7xTZkjKCxKexXmzkI/cbBPVcXHfELfMAoWIfENEnrf82RTz3/8cgNdV9Uic41V1n6rWVbW+evXqjtpO1C5nRdJT8Y4DAOlzr7WYf7t3T2RhQ3HeYwc+Hn/hnFjOfr1e08kls6EnVf1p12Mi8l0RuUpVXxORqwC8bjnsQwB+XkQ2AvgBAFeKyFdVNcWsdaJ0uYY6guPfYUMiUdurTu2MHh7ptlpStiG9p3y70CVdWQ0A6hin4FqWVkUNPT0JYEvj5y0AnggeoKr/WVXXqOo6AHcC+DMGCSq7uHn3SSqXBp07GT7JnWSdQBXMTIantMadrA5y7YvNSe1WRQWKzwK4WUSOAbi5cRsi8h4ROVRQm4g6Fjfvvum4pCQ8CMSdJ6kCL+iFpbS20wPoX272xeZiunhYFJCoYK4yEUn4i9Q5CxWKSd+tkqjXJrTIokP/5WYdy+h49w3RdSKsKCBrPREVbGyivTF2P//JNO48SdFcJ2n//WGVefuXm4WNf/OFeP+f1Ewv4tY9S/dxMV08DBREBbOt7E56lewfb7cFHtuQSpFX067J6VPfMutOooKm1MzQ3dRO9x7lnm4sCZ43BgqiEghe2SbdI0EXmk/8gytNSZDZN+1BICyLKI9g4ZpHObIvOuvLv4NgVOVezjmkg4GCqISCvQzpCz+BDg43n/hnz5qTpGsjpLAJ7zwChWsCOipIDA6bIozeEFWwjlbQmg9yaCkNrB5LVFL++lG370dLtVm/2TeTZTrFXRgItF9zyvXvZibti90Ad8qq5+Ls0u94bAsidxd8+c+qmxZcJgwURBUwOm6KCzqDRUg5EBvnxLa2ntTbWZPh+ncHt7vTXWsD9pRVv/kLprxJWMps8PlUMS24bBgoiCri1j0RwcLCFRDCFvz5g0G7azLC5iBc8y6qwNoPRa8vmT2bLEOMK607x0BBVCHHDiFyuMXjynR6aB1wYLOZ7Hbtzjd/wQztuNYwRJ1825mDWJxfmiO570SbixEtypYWXEWczCaqkLhXx0MjlnUJgU2UvAlvF12Ac7LYO/kGM60AM18SNfnucu6kmdPwNn+Kkyp7iaWtzHpKBwMFUYXE2V/BOzl6QeKJT/jWGlj2v5BayEld0XoCbpQQeXAV8P23lsqh+9d9tBMk/P+nt4/H9VuA6Yej/4mXMgtwpXUWWMKDqELirq/wFpk9uCrZwr2w32fb1jVr3vCTLThKzVSAZUBIR1gJD85REFVIsOigizdElVaQuDRnkPN15blT7oq8t+83qcP3nWCQyBoDBVHF+NdXuCZ805rA9Y/xF5E9NLQ2fkVeyg7nKIgqLKqu0+Bwm70KaR3SSbL/dBr8z4PF+4rFHgVRhUVdbW/YDfT1N/+bvn7gjq+G/15vSAcw8xy7JN8gMTjMXkOZsEdBVHFhV9u2yrReL+HwDntvw1tb0ZIxFWJw2JTXaKdU+uAwMLCCmUplxkBB1KWCZcSDBQI37G4NBLUBcz8Qr4S3Z/ZN8/v9aypm/wmAf6OkPqC2rPl39i9fKvJH5cVAQdSF4pQRD+ttAMkmr71J52Ap8+DvDvv/qLy4joKoC7m2EE2yiU/cLVr9+0NQdXEdBVGPSVJG3GVswgxFheGkc2/g0BNRF0pj32zv5N806d1Yme2vJUXdj4GCqAvF3Tc7CtcvEMChJ6KuxNXMlCb2KIi6FHsDlBb2KIiIKBQDBRERhWKgICKiUAwUREQUioGCiIhCFRIoRGSliPypiBxr/P1Ox3HvEJE/FJG/E5EXROSDebeViKjXFdWjuB/AlKquBzDVuG2zG8CfqOoPA7gewAs5tY+IiBqKChSbAOxv/LwfwG3BA0TkSgAfBvAFAFDVOVX9vzm1j4iIGooKFO9W1dcAoPH3uyzH/DMAZwB8UUT+RkR+X0Quz7ORRESUYaAQkW+IyPOWP5ti/oplAN4H4GFV/QkAb8M9RAUR2Soi0yIyfebMmRSeARERAQXtRyEiLwK4SVVfE5GrAHxTVd8bOOYHAXxbVdc1bv9rAPer6q0xfv8ZAGns8LsKwBsp/J6i8XmUC59HuXTD80jjOYyo6mrbA0XVenoSwBYAn238/UTwAFX9RxF5RUTeq6ovAhgD8LdxfrnrySYlItOujTyqhM+jXPg8yqUbnkfWz6GoOYrPArhZRI4BuLlxGyLyHhE55DvukwAmReQ5AD8O4DfzbigRUa8rpEehqmdhegjB+18FsNF3+xkAlY70RERVx5XZ4fYV3YCU8HmUC59HuXTD88j0ORQymU1ERNXBHgUREYVioPARkV8UkaMisigizrkREblFRF4UkeMi4lzbUZQEtbROiMiMiDwjItN5t9Mm6rUV43cbjz8nIu8rop1RYjyPm0TkXOO1f0ZEPlNEO6OIyCMi8rqIPO94vCrvR9TzKP37ISLXiMifN+reHRWRHZZjsnk/VJV/Gn8A/AiA9wL4JoC645gagH+AWTk+AOBZANcV3fZAGx+EWXMCmEWKv+U47gSAVUW3N8lrC5PscBiAAPgAgL8qut1tPo+bAPxx0W2N8Vw+DLPw9XnH46V/P2I+j9K/HwCuAvC+xs9XAPj7vL4f7FH4qOoLatZshLkRwHFVfUlV5wA8ClO7qkwia2mVVJzXdhOAL6vxbQDvaCzaLJMqfEZiUdW/APBmyCFVeD/iPI/SU9XXVPWvGz9/D6ZI6tWBwzJ5PxgokrsawCu+26fR+mYVLU4tLQBQAP9dRI6IyNbcWucW57Wtwusft40fFJFnReSwiPxoPk1LXRXej7gq836IyDoAPwHgrwIPZfJ+FLUyuzAi8g0AP2h5aKeqtqwQt/0Ky325p46FPY8Ev+ZDqvqqiLwLwJ+KyN81rryKEue1LcXrHyFOG/8apmTCeRHZCOBxAOuzblgGqvB+xFGZ90NEVgD4IwD3qepbwYct/6Tj96PnAoWq/nSHv+I0gGt8t9cAeLXD35lY2PMQke+KyFW6VEvrdcfveLXx9+si8hjMkEmRgSLOa1uK1z9CZBv9X3BVPSQie0RklapWreZQFd6PSFV5P0SkHyZITKrqAcshmbwfHHpK7mkA60XkWhEZAHAnTO2qMvFqaQGOWloicrmIXOH9DOBnAFgzQnIU57V9EsBdjeyODwA45w2zlUjk8xCRHxQRafx8I8x38WzuLe1cFd6PSFV4Pxrt+wKAF1T1dxyHZfN+FD2TX6Y/AG6HicjfB/BdAF9v3P8eAId8x22EyTj4B5ghq8LbHngewzA7Bx5r/L0y+DxgMnKebfw5WpbnYXttAWwDsK3xswD4XOPxGTiy04r+E+N53Nt43Z8F8G0A/7LoNjuexx8AeA3AfOO78csVfT+inkfp3w8A/wpmGOk5AM80/mzM4/3gymwiIgrFoSciIgrFQEFERKEYKIiIKBQDBRERhWKgICKiUAwURDmIql5KVGYMFET5+BKAW4puBFE7GCiIcqBdUL2UehcDBRERhWKgICKiUAwUREQUioGCiIhCMVAQ5UBE/gDA/wbwXhE5LSK/XHSbiOJi9VgiIgrFHgUREYVioCAiolAMFEREFIqBgoiIQjFQEBFRKAYKIiIKxUBBREShGCiIiCjU/wf/XxBIgcWTIgAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Reproduce Ana Fred's Majority voting solution to stabilizing KMeans clustering using OpenEnsembles\n", "# This example demonstrates how an ensemble of kmeans solutions, which are constrained to finding spheroids\n", "# can identify contigous structres\n", "import pandas as pd \n", "import random\n", "import matplotlib.pyplot as plt\n", "from sklearn import datasets\n", "import openensembles as oe\n", "\n", "\n", "n_samples = 400\n", "X, y = datasets.make_moons(n_samples=n_samples, shuffle=True, noise=0.02, random_state=None)\n", "df = pd.DataFrame(X)\n", "\n", "dataObj = oe.data(df, [1,2])\n", "data_plot = dataObj.plot_data('parent')\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Example of using OpenEnsembles to create and visualize a single solution" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#Plot a single solution \n", "# default Scikit-learn settings have built in some determinism using Ana Fred's principals, so we have to override those\n", "\n", "c = oe.cluster(dataObj) \n", "K = 2\n", "name = 'kmeans'\n", "c.cluster('parent', 'kmeans', name, K, init = 'random', n_init = 1)\n", "data_plot = dataObj.plot_data('parent', class_labels=c.labels['kmeans'])\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Create an ensemble of kmeans, plot convergence towards solution with parallelization" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n", " out=out, **kwargs)\n", "/anaconda3/envs/py37-openEnsembles/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n" ] } ], "source": [ "# Build towards a majority voting that finds the two continuous partitions\n", "c = oe.cluster(dataObj) \n", "K = 10 \n", "numIterations = 40\n", "c_MV_arr = []\n", "modulo = 1 #if you want to calculate majority vote only ever other or few solutions, increase this number\n", "sil_arr = []\n", "det_arr = []\n", "num_clusters = []\n", "\n", "# Wrapper function for running an iteration\n", "def run_cluster_iteration(c, i):\n", " name = 'kmeans_' + str(i)\n", " c.cluster('parent', 'kmeans', name, K, init = 'random', n_init = 1)\n", " return c\n", "\n", "def run_val_iteration(c, i):\n", " #take a slice of the ensemble of size i\n", " names = list(c.labels.keys())\n", " cSlice = c.slice(names[0:i])\n", " \n", " x = cSlice.finish_majority_vote(threshold=0.5)\n", " v = oe.validation(dataObj, x)\n", "\n", " #A compactness metric\n", " validation_name = 'silhouette'\n", " v.calculate(validation_name, 'majority_vote', 'parent')\n", " name = validation_name+'_parent_majority_vote'\n", " sil_val = v.validation[name]\n", "\n", " #A metric for connectedness\n", " validation_name = 'det_ratio'\n", " v.calculate(validation_name, 'majority_vote', 'parent')\n", " name = validation_name+'_parent_majority_vote'\n", " det_val = v.validation[name]\n", "\n", " return (x, len(x.clusterNumbers['majority_vote']), sil_val, det_val)\n", "\n", " \n", "# Use python's multiprocessing module to run in parallel\n", "from multiprocessing import Pool\n", "N_THREADS = 4\n", "pool = Pool(processes=N_THREADS)\n", "\n", "# Run clustering in parallel\n", "cluster_apply_results = [pool.apply_async(run_cluster_iteration, (c, i)) for i in range(1, numIterations)]\n", "cluster_results = [x.get() for x in cluster_apply_results]\n", "\n", "# Merge the results\n", "#First, establish a non-empty parent cluster to merge remainder of iterations with (which are an array of cluster objects)\n", "c = cluster_results[0]\n", "cluster_td = c.merge(cluster_results[1:])\n", "\n", "# Run validation in parallel -- calculate majority vote for every possible slice of c \n", "val_apply_results = [pool.apply_async(run_val_iteration, (c, i)) for i in range(1, numIterations) if not i % modulo]\n", "val_results = [x.get() for x in val_apply_results]\n", "#val_results = [run_val_iteration(c, i) for i in range(1, numIterations) if not i % modulo]\n", "\n", "# Merge the results\n", "for r in val_results:\n", " c_MV_arr.append(r[0])\n", " num_clusters.append(r[1])\n", " sil_arr.append(r[2])\n", " det_arr.append(r[3])\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#Compactness\n", "plt.plot(sil_arr)\n", "plt.title('Silhouette validation metric')\n", "plt.xlabel('Number of clusters in Majority Vote')\n", "plt.ylabel('Silhouette value')\n", "plt.show()\n", "\n", "#Connectedness\n", "plt.plot(det_arr)\n", "plt.title('Determinant Ratio Index (DRI) validation metric')\n", "plt.xlabel('Number of clusters in Majority Vote')\n", "plt.ylabel('DRI value')\n", "plt.show()\n", "\n", "#Convergence towards final K\n", "plt.plot(num_clusters)\n", "plt.xlabel('Number of clusters in Majority Vote')\n", "plt.ylabel('Final K')\n", "plt.title('Number of clusters after Majority Vote')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAGDCAYAAAA1cVfYAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAABBSklEQVR4nO3dfXhcV30n8O9PYylItuNg2bR5sxSKG0hrQhOVl6WlWQxtYkodstsWmDhuAriOoWue0kJ21QVSqra0u11Mi2O81KljT8nmoQECcaDENKULhUWmSZQ0TWNSy3EdiC0TJ44NsqXf/nHuja7unHPnzsx9nfl+nmceae69Gp15u7973n5HVBVEREQuPXkXgIiIio2BgoiIIjFQEBFRJAYKIiKKxEBBRESRGCiIiCgSAwW1RERWiMgJEam0+Pf/TUQ+lXS5KD8icoWIHGrj7/mZKCgGii4kIgdEZFpEloW23y8iKiLDjR5DVQ+q6iJVnWmlDKr6h6r6Tu//Dnv/d0Erj9UO7/++JOv/mzXvJHwicDslIrPhz0CG5akLKsHPBBULA0X3+jcAb/PviMgqAP1Z/OM8AkKRZfF6eCfhRf4NwEcB3KeqR9P+31R+DBTdaxeA6wL31wO4LXiAiLxJRP5JRJ4RkSdE5MOBffNqASJynojcJSLHRGS/iLwrcOyHReQzIrJbRJ4B8Bvett3eIV/zfj7tXe3+gvc4qwKP8SLvKnh5qIxnicjTIvLTgW3LvWNf5N1/l1emY14Zz/O2+//3Ae///rq3/Ze92tXTIvINEXm560UUkS3ea/OMiOwTkZ8P7Kt4V/LfFZFnvf0XevtURN4tIo8BeKxBOUVE/peIPCUix0XkQf/5isgaEfln7/H/XUR+x1XWQLkEwDoAOyOO+YD3eM+KyKMisjrwen9MRA57t4+JyFmOx5hXWxORvxKRPxCRhQDuAXBeoIZzXugzARH5FRF52Hsf7hORlwX2HRCR3/Fei+Mi8n9E5AXevmUi8kXv746JyD+ICM917VBV3rrsBuAAgDcAeBTAywBUADwBYAiAAhj2jrsCwCqYC4qXA/g+gKu9fcPesQu8+38PYCuAFwB4BYAjAFZ7+z4M4DSAq73H6ve27bY9lrdtK4CPBu5vBvAFx/PZAWAscP/dAL7k/f56AEcBXAbgLAB/DuBrgWMVwEsC9y8D8BSAV3mvy3rv9TrL8b+vBTAIYAGA9wH4HoAXePt+F8AEgIsBCIBLAQwG/u9XACz1Xg9nOQH8EoB9AM7xHudlAM719j0J4Oe9318I4LIY7//rAJwAsMix/2Lv83Be4P35Ce/33wfwTQAvArAcwDcAfCTweTkU8dr+FYA/sB0b+Jz4n4mfBPAcgDcC6AXwfgD7AfQFPsP/D8B53mv4CICN3r4/ArDN+7teAD8PQPL+3pX5xijb3fxaxRsB/AuAfw/uVNX7VHVCVWdV9UEAnwbwC+EH8a6Sfw7AB1T1h6p6P4BPwVy1+v5RVT/nPdapGGXbCeDtgSvBdV55bf4agWY0AG/3tgFAFcAOVf2Oqv4IwH8F8Bpx98O8C8AnVfVbqjqjqjsB/AjAq20Hq+puVZ1S1TOq+j9hTvIXe7vfCeD3VPVRNR5Q1anAn/+Rqh7zXo+ocp4GsBjAS2FOeI+o6pPeY5wGcImInK2qP1DV7zieV9B6AJ9R1ROO/TPe87hERHpV9YCqftfbVwXw+6r6lKoeAXAz5r/PSfl1AHer6ldU9TSA/wETUP9D4JiPq+phVT0G4AswFyiAeU3OBTCkqqdV9R/UiyDUGgaK7rYL5qT6Gwg1OwGAiLxKRP5ORI6IyHEAGwHYOj/PA3BMVZ8NbJsEcH7g/hPNFExVvwVzRfkLIvJSAC8BcJfj8K8C6PfKOwRzwvhsoGyTgcc9AWAqVLagIQDv85otnhaRpwFc6D1OHRF5n4g84jV/PA1gCeZeowsBfNf2d57ga+Isp6p+FcBfAPgEgO+LyHYROds79D8BWANgUkT+XkReE/H/ICL9AH4VEc1OqrofwHthrvCfEpHb/WawcDm9362vTZvCr8cszOsVfN++F/j9JIBF3u9/ClP7+FsReVxEbkqhfF2FgaKLqeokTKf2GgB3Wg75a5iT84WqugSmOi+W4w4DWCoiiwPbVmB+DSXqis61bydM0846mCvgHzqexyyAO2BqFW8H8MVA0DoMc/IHAHjt44OhsgU9AdOMdU7gNqCqnw4f6PVHfADArwF4oaqeA+A45l6jJwD8hOP/APOfd2Q5VfXjqno5gJ+CaZb5XW/7t1V1LUxT0Oe81yHKNQCOAbgv6iBV/WtV/TnMNUd+1FZOmPf5sONhTgIYCNz/8eC/aFDO8OshMIHX9b4Fy/6sqr5PVV8M4M0AftvvY6HWMFDQOwC8XlWfs+xbDFNT+KGIvBLmJFxHVZ+Aaav+IxF5gdf5+w4AtZhlOAJgFsCLQ9t3AXgLTLCoq/GE/DVMc0UVc81O/vbrReQVXqfrHwL4lqoe8PZ/P/R//zeAjV7tRERkoZhO/WAQ9C0GcMYr/wIR+SCAswP7PwXgIyKy0nusl4vIYET5reUUkZ/1ytMLU8v6IYAZEekTkaqILPGaZ56BaTaKsh7AbVFNMSJysYi83ivHDwGcCjzupwH8npgBA8sAfBDAbsdD3Q/TfFgRkSsxv9ny+wAGRWSJ42/vAPAmEVntPe/3wTQBfqPB8/MHI7zECy7+a9LSMG4yGCi6nKp+V1XHHbs3Afh9EXkW5oQQdbX6NphOz8MwzT4fUtWvxCzDSQBjAL7uNfe82tt+CMB3YK4+/6HBY/hNVefBjKjxt+8F8N8B/A1Mx+9PAHhr4E8/DGCn939/zXst3gXT1PMDmCaM33D82y97/+tfYZpJfoj5zUl/BvOa/S3MCesv4RiC3KCcZ8MEsB94/2cKps0eMLWtA2JGk22ECapWInI+TKd5o6B7FoA/hulc/x5MbeW/efv+AMA4gAdhOuq/422z2QxzRf80TAD/XOD5/gtM0Hnce+3nNV+p6qPec/lzrxxvBvBmVZ1uUHYAWAngXpgO+38EsFVV74vxd+Qg7OOhVojIi2GGdS5Is6NQRHYAOKyqv5fW/yCiaJz4RK36aQAHUg4SwzBt6j+T1v8gosbY9ERNE5HfBrAdQGqjSUTkIwAeAvCnqvpvaf0fImqMTU9ERBSJNQoiIorEQEFERJE6sjN72bJlOjw8nHcxiIhKY9++fUdVdbltX0cGiuHhYYyPu6YGEBFRmIhMuvax6YmIiCIxUBARUSQGCiIiisRAQUREkRgoiIgoEgMFERFFYqAgIqJIDBRERBSJgYKIiCIxUFBhTdSAjw0DN/eYnxNxF1YlokQxUFAhTdSAz10PHJ8EoObnndcCf7KMAYMoawwUVDgTNeDOdcDs6fp9p6aAL2xoLliwZkLUHgYKKhS/JoGI9bROnwT2jsZ/vC9smF8zaTbQEHW7XAOFiOwQkadE5CHHfhGRj4vIfhF5UEQuy7qM1Jyoq3fbvvC2L/ymvSYRdnwyXu1g76gJLEHNBBoiynkpVBF5HYATAG5T1Z+27F8D4LcArAHwKgBbVPVVjR53ZGREmWY8OxM1c+I9PglAMK820DsAvHm7+f0LG+aftCt9gGq8wOBS6QP6FpsmKakAOjP3c8mQVyYbAa7Z5ZX7ILBkBbB6DFhVbb0sRGUmIvtUdcS2L9f1KFT1ayIyHHHIWpggogC+KSLniMi5qvpkNiWkRvymnecDQOi6I3j1Hr6yn5lu///PTJsgAZjgEPzpDBIAoKYfxC+v3yQFMFgQhRW9j+J8AE8E7h/ytlFB2Jp2wo4fbHDSzktEUCOiOUUPFGLZZm0rE5ENIjIuIuNHjhxJuVjkO36w8TH9S2F/Jwsobt8HUTcpeqA4BODCwP0LABy2Haiq21V1RFVHli+3LvtKKehfGr2/d8D7JYGusP7BwOOliCOjiOYreqC4C8B13uinVwM4zv6JbLUzB2HJkOnIPnWs/XL0DgBXbQEuXY9MaieuZijOyaBulGtntoh8GsAVAJaJyCEAHwLQCwCqug3AHpgRT/sBnARwfT4l7U7hjmpbh68zCAjw3gPm1+dHRLVoydDciKS9o3DWTvzRTk0JjdIKCjarTdSAezbPdZwD7ACn7pH3qKe3NdivAN6dUXEopNEchKiTdrBJavVY/dDYOPoHgfcfnb/N2SciwAfPWEZhRfADkCuQLVlhft69CRjfButz9V8PBgrqZEVveqIcuU7KxyfN0NKoWsL0s3PNMquqzTcZ+U1NYf7J27V9VdU0d0kl+vGXDJkaz6qqCRa2vo/pE9FBwhenQ5+ozBgoyMl1UgbQsHN6Zhr47Pq5YPHYnsZ/4wcSv2/DdpVuO6n3DpjtvlVV4C07ozu+gyd3P5BJ6NtwaqpxkAAavE5EHSDXpicqtlabjHw6M9eGH3nVLfFnRvv7G82o9u9/dr293yJ4cp+oAQ/sBHTW9iSiyxMOUkSdiIGCnBqdbOPw2/CXrHD0AwzNdXo3U644fQL+MeFgFz65x5k0aNM/aJrH2D9BnY5NTxRpVdVxpd2E4wfjNRmlwe+zWDIEU3OxNGu10scwcqPpaGeQoG7AGgU15KoNPE+Ai14PHLjP3cwTt8koDY1qIA2fn8WbtrZXJqIyYaCg5z2fBfbg3PDWU8ccncLe/IPgHAfb0NRgrSFuk1HWVo/NTxDYyJKhVItDVDgMFASg/iQfnFh2+rnQwQKMbKy/qs6z1tCOVVWzzGocwcAXDKxlea5ErWCgIABNduiqN9zVoqi1hkZca1f0DwJ9i+aCwco15rW681rMm9XNWdrUyRgoutTdm4B921sfzdRpk8xsQ4H9SX/+iT/u2hsMFNRpOOqpC929CRi/pfUgAXTeJLM4o6Pirr1B1GlYo+hC+7a39/eVvs6cZNao2SxOEJAek1nW77MA5icT5NwLKiMGii7UTk0CMGtUd+OJLs4w2uAyrJ+73sxBCb7ep6aAz99gfu/G15DKiYGiQz0/ImdyLv12/yBw5oftP3YS60uUUbMpTWZP27fPTLMvg8qFgaIDhTtd/Sva4JDXdnRa/0Rc4eG/Iq3PWmdfBpUJA0UHajV3UVjvQgAanSep2wT7MW5uY6W9bg22VE4c9dSBkrpaPX2y8Uggcuvpda+LMX2Cy6hSebBG0YGazV3kWkLUz9HEwGDXP+huzpMKcNk7gYfvsB9zaooT9Kg8WKPoQKvHEPud7ekFLt+QT2bXsrtqC6yvc6XPvKYP7IzuFwouK0tUZAwUnSpGJ2v/IHD1rSZnE5uYmreqClxzm3kdff2DwNodJsVJnH4idmpTGYhqzJSZJTIyMqLj4+N5FyNTwQR10hMxV0KAD7W5vgQ1dnMPYmWjbWXhJqI0iMg+VR2x7WONogP4w2GPTwLQ6Al1HG2Tjbiv88mjJqh8bNjeuT1RM/uijiFKGwNFB4g9HFbY75AV24p+NqefA6Bz2WeDgSB8AWA7higLDBQdIFY7t7eGBPsdsjEvySDcw2SDwp3btgsAdoBTHjg8tgO4hsNKD6DKRXXyEh5aHKffIvg+ui4A2AFOWWONogOsHjPDXMN6FgDX7DKdpQwS+Yvbb+E3LbmOZz8TZY2BogOsqgJnnV2/3U8+R8UQt9/C74ewHc/5LZQHBooO4croymaK4gj3W7gEV8rj/BYqAvZRlExwvkSw78HVT8FmimLx+y38VQZd/ADPFCpUBLnWKETkShF5VET2i8hNlv1LROQLIvKAiDwsItfnUc6iiBouyWaKcnlsT/R+BngqktwChYhUAHwCwFUALgHwNhG5JHTYuwH8s6peCuAKAP9TRPoyLWiBRA2XZDNFuTRqEly5JptyEMWRZ43ilQD2q+rjqjoN4HYAa0PHKIDFIiIAFgE4BuBMtsUshomaOyPs8YPuJikqFn+mdaNhso1qHERZyrOP4nwATwTuHwLwqtAxfwHgLgCHASwG8Ouqra4pVk4TNeCezQ1Wp1PgznV4/uTjN0kBDBZFEl55MAoHIVCR5FmjsK0PFr7O+iUA9wM4D8ArAPyFiFgGggIiskFExkVk/MiRI0mWMzf+iSXWEqahV+70SeDOa5kfqEiaWXnQ76NgricqgjwDxSEAFwbuXwBTcwi6HsCdauwH8G8AXmp7MFXdrqojqjqyfPnyVAqctSSWNGV+oOKIW0vwByHYBi/cuc6MmCLKUp6B4tsAVorIRV4H9VthmpmCDgJYDQAi8mMALgbweKalzFGSS5py4l3+XCOZ+gftgxCsFwoKjG9j4Kds5dZHoapnROQ9AL4MoAJgh6o+LCIbvf3bAHwEwF+JyARMU9UHVPVoXmXOWv/SiGYnQaz1Dnxs887f6rH6PoreAbNSnq0vyfme6dxIN6Is5DrhTlX3ANgT2rYt8PthAL+YdbmKYKIG/OgZ9/7eAWD2tEnT8byI4MFx+fnzT+xxR6dFrX3ezJroRO3izOyCumezCQQup58ziQD7B036Dv+kA9ivWjnxrhiamWm9emz+aLZ5xFxMsFZBWWCgKKC7N8Ub6TR7GuhbBLzf0hjHORXlt6oKHPy6I9WHmlFte0f5/lL6uGZ2wUzUIq4ibbgGdse72TaQPKR/0N3XQRQH18wukb2jaKqTmn0Pna9RtlnA1EDvXGeCCudbUNIYKAqmmdFJ7HvoDq6FqeqEZuYzWFBSGCgKpmENwWuGYNK/7uFamCoK585QktiZXTC2sfa+JUPsuOxWroWponDuDCWFgaKAFvTPBQp2UhIQPafCpX9pOmWh7sOmpwKxJQE8cyq/8lBxrB6DPY0mUQYYKAokamEi6m6rqmhqNBzQWnMVkQ2bnnIUXmyI6RooypIh+2dBKoDOWI7n0GlKCGsUObGlkI5qWuBQR3Kti375Bq6XTulioMiJK4W0yz2bUy0OlYBrXfQ3bQUuXW9qFoD5eel6DoCg5LDpKSfNDl2MtcoddTxbUsGJGvDAzrnmJ50x91e8lsGCksEaRU7YfkxJmKgBn13PQRCULgaKnLjam3sX2o/vH0y/TFQufj+XrSMb4IQ7Sg4DRU5c7c1v/mR9Xp+eXjPpjiio0Zrq0sNBEJQM9lHkJDw0Npyag+tJUCONagw6Y2ocAD8/1B4Gihz4TQb+1aCf7dPHIEFxxEnr4fdV8DNE7WCgyME9m+2dj/dsNik7bAGEX3QKi0ogGcS+CmoX+ygyNlFzD3U9NcXRKxRfuJ/Ln0dRR7mYEbWHgSJjrZz0eUVILquqwHsPmOVw37KzfiSdj4sZUTsYKDIWddJ3DYHlnAuKY14Nw4K1U2oVA0XGXCd9f90J5uyhdvg1DFfeMNZOqRUMFBlzTbTzFyeyza1gRzY1y3VBwtoptYKjnjLmn/RdQ2BtuXyImjFRA6ZP2PdNnzD7+RmjZjBQZKzRRDuidoTn6ISdmuKQa2oeA0VGJmpmnkRwaCznSVDSGqX1ADgJj5rHPooM2NbC9nEkCiUpbmc1O7WpGQwUGWh0lccvLSUlbmf1khXmAuZjw8DNPZyQR9FyDRQicqWIPCoi+0XkJscxV4jI/SLysIj8fdZlTEKjfDzM8klJWT0GVPoaH7dyTf1SvJyQRy65BQoRqQD4BICrAFwC4G0icknomHMAbAXwK6r6UwB+Netytmuihsi1sIG5LJ/8klISNGJJXd/DdzBdDMWXZ43ilQD2q+rjqjoN4HYAa0PHvB3Anap6EABU9amMy9gWf/WxqLWwffySUhL2jgKzpxsf58o3xmZQsskzUJwP4InA/UPetqCfBPBCEblPRPaJyHWuBxORDSIyLiLjR44cSaG4zWm0+pgNv6TUrnY/Q5yQRzZ5Bgpbg0z42nsBgMsBvAnALwH47yLyk7YHU9XtqjqiqiPLly9PtqQtiDNMMYxfUmpX3M9Q/yDTxVB8eQaKQwAuDNy/AMBhyzFfUtXnVPUogK8BuDSj8rWl2Ss7fkkpCbYUMWF+yhimi6G48pxw920AK0XkIgD/DuCtMH0SQZ8H8BcisgBAH4BXAfhfmZayRXFWH1syxBnalCz/M/TZ9fZmT6nMDwj8zFEcudUoVPUMgPcA+DKARwDcoaoPi8hGEdnoHfMIgC8BeBDA/wPwKVV9KK8yN6NR7WDJ0Nw6Au89wC8sJWdVFdBZ+z6dAe5cx3kT1BzROGPpSmZkZETHx8fzLgb+ZJljdIkA1+xicKD0fGy4cY22pxe4+lZ+DskQkX2qOmLbx5nZKbKtLwEBRjbyy0npitNXMXva5B8jaoRJAVPUKKU4UVrCnz3XXB7XfAqiINYoUhZc05h9EZSl4GePOlStBgwPAz095mctnY4n1iiIukD/oL324FqnnUqgVgM2bABOehO2JifNfQCoJntFyhoFURe4akt9skCpmJ/MHltSo6NzQcJ38qTZnjAGioQxdTMV0aoqsHbH3AS7/kGgp+LVMpg9tpwOOmb1ura3gYEiQX5+J6ZupiIK9ln0LQJmpufvZ2LKklnhyNeydGni/4qBIkG2/E788lERuVLMMDFliYyNAX2WxUeeeSbxTm0GigQ5v3wNJj4RZc2VPJCJKUukWgUWL67ffvp04v0UDBQJuXsTItedYPMTFYltQl6lD5g+wf61Ujl2zL494X4KBooE3L0JGL8l+hg2P1HRLOif+71vkVkZj53bJePqp3BtbxEDRQL2bW98DNt+E5DR5KJO5w+6CM6rmH6ufmU89q+VwNgYMBCqGg4MmO0JYqBIQJxV7Nj22yZ/ctHkpLn09ScXMVg0zbqolqPZlBc4BVetAtu3A0NDgIj5uX07J9wVkT9xyaWnl4sStS3DyUWdrpnBFbzAKbhazXwHDh40zU1jY4kHCYApPFoyUZtLtta/1AQKV62if9DMimWOpzZNOs5uru3kFPV5DeKqiwXHFB7FFZ5Ud2oKmA1NXJIeYORG4EMKvP8og0TbajVTrbYRYfNTk6KChF87lgpw6Xp+dguNKTyKy9q+G3L2hcCbtmZTnq4wOmr6JWxU2fzUpCVDjh0yF0R0BnhgJ0c9FZqrNs0UHvmL07nHDsCENfrgp/DF6FQTNTNXoo6grkObo54KLKqWnfDQWICBomlxOvf6lzIxYKIaffBT+GJ0ItuwWMBLNe4a9cQuoGJy1bJFEh8aCzBQNG31WH265qCeBeaLyMSACRobA3p77fv6+lL5YnQiV7Np36Lo5ih+dgvIVYtWTWXUEwNFC1zN5f2DwOyZ+u2swrepWgXOOsu+b/HiVL4YnSgqEeDqMZjmpzDlZ7eQXLXoIVfEbw8DRZP2jtbPYAXMFVnfIvffsd+iDbUacMLWsA53rhuqE5UIcFUVnHRXJhnNyPYxUDTJ1WZ7/GD0F4oTl9oQNaophdz7ncqWCDA4V8LV/MTPbgFlNCPbx0DRhIka7NVzmC+T8wslnLjUlqhRTc8+y3kUMa2qAm/ePrfK3ZIhc9+fK9EokFDBVKvAgQPArl3m/rp1qeVAE3U1uJfYyMiIjo+PJ/64Hxt21CgEuMZ7r76wIdRhKMDIRs6raMvwcPQM7KEh84WhtgWzDixZYYIEJ90VVK0GbN4MTIWGsQ0MtFS7EJF9qjpi28cUHk1wNi3p/C8Tv2gJW7MG2LbNPYqA8ygSs6rKz2sphNN3BPmzsxNshmKgaMKSFfYaRbBtl1+0hNVqwM6d7iABcB4FdR9b+o6ghHOgsY+iCbY5FJU+tuGmqtEXIsWRHkSF1agWXWmQ0rpJDBRNCl/YdmAXT3HUao37JlIc6UFUWI1q0TMx0gM3IddAISJXisijIrJfRG6KOO5nRWRGRP5zluULs82hmD3NCUmp8NtgXfwObAaJRE3UmH6mFGzzKIISnniXW6AQkQqATwC4CsAlAN4mIpc4jvsogC9nW8J6UTNbKWFRTU5sbkpFOIU+088UmD+PYnCwfl+HLYX6SgD7VfVxVZ0GcDuAtZbjfgvA3wB4KsvC2fQ75nZxQlIKotpg2dyUClsuKKafKbBqFTh6FNi9O/WJd3mOejofwBOB+4cAvCp4gIicD+AtAF4P4GejHkxENgDYAAArUhgFM1EDpp+t385lTlOyYoW9f2JoiEEiJawxl1S1mvp3Is8ahSMF2TwfA/AB1cYLN6rqdlUdUdWR5cuXJ1G+efaOAjPT9dvPOpvDYVORcS4bcteMmTaf8gwUhwBcGLh/AYDDoWNGANwuIgcA/GcAW0Xk6kxKF+K6qjrFnHTpyDiXDQEr16Du8q3SB/zoGfZbFE6tZjIW9PSklrYjKM9A8W0AK0XkIhHpA/BWAHcFD1DVi1R1WFWHAXwGwCZV/VzmJUV05k1KSbVqahArVpg+i9FR5nVKyUTNLH0artPPTNeP9GO/Rc78EYGTk2Z8/uQkcN11Zu6ECLBgAbBpU6L/MrdAoapnALwHZjTTIwDuUNWHRWSjiGzMq1wuK9c0t50SYPtCbNjAYJGCOGvBB7HfIke2EYGzs+YGmDkUt9ySaLBgUsCYXAkBlwwB7z2Q6L8inysZYKVivhQrVpgaB5uj2nZzD5zrUdjwc5+jnp54M30rFeCMZSU1h6ikgJyZ3YA/ASlqHQpKiWuI7MwMaxgJa6YJlanHcxZ3VGeCs7MZKCLMm4Dk4JpbQQmI84XwM2VSW2xrUbgE17CgHDSale0Tx+I5LWCgiNBsuy0lLO4XgmnG2+YvauRamMs3ciODRO7CIwJdAWHhwsT+JQNFhDjNShwem6LgFyIK04wnIk4AeGwPh8YWgr+6nd+BbfPcc4n9OwaKCHHabTk8NmX+FyIqWHASXmIafZ45j6KAXBdKCV5AMVBEaNRuy/QdGWLzUibi9FVwHkXBZJDFgIEiwqoqcOl6936m78jQ0ohRA+zMTozfV7FkCJH9FRztl7PgzOzRUWD9+lSzGHAp1AjPz1Z1YP9EQbC2kajgcr7O+UNscs1PeL3syUmzXHCKKW5Yo4jQaNQTvywZOhYRldmZnRpbUxTnUeTMNjP75ElTq0hpThEDRYSo6jW/LBlzBQMRdmanKNwUtWSI8yhyFzURNaUJqAwUEVw1Bqnwy5I515wKVSYLTNmqqknX8aFZ85Of+5xF1aBTmoDKQBHBVe1+y05+WTIXnlMRnGTEVB7UTRpNRE2hz46BIgKr3QUWTorGVB7ULfyLpkrFvj+FPjuOemogOAKEchQe6WHD0U+pmKiZgR3HD5rm2NVj/E7kzh/dFP5OpLQKJGsUVA62kR5hHP2UuLs3AXeu4wp3hZThKpCsUTiEr6JWrjF5bnhVlZNGtQWup524iRowvg1161T4M7P5+S+AajWT9VhYo7CYl17cu4oav4VXVbmKqi0MDnI97RTsHYVzMSPOzM6BPxvbX+5UJJP1sgEGCqs46cWZ7yZjY2PudMqLFjFIpCAqGHCyacaCywIDc4sSZTTij4HCIu7VEq+qMlStupd/ZCd2KpzBQDjZNHNRfXQnTwKbN6f67xkoLOJeLfGqKmOuVOPsxE6FNZOsACMb2T+RuUYXQ1NTwLJlTOGRpTiplpnCIwcZpFOmObZ5RCMbzaCOm3tMwkD202UkzsXQ1BRTeGTJ9gW5aDUgwVcrueVoKa5q1SQ+8ycaVSrmPvsnUnPw68AzhwAo8MwTwPgnOagjF2NjQG9v4+NSmngq6mr39Q8QeSmA8wF8S1VPBLZfqapfSrxECRgZGdHx8fHEHm+iBnz+BmBmev72nl7g6ltZDc+MbdLdwABHPKXk7k1mtF8jS4ZMDihK2bJlptbQiEj0EqnOP5N9qjpi2xdZoxCR/wLg8wB+C8BDIrI2sPsPmy5JSe0drQ8SADB7miOfMuVKr8zUHanYtz3ecRzUkZGoVPtBOaTweBeAy1X1hIgMA/iMiAyr6hZ0UeOLbeGW5/fxS5KdSccbwVFPqdCZeMdxUEdGVqxwfwd8OaXwqPjNTap6AMAVAK4SkT9DFwUKiXiV+CXJSK3mnkfBUU+pEEfOuSAO6siQbTBHX5+ZcJpyCo9GgeJ7IvIK/44XNH4ZwDIAqxIvTQFN1ACNaO7jlyQjo6P2eRRcuCg1l2+wb+9dCGZTzlqtNtf06g/mGBoCduwAjh41fRIHDuS2FOp1AL4X3KCqZ1T1OgCvS6VEBRPVB9E/yC9JZlzNS6pmstGyZWah+YxSGnSDN20FRm6cq1lIxdx/8ydNTfr4QfP94KinlNlmZftNTBkN4mg46qmMkhz1dHMPnPlurtnNQJGZ4eHG7bM+joRKjZ8HLZjipneANYtUuT77PT3Abbcl9jlvedRT2kTkShF5VET2i8hNlv1VEXnQu31DRC7NuoyuPgjWJjK2Zk38YzkSKhUTNeCz6+vzoDHvWcpctenZWeD66zs7KaCIVAB8AsBVAC4B8DYRuSR02L8B+AVVfTmAjwCIOWAvOavHgErf/G2VPuCqLVmXpMvt2dPc8RwJlSi/JuEaCcXRfymKGqxx+nQmF0V51iheCWC/qj6uqtMAbgcQnKcBVf2Gqv7Au/tNABdkXEavHNH3KQPNnvg5EipRjTIqc/RfihoN1sjgoijPQHE+gCcC9w9521zeAeCeVEtksXfUTKwL4kS7HDRz4mf+p8RF1Rg4RDZl1aoZAuuSwUVRnoHCNijeeq0uIv8RJlB8wPlgIhtEZFxExo8cOdJyoSZqJtmZn/TMNdmOVe2M2caQ+/MqBgczGUvezVw1BqmwIzsTW7aYORNhvb2ZXBTlGSgOAbgwcP8CAIfDB4nIywF8CsBaVXUmOlHV7ao6oqojy5cvb6lAtpXtXNMKWdXOmG194F27TDvg0aOZjCXvZq6U4zrDIbKZqFaBd7zDjHTyLVwI3HprJp/3PNfM/jaAlSJyEYB/B/BWAG8PHiAiKwDcCWCdqv5r2gWytsNa6jisaucko/WBqZ5fY9g7Gqhle9+N45PA566ffxwlrFYDdu6cn+wvw87S3GoUqnoGwHsAfBnAIwDuUNWHRWSjiGz0DvsggEEAW0XkfhFJLiWsRZzmpP5BVrWpO62qmiyx/Zbm8tnTwD3pLrLW3XJOiJlnjQKqugfAntC2bYHf3wngnVmVZ8mK6ASAANC3iEGCutspRwOwazu1qVbLPSEmFy4KiLOyHTuxC6JWM2k7RMwtxWUgiXLjp+9wyWgYOANFwLyV7RzYiV0AtZqZkRpcxGVqCrjhBgaLDNiangAvWSAly9bk5MtwGDgDRYjfDjtyo33/yiYySVBKRkfNjNSw6Wmm7khJcNi4y+xpjn5KXFR+swyHgTNQODzmyBjh2k4ZimqXZeqOxIWHjbv6ImamORE1UVFrsAwNZToCkIHCYqIWMdEuZgJTSlFUuyxTdySuUfqOIPbhJahAa7AwUIT4V08ucVb9opSNjZkZqTYveUm2ZekCzZz82YeXoKg1WDKeT8RAEdLo6inuOsKUomrVzEi1pTTYuxfYtCn7MnWw2Cd/4UTURC1dat8+FDHaJiUMFCGNrp6iRkRRhqpVs9KXzfbMs9F3tDjDxiHAyEbOMUpMrQY880z99r6+XBJeMlCERF09MXVHAdRqZsWvnh53oHBtp5bMGzburZU9cuP8+9fsMkunUgJqNWD9evvIvsWLc0ljk+vM7CJaPVa/1CNgxo5ftYVXTLnyJx+5xpX7KuxIStqqKj/7mfA/466LnWPHsi2PhzWKEP/qKTipiEGiIKImHwVFzWQlKrJGn/GcRvUxUIRM1Exys+BY8VNTppbByUQ5azRHolIBVq82y6b29JgmKs7UTlx4zRZ+LxIU9RnPaO0JGwaKAH9orG1CEReQLwDX1dTgoBkJMjMDfPWrZjarqvm5YQODRYJsa7bwIipBUTWGs8/OLc0+A0VAo6GxnEyUM9sqd319ZnSIn+ogPEEpw1TM3cD2HeFFVIKiagw59U8ADBTzNBway8lE+bKtcrd4sX10SBDTeiTG9R3hRVRCotbHzjHrAANFAIfGlkC1apY79Zc9jXOVxbQeiXGund3DPovE/Nqv1ed4yjBTrA0DRcDqMaDHkhmCq9oVVK02fw1hm5y/YJ3GlT1ZZ8A+iyT4S54Gm1BFzLyKHJcBZqAICzVx9yzg0NhCihpv7l+NDQ1lmoq5003UgH0xJr2zz6INtuGxqsAdd+RTHg8DRcA9m4HZM/O3zZ7hWsCF5BpvXqkAu3aZL9eBAwwSCfFHO8XNdcY+ixa5+tOmpnIdvcdAEcC1gEvE9YXyaxh+mg/OpUhEM6nGAQ78aFlUf1qOo/cYKKicor5QN9zAuRQJa6aGwIEfbYjqT8tx9B4DRYBrLWDXdsrR2Jh79a/p6fn3T54ENrP9sB3O0U6V+gSBHPjRBg6PLb6rtthHPQEcxVE41ap99S+XnNt4y86Warx3AHjLTpM19r0HgA/Nmp8MEm3asqV+YimHxxbHqipw9a31NQjmeiqoZhdwYa2iZbZkmQv68ytPR7NNLM159B4DRciqKtC3qH47h/wVkC2lh2uJVIC1igScOTX3Oy+gugcDhQXTFJSE7crr1lvdbbwA8z61gXmeMuLPESrQgAwuXOSZqJkP/PGD5pxja/7mkL8CqlbtVfJrr7Ufz7xPLeMFVAb81e3CE0lPnjTbgVyaoFijQH3qZJ2tP6anl0P+SqOgI0fKznWhxAuohGzaBKxbF73Eb041CwYKxJtMFHdGKhVEAUeOlJ1r5BMvoBJQqwHbtjUeyZdT2vxcA4WIXCkij4rIfhG5ybJfROTj3v4HReSyNMoRp+qss+y4K5UCjhwpO3/k0xJvsJlUzAXWZ9cDNwszx7ZldDT+cO8cmk9zCxQiUgHwCQBXAbgEwNtE5JLQYVcBWOndNgC4JY2yxK06s+OuZMIpyRkkWuYvf3rnOmD6hGmK9WvZ/k9mjm1DMyf/HJpP86xRvBLAflV9XFWnAdwOYG3omLUAblPjmwDOEZFzky6IrUrtwo67gqvVmOcpYeE+vFNTwKxjrSheTLUo7sk/p+bTPAPF+QCeCNw/5G1r9pi2zatSizepyJEdgh13BVbAYYWdoNmEgLyYiil4UXPihFnWN0qOzad5BgrbqTjcSBfnGHOgyAYRGReR8SNHjjRdmFXVuTQE7z8KXLOLHXelY0s97g8rZA2jZc2e+HkxFUP4omZqKrqPQiTX5tM8A8UhABcG7l8A4HALxwAAVHW7qo6o6sjy5cvbLly4lsFkZyUQlXqcNYyWNXPi58VUTLaLmtOn3Ykucx7WnWeg+DaAlSJykYj0AXgrgLtCx9wF4Dpv9NOrARxX1SezKmCwlsFkZyUQ58vk1zAYLGKz9eFV+ubyPknF/OTFVIRw39nkpP04W62itzf3Yd25zcxW1TMi8h4AXwZQAbBDVR8WkY3e/m0A9gBYA2A/gJMArs+rvFQCY2NmLYpwmvEwf+ISwJFQMfgnfj9zwZIVJngwIMTkNzP5NYjJSXf6B5uzz879cyraTKrmkhgZGdHx8fG8i0F5WLbMtPfGMTRk2n2J0hRVg4hDxAzxTpmI7FPVEds+zsymznLsWPxjmfeJstDu56wAaWcYKKizNPOlKsAXkLpAO5+zgqSdYaCgzuJaoyI8Rr0gX0DqArbP5MCAO3FlpVK4tDMMFNRZwjmeBgdNZ+D0tPkCAoX6AlIXcOUdcyWu3LmzcGln2JlNnSs82gQwX0QGCSqKWs3MqTh40DRRjY3l9tlkZzZ1J9dMba5yR0VQoCDRCFe4o87lGm3C0U6UN9vcigLP7WGNgjqXa7QJRztR3kpW22WgoM5lG20CAEePMoUH5WfTJvcEvILWdhkoqHNVq3ML0gc99xxw/fUMFpQdP9eTCHBLxPprBa3tMlBQZ9uzx7799OnCVvOpwwRTikcp8NweBgrqbFFV+Xby7xDFZeuPsCnwsG0GCupsUVV5fwIeUZri9DtUKoUNEgADBXW6qKr8zEx25aDuFaffwR8aW1AMFNTZqlV3Tp2hoWzLQt3JNfrOt3AhsHVrduVpAQMFdT5XTp2CdhxSh/FzPbnE6b/IGQMFdT7/ixqsWYgAmzebnwsWmJ/DwxwyS+mIqtkWdEhsEFN4UPc4dWru9+eeMzdgrq+i4GkUqMQ2bbKvvFiA9bDjYPZY6g7NLEfJJVIpSbUasG6dfY3swUGTKaAAmD2WqJnUCAVNo0AlNTpqDxJAc0v35oiBgroDl0ilvERdeJTks8ZAQd2h0RBFH0dDUdKWLnXvK8lnjZ3Z1B38zun1690T7SqV+ame2aFNaVq4sDSfMdYoqHtUq2Y94nDNorcX6OurH/3EobKUBFc/RAnmT/gYKKi72Ba6P/tsYHp6/nEFXkSGSqRWA3ocp9mS9E8ADBTUjapVM/x1dtb8dF3xcfQTtcNPL25r6ixZXxgDBZHryq6nx9w4Y5ta4UovXqkUOqW4DQMFkWtE1MyMGf8+OWkmTG3alH3ZqLxcNdLZ2VIFCYCBgqi+38K2ToUqsG0baxbUmL/sqWuSXYn6JnwMFES1mmkmOHjQfIldw2dV2cFN0Rote1qyvglfLoFCRJaKyFdE5DHv5wstx1woIn8nIo+IyMMisjmPslKHC36x/WamKOzgpihRy54ODZWub8KXV43iJgB7VXUlgL3e/bAzAN6nqi8D8GoA7xaRSzIsI3WDuOsZ+0rYbEAZqdXcFxoiZoRdCYMEkF+gWAtgp/f7TgBXhw9Q1SdV9Tve788CeATA+VkVkLpEMzWEvj7gxAmOhKJ6fs3UJSqNRwnkFSh+TFWfBExAAPCiqINFZBjAzwD4VsQxG0RkXETGjxw5kmRZqZPFrSEMDpqmqampuSYqzt4mX6Oa6bPPlvqzklqgEJF7ReQhy21tk4+zCMDfAHivqj7jOk5Vt6vqiKqOLF++vN3iU7eImywQAE6fnn+fs7fJH+HUqG9rerrUn5XUkgKq6htc+0Tk+yJyrqo+KSLnAnjKcVwvTJCoqeqdKRWVupnfZjw6Gv1lt61OBrBzu5v5zU1x+7hK/FnJq+npLgDrvd/XA/h8+AAREQB/CeARVf2zDMtG3cZP6TE01PzfsnO7e3XRQIi8AsUfA3ijiDwG4I3efYjIeSKyxzvmtQDWAXi9iNzv3dbkU1zqCs00QwFmJMsafiS7VjM1hJLOn/Dlsh6Fqk4BWG3ZfhjAGu/3/wtAMi4adbNGa1YsXGiuIP0Zt6ombflrX1vaYY/UhhUr4q3DPjRkgkSJPyOcmU0U5FqzYmAAeMEL6tMysEO7e8Wpge7eXer5Ez4GCqIw25oV27czHTkZ/kindeuA/n73ehODg6UPED4GCiKb8JoV1aq7M7LEnZTUpFoNuOGGuZQvU1PmMxI2MABs2ZJ9+VLCQEEUl6vjmh3a3WPz5vrVEH3idamWOKeTSy6d2USltGdPc9up87jm0wCmhjE0ZGqgHYY1CqK4XH0R7KPoTH5fRDO5vTr0s8BAQeQSPlG4Eruxj6Lz2NLPb9hghkhH6ekpdU4nFzY9EdmE0zNMTprssb2983M+lXwiFTnYZl2fPGlGMk1P1+f98s3MzGWR7aA+CtYoiGxsJ4rpaeDss83Jwtffn225KBuuJqRjx4Bbb41O99KBc2sYKIhsXCeKqSng1Kn595luvPNEDYX2h06rzo10CuuwvgoGCiIb14miUrE3SXTYFWTXs826tjUzdsncGgYKIhvXicKWAwowfRjNjpCh4qpWgde8Zv6217ymvt8hbkApOQYKIhtXGg9X27RI/QgZBovy2rQJ2Lt3/ra9e4Gzzpr/vro+Jx3UkQ0AouEkZx1gZGREx8fH8y4GdSLbYjUi9ckCgY6dfNUVFixw1x57e02HdqcFA5F9qjpi28caBVEzgleQgOmzcF1sTU6yVlFWriABmKGxXdYnxUBB1Kxq1eR3Eok+oQDAtdcCy5YxYJRNpRK9v8NGNTXCQEHUrFoN2LbNXZMI4xDa4nKl6fAnzbl02KimRhgoiJo1Oho/SPg4hLZ4XGk6ajVg61Zgdd0inEZvb8eNamqEgYKoWa02O3RZc0XhudJ0+AH93nvNCnXBmfiDgx3Zkd0IAwVRs6KaHfr6Wvs7yp4rcE9OmuGx/ip2ixaZgKEKHD3adUECYKAgap5tkpUIcOONwI4d869AfR04Cav0ogL3LbdwXkwAAwVRs8KTrAYHTQrybdtMs8WWLeYKtMMnYZWeLeC7dHkfEwMFUSv8xHC7dpkkgVNT868+gfo1t4NaWRSHkuUH/Lj8NC1d+F4xUBC1w9Uh+pu/6Q4EttE269aZdnHKVrUanTI8rEuboZjCg6gdPT3xhsr6aT6GhoATJ+xrL4uYGgqbqLJlS8vSSAemZ2EKD6K0xB3J5AeTyUl7kPCP6eJ28NzYEvvdeGN0TaPLhjozUBC1I+mRTF12AspNuI8ImN+ntHWr+ekKFl021JmBgqgd1ap9OGyruuwElIuoGdlhXbLeRCMMFETt2rIl/jBL38KF9ctoduEJKDPBGsT69fFXKeyS9SYaySVQiMhSEfmKiDzm/XxhxLEVEfknEflilmUkiq1RG7ctIHzyk6bjOlgb6e/PrszdJFyDcGX8dTX7+UOhXUOdu0BeNYqbAOxV1ZUA9nr3XTYDeCSTUhG1KngyGRsD9uwxJ56hIWDjRvsV6de/Dhw7NvcY4SyznGuRDNsQZhs2+7mpauY3AI8CONf7/VwAjzqOuwAmkLwewBfjPv7ll1+uRLnYvVt1YEDVXLua28CA2R4+TmT+cf5taMjs7+2dv723t/5xqN7u3eY1FDE/ba+x7TY42NWvL4BxdZxTc5lHISJPq+o5gfs/UNW65icR+QyAPwKwGMDvqOovRzzmBgAbAGDFihWXT05OJl5uooaGh00TR1h43L3rOMDUPJYutQ+jXbjQzMMgu1bmRAQNDHRlHwSQ0zwKEblXRB6y3NbG/PtfBvCUqu6Lc7yqblfVEVUdWb58eVtlJ2qZq507vD1qGGxPj3uuxXPPdW8TVFRTnL/v2mvjB4key+mvy3M6uaQWKFT1Dar605bb5wF8X0TOBQDv51OWh3gtgF8RkQMAbgfwehHZnVZ5iRLhaucOb49qD2+0vGqcE1mn9W9EDWkN7mvG7Kx9O+ey1MmrM/suAOu939cD+Hz4AFX9r6p6gaoOA3grgK+q6rXZFZGoBXHH3TeTuTTMT07nCgLNzBMog1otekhr3M7qMNe62OzUrufqvEjzBmAQppP6Me/nUm/7eQD2WI6/AuzMprIId6a6Okj94+J2tvq3cCd4uLPc9ZhDQ6k/9cTZBgeEXwvXoICo28CA6o03xht40CVQtM7stDEpIJVKVMd2XMHOcleiQhF3c0tRNXptopIsuixcaOaxVKumtjI6apqbVqwwNb0u7MgGmBSQqNjaaYbyBU+mcftJ8ubqRwlujwoSAwPAmjXAs8/G+3+VipkIeeLEXDDgZLpYGCiI8mab2d1s/qhge3vcfpI8O7xd/SibNs3f7lKpmNdszx5gejr6fw0Nmcc6c8Yk+6PmudqkynxjHwWVXqO2edst2DcyOGhurn6SuBMD0+LqR6lU4vUv+OVs5liKBPZREJVQsP28pyd62OzgoFmSNTj6J2ryWNyJgWmJu+BT2OCgScLo9y+sWxf9OKtXA/fe23o5uwj7KIjKKNh+vnNnfXLBoGPH4mdEBeJPDARab6KK6oOwTXYD3ENWfadOzT3G+vWNg81Xv1reYcFF4qpqlPnGpifqSDfe2PxQUBH7Y0UNyw02VbXaROX6O9uQVP/W1xe9P5iTqZlmuTIOC84B2PRE1CE2bQK2bYvfbONqSmqUE8lvthodba2JytW0Vam4m9B6e4FbbzW/u/5vK8o4LDgHUU1PDBREZdLMnAtbH0Ww32PpUrPNNQch6qTe6OTbah9EMAAlMb8k/JjkxD4Kok4RNw9RcN0Lv69AxHT++kNPp6bm2vxtZmbc/SL+nIxgP8SyZebW0+Pug2hkcnKuT2PNmubml9jKylUDE8FAQVQmcSbN+SdHP0jccMPclXn4Kv/kyegOZNX6E7CIebxly4Drr58feKamzO+NEhtGUW9exc6dpsM6joEBs2Lg7t1dv2xpGtj0RFQmcddb8Jtbli1rLr1F1ONNTpoTcJbnDH85WVd/x+xs16feSAqbnog6RXgWt4vfRJVUkDhwYG6Gc5YOHnTPNN+5k6k3MsJAQVQ2wfkV/hV3WFJ5nYJt/Hms07BihT3FCZuUMsVAQVRmjfI6NZszymc7IWedVDD4PJi8L1cMFERl1uhqe8sWMz8hqLfXdPpG8U/IgOnn8DuwszI4yFpDgTBQEJVd1NV2tWomsQUDya23mu2u2oa/3R8xFaefY3Cw9VTpg4Pzy7d7N3D0KINEgTBQEHUqf47DunXm/q5d8wPJli1AX9/8v+nrM9sBMzGvUQpv37Fj82s2g4P1cyl6eur/38CA+X9sVio0BgqiThRn3exqFdixY/7V/I4dcyfqZjqv/U5n/4R/9Chw223zH/u22+r/H5uXSoHzKIg6URJpxOOm0IhKZ06lwXkURN2mmTTiLmNj9U1FYex07goMFESdKIl1s/2mqWCntz/Jj53OXYWBgqgTxV03u5Fq1QQDf3WH2Vnzk53OXYWBgqgTcTYzJWhB3gUgopRUqwwMlAjWKIiIKBIDBRERRWKgICKiSAwUREQUiYGCiIgi5RIoRGSpiHxFRB7zfr7Qcdw5IvIZEfkXEXlERF6TdVmJiLpdXjWKmwDsVdWVAPZ69222APiSqr4UwKUAHsmofERE5MkrUKwFsNP7fSeAq8MHiMjZAF4H4C8BQFWnVfXpjMpHRESevALFj6nqkwDg/XyR5ZgXAzgC4FYR+ScR+ZSILMyykERElGKgEJF7ReQhy21tzIdYAOAyALeo6s8AeA7uJiqIyAYRGReR8SNHjiTwDIiICMhpPQoReRTAFar6pIicC+A+Vb04dMyPA/imqg57938ewE2q+qYYj38EQBIL/C4DcDSBx8kbn0ex8HkUSyc8jySew5CqLrftyCvX010A1gP4Y+/n58MHqOr3ROQJEblYVR8FsBrAP8d5cNeTbZaIjLsW8igTPo9i4fMolk54Hmk/h7z6KP4YwBtF5DEAb/TuQ0TOE5E9geN+C0BNRB4E8AoAf5h1QYmIul0uNQpVnYKpIYS3HwawJnD/fgCljvRERGXHmdnRtuddgITweRQLn0exdMLzSPU55NKZTURE5cEaBRERRWKgCBCRXxWRh0VkVkScfSMicqWIPCoi+0XEObcjL03k0jogIhMicr+IjGddTptGr60YH/f2Pygil+VRzkZiPI8rROS499rfLyIfzKOcjYjIDhF5SkQecuwvy/vR6HkU/v0QkQtF5O+8vHcPi8hmyzHpvB+qypt3A/AyABcDuA/AiOOYCoDvwswc7wPwAIBL8i57qIx/AjPnBDCTFD/qOO4AgGV5l7eZ1xZmsMM9AATAqwF8K+9yt/g8rgDwxbzLGuO5vA5m4utDjv2Ffz9iPo/Cvx8AzgVwmff7YgD/mtX3gzWKAFV9RM2cjSivBLBfVR9X1WkAt8PkriqShrm0CirOa7sWwG1qfBPAOd6kzSIpw2ckFlX9GoBjEYeU4f2I8zwKT1WfVNXveL8/C5Mk9fzQYam8HwwUzTsfwBOB+4dQ/2blLU4uLQBQAH8rIvtEZENmpXOL89qW4fWPW8bXiMgDInKPiPxUNkVLXBnej7hK836IyDCAnwHwrdCuVN6PvGZm50ZE7gXw45Zdo6paN0Pc9hCWbZkPHYt6Hk08zGtV9bCIvAjAV0TkX7wrr7zEeW0L8fo3EKeM34FJmXBCRNYA+ByAlWkXLAVleD/iKM37ISKLAPwNgPeq6jPh3ZY/afv96LpAoapvaPMhDgG4MHD/AgCH23zMpkU9DxH5voicq3O5tJ5yPMZh7+dTIvJZmCaTPANFnNe2EK9/Aw3LGPyCq+oeEdkqIstUtWw5h8rwfjRUlvdDRHphgkRNVe+0HJLK+8Gmp+Z9G8BKEblIRPoAvBUmd1WR+Lm0AEcuLRFZKCKL/d8B/CIA64iQDMV5be8CcJ03uuPVAI77zWwF0vB5iMiPi4h4v78S5rs4lXlJ21eG96OhMrwfXvn+EsAjqvpnjsPSeT/y7skv0g3AW2Ai8o8AfB/Al73t5wHYEzhuDcyIg+/CNFnlXvbQ8xiEWTnwMe/n0vDzgBmR84B3e7goz8P22gLYCGCj97sA+IS3fwKO0Wl532I8j/d4r/sDAL4J4D/kXWbH8/g0gCcBnPa+G+8o6fvR6HkU/v0A8HMwzUgPArjfu63J4v3gzGwiIorEpiciIorEQEFERJEYKIiIKBIDBRERRWKgICKiSAwURBlolL2UqMgYKIiy8VcArsy7EEStYKAgyoB2QPZS6l4MFEREFImBgoiIIjFQEBFRJAYKIiKKxEBBlAER+TSAfwRwsYgcEpF35F0moriYPZaIiCKxRkFERJEYKIiIKBIDBRERRWKgICKiSAwUREQUiYGCiIgiMVAQEVEkBgoiIor0/wEQ/bRftnlgigAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Plot some span of solutoins, including the one that minimizes connectedness \n", "import operator\n", "idx, value = min(enumerate(det_arr), key=operator.itemgetter(1)) #Where the connectedness metric minimized\n", "\n", "toPlot = [0, 1, 4, 9, 14, 29, idx]\n", "for ind in toPlot:\n", "\n", " fig = dataObj.plot_data('parent', class_labels=c_MV_arr[ind].labels['majority_vote'])\n", " plt.title('Majority vote across %d solutions'%(ind+1))\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.10" } }, "nbformat": 4, "nbformat_minor": 2 }