Skip to content
Snippets Groups Projects
AClusteringExample.ipynb 39.5 KiB
Newer Older
  • Learn to ignore specific revisions
  • Franka Ludig's avatar
    Franka Ludig committed
    {
     "cells": [
      {
       "cell_type": "code",
    
    Franka Ludig's avatar
    Franka Ludig committed
       "execution_count": 1,
    
    Franka Ludig's avatar
    Franka Ludig committed
       "id": "chicken-minneapolis",
       "metadata": {},
       "outputs": [],
       "source": [
        "import numpy as np\n",
        "import matplotlib.pyplot as plt\n",
    
        "from sklearn.cluster import KMeans\n",
    
    Franka Ludig's avatar
    Franka Ludig committed
        "from sklearn.cluster import Birch\n",
        "from ipywidgets import interactive"
    
    Franka Ludig's avatar
    Franka Ludig committed
       ]
      },
      {
       "cell_type": "markdown",
       "id": "modified-bookmark",
       "metadata": {},
       "source": [
        "## My Dataset"
       ]
      },
      {
       "cell_type": "code",
    
    Franka Ludig's avatar
    Franka Ludig committed
       "execution_count": 22,
    
    Franka Ludig's avatar
    Franka Ludig committed
       "id": "chicken-marshall",
       "metadata": {},
       "outputs": [
        {
         "data": {
    
    Franka Ludig's avatar
    Franka Ludig committed
          "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWoAAAD4CAYAAADFAawfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAS2ElEQVR4nO3dfYxc5XXH8d9Zr50ARWCttyHFrM3Kqv8IEsUewVIiFEKCmhYFqaUSwWkbVMt9QRG0laq0f6CW/yolVfpiJbKcpknrkBcDDUKASBVHUaSuox1DEsBQuRsWTKGY7Ya3VHjXc/rHzi7DMLNzx3tfzjPz/UgWOztXs+fhSr/73HOfe8fcXQCAuEaqLgAAsDaCGgCCI6gBIDiCGgCCI6gBILjRIj50y5Ytvn379iI+GgAGUr1ef8Xdxzu9V0hQb9++XTMzM0V8NAAMJDOb6/YerQ8ACI6gBoDgCGoACI6gBoDgMgW1mV1oZofN7GkzO25mVxddGABgWdZVH38n6RF3v9nMNkk6t8CaAAAtega1mV0g6VpJn5Ikdz8t6XSxZQHoV31uQdOz85qaHNPubZurLgc5yjKjvlTSKUlfNrPLJdUl3eHub7ZuZGb7JO2TpImJibzrBLCG+tyC9hyc1umlhjaNjujQ3inCeoBk6VGPStol6QvufoWkNyV9pn0jdz/g7jV3r42Pd7y5BkBBpmfndXqpoYZLi0sNTc/OV13SO9TnFrT/yAnV5xaqLiVJWWbUJyWddPejzdeH1SGoAVRnanJMm0ZHtLjU0MbREU1NjuX+N9ZqrfR6j9n++vQMand/ycyeN7Od7v6MpOslPVV8aQCy2r1tsw7tnSqsR71W2PYK4k6zfYK6P1lXfXxa0qHmio9ZSbcVVxKAs7F72+bCArBb2NbnFvT5f//PNYO4jNn+oMsU1O7+uKRasaUAiKBTG6NT2K7MpN9abMgljZg6BnHRs/1hUMjT8wCkqVsbo1PY7j9yQqeXmiEt6ZodW3TnR365YxCvZ7bPskOCGkCLtfrJ7WHbPsvuFtLrwYXIZQQ1gFX99JPLaGlwIXIZQQ1gVb/hW+QFTCmtC5FFtmjM3XP9QEmq1WrON7wAyEMKPeo8WjRmVnf3jos2mFEDQyiF8FtR9Kw9D0W3aAhqYMi0zv5GzHT3TZfp1quKfz5PSgeHfhXdoiGogSHTOvtruOuubz+hnRedX2h4DvrqjaIvrPINL8CQmZoc04jZ6utGw8/qIU79PGgp+kOj8rB722bdft2OQg5ABDUwZHZv26y7b7pMoyOmEUmbNvZ/qr4yQ/7co89oz8HpnmG90hrY0OXuRayN1gcwhG69akI7Lzr/rE/V+714xm3k60NQA0NqPaspzubiWQqrN6IiqAH0jRlyuQhqAGeljBnyIC/p6wdBDSCkQV/S1w9WfQAIqcwlfdG/05EZNYCQynogUwozd4IaQEhlXbBM4VGqBDWAsMq4YJnCo1QJagBDLYWlhgQ1gKEX/WYcVn0AKE2W1RXRV2BUgRk1gFJkWV2RwgqMKjCjBlCKLOuiozwONdqsnhk1gFJkWV0RYQVGxFk9QQ2gFFlWV0RYgRFxXTVBDaA0WVZXlLUCo9sDnyLM6tsR1ACGzlrtjQiz+nYENYCh06u9EW1dNas+AAyd1L7DkRk1gKETsb2xlkxBbWbPSnpd0hlJS+5eK7IoAIOv6m9vidbeWEs/M+rr3P2VwioBMDQirlVeryIPPLQ+AJQu4lrl9Sj6wJP1YqJLetTM6ma2r9MGZrbPzGbMbObUqVO5FQhg8KR2Ma+Xom99zzqj/qC7v2BmvyjpO2b2tLt/v3UDdz8g6YAk1Wo1z7VKAAMltYt5vRR9k4y595epZvZXkt5w989226ZWq/nMzMw6SwOAdKy3R21m9W4LNXrOqM3sPEkj7v568+cbJN3ddxUAMMCKXEWSpfXxPkn3m9nK9l9z90cKqQYA8C49g9rdZyVdXkItAIAOuIUcAIIjqAEgOIIaAIIjqAEgOIIaAIIjqAEgOIIaAIIjqAEgOIIaAIIjqAEgOIIaAIIjqAEgOIIaAIIjqAEgOIIaAIIjqAEgOIIaAIIjqAEgOIIaAIIjqAEgOIIaAIIjqAEgOIIaAIIjqAEgOIIaAIIjqAEgOIIaAIIjqAEgOIIaAIIjqAEgOIIaAILLHNRmtsHMHjOzB4ssCADwTv3MqO+QdLyoQgAAnWUKajPbKuk3JB0sthwAQLusM+rPS/pzSY3iSgEAdNIzqM3sRkkvu3u9x3b7zGzGzGZOnTqVW4EAMOyyzKivkfRxM3tW0tclfdjM/rV9I3c/4O41d6+Nj4/nXCYADK+eQe3uf+HuW919u6RbJH3X3T9ZeGUAAEmsowaA8Eb72djdvyfpe4VUgsrV5xY0PTuvqckx7d62uepyADT1FdToT0rBV59b0J6D0zq91NCm0REd2jsVvmZgWBDUBUkt+KZn53V6qaGGS4tLDU3PzoeuFxgm9KhzUJ9b0P4jJ1SfW1j9Xafgi2xqckybRke0waSNoyOamhyruiQATcyo16nbzHkl+BaXGkkE3+5tm3Vo71QyrRpgmIQM6pR6u91aBikG30rdAGIJF9Sp9XY7zZxbDzS3X7ej6hIBJC5cUKd2Uat95iyp8ANNSmccANYvXFCn1tuV3tky2H/kxOqB5q3Fhu49djLXME3tjAPA+oVb9bEyQ/3TG3YmGUJTk2MaHTFJkks6XD/5jtUg65XaahIA6xcuqKXlsL79uh3JhbS0XPtv1y6RNV+fOZNvmLKMDhg+4Vofg+A3d23VvcdOFtK+SXE1CYD1MXfP/UNrtZrPzMzk/rkp4YIfgH6YWd3da53eY0ZdENYkA8hLyB41AOBtBDUABEdQA0BwBPUQ6/TUPwDxcDGxYlWtDuEORyAdSQd11Uvg1vv3qwzL1J6pAgyzZIO66hlhHn+/yrBM8ZkqwLBKNqirnhHm8ferDMtudzhWfZYC4N2SDeqqZ4R5/P2qbwdvvymn6rMUAJ0lG9QRQm69fz/a7LXqsxQAnSUb1NLZ3aadZziu5zbxiLPXqs9SAHSWdFD3K1I4Rpy9rpwl3HfspPJ/VBeAszVUN7xEeuh+5OdK33vspL7+w+e05+A0N8MAASQ1o15v22Ll21cWz7g2jFil4Vh1j72biDN9YNglE9S5tS3MJHnzv9WK+ChU+tRAPMkEdR4zvenZeS2dacj19ldkRQvKqkWd6QPDLFRQr9XayGOmx2wxm4gzfWCYhfkqriytjTyW1kVbu5xVqnUDyCaJr+LK0trIY6aX4mwx0rJCAOXruTzPzN5rZj80sx+Z2ZNm9tdFFBJ5uVrVIi0rBFC+LDPqtyR92N3fMLONkn5gZg+7+3SehXARq7u1euu0RIDB1zOofbmJ/Ubz5cbmv0JuXEuxLVGGtZ50R0sEGHyZetRmtkFSXdIOSfvd/WiHbfZJ2idJExMTedYIdT6IcXMKMBwy3ULu7mfc/VckbZV0pZld1mGbA+5ec/fa+Ph4zmWiE/r6wHDoa9WHu//MzI5I+jVJTxRTErKirw8Mh55BbWbjkhabIX2OpI9K+pvCK0Mm9PWBwZdlRv1+SV9p9qlHJH3T3R8stiwAwIosqz5+LOmKEmoBAHQwVM+jBoAUEdQAEBxBDQDBEdQAEBxBDQDBEdQAEBxBDQDBEdQAEBxBDQDBEdQAEBxBDQDBEdQAEBxBDQDBEdQAEBxBDQDBEdQAEBxBDQDBEdQAEBxBDQDBEdQAEBxBDQDBEdQAEBxBDQDBEdQAEBxBDQDBEdQAEBxBDQDBEdQAEBxBDQDBEdQAEBxBDQDB9QxqM7vEzI6Y2VNm9qSZ3VFGYQCAZaMZtlmS9GfufszMzpdUN7PvuPtTBdcGAFCGGbW7v+jux5o/vy7puKSLiy4MQLHqcwvaf+SE6nMLVZeCHrLMqFeZ2XZJV0g62uG9fZL2SdLExEQetQEoSH1uQXsOTuv0UkObRkd0aO+Udm/bXHVZ6CLzxUQz+wVJ90q6091fa3/f3Q+4e83da+Pj43nWCCBn07PzOr3UUMOlxaWGpmfnqy4Ja8gU1Ga2Ucshfcjd7yu2JABFm5oc06bREW0waePoiKYmx6ouCWvo2fowM5P0JUnH3f1viy8JQNF2b9usQ3unND07r6nJMdoewWXpUV8j6Xck/cTMHm/+7i/d/aHCqgJQuN3bNicb0PW5haE6yPQManf/gSQroRYA6GkYL4RyZyKApJR5ITTKEsa+lucBQNVWLoQuLjUKvRAaaeZOUANISpEXQlt7351m7gQ1AGRUxIXQ9hn0XTd+oJSZexYENQDo3b3vhZ+fDrOEkaAGsGrYlr216tT7jrKEkaAGICnWxbOzsd6DTK/ed5UHMYIagKTOy95aAynybDuvg0y3GXTVBzHWUQOQtPbzP1aC6nOPPqM9B6crX1fcrui11VU/xIoZNQBJa5/6R1qq1knRa6vLWrvdDUENYFW3U/+qg6qXoh8yVfVDrMzdc//QWq3mMzMzuX8ugOqU1aOO3AsvkpnV3b3W6T1m1AAyKWOpWtUX7aLiYiKAMKq+aBcVM2oAlWptdUTvhVeFoAZQmU6tjii3bbfWWHU9BDWAynRqddx+3Y4QAS29fSB5a7GhDSOmu2+6TLdeNVF6HfSoAVQm+pfsTs/O663FhlzSUsN117efqORmH2bUACpT9frkXqYmxzRi0pnmKuaGeyU3+xDUACrVvuwvQk+4lbUk9eiGamb9BDWAMKKto56enVejsRzSJunm3VsrqYceNYAwoq2jbu2hv2fjiH5r19ZK6mBGDWBV1W2HPNdR5zGWKD10nvUBQFKctkMeAbuesVR1sOJZHwB6ivIo0zyeKXK2Y4lysGpHjxqApPhrmvuRZSz1uQXtP3LiHeuio/XIVzCjBiApTj82D1m+/7DTzDnqs0YIagCronzrdh7WGku31kjUgxVBDQywqldxRLXWzDniwYqgBgZU1AtjEUSdOXdDUAMDKsoqjqhaZ87RzzwIamBARb0wFk0KZx49g9rM/knSjZJedvfLii8JQB5SO72vSgpnHllm1P8s6R8lfbXYUgDkLeKFsWhSOPPoGdTu/n0z215CLQBQuhTOPHLrUZvZPkn7JGliovyvqgGAsxX9zCO3W8jd/YC719y9Nj4+ntfHAsDQ41kfABAcQQ0AwfUMajO7R9J/SNppZifN7PeLLwsAsCLLqo9PlFEIAKAzWh8AEFwhX8VlZqckzWXcfIukV3IvojqMJ7ZBG480eGMa1vFsc/eOS+YKCep+mNlMt+8JSxHjiW3QxiMN3pgYz7vR+gCA4AhqAAguQlAfqLqAnDGe2AZtPNLgjYnxtKm8Rw0AWFuEGTUAYA0ENQAEV1pQm9mzZvYTM3vczGY6vG9m9vdmdsLMfmxmu8qq7WxkGM+HzOzV5vuPm9ldVdSZlZldaGaHzexpMztuZle3vZ/a/uk1ntT2z86WWh83s9fM7M62bZLZRxnHk9o++hMze9LMnjCze8zsvW3vv8fMvtHcP0f7es6/u5fyT9Kzkras8f6vS3pYkkmaknS0rNoKGs+HJD1YdZ19jOcrkvY2f94k6cLE90+v8SS1f9pq3yDpJS3fIJHsPsownmT2kaSLJf1U0jnN19+U9Km2bf5Y0hebP98i6RtZPz9S6+MmSV/1ZdOSLjSz91dd1DAwswskXSvpS5Lk7qfd/WdtmyWzfzKOJ2XXS/ovd2+/+zeZfdSm23hSMyrpHDMblXSupP9ue/8mLU8gJOmwpOvNzLJ8cJlB7ZIeNbN689tg2l0s6fmW1yebv4uq13gk6Woz+5GZPWxmHyizuD5dKumUpC+b2WNmdtDMzmvbJqX9k2U8Ujr7p90tku7p8PuU9lGrbuOREtlH7v6CpM9Kek7Si5JedfdH2zZb3T/uviTpVUmZvqCxzKD+oLvvkvQxSbeb2bUl/u0i9BrPMS2fyl0u6R8k/VvJ9fVjVNIuSV9w9yskvSnpM9WWtC5ZxpPS/lllZpskfVzSt6quJQ89xpPMPjKzzVqeMV8q6ZcknWdmn8zr80sL6uYRR+7+sqT7JV3ZtskLki5peb21+buQeo3H3V9z9zeaPz8kaaOZbSm90GxOSjrp7kebrw9rOehapbR/eo4nsf3T6mOSjrn7/3R4L6V9tKLreBLbRx+R9FN3P+Xui5Luk/Srbdus7p9me+QCSfNZPryUoDaz88zs/JWfJd0g6Ym2zR6Q9LvNK9dTWj51eLGM+vqVZTxmdtFK/8nMrtTy/+tMO6Vs7v6SpOfNbGfzV9dLeqpts2T2T5bxpLR/2nxC3dsEyeyjFl3Hk9g+ek7SlJmd26z5eknH27Z5QNLvNX++WdJ3vXllsZfcvoW8h/dJur/5/3xU0tfc/REz+0NJcvcvSnpIy1etT0j6uaTbSqrtbGQZz82S/sjMliT9n6Rbsu6Uinxa0qHmqeispNsS3j9S7/Gktn9WJgUflfQHLb9Ldh9lGE8y+8jdj5rZYS23a5YkPSbpgJndLWnG3R/Q8sXtfzGzE5L+V8u9+Uy4hRwAgou0PA8A0AFBDQDBEdQAEBxBDQDBEdQAEBxBDQDBEdQAENz/A4NdTb2jS2CRAAAAAElFTkSuQmCC\n",
    
    Franka Ludig's avatar
    Franka Ludig committed
          "text/plain": [
           "<Figure size 432x288 with 1 Axes>"
          ]
         },
         "metadata": {
          "needs_background": "light"
         },
         "output_type": "display_data"
        }
       ],
       "source": [
        "rng = np.random.default_rng(seed=1)\n",
        "x = 7 + rng.random(20)\n",
        "x = np.append(x, 5 + rng.random(20))\n",
    
    Franka Ludig's avatar
    Franka Ludig committed
        "x = np.append(x, 7 + rng.random(20))\n",
    
    Franka Ludig's avatar
    Franka Ludig committed
        "y = 5 + rng.random(20)\n",
    
    Franka Ludig's avatar
    Franka Ludig committed
        "y = np.append(y, 3 + rng.random(20))\n",
        "y = np.append(y, 1 + rng.random(20))\n",
    
    Franka Ludig's avatar
    Franka Ludig committed
        "plt.plot(x, y, '.')\n",
        "\n",
        "data = np.stack((x, y), axis=1)\n",
        "data_1D = np.append(x, y)\n",
        "# print(data)"
       ]
      },
      {
       "cell_type": "markdown",
       "id": "prepared-republic",
       "metadata": {},
       "source": [
        "# Manual K-Means"
       ]
      },
      {
       "cell_type": "code",
    
    Franka Ludig's avatar
    Franka Ludig committed
       "execution_count": 3,
    
    Franka Ludig's avatar
    Franka Ludig committed
       "id": "generic-dating",
       "metadata": {},
       "outputs": [
        {
         "data": {
          "text/plain": [
    
    Franka Ludig's avatar
    Franka Ludig committed
           "<matplotlib.collections.PathCollection at 0x131775280>"
    
    Franka Ludig's avatar
    Franka Ludig committed
          ]
         },
    
    Franka Ludig's avatar
    Franka Ludig committed
         "execution_count": 3,
    
    Franka Ludig's avatar
    Franka Ludig committed
         "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": [
    
        "# cog = center of gravity\n",
        "# cs = center of gravities\n",
        "# k = k cluster\n",
        "\n",
    
    Franka Ludig's avatar
    Franka Ludig committed
        "# Evaluate k\n",
        "ks = np.arange(0, 15)\n",
    
        "# Gib die Anzhal der zu erwartenden Cluster an\n",
    
    Franka Ludig's avatar
    Franka Ludig committed
        "ks = [2]\n",
        "\n",
    
        "# für jedes Cluster\n",
    
    Franka Ludig's avatar
    Franka Ludig committed
        "for k in ks:\n",
    
        "    # definiere die ersten zwei Datenpunkte als Startpunkte\n",
    
    Franka Ludig's avatar
    Franka Ludig committed
        "    cs = data[0:k].copy()\n",
        "    \n",
        "    terminate = False\n",
    
        "    # Deklariere last_cog\n",
    
    Franka Ludig's avatar
    Franka Ludig committed
        "    last_cog = [np.array([0, 0]) for i in range(k)]\n",
        "    while not terminate:\n",
    
        "        # berechne alle Distanzen zwischen Datenpunkten und cs\n",
    
    Franka Ludig's avatar
    Franka Ludig committed
        "        dist = np.stack([[np.linalg.norm(c-d) for d in data] for c in cs], axis=1)\n",
    
        "        # finde die kleinste Distanz eines Datenpunkts zu den cs und gebe das dazugehörige Cluster in einen Array\n",
    
    Franka Ludig's avatar
    Franka Ludig committed
        "        z = np.array([np.argmin(d) for d in dist])\n",
    
        "        # i ist von 0 bis k und wenn z gleich 0 ist gehört der Datenpunkt dem nullten Cluster an,\n",
        "        # bei eins, dem ersten und so weiter. So besteht df aus einem Array mit Unterarrays mit Datenpukten der einzelnen Cluster\n",
    
    Franka Ludig's avatar
    Franka Ludig committed
        "        df = [data[z == i] for i in range(k)]\n",
    
        "        # berechne die neuen Schwerpunkte\n",
    
    Franka Ludig's avatar
    Franka Ludig committed
        "        current_cog = [np.sum(d, axis=0)/len(d) for d in df]\n",
    
        "        # berechne die Differenz zwischen dem aktuellen und dem letzten cog\n",
    
    Franka Ludig's avatar
    Franka Ludig committed
        "        diff_cog = np.sum(np.abs([last - current for last, current in zip(last_cog, current_cog)]))\n",
    
        "        # setzte den letzten cog auf den aktuellen\n",
    
    Franka Ludig's avatar
    Franka Ludig committed
        "        last_cog = current_cog\n",
    
        "        #print(diff_cog)\n",
        "        # setze den neuen Startpunkt auf den aktuellen cog\n",
    
    Franka Ludig's avatar
    Franka Ludig committed
        "        cs = current_cog\n",
    
        "        # wenn die Differenz unter einer gewissen Schwelle ist, beende den Algorithmus\n",
    
    Franka Ludig's avatar
    Franka Ludig committed
        "        if diff_cog < 0.3:\n",
        "            terminate = True\n",
        "            \n",
        "plt.scatter(df[0][:, 0], df[0][:, 1], color='green')\n",
        "plt.scatter(df[1][:, 0], df[1][:, 1], color='pink')\n",
        "\n",
        "# print(current_cog)"
       ]
      },
    
      {
       "cell_type": "markdown",
       "id": "printable-designer",
       "metadata": {},
       "source": [
        "# Animated K-Means"
       ]
      },
      {
       "cell_type": "code",
    
    Franka Ludig's avatar
    Franka Ludig committed
       "execution_count": 43,
    
       "id": "upper-moment",
       "metadata": {},
    
    Franka Ludig's avatar
    Franka Ludig committed
       "outputs": [
        {
         "data": {
          "application/vnd.jupyter.widget-view+json": {
           "model_id": "60f12fe5b3914b06bee45a9a018f5936",
           "version_major": 2,
           "version_minor": 0
          },
          "text/plain": [
           "interactive(children=(IntSlider(value=1, description='step', max=10, min=1), Output()), _dom_classes=('widget-…"
          ]
         },
         "metadata": {},
         "output_type": "display_data"
        }
       ],
       "source": [
        "%matplotlib inline\n",
        "import random\n",
        "def kmeans(step=1):\n",
        "    cur_steps = 0\n",
        "    ks = np.arange(0, 15)\n",
        "    ks = [3]\n",
        "\n",
        "    # für jedes Cluster\n",
        "    for k in ks:\n",
        "        cs = data[0:k].copy()\n",
        "\n",
        "        last_cog = [np.array([0, 0]) for i in range(k)]\n",
        "        while cur_steps < step:\n",
        "            dist = np.stack([[np.linalg.norm(c-d) for d in data] for c in cs], axis=1)\n",
        "            z = np.array([np.argmin(d) for d in dist])\n",
        "            df = [data[z == i] for i in range(k)]\n",
        "            current_cog = [np.sum(d, axis=0)/len(d) for d in df]\n",
        "            diff_cog = np.sum(np.abs([last - current for last, current in zip(last_cog, current_cog)]))\n",
        "            last_cog = current_cog\n",
        "            cs = current_cog\n",
        "            cur_steps += 1\n",
        "            \n",
        "    for i in range(ks[0]):\n",
        "        plt.scatter(df[i][:, 0], df[i][:, 1])\n",
        "    cs = np.squeeze(cs)\n",
        "    plt.plot(cs[:, 0], cs[:, 1], 'bo')\n",
        "    \n",
        "interactive(kmeans, step=(1, 10))"
       ]
    
    Franka Ludig's avatar
    Franka Ludig committed
      {
       "cell_type": "markdown",
       "id": "czech-romance",
       "metadata": {},
       "source": [
        "# K-Means with Scikit-Learn"
       ]
      },
      {
       "cell_type": "code",
    
       "execution_count": 16,
    
    Franka Ludig's avatar
    Franka Ludig committed
       "id": "saved-scope",
       "metadata": {},
       "outputs": [
        {
         "data": {
          "text/plain": [
    
           "<matplotlib.collections.PathCollection at 0x12b049bb0>"
    
         "execution_count": 16,
    
    Franka Ludig's avatar
    Franka Ludig committed
         "metadata": {},
         "output_type": "execute_result"
        },
        {
         "data": {
    
          "image/png": "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\n",
    
    Franka Ludig's avatar
    Franka Ludig committed
          "text/plain": [
           "<Figure size 432x288 with 1 Axes>"
          ]
         },
         "metadata": {
          "needs_background": "light"
         },
         "output_type": "display_data"
        }
       ],
       "source": [
        "km = KMeans(n_clusters=2)\n",
        "data_predicted = km.fit_predict(data)\n",
        "\n",
        "df1 = data[data_predicted == 0]\n",
        "df2 = data[data_predicted == 1]\n",
        "#print(df2)\n",
        "plt.scatter(df1[:, 0], df1[:, 1], color='green')\n",
        "plt.scatter(df2[:, 0], df2[:, 1], color='pink')"
       ]
      },
    
      {
       "cell_type": "markdown",
       "id": "broke-shark",
       "metadata": {},
       "source": [
        "# BIRCH with Scikit-Learn"
       ]
      },
    
    Franka Ludig's avatar
    Franka Ludig committed
      {
       "cell_type": "code",
    
       "execution_count": 17,
       "id": "included-county",
    
    Franka Ludig's avatar
    Franka Ludig committed
       "metadata": {},
    
       "outputs": [
        {
         "data": {
          "text/plain": [
           "<matplotlib.collections.PathCollection at 0x12ac68a30>"
          ]
         },
         "execution_count": 17,
         "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": [
        "brc = Birch(n_clusters=None)\n",
        "brc.fit(data)\n",
        "data_predicted = brc.predict(data)\n",
        "\n",
        "# \n",
        "df1 = data[data_predicted == 0]\n",
        "df2 = data[data_predicted == 1]\n",
        "#print(df2)\n",
        "plt.scatter(df1[:, 0], df1[:, 1], color='green')\n",
        "plt.scatter(df2[:, 0], df2[:, 1], color='pink')"
       ]
    
    Franka Ludig's avatar
    Franka Ludig committed
      },
      {
       "cell_type": "code",
       "execution_count": null,
    
       "id": "third-burden",
    
    Franka Ludig's avatar
    Franka Ludig committed
       "metadata": {},
       "outputs": [],
       "source": []
      }
     ],
     "metadata": {
      "kernelspec": {
       "display_name": "Python 3",
       "language": "python",
       "name": "python3"
      },
      "language_info": {
       "codemirror_mode": {
        "name": "ipython",
        "version": 3
       },
       "file_extension": ".py",
       "mimetype": "text/x-python",
       "name": "python",
       "nbconvert_exporter": "python",
       "pygments_lexer": "ipython3",
       "version": "3.9.1"
      }
     },
     "nbformat": 4,
     "nbformat_minor": 5
    }