{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "Zdu6eCwycpM7" }, "source": [ "# Algorytm k-means #\n", "Autor: Jarosław Żygierewicz\n", "Koretka: Rafał Masełek\n", "\n", "Algorytm k-means jest zaimplementowany w module *scipy.cluster.vq* ([*vq: vector quantization*](https://docs.scipy.org/doc/scipy/reference/cluster.vq.html)). Mamy tam funkcję:\n", "\n", "*kmeans(obs, k_or_guess, iter=20, thresh=1e-05)*\n", "\n", "optymalizującą położenia centroidów, oraz pomocniczą funkcję *vq*, przypisującą poszczególne obserwacje do skupisk reprezentowanych przez centroidy.\n", "\n", "Przed puszczeniem algorytmu k-means na danych dobrze jest przeskalować każdą z cech w macierzy wejściowej, tak aby miała jednostkową wariancję. Można to zrobić za pomoca funkcji *whiten*.\n", "\n", "### Przykładowy kod.\n", "Kod ten pokazuje jak:\n", "\n", "* wygenerować symulowane dane,\n", "* przeskalować je, tak aby miały jednostkową wariancję w każdej z cech,\n", "* podzielić je na dwa skupiska,\n", "* zilustrować wynik." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 265 }, "executionInfo": { "elapsed": 1661, "status": "ok", "timestamp": 1608295016232, "user": { "displayName": "Anna Dawid", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgUQAwZ7wyayL4BbiM0n_EANCgBjSdZ9H14lgcCFEE=s64", "userId": "02862484648310443813" }, "user_tz": -60 }, "id": "vbzIoPw7c4an", "outputId": "a067bb67-52c4-443b-fa18-ded28030b70c" }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD4CAYAAAD8Zh1EAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAAqbElEQVR4nO2df6wmVZnnv09fbgsNKPHtTtMB+t4xs8lEHYbFGxZHY4jELGkNxB+zC9vtwkTT6cu468aYiSwJCknHbNzsOu5M4nQcEtz3rsMMs5lBIiFkJBn/ofG2AtK6Ou0IDcYZLu1OK4M70s2zf1S9dt26dU6dU3VOnefU+3ySyn3ft+pWnTo/vuc5z/lFzAxFURQlf7alDoCiKIoSBhV0RVGUkaCCriiKMhJU0BVFUUaCCrqiKMpIOC/Vg3fu3MnLy8upHq8oipIlx44de4mZdzWdSyboy8vLWF9fT/V4RVGULCGi50zn1OWiKIoyElTQFUVRRoIKuqIoykhwFnQiWiCibxPRQw3nXkdE9xPRCSI6SkTLQUOpKIqitOJjoX8cwPcM5z4C4P8y868D+O8A/kvfgCmKoih+OAk6EV0O4L0AvmS45CYA95WfHwBwPRFR/+ApSoW1NWB5Gdi2rfi7tpY6RIoiClcL/fMAfh/Aa4bzlwF4HgCY+QyA0wAm9YuI6CARrRPR+sbGhn9olfllbQ04eBB47jmAufh78KCKuqJUaBV0InofgBeZ+VjfhzHzEWZeYeaVXbsax8UrSjN33gm88srm3155pfhdyQdtZUXFxUJ/B4AbiehZAH8K4N1ENK1d82MAVwAAEZ0H4A0ATgUMpzLvnDzp93sqVLDMaCsrOq2Czsx3MPPlzLwM4GYAX2fmA7XLHgRwa/n5Q+U1unOGEo69e/1+T0EowRprpRC7lTXWePOBmZ0PANcBeKj8fA+AG8vP5wP4cwAnADwB4E1t93rb297GiuLMdMq8YwdzIZXFsWNH8bsUlpY2h292LC2538PnPafT4t5ExV9JcdEEUXP8EPW/t0u85RZfBgCss0mjTSdiHyroijfSC2QIwbJVCtX3n0yYFxdlV3B1QlR4Xe+dg0HgiAq6ogyBi6i0VUimSmEmQKZzIcUxFjFF1RZvRMwLC/nFlwGboOvUf0UJxeHDwI4dm3/bsaP4vcm/fuAAsHPnZl+vqU9gYWGr/7kJaZ3EVfbvB44cAZaWAKLi75Ejxe99sfWlMANnzzafkxxfHVBBV+aTGB1oNsFq6hAEgFOnNnecmioFkyDVkdRJ3MT+/cCzzwKvvVb8DSHmQHO8uSA9vnwxme6xD3W5KMlI4U+1uQTqTf8m14zJnVM9FhcL37rUPobYVOOtLa7Uh66CroyEmJ1zvs907ThtqoS2bz8n4JNJ8b1NsIboWJbQeW2K74WF7Cs8FXRFqRJz+JyJJkH2rUxsQulSSQ3RMpEymkRKOCKggq4oVVJY6MyFmEwmW58bQmhcKqkh3tv1GalaChJaDz1RQVeUKqmttxii4iKkQ7RMXJ6RKv5Tp3sgVNAVpU5MSy2FFegiVlIs9FQtpFTPDYwKuqIMRUorsK0iiRG2+jNXV9ufkaIPI+VzA6OCrihDId0KDNl6MFUQq6v2Z6iF3guboOvEIkUJifRlfl0n9rhMvDKtnvi1r9mfYZtRG5NUzx0QFXQlfyQtm5rDMr9tuC4D3LXyirkEgMTnDggVFvzwrKys8Pr6epJnKyNiJj5VS3HHjnQFVVp4urC8XIh4naWlwuL2vU4JChEdY+aVpnNqoSt5I21rujFYga6W9xy4MHJDBV3JG4k+6yY/tSS3UBuubqMxVF4jw2WT6POJ6AkieoqIjhPR3Q3X3EZEG0T0ZHl8NE5wFaVGDj7r3PbS3LevEOgqi4vAyy9vrZBirZ6odMLFQv9nAO9m5t8CcBWAG4jo2obr7mfmq8rjSyEDqShGcmj2S3ML2VhbA+67r6h4qjAXS/3mUCHNMS6bRDMzv1x+XSyPND2pilInh2a/RLeQCdO67WfObP4utUIKTU6uMjj60IlogYieBPAigEeZ+WjDZR8koqeJ6AEiusJwn4NEtE5E6xsbG91DrShVpDf7c3ALzfCpZEzXZiaCRnJzlcFR0Jn5LDNfBeByANcQ0Vtrl3wVwDIzXwngUQD3Ge5zhJlXmHll165dPYKtKAPSV6BycAvN8Klkmq61iaApHqVWADm5ymaYppCaDgB3Afik5fwCgNNt99Gp/0pQYiyIFXK521yWbW2azr+46LZ5BrN5ev1kYl4mQOoKiELXfkGftVwA7AJwSfn5AgDfAPC+2jV7Kp/fD+DxtvuqoCvBiLXoVN8NKXKlzzrirtu/zY6FBbnxK3Ttl76CfiWAbwN4GsAzAO4qf78HwI3l588COA7gKQCPAfiNtvuqoM8BQ1mlMQpe3y3j5hWXvU9dDgnx28VQGCDP9xL0WIcK+sgZchnZGE1jF0tTuuukr7B0uYcp3ZtcV9ItdGa/OBgoz6ugK8MzZHM1hYUuzd9bJYSw9LmHyWWTmw/dl4HyvAq6MjxDdiil8KFLtCZnhBAWW4UW2uLPpcO4jYHyvAq6Mjy+otK3UMca5VK9p2R/b5UQwtLmcsrVio6JWujKaPGxmnPZvFfoqIctxLbQpb53atSHrowaV6s5F6HMpeKJ5UOX3jKRgI5yUeYeoRM4GsnF3xtylIs0Cz2XNIiETdB1xyIlPbrzjTzW1oop7idPAm98I/DznwO//OW586l2YRrDjlA90R2LFNnktNaJJGKtgVJfj2W2bO5kkn5FS9P6KrfemnYNGCnr0ZhM99iHulyUTcx5M9qbmP58yX0attE3qfozXNMiUB6HulwUZWTEdFNt21bIUh2iYonilJjee0YKN51LWgR0FanLRVHGRsxNMySv397knquSYtMQl7QYaCleFXRFcUWKnxSIK7q2Po3UcTDboWphofn8tm3Dh8klLYbatcrki4l9qA9dyQppY9Bjh8dnPRYpfutUYXKJl4D9EtBx6IrSE4kdhV072br+n7Q4mE7lrNbYFqcBK0OboGunqKK4ILmj0Ic+nXMS40BimExUx/bv3Vu4sDoM/dROUUXpi81PmtqvbKIpXH065yR2lkoMk4kBNjNvFXQiOp+IniCip4joOBHd3XDN64jofiI6QURHiWg5eEgVpYmhxNTUUbhvn6yd4WfxQQR8+MNbw2Ua8ufSOSdxAljIMEmtmH0w+WJmBwACcFH5eRHAUQDX1q65HcAXy883A7i/7b7qQ1d6M3QnXZOfVJJf2WVBrb4+Z4kTwEKtWyOlw7cFhOoUBbADwLcA/Kva748AeHv5+TwALwGFf950qKArvZEgppIWFvPZZSkD4QrC2Fb8ZLugO/nQiWiBiJ4E8CKAR5n5aO2SywA8X1r8ZwCcBjBpuM9BIlonovWNjQ2XRyuKmaHG9tqQ5MN1ee/JpOgAXVpKvy5LbOpr0tjcYRLyUgCcBJ2ZzzLzVQAuB3ANEb21y8OY+QgzrzDzyq5du7rcQsmZ0D5KCWIqya/s8t4/+1nxN3LnnAh8OoAl5KUAeI1yYeZ/BPAYgBtqp34M4AoAIKLzALwBwKkA4VPGgo+15EoMMfWtdGYzFyVYvG3T4gHg1VeDTzePRl8DwMfqllQx98Hki5kdAHYBuKT8fAGAbwB4X+2a38PmTtE/a7uv+tDnjFg+ypCddBl1jBmpxofJhy5x45A6TWmxuMg8mbindd99bVdX5XUAc89OUQBXAvg2gKcBPAPgrvL3ewDcWH4+H8CfAzgB4AkAb2q7rwr6nCGp89CElI6xUJWUlPfpgksHb1tl26eCFly59xL0WIcK+pyRg7hIqHRCColgUWrF1sLwyT9jWeagggq6Ep8B17KIhoRCHDoMEseNu+A6BDNWZSuhcjeggq7EZeAdW6IhodIRLCSD4jJJKmZlK6FyN6CCrsRFcOb3JnWlM5k0x+VkMmw4JFBNi8mEefv24SpbCZW7AZug6+JcSn9GMikDwCALKCmOVNPipZeAe+8dbniopOGoHqigK/0xTb7Yti3vhY760mUc9U9/6vf7PDF0ZZth5a6CrvTHNKHl7NmisZp6BcIUdJ1INZIZi0oaVNCV/tSbp037PUbYEFc0XdcdH8uMRSUJumOREp6cdpGJRZ84CLSzDQBc+l8vxT/80z8Yz+++cDf+/pN/3+nevyJgeJV2dMeiGmNYx140ObgNYmeCrnHQJo6e4baJucv5VmKs0aN0Zu4EXfPfAEh3GwyRCbrEQVu4JGbePlvaKcGZO0EfOv/NZWsg9ZCvtkgfIhN0iYO2cEkUzzENWR0Bc+dDH9K922eDdaUjLpEu0ce/tgYcOGA+T9Qc5tk5Q7jpbmp9NH+6hwYsLzfvU7q0VAz1U4IzGh96CGt3SPeuRINq9LhE+hCZwCezziohGzbDK+V4/xDutblsxkbCNIU09uE79T/UTNwhZ/SmWJYj9cz15NhW6RtqGrktk/lsNN3lqL0HPoPWI8j7ds10vnGljGMtl5DLhQyVT4Ze4kTw8hPDYYr0utD7bpYQIgyTSXMCdRFuIuaFBXMGKzP5IILehbaKzBRXQ2Rm4RXJKAQ9x0XohhbYUayR1bcwNUW6KfPEihjXtbxnh0mYbYLd9pwyDnZ/0i7muz+3O04c2HBdSTFFZs7AKuol6Cj2Cn0MwHcBHAfw8YZrrgNwGsCT5XFX231TWuhDMmRln2Olt4mQfrVqpNus3Bh0caEsLm5979VVe3yYntNWEaSmj4spdmbOQGj6CvoeAFeXny8G8AMAb65dcx2Ah9ruVT1S+dDHjIS8aK3A2mq3WC8gxfdlWhq3fkwm5+LGFmc+rRFJNXtbC8YWVy5p1seKCm0VRbDogrpcAPwVgPfUfosu6MziXVvJCb17mW9cW5/vErhYTYwU1kBTBLq6Gnz8+6urW+Otr4spdkGzWei2uHJJs75pHbqzLkK+CyboAJYBnATw+trv1wE4BeApAA8DeIvh/w8CWAewvnfv3l4vNTS5VCYhwtk1H1rLgktBiWlJS0nA6bRd0JssVlN4XTuBJW2OHHOHq755KOT7R8rPQQQdwEUAjgH4QMO51wO4qPy8D8Dftt1P6o5FrobVmN09XfOh1cA2nDwLOheP8xLRXXzIpsh3GaYpcXPkWBVsiFZeqLBFanH2FnQAiwAeAfAJx+ufBbDTdo1EQfd1fQrqJwmGzYBsy4ddLPQfYWmzZk+nmyO86k/u81ISrPNqeHxHeZgiP7QAS+tZ9007SYVVooUOgAB8GcDnLddcinPLCFxTumXIdl+Jgu5rOEnpYwpFm8605UNfH/rL2MG3YLr53qGtdKlW/+qqeTSKT+RPp1tHyCwudn8/CT3rM3zTbjrdOmGsb3z0QaIPHcA7ATCApyvDEvcBOATgUHnNx8ohjU8BeBzAb7fdV6Kg+w4fHpuFbqvQfFyws/vM9OpXhtV0yj/CEp8F8Y+w9Csx31Q5hhYUSQI1wzY6xXcWa5OIbd8+jgrQN+1sE7qGot6iWF2VPcol1CFR0H0n+KU28kJjq9B83tWmCbah00TMZxG4yS/NhcDcLlQ+boYYFZYUF5Ut7ZrC6JrWsd5voMpQBd0RW3pIyeMxCaUNtvu0uXV+hECBCP1SIelSyZgyoMQKKxS+FpaL/zym6A6U11TQPZgH4TYRKq+3aUw1jutu5Fsw5ZdRC8T27d3WXal3sKZoXjVlKN+C36XJMwZ/oO8oBZemdMz4GqhyVUE3MM/ibSJEnPiUmaYycAsKX/uvVkY0TYu3BdTUFHAdNRNzQH/TlH5b2HybPGPyB/q6VtrSLaboqoWejhzLQS4VkI+WtpaBrhNn+hSuUJmjTYhdWw8+TR7JGSMUfdI2puiqDz0dubVUc6iAqroymTBfdFG7XrW+l8/Qo2ri9bHEQmWOtl5m1+fklllj06cwxC5IA1SuKugN5NaXJL1M+8yVqYfZWgZ8JgdUE69PhIXKHLaw+yyi5SpC82Sp93nXzONJBb3E1hknTSDrdNWYofJuV91t4xurU/4ncltR8OeTpXP/2McSC1V7+tRyTc+qN2V8+wykNeGUIKigs1vZkpz/u2iMaf7K9deHF/munhEbs/DPOknPgvg5WuLvXb/Kr27fOuv0tsXp5nfpWpuFFMfptJug+z5TehNOCYYKOrdPaJHe8uqiMa5Wc4iKLMazbBr1HybNs06D6VfIpo1P86WrIPd1E2XuhhBPwPhVQef8fOZN+OaJGFazLWxtLSDffGxLs6zSs2nNctfD9YUkjOpRmgkcvyroPJ8t0lh+bROh5/HY0iyb9HT19fVdJVBCn4HSTOD4VUHn+TRCbHMwYpbdUK1LW5plk56uvr4QL9Q14rNq7mRI4PhVQS+ZRzehS2tfpBCW2NIsi/T0KcypXqhrj7v4yBeCWujjInXerz8/woqe3mEYdfnPbXysb+ugy/Vzk/gNTKdBlzhWQU9INq6BiGQTB32Fx9SJkEOTyOfdfSzO0ImfY+UwnQbdhEQF3cAQeUP7mzKJA5PwuDZnXCcRERX3zBkfN1LIxM/FMqgLS+Bt8fruWHQFgMcAfLfclejjDdcQgC8AOFHubHR1231TC/pQeUP7m+LGQbBK2SQ8bYuAtf1/14Is2RL1EemQiZ+DZeAzOzhFpyiAPTOBBnAxgB8AeHPtmn0AHi6F/VoAR9vum1rQh8obOeTB2LjEQRf9CurK7Tto3+f/XdZrkGyJ+oQvZAHIwToKXbE3ENTlAuCvALyn9tsfA7il8v37APbY7pNa0IfIG6HHZdfvLdWAq9NW/rvqV1BXbt9B+yELct9JQkNkDNee9pCVUw7WkWvFLmFiEYBlACcBvL72+0MA3ln5/tcAVhr+/yCAdQDre/fu7fQyoWjLGyH6x/rsr+B7b0kGXBO2+OxaToO6cpsi1fQA1xqja0HusxJbiozhUmPHnpggBVNGm0yCVbRBBB3ARQCOAfhAwzknQa8eqS302JNWYhoTORgqPnTVr+Cu3Cars69Px1fMplP3oY6unW8LC3FFb8gMKb1pOkCl01vQASwCeATAJwzns3O5MJvzRoj8GdOlk8sGNq7hcI3vPnpr24YyyEuEwGblu+wMYjt6DJNrJQff9pBEzjN9O0UJwJcBfN5yzXtrnaJPtN1XgqCbsLnBXElloUtplfqEw+TtqI7u6zuq0CToF14oo/JjZnPCNlnYPj5759orcLhzbTIKp6+gvxMAl8MRnyyPfQAOATjE50T/jwD8EMB32twtLFzQbSPYXAt8TGG13VtK2fId2XLhhVuvrcZX3/caoK+qPz6WbtfVG2MgxYqYE3RikSfTqV9/mO0+saw/072ltH5d3EIuHoNZfPd9rwFGk7kTwtdn63wbUtCrVsTM95+8qSOAiIVfBb0DpvKQ0i3okkdysdBdBXYW333fK/p8D9cCHKo33nZt5w6DDu+slvlWIseLCnoHpAjjDNc8IqWMtYXDd1nfEO/lOijEO41DTrTxsexM106nQReDMiKtkEghcryooFuwlQkJwjjDJ4/kMMrFxUJvGtgR8r2CpXHw8ZMBGCITSPHvSSNyvKigG3CdDwF0cw/WW799JhWNrew0xf3iYhFH2S3rm2qxqtSM6V1CohZ6GlxHYnSx4qbTrStm9mn5jrHshBBTEa0R3+aThJosBNKasVJQH3oaXAyrrkJqcyl0EWEtO1sREye+AanWQpPJVn93TgkrokYViI5yGR4Xse7q6rB1+nV1k2jZ2YyoVkvXxAnZSarMBSroBlwMK0kW+lDlOhcNEd+v4BKRtpcQ0wTpSC4ZKTPmWtDb8pTL+S5lanW1uZx2WSdpyHKdk4aIstDruEak7SVEv2ALvmPqVfidmVtBDyVOXfKbbSKfL67lOkS5iKkh9fD13axadOXjk2imlxDfBLEQ4v1jknElMipB90mHlAZOyLLocq9Q5SKWhjSFr34MVdkOgk9Eml4iZwvd9f1TvGPsSqTe6R14BNNoBN03HVIaOCHzqcu9Qj2v633ahNVlIlEuWuVEiAQR3QRpwfX9UxTS2M1Qm+USIP1GI+i+6ZDSwAlZFl3uFapcdAl3n/ClqGwHIaW/TwIh+hBiEbMScbFcer7baATdNx36TAoKUYZClsWuFvAQI2r6tCBGa6Ez5yvGoXB5/xStkJiViIvl0rPiGI2gd0kH3zLVlL/qmy1IJGXrvKuPv37k4k1QAjN0xRezsKiF7s4QomVKD5/NLVKRolz4jLdfXd0q/rPvYzBgbfE/78a6OGIliHQfOoB7AbwI4BnD+esAnK7sZnRX2z25o6Azxy8YthaTb39WqgI8xLO75NucB220YTM2krSetAYxEztuJI9yAfAuAFe3CPpDbfepHxJmijZhszhdXV8p3R9DPbvNMm96XooBDTHK7nS6dRVN29rqg1dkOY+OiU3quAmQIXu7XAAsz4ug2+ZzuBbAlJboUM/uIs5Dx0uMsjudNq+iaTMCBq/Ihozo3FoCIxj6NoSgnwLwFICHAbzFcp+DANYBrO/du7dX3MSkydfrE+8px78P9eyuHdRDGkcxyq7raJ2kFvqQm2jk1hIYIm4iTxSLLeivB3BR+XkfgL91uadUC31GH8NjHiz01ENCXe4Xo+y6jqevxsfgujdUJkjdKdIlM8UOsy2xA2XIqILecO2zAHa2XSdd0PswDz702bNiDRRwuW/bu/qUXddn2iz0yUTIKJe2HtpQAUnZFO1jUcQsILZMl4mFfikAKj9fA+Dk7LvtGLOgM49/lEssfMqbqXzMVrR0vZfPM0OuohmVpkwQWsxMCdBlBbpQz3YRx5gFZIDlkPuOcvkKgJ8AeBXACwA+AuAQgEPl+Y8BOF760B8H8Ntt9+Q5EHQTOYvtEPiUU5v7w8cg9XmmaTRLDvMUgrsbTD3EXfdZrN63LdGkrkTZFscSRrnEOOZR0HPsQxoan3La1kHpqlM+z7Q9T/yM4hgiaBuv2QXXQpLKf98myAMUchV0IaTuQ8oBX7+3bXKTq075PNMm6OIt9RgZMHQl4RrGFNaRjw8vYjNcBV0IqfuQcnD1+JbT6bTwX/fRKZ9nmgzSLCroGCIYupIIsY58LIRYZCroQkjZSszJ1eNbTkO8n8/ImraJRanduFZijBsdoqNVQi0pxG+vgi6EVMLap4zs/txuxmdgPHZ/bnevsIXSlyGNtenUbqlL0J5BCRn5kq0PIZWNCrogUrg++hgWNjGfHV2RXHZd6DujWDEg1T8oJMPaBH02fnxwVlZWeH19Pcmz543lZeC557b+vrQEPPus/X/pbmq9P3+6Wx7qEy4prK0Bd94JnDwJ7N0LHD4M7N+fOlRKNAQkOBEdY+aVpnPbBg1JpqytFeKzbVvxd20tdYj8OHwY2LFj8287dhS/p+TkSb/fJbJ/f1H5vPZa8VfFfOQIT3AV9BbW1oCDBwtLkrn4e/BgP1EfuoLYvx84cgSYTM79dsEFcZ/pwt69fr8rimJHBb2FO+8EXnll82+vvFL83oUYFYQrv/jFuc+nTg33XBNSWw6Kkisq6C2EdguEriCkP9fGrOWwtAQQFX+PHBHXilWUbFBBbyG0W8BWQcR0xUj1V6dySebeL6IoTaigt9DmFvAVBlNF8MY3xnXFdK2Ydl+4u9d5iaR0eylKVEzjGWMfOY1DNw2L7TIs1fQ/odc4cn2ulCG+JmIMSRYyP0RROgGdWBSHrsLQJFJD7YxV39xYsqDHqoSEzOBWlE7YBF1dLh2YuVmaJsUA7X7pJr/xUEP4pI10sRGiI7fJJTbG4ZLaJ6AAUAvdl7YlW7s23YdwieTmauhrSZvidHU1T/eTiVzdaUo30HPHonsBvAjzFnQE4AsATgB4GsDVbffkjAW9bVOFPgUp9hIWubka+lZAtv+XulxIFdcw5lZRK/3oK+jvAnC1RdD3AXi4FPZrARxtuydnLOi2bc+kCsOM3Ap+X8sztwqsis+75/yeij82QW/1oTPz3wD4qeWSmwB8uXzW4wAuIaI93r6fTDD5WWcLSkmeFJPbzMy+E49y9pX79B/k/J5KWEJ0il4G4PnK9xfK37ZARAeJaJ2I1jc2NgI8OiwuHUtNorh9O/Dyy/I7pKSu6WKjz8Sj3CqwKj4TwXJ+TyUwJtO9egBYhtnl8hCAd1a+/zWAlbZ7SnO5+DRxq77NyWTrDjZDd0j5+IPH0IHm+77SfeVN+LrHcn1PxR/0HYfeIuh/DOCWyvfvA9jTdk9pgt7Vv5zaL+0r0CHCm1I8hqiQYrxfim31lHESW9Dfi82dok+43DO1oNcLmKmjs61jKXWHlK9AxxoKOJTQxKpAZ/lhFhc+71dvsU0mm4W7a5yp1a000UvQAXwFwE8AvIrCP/4RAIcAHCrPE4A/AvBDAN9xcbdwYkFvKmAmoZNqoVcFyEegYw4FHIIYFWifuQVt/9t1WQcVc8VEbws9xpFS0E2i1GV/yBQWa2gBymkoYIwKpW1uQZcK0uUw3TN1K0iRjQp6jbax5L5W0dDWVN/JTX3Cm9pCbxO7Lu9myw9t7+fyv773TB3HimxU0Gu4Fhipzd6Uk5skWI8hV79k7ldBuljok4lfuFK3ghTZqKDXcCn4EoTLRGoLTmpF12f1S1OfysKCvaJ08aHPOkZd4yx1+iqyUUFvoK2ASS5UkiublPSxbOv5wWcBr7ZRLr5o+io2VNA7IL3ZO6SVnMoi931uyEo4dYUutRWkpEcFvQOpC7QUUlmLXZ4bMqzSK3RlfrEJum5wYUDXxygwLRJ1661x16zpsrlF38W8quiCV0qOjFLQQ+zeElIc+pJyNxrTIlFnz8bd7chncaoqfRbzqqIVupIlJtM99hHL5TK2DqXU79M2LC+WC0qCy0v92IpEME8ulxD7UEpgZpUfOND+PjEt+CZLtUqbxRzyuUNbyKGsfUUZitEJetemuiTW1gp3hmkTauDc+1SvZS7+hnSFzFxPCwvN52P5lCW5vGKimzsrIRmdoI+hM6uplVFn9j4xWiR1kQGA++4b3mIem4Vcj9fbb49bGStziMkXE/tQH7qZtvVBqu8TenidLf7mzacc8n1DrvCpzDeYt3HouQuPrSOy/j6hOw8ldEZKILRh4LMqo451V2zYBD1bl4vN95h7U93UITidbn2f0J2HY+iDMOHjrw7tyvKJv5zcg4owTEof++hjoY/BrdJGqn0zU1votnfp856+eSa0K8t1DX6gWAtmTHlZCQsCbEF3A4q9Qk8A+FTD+dsAbAB4sjw+2nbPPoKeWnTGTMrKss1/3ydcvnkmdB4zhX91tXlHo7EZKEo4egk6gAUU28u9CcB2AE8BeHPtmtsA/GHbvapHH0HXdTbikqoPwiaifQXWN8/EqNhM8aoGiuKDTdCpOG+GiN4O4DPM/K/L73eUrprPVq65DcVeoh9zdfWsrKzw+vq66+WbWF5uHqO9tFT4mJU82batkLI6RMVf07nXXmu/d5c8s7ZW+MxPniz82ocPx+mPsb23y7sp8wURHWPmlaZzLp2ilwF4vvL9hfK3Oh8koqeJ6AEiusIQkINEtE5E6xsbGw6PbkbCLEIlPLY5BH3nF3TJM0N1ro9h7oQig1CjXL4KYJmZrwTwKID7mi5i5iPMvMLMK7t27er8sHmZRThv2ES3TZDbRrBIzjNqoCjBMPliZgeAtwN4pPL9DgB3WK5fAHC67b6S10PPfRx7znQZ5TKGUU+a5xRX0LNT9DwAfwfg13CuU/QttWv2VD6/H8DjbfeVIOhNhWgM4jBvzGunolYC80kvQS/+H/sA/ADFaJc7y9/uAXBj+fmzAI6XYv8YgN9ou2dqQTcJd9MQsnkQh5yRMOppaHFVw2N+sQl66yiXWPQZ5RIC06gHEzriQC6pRz3NVryszizdsSOujz71Oyvp6DvKZZT4TmVn1uVNpZK6U9G0TMCBA/HyzJiXaFC6M7eCbhoSNhvz3IQubyqT1CNYbCIaK8/oUEelibkVdNNOPG0eqKYFmnSTgnRUd3Z64YX29ItBm4jG2DErdatEEYrJuR77SN0pyry5I2thobljra2zTTun0tEU9ynSwBaOmB20OsplPoF2irZjmn7dxKzjaW0NuPVW4OxZ8zVKPNo6todMg9kyAabwaH5QQqGdog64+tRnzdrZyIYmMQfmu3NqKBdUWxwPmQazZQKmU3WFKOkYpaB3ERSTT/LQoebOtrZ9P+e1cyr2ptVV2uI4RRr4dtBq/4sSFJMvJvYhcU9RH5+kbd/PefahDzlrU4oPvSva/6J0AfO0p2gsQamLvWlG6cJCvgUyRCfb0LM2Z2Gexf0srXNIg3ldskDpx1wJegxBabKkFheZt293t66kj0gIZS2qSLkjYckCJT9sgj46H7rrhIu+Gwa/+ipw8cVuvtIh/cpdCbUpso6PdkcnBynBMSl97COlD33oDYNzsFpDWovSWyNSUB+60gXMk8uFuV1Qht4wOIemdQ6VzhjRyk/xxSboo3O5AO1bh/kubNTXjTB00zrksE11lcRlqG3ulPlglILehq/A9l38KZZYNgl3V3996gWuxoyONVcGw2S6xz5SruWSwncZummtG3TYkeLKMI2Vn0zUvaJ0AwF2LLoBwPcBnADwqYbzrwNwf3n+KIoNo8UKOrOcAt8Vk8/bdswLkjobbek061vJMf8p6bAJeuviXES0gGL7ufcAeAHANwHcwszfrVxzO4ArmfkQEd0M4P3M/G9t95W2OFdu+CwmBgALC8CZM/HCIwlJu/m4plPsHY6U8dB3ca5rAJxg5r9j5l8C+FMAN9WuuQnAfeXnBwBcT2TbKkLpi2+HqmkRsTEiaTcf13SKsWa6Mn+4CPplAJ6vfH+h/K3xGmY+A+A0gEn9RkR0kIjWiWh9Y2OjW4gVAOaO1smWWC9YWoofJilImrBj2kiliXleoVMJw6CjXJj5CDOvMPPKrl27hnz06DCNSvmDP9Dhh5KGYM7SyVTRVtEZokpfXAT9xwCuqHy/vPyt8RoiOg/AGwCcChFAxUzTGGYdfigvDvbvB156qVgrfdZSMq2zryh9cOkUPQ9Fp+j1KIT7mwD+HTMfr1zzewB+s9Ip+gFm/je2+2qnqDLPzHY4OnmysMwPH56vSlfpjq1T9Ly2f2bmM0T0MQCPAFgAcC8zHyeie1AMn3kQwJ8A+J9EdALATwHcHC74ijI+Zq0pRQlJq6ADADN/DcDXar/dVfn8/wD8TtigKYqiKD7M5dR/RVGUMaKCriiKMhJU0BVFUUaCCrqiKMpIaB22GO3BRBsAGlbcaGUngJcCBycUGrZuSA2b1HABGraujCFsS8zcODMzmaB3hYjWTWMwU6Nh64bUsEkNF6Bh68rYw6YuF0VRlJGggq4oijISchT0I6kDYEHD1g2pYZMaLkDD1pVRhy07H7qiKIrSTI4WuqIoitKACrqiKMpIECvoRHQDEX2fiE4Q0acazr+OiO4vzx8lomVBYbuNiDaI6Mny+OhA4bqXiF4komcM54mIvlCG+2kiunqIcDmG7ToiOl2Js7uarosQriuI6DEi+i4RHSeijzdckyTeHMOWKt7OJ6IniOipMmx3N1yTpIw6hi1JGS2fvUBE3yaihxrO9Ysz0+7RKQ8Uy/T+EMCbAGwH8BSAN9euuR3AF8vPNwO4X1DYbgPwhwni7V0ArgbwjOH8PgAPAyAA1wI4Kihs1wF4KEGc7QFwdfn5YhRr/9fTM0m8OYYtVbwRgIvKz4sAjgK4tnZNqjLqErYkZbR89icA/K+mdOsbZ1ItdMkbU7uELQnM/Dco1qM3cROAL3PB4wAuIaI9QsKWBGb+CTN/q/z8cwDfw9Y9c5PEm2PYklDGxcvl18XyqI+wSFJGHcOWBCK6HMB7AXzJcEmvOJMq6ME2pk4UNgD4YNk8f4CIrmg4nwLXsKfi7WUz+WEiesvQDy+bt/8ShUVXJXm8WcIGJIq30nXwJIAXATzKzMZ4G7iMuoQNSFNGPw/g9wG8ZjjfK86kCnrufBXAMjNfCeBRnKtxFTPfQrFGxW8B+B8A/nLIhxPRRQD+AsB/YuafDfnsNlrClizemPksM1+FYp/ha4jorUM9uw2HsA1eRonofQBeZOZjsZ4hVdAlb0zdGjZmPsXM/1x+/RKAtw0QLhdc4jUJzPyzWTOZix2yFolo5xDPJqJFFIK5xsz/u+GSZPHWFraU8VYJwz8CeAzADbVTyTePN4UtURl9B4AbiehZFK7adxPRtHZNrziTKujfBPAviOjXiGg7is6BB2vXPAjg1vLzhwB8ncuehNRhq/lXb0Th+5TAgwD+fTlq41oAp5n5J6kDBQBEdOnMV0hE16DIm9ELf/nMPwHwPWb+b4bLksSbS9gSxtsuIrqk/HwBgPcA+D+1y5KUUZewpSijzHwHM1/OzMsodOPrzHygdlmvOHPaU3RoWPDG1I5h+49EdCOAM2XYbhsibET0FRSjHnYS0QsAPo2iQwjM/EUU+8LuA3ACwCsAfneIcDmG7UMAVonoDIBfALh5oAr6HQA+DOA7pc8VAP4zgL2VsKWKN5ewpYq3PQDuI6IFFJXInzHzQxLKqGPYkpTRJkLGmU79VxRFGQlSXS6KoiiKJyroiqIoI0EFXVEUZSSooCuKoowEFXRFUZSRoIKuKIoyElTQFUVRRsL/B4sXjmgWFBqyAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from pylab import plot,show\n", "from numpy import vstack,array\n", "from numpy.random import rand\n", "from scipy.cluster.vq import kmeans,vq,whiten\n", "import matplotlib.pyplot as plt\n", "\n", "# generujemy dane: \n", "# - 150 dwuwymiarowych punktów z rozkładu jednorodnego ze średnią (1,1)\n", "# - 150 dwuwymiarowych punktów z rozkładu jednorodnego ze średnią (0.5,0.5)\n", " \n", "data = vstack((rand(150,2) + array([.5,.5]), rand(150,2)))\n", "data = whiten(data)\n", "# policz K-Means dla K = 2 (2 skupiska)\n", "centroids,_ = kmeans(data,2)\n", "# przypisz wektory wejściowe do skupisk\n", "idx,_ = vq(data, centroids)\n", " \n", "# narysuj wyniki\n", "plot(data[idx==0,0],data[idx==0,1],'ob',\n", " data[idx==1,0],data[idx==1,1],'or')\n", "plot(centroids[:,0],centroids[:,1],'sg',markersize=8)\n", "show()" ] }, { "cell_type": "markdown", "metadata": { "id": "bWC1XGKNdix4" }, "source": [ "# Segmentacja obrazu algorytmem k-means\n", "\n", "W tym ćwiczeniu zapoznamy się z zastosowaniem algorytmu analizy skupień do segmetacji obrazu. Segmentacja tego typu może stanowic etap wstępnego przetwarzania na potrzeby np. detekcji obiektów lub klasyfikacji. W zadaniu tym zapoznamy sie także z metodą dobierania atumatycznie ilości skupisk.\n", "\n", "\n", "Obrazek na którym będziemy pracować znajduje się pod [tym](https://brain.fuw.edu.pl/edu/images/b/b8/Skan.png) adresem, proszę go zapisać w bieżącym katalogu, podłączyć dysk Google'a, zimportować i obejrzeć:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "executionInfo": { "elapsed": 74107, "status": "ok", "timestamp": 1608295088700, "user": { "displayName": "Anna Dawid", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgUQAwZ7wyayL4BbiM0n_EANCgBjSdZ9H14lgcCFEE=s64", "userId": "02862484648310443813" }, "user_tz": -60 }, "id": "33zlikdAeLDs" }, "outputs": [], "source": [ "folder = './uczenie-maszynowe-2021-22-private/dane/' # podaj lokalizację obrazu" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 248 }, "executionInfo": { "elapsed": 76181, "status": "ok", "timestamp": 1608295090788, "user": { "displayName": "Anna Dawid", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgUQAwZ7wyayL4BbiM0n_EANCgBjSdZ9H14lgcCFEE=s64", "userId": "02862484648310443813" }, "user_tz": -60 }, "id": "othT-oHbeWtE", "outputId": "fd742c68-5744-4ab7-dc35-97e869ff7e57" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from pylab import plot,show,figure,imshow,cm, imread, axis\n", "import numpy as np\n", "from scipy.cluster.vq import kmeans,vq\n", " \n", "image = imread(folder + 'image.png')\n", "# Oryginalny obrazek miał przestrzeń barwną RGB.\n", "# Spłaszczamy przestrzeń barwną obrazka\n", "image = image.mean(axis=2)\n", "#oglądamy obrazek\n", "imshow(image, cmap=cm.gray)\n", "axis('off')\n", "show()" ] }, { "cell_type": "markdown", "metadata": { "id": "GzBdcj8Wej95" }, "source": [ "Teraz zamieniamy rysunek (dwuwymiarowa tablica 256x256) na wektor (o długości 256*256):" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "executionInfo": { "elapsed": 1033, "status": "ok", "timestamp": 1608295104348, "user": { "displayName": "Anna Dawid", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgUQAwZ7wyayL4BbiM0n_EANCgBjSdZ9H14lgcCFEE=s64", "userId": "02862484648310443813" }, "user_tz": -60 }, "id": "2jFSfqhleama" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(256, 256)\n", "0.0\n", "(65536, 1)\n" ] } ], "source": [ "data = image[:]\n", "print(data.shape)\n", "data.shape = 256*256, 1\n", "print(data.min())\n", "print(data.shape)" ] }, { "cell_type": "markdown", "metadata": { "id": "tNUF69V_exM8" }, "source": [ "Teraz będziemy próbować podzielić ten wektor na skupiska (w liczbie od 2 do 9). Dla każdej konkretnej liczby skupisk obliczamy dwie wielkości:\n", "\n", "$J_{intra} (K)$ - to jest miara odległości wewnątrz centrów: równanie na $J$ znajduje się [tutaj](https://brain.fuw.edu.pl/edu/index.php/Uczenie_maszynowe_i_sztuczne_sieci_neuronowe/Wyk%C5%82ad_10#Algorytm_k-.C5.9Brednich:).\n", "\n", "$J_{inter} (K) = min_{j d:\n", " J_inter[K] = d\n", " \n", " print(K, J_intra[K],J_inter[K])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Ile współrzędnych mają skupiska i dlaczego tyle, skoro zaczęliśmy od 2D obrazka?" ] }, { "cell_type": "markdown", "metadata": { "id": "TWRVl9gDgTAK" }, "source": [ "Wykreślamy stosunek $J_{intra}/J_{inter}$ i znajdujemy $K$, dla którego jest najmniejszy:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 282 }, "executionInfo": { "elapsed": 656, "status": "ok", "timestamp": 1608295481181, "user": { "displayName": "Anna Dawid", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgUQAwZ7wyayL4BbiM0n_EANCgBjSdZ9H14lgcCFEE=s64", "userId": "02862484648310443813" }, "user_tz": -60 }, "id": "OlrrmnUafHsu", "outputId": "583717fa-af95-4269-8a6d-cf4df11ca4a1" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Optymalne K=5\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(1)\n", "plt.xlabel('K', fontsize=14)\n", "plt.ylabel(r'$\\mathrm{J_{intra}/J_{inter}}$', fontsize=14)\n", "# narysuj wykres J_{intra}/J_{inter} w funkcji K\n", "plot(range(2,K_max),J_intra[2:]/J_inter[2:])\n", "# znajdz optymalne K, tj. minimum\n", "K_opt = np.argmin(J_intra[2:]/J_inter[2:])+2\n", "# wypisujemy\n", "print(f'Optymalne K={K_opt}')" ] }, { "cell_type": "markdown", "metadata": { "id": "_ijpVFvBgefI" }, "source": [ "Dla tej optymalnej ilości skupisk znajdujemy położenia centrów i przypisujemy klasę dla każdego punktu danych:" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "id": "qm8wsPg3gXyl" }, "outputs": [], "source": [ "# znajdz skupiska dla optymalnego K\n", "centroids, J_intra[K] = kmeans(data, K_opt)\n", "\n", "# przypisujemy klasę\n", "idx,_ = vq(data, centroids)" ] }, { "cell_type": "markdown", "metadata": { "id": "JRDHLYH-gh_y" }, "source": [ "Formatujemy wektor w obrazek i podziwiamy efekt:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 269 }, "executionInfo": { "elapsed": 981, "status": "ok", "timestamp": 1579108107135, "user": { "displayName": "Anna Dawid", "photoUrl": "https://lh3.googleusercontent.com/a-/AAuE7mBMAlqIzrWbyBbGSDvCFuCvvSN7Xx3h3HRKaToc0r4=s64", "userId": "02862484648310443813" }, "user_tz": -60 }, "id": "wLwa3jSigjLW", "outputId": "e05f0558-61da-452f-9aae-46f8e5728907" }, "outputs": [ { "data": { "image/png": "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XlpbWwmHw4rKiYuLw+v14vP5CAaDaoscCoVU5h8Oh0lJSSElJQVN0/B6vbjdbrXoGI1GKioqqK2txel0UltbS2NjI0OGDKGwsJDS0lJVcP2NmI79Ju5t6Ziur6/n2muvBSJ9FG+//TaLFy/ehX4xGAzk5+fz3nvvccghh+wSDBsbG5k6depeN8MFg0FWrlxJdXU1t9xyi7LciMa0adN2oU4GDBjAl19+CcC2bdt48803AcjLy+PII49k8ODBvP/++7zwwgs8++yzXH755Zxxxhm8/fbb5OXl8e233zJu3DjmzJnDMcccw/PPP8+QIUOU19PBgJ8b3Efpul6uaVo6MFfTtKLoX+q6ru8pK9c07U/An37m+fc7EhISSEtLo7m5mba2NqVscTgcqhgkxVLZliYmJiouXVQxomk3GAy4XC5sNhtms1l1jTY3N1NfX4+u6yqTF328qAFkEWltbaW1tRVN07BarcqeQPxlLBYLoVAIr9erGqni4+PVziIYDCoqyGw2KzOnQCBARUWF4uHdbjcbNmxg4MCBmM1mamtrycrKoqKi4rdgVbBP7u0DuWGmpKSE119/ncsvv5wePXrgdrv57rvvmDlzpqJAojF06FAuvPBCLrjggt2+r6amJp577rndBvaePXvicrlYtWrVbjP6yspK7r77bjIzM0lISKC9vV39rrW1lbi4OEWB6rrOtm3bWLlyJRApxJaVlQGo78Fxxx3HIYccwk033cSOHTuYOnUq5513HkcddRTV1dVUVlYyffp0brzxRt566y1aWlp49tlnueKKKw6aAP+zgruu6+Ud/63RNG0GMBKo1jQtK2rrWrOH504BpsCBScsYDAasVisOh0M1Bknh02AwqBugvb0di8VCcnIyVqtVZcHSlOF0OklISAAiWUpCQoJqZBJNu+jTA4GA8sSw2+0EAgEVuG02G3FxcUoF09TURGtrKxkZGdhsNnUOiBR74+PjaWpqUlp3i8WignsgEFC8vEAWrVAoRENDA01NTaSnp9Pa2orb7aZHjx6KrklISDhobQoE++reLiwsPODubYg4N06dOpWLL74Yl8vF9OnTWbhwoQqSgoyMDE444QTOP/98+vfvT3Z2NhCRJL700kvKDgMi3aZbtmzZ7flOPvlkDj/8cK6//nqqqqp2e0xzczM9e/akd+/efPzxx+rxpqYmSkpK1O44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25cCp/Dy0i0LqGYiu92u1DA+n09l1KKNl45WiAR62RGIwqWsrIxt27ZRXFxMc3MzZWVleDweUlJSyMjIUG3l4qHT1tamhoSLOiGmkOl66NatG+++++4Pmn198803ijKcPXs2FouFK664gmHDhinPlx+DxMRENm3axIUXXkgoFMJisdC3b99dFpmysjIeeugh1qxZozj5tWvXsmPHDv785z9zxhlnUFlZyS233KKKsBUVFdx00020trbi9/tpamoiPT2djRs3MmPGDP7whz/g8Xj47rvv+POf/0xRUREnn3wyY8aMUUlPXFyc+h61trZ2GijyW8NBHdwhMgFm9erVlJaWquEYTqdTFTvFXCw7O1tl7E6nk0MOOUQN4o0euSd0jNxIYvsryhg5xmQyKT5fOH1N09QXTZ4jTVKS3cuc1La2NlW0leHX4kDpcrnIysrC4/HgdrvZsmULy5cvp729nbKyMtasWUNSUhI9e/YkGAzidrsxGo2qYGo0Gqmvr1cukkLPxNC1MHz4cI466qjvzd49Hg/5+fls3bpVKb50XefZZ5/lpZde4sknn/zR583JyeGee+5Ru8urr756t41B5eXl/P3vf+e+++7j8ccf5+OPP6a5uZni4mI1JzhaI+90OpkyZQrp6ekUFxfzxRdfcMQRR/Dmm28SCoXYvHkz//73vznllFOU++WoUaP47rvO0w6ffPJJlQT9lnHQB3ev18v8+fNZvXq1omckaxbNd2trK06nk4EDB5Kdna2GXQ8aNIhu3brR1NSkJrbLBCRRwYheXUbmmUwmjEajGmcmFIw0H8kOQhYFKa7K/5vNZtW8FD2Qu6WlRRknpaSkUFlZyaJFi6ioqCAlJYVgMKhGBpaUlNDS0kL//v1JTk5WtQK/3692La2treoLGetG7ZqQIv2YMWP2eExraytpaWk8/fTTXHfddei6zrvvvsvbb7/NlClTeO+99zrNMd0buFwu1QENkWx+9OjRezy+sbFRddNu3769k13B+++/z6JFi4CIAV///v0pKSnhhRde4IYbbmDRokVomsaLL76o3E+XLl3KAw88wJ133hlTeH0PDvrgHg6H2bRpE6tXr6asrIympiaam5tpb29Xenaj0UheXh6DBg3C4XAoO9329nY1nq66ulpNV5ICrHjI+Hw+mpubVaYtQTOaKwc6TW6SnYBw96LIET2+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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "idx.shape = 256,256\n", "f, axarr = plt.subplots(1,2)\n", "axarr[0].imshow(image, cmap=cm.gray)\n", "axarr[0].set_title('Przed analizą skupisk')\n", "axarr[1].imshow(idx, cmap=cm.gray)\n", "axarr[1].set_title('Po analizie skupisk')\n", "show()" ] }, { "cell_type": "markdown", "metadata": { "id": "TtE7o56zgohN" }, "source": [ "Dla porównania proszę wykreślić histogram odcieni szarości dla wektora *data* i wektora *idx*. Proszę wyświetlić wartości przeskalowane tak, żeby maksymalna wartość w wektorze odpowiadała 255 a najmniejsza 0." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "id": "yMeYvE0uLoZm" }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "idx_f = idx.flatten()\n", "plt.hist(data/np.max(data)*255., 30, histtype='stepfilled', alpha=0.9, label='data')\n", "plt.hist(idx_f/np.max(idx_f)*255., 30, histtype='stepfilled', alpha=0.5, label='idx')\n", "\n", "plt.yscale('log')\n", "plt.legend()\n", " " ] }, { "cell_type": "markdown", "metadata": { "id": "WbZ-2Ajygvjz" }, "source": [ "# Algorytm EM (Expectation Maximization)\n", "\n", "Program, który powstanie po uzupełnieniu kodu powinien ilustrować dopasowywanie modelu EM do danych będzących sumą dwóch rozkładów gaussowskich.\n", "\n", "Najpierw standardowe importy i kilka funkcji pomocniczych:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "id": "6PAGNYwogn5V" }, "outputs": [], "source": [ "import matplotlib\n", "import pylab as py\n", "import random, copy\n", "import numpy as np\n", "import sys\n", " \n", "# W tej komórce nie ma nic do uzupełniania, ale w dalszej części programu trzeba korzystać z poniższych funkcji,\n", "# dlatego proszę się z nimi zapoznać.\n", "\n", "def pnorm(x, m, s):\n", " \"\"\"\n", " Oblicza gęstość wielowymiarowego rozkładu normalnego dla punktów\n", " w wektorze x\n", " Parametry rozkładu:\n", " m - średnia\n", " s- macierz kowariancji\n", " dla zwiększenia czytelności kodu stosujemy typ matrix\n", " \"\"\"\n", " xm = np.matrix(x-m)\n", " xmt = np.matrix(x-m).transpose()\n", " for i in range(len(s)):\n", " if s[i,i] <= sys.float_info[3]: # min float\n", " s[i,i] = sys.float_info[3]\n", " sinv = np.linalg.inv(s)\n", " \n", " return (2.0*np.pi)**(-len(x)/2.0)*(1.0/np.sqrt(np.linalg.det(s)))\\\n", " *np.exp(-0.5*(xm*sinv*xmt))\n", " \n", "def draw_params(t,nbclusters):\n", " '''funkcja do losowania parametrów początkowych\n", " t - zbiór treningowy\n", " '''\n", " nbobs, nbfeatures = t.shape\n", " # inicjuje średnie przez losowanie punktu ze zbioru danych\n", " tmpmu = np.array([t[np.random.randint(0,nbobs),:]],np.float64)\n", " # kowariancje inicjowane są jako macierze diagonalne , wariancja dla każdej cechy inicjowana jest jako wariancja tej cechy dla całego zbioru \n", " sigma = np.zeros((nbfeatures,nbfeatures))\n", " for f in range(nbfeatures):\n", " sigma[f,f] = np.var(t[:,f])\n", " #phi inicjujemy tak, że każda składowa mieszanki ma takie samee prawdopodobieństwo\n", " phi = 1.0/nbclusters\n", " print ('INIT:', tmpmu, sigma, phi)\n", " return {'mu': tmpmu,\\\n", " 'sigma': sigma,\\\n", " 'phi': phi}\n", " \n", "def plot_gauss(mu,sigma):\n", " ''' Funkcja rysująca kontury funkcji gęstości prawdopodobieństwa \n", " dwuwymiarowego rozkładu Gaussa'''\n", " \n", " x = np.arange(-6.0, 6.0001, 0.1)\n", " y = np.arange(-6.0, 6.0001, 0.1)\n", " X,Y = np.meshgrid(x, y)\n", " X.shape = 1,len(x)*len(y)\n", " Y.shape = 1,len(x)*len(y)\n", " P = np.vstack((X,Y))\n", " invS = np.linalg.inv(sigma)\n", " R = P.T-mu\n", " z = np.zeros(len(R))\n", " for i in range(len(R)):\n", " z[i] = np.exp(-0.5*np.dot( R[i,:].T,np.dot(invS,R[i,:])))\n", " \n", " z.shape = len(x),len(y)\n", " py.contourf(x,y,z,alpha = 0.5)\n", " py.plot(mu[0],mu[1],'o')" ] }, { "cell_type": "markdown", "metadata": { "id": "LJjStgY9hogw" }, "source": [ "## Szkielet algorytmu ##\n", "Poniższy kod to szkielet właściwej funkcji wykonującej optymalizację. Trzeba go uzupełnić implementując równania z wykładu. Proszę uważnie czytać komentarze." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "id": "kfqsAxKHg-PW" }, "outputs": [], "source": [ "def expectation_maximization(t, nbclusters=2, nbiter=3, normalize=False,\\\n", " epsilon=0.001, monotony=False, datasetinit=True):\n", " \"\"\"\n", " Parametry\n", " ----------\n", " t -- zbiór treningowy, \n", " Każdy wiersz t jest przykładem (obserwacją), każda kolumna to cecha \n", " nbclusters -- ilość klastrów, z których budujemy model mieszany\n", " nbiter -- ilość iteracji\n", " normalize -- True/False, opcjonalna normalizacja\n", " epsilon -- kryterium zbieżności\n", " monotony -- \n", " \n", " Powtórz kroki E i M aż do spełnienia warunku |E_t - E_{t-1}| < ε\n", " ----------------\n", " Wartość zwracana\n", " ----------------\n", " Funkcja zwraca parametry modelu (centra i macerze kowariancji Gaussów i ich wagi \\phi) oraz \n", " etykiety punktów zbioru treningowego oznaczające do którego z Gaussów w modelowanej mieszance należą.\n", " \"\"\"\n", " \n", " nbobs, nbfeatures = t.shape\n", " \n", " ### Opcjonalna normalizacja przez podzielenie każdej cechy przez jej odchylenie standardowe\n", " if normalize:\n", " for f in range(nbfeatures):\n", " t[:,f] /= np.std(t[:,f])\n", " \n", " \n", " result = {}\n", " random.seed()\n", " \n", " # szykujemy tablice na prawdopodobieństwa warunkowe\n", " Pz = np.zeros((nbobs, nbclusters)) # P(z|x): opisywane równaniami (2) i (3) z wykładu \n", " Px = np.zeros((nbobs, nbclusters)) # P(x|z): opisywane równaniem (4) \n", " \n", " # inicjujemy parametry dla każdego składnika mieszanki\n", " # params będzie listą taką, że params[i] to słownik\n", " # zawierający parametry i-tego składnika mieszanki\n", " params = []\n", " for i in range(nbclusters):\n", " params.append( draw_params(t,nbclusters) )\n", " \n", " old_log_estimate = sys.maxsize # init\n", " log_estimate = sys.maxsize/2 + epsilon # init\n", " estimation_round = 0 \n", " \n", " # powtarzaj aż zbiegniesz \n", " while( abs(log_estimate - old_log_estimate) > epsilon and (not monotony or log_estimate < old_log_estimate) ):\n", " restart = False\n", " old_log_estimate = log_estimate \n", " ########################################################\n", " # krok E: oblicz Pz dla każdego przykładu (czyli w oznaczeniach z wykładu w_i^j)\n", " ########################################################\n", " # obliczamy prawdopodobieństwa Px[j,i] = P(x_j|z_j=i) \n", " for j in range(nbobs): # iterujemy po przykładach\n", " for i in range(nbclusters): # iterujemy po składnikach\n", " Px[j,i] = pnorm(t[j,:], params[i]['mu'], params[i]['sigma']) # (równanie 4)\n", " \n", " # obliczamy prawdopodobieństwa Pz[j,i] = P(z_j=i|x_j) \n", " # najpierw licznik równania (3) \n", " for j in range(nbobs): \n", " for i in range(nbclusters):\n", " Pz[j,i] = Px[j, i] * params[i]['phi']\n", "\n", " # mianownik równania (3)\n", " for j in range(nbobs): \n", " tmpSum = 0.0\n", " for i in range(nbclusters):\n", " tmpSum += Px[j, i] * params[i]['phi']\n", "\n", " # składamy w całość Pz[j,i] = P(z_j=i|x_j)\n", " Pz[j,:] /= tmpSum\n", " \n", " ###########################################################\n", " # krok M: uaktualnij paramertry (sets {mu, sigma, phi}) #\n", " ###########################################################\n", " #print \"iter:\", iteration, \" estimation#:\", estimation_round,\\\n", " # \" params:\", params\n", " for i in range(nbclusters):\n", " print(\"------------------\")\n", " # parametr phi: równanie (6)\n", " Sum_w = np.sum(Pz[:,i])\n", " params[i]['phi'] = Sum_w/nbobs\n", " if params[i]['phi'] <= 1.0/nbobs: # restartujemy jeśli zanika nam któraś składowa mieszanki\n", " restart = True \n", " print(\"Restarting, p:\",params[i]['phi'])\n", " break\n", "\n", " print('i: ',i,' phi: ', params[i]['phi'])\n", "\n", " # średnia: równanie (7)\n", " m = np.zeros(nbfeatures)\n", " for j in range(nbobs):\n", " m += Pz[j, i] * t[j,:]\n", " params[i]['mu'] = m/Sum_w\n", " print('i: ',i,' mu: ', params[i]['mu'])\n", " \n", " # macierz kowariancji: równanie (8)\n", " s = np.matrix(np.zeros((nbfeatures,nbfeatures))) #init\n", " for j in range(nbobs):\n", " roznica = np.matrix(t[j,:]-params[i]['mu'])\n", " s += Pz[j,i]*(roznica.T*roznica)\n", " params[i]['sigma'] = s/Sum_w\n", " \n", " print(params[i]['sigma'])\n", " \n", " ### Testujemy czy składniki się nie sklejają i w razie potrzeby restartujemy\n", " if not restart:\n", " restart = True\n", " for i in range(1,nbclusters):\n", " if not np.allclose(params[i]['mu'], params[i-1]['mu'])\\\n", " or not np.allclose(params[i]['sigma'], params[i-1]['sigma']):\n", " restart = False\n", " break\n", "\n", " if restart: \n", " old_log_estimate = sys.maxsize # init\n", " log_estimate = sys.maxsize/2 + epsilon # init\n", " params = [draw_params(t,nbclusters) for i in range(nbclusters)] # losujemy nowe parametry startowe\n", " print('RESTART')\n", " continue\n", " \n", " \n", " ####################################\n", " # liczymy estymatę log wiarygodności: równaie (1) #\n", " ####################################\n", " log_estimate = np.sum([np.log(np.sum(\\\n", " [Px[j,i]*params[i]['phi'] for i in range(nbclusters)]))\\\n", " for j in range(nbobs)])\n", " print(\"(EM) poprzednia i aktualna estymata log wiarygodności: \",\\\n", " old_log_estimate, log_estimate)\n", " estimation_round += 1\n", " ##########################\n", " # rysujemy aktualny stan modelu\n", " ##########################\n", " py.ioff()\n", " py.clf()\n", " py.ion()\n", " for i in range(nbclusters):\n", " plot_gauss(np.array(params[i]['mu']),np.array(params[i]['sigma']))\n", " py.plot(x[:,0],x[:,1],'g.')\n", " py.axis('equal')\n", " py.draw()\n", " \n", " \n", " # Pakujemy wyniki\n", " result['quality'] = -log_estimate\n", " result['params'] = copy.deepcopy(params)\n", " result['clusters'] = [[o for o in range(nbobs)\\\n", " if Px[o,c] == max(Px[o,:])]\\\n", " for c in range(nbclusters)]\n", " return result" ] }, { "cell_type": "markdown", "metadata": { "id": "GNj17_QjiKOW" }, "source": [ "## Finalny program ##\n", "Przykładowy program korzystający z powyższych funkcji:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 1000 }, "executionInfo": { "elapsed": 12776, "status": "ok", "timestamp": 1579108345407, "user": { "displayName": "Anna Dawid", "photoUrl": "https://lh3.googleusercontent.com/a-/AAuE7mBMAlqIzrWbyBbGSDvCFuCvvSN7Xx3h3HRKaToc0r4=s64", "userId": "02862484648310443813" }, "user_tz": -60 }, "id": "BxEgccceiOcU", "outputId": "8fa78a72-12fc-41ca-e758-032dc2d287af" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# robimy mieszankę dwóch gaussów:\n", "#parametry rozkładu\n", "# wektor średnich:\n", "mu1 = [-2,-3] \n", "# macierz kowariancji:\n", "Sigma1 = np.array([[1, 0.5],\n", " [0.5, 1]])\n", "# generujemy dane: \n", "x1 = np.random.multivariate_normal(mu1, Sigma1, 150) #\n", "mu2 = [-0.5,2] \n", "# macierz kowariancji:\n", "Sigma2 = np.array([[3, 0.5],\n", " [0.5, 1]])\n", "# generujemy dane: \n", "x2 = np.random.multivariate_normal(mu2, Sigma2, 150) #\n", "# łączymy x1 i x2 aby otrzymac jeden zbiór\n", "x = np.vstack((x1,x2))\n", "py.plot(x[:,0],x[:,1],'g.')\n", "py.axis('equal')\n", "py.show()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 1000 }, "executionInfo": { "elapsed": 12776, "status": "ok", "timestamp": 1579108345407, "user": { "displayName": "Anna Dawid", "photoUrl": "https://lh3.googleusercontent.com/a-/AAuE7mBMAlqIzrWbyBbGSDvCFuCvvSN7Xx3h3HRKaToc0r4=s64", "userId": "02862484648310443813" }, "user_tz": -60 }, "id": "BxEgccceiOcU", "outputId": "8fa78a72-12fc-41ca-e758-032dc2d287af" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "INIT: [[3.7379655 3.51770534]] [[3.09260637 0. ]\n", " [0. 7.29666613]] 0.5\n", "INIT: [[-0.1417545 1.70273737]] [[3.09260637 0. ]\n", " [0. 7.29666613]] 0.5\n", "------------------\n", "i: 0 phi: 0.09831091873699811\n", "i: 0 mu: [1.78018061 2.43870249]\n", "[[1.49030191 0.57658822]\n", " [0.57658822 1.45435356]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: 4.611686018427388e+18 -1655.7995426860143\n", "------------------\n", "i: 1 phi: 0.901689081263002\n", "i: 1 mu: [-1.43296654 -0.79338374]\n", "[[2.25231235 1.96136696]\n", " [1.96136696 6.90665855]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: 4.611686018427388e+18 -1484.5044124312935\n", "------------------\n", "i: 0 phi: 0.12853824974019779\n", "i: 0 mu: [1.73107568 2.43426508]\n", "[[1.17804182 0.2829741 ]\n", " [0.2829741 0.80058086]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1484.5044124312935 -1222.9583208873046\n", "------------------\n", "i: 1 phi: 0.8714617502598022\n", "i: 1 mu: [-1.53717422 -0.90483667]\n", "[[2.00202363 1.70635483]\n", " [1.70635483 6.82167099]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1484.5044124312935 -1231.7275228296498\n", "------------------\n", "i: 0 phi: 0.15894866602772295\n", "i: 0 mu: [1.61875812 2.41633076]\n", "[[1.1340343 0.23729634]\n", " [0.23729634 0.73113507]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1231.7275228296498 -1213.3552301338336\n", "------------------\n", "i: 1 phi: 0.841051333972277\n", "i: 1 mu: [-1.63411968 -1.02218127]\n", "[[1.78088327 1.44206327]\n", " [1.44206327 6.65816505]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1231.7275228296498 -1222.2039639596815\n", "------------------\n", "i: 0 phi: 0.18633274959941934\n", "i: 0 mu: [1.48729181 2.39696157]\n", "[[1.17736749 0.22445202]\n", " [0.22445202 0.73036239]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1222.2039639596815 -1209.030737493335\n", "------------------\n", "i: 1 phi: 0.8136672504005807\n", "i: 1 mu: [-1.71348947 -1.13346926]\n", "[[1.62222384 1.21764975]\n", " [1.21764975 6.47793293]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1222.2039639596815 -1217.0325494757017\n", "------------------\n", "i: 0 phi: 0.21213252084544176\n", "i: 0 mu: [1.35112957 2.38178713]\n", "[[1.25507281 0.21639316]\n", " [0.21639316 0.73568635]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1217.0325494757017 -1205.0563482103166\n", "------------------\n", "i: 1 phi: 0.7878674791545582\n", "i: 1 mu: [-1.78164178 -1.24499222]\n", "[[1.5054375 1.01665676]\n", " [1.01665676 6.27291213]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1217.0325494757017 -1212.6091982600403\n", "------------------\n", "i: 0 phi: 0.23684361467187923\n", "i: 0 mu: [1.21872748 2.37036541]\n", "[[1.34844931 0.21137784]\n", " [0.21137784 0.74012092]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1212.6091982600403 -1201.275503542213\n", "------------------\n", "i: 1 phi: 0.7631563853281207\n", "i: 1 mu: [-1.84199064 -1.35888306]\n", "[[1.41515112 0.82901611]\n", " [0.82901611 6.03761919]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1212.6091982600403 -1208.5175534930831\n", "------------------\n", "i: 0 phi: 0.260288325845671\n", "i: 0 mu: [1.09419161 2.35943666]\n", "[[1.45078806 0.21066228]\n", " [0.21066228 0.74371997]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1208.5175534930831 -1197.8650815643653\n", "------------------\n", "i: 1 phi: 0.7397116741543289\n", "i: 1 mu: [-1.89517679 -1.47323373]\n", "[[1.3443056 0.65570867]\n", " [0.65570867 5.77903473]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1208.5175534930831 -1204.7440311793887\n", "------------------\n", "i: 0 phi: 0.28214574253238445\n", "i: 0 mu: [0.97850888 2.3471686 ]\n", "[[1.56064902 0.21432807]\n", " [0.21432807 0.74663544]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1204.7440311793887 -1194.9348577792107\n", "------------------\n", "i: 1 phi: 0.7178542574676156\n", "i: 1 mu: [-1.94072988 -1.58511005]\n", "[[1.29029424 0.50198892]\n", " [0.50198892 5.50832545]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1204.7440311793887 -1201.3572002157016\n", "------------------\n", "i: 0 phi: 0.30226478186947064\n", "i: 0 mu: [0.87082306 2.33360317]\n", "[[1.67903722 0.22138465]\n", " [0.22138465 0.74913156]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1201.3572002157016 -1192.4701100390644\n", "------------------\n", "i: 1 phi: 0.6977352181305293\n", "i: 1 mu: [-1.97825508 -1.69261977]\n", "[[1.2514188 0.37215528]\n", " [0.37215528 5.23325881]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1201.3572002157016 -1198.3906553305167\n", "------------------\n", "i: 0 phi: 0.3207680862243403\n", "i: 0 mu: [0.7691163 2.31958438]\n", "[[1.80882202 0.23053414]\n", " [0.23053414 0.75163442]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1198.3906553305167 -1190.356079577811\n", "------------------\n", "i: 1 phi: 0.6792319137756597\n", "i: 1 mu: [-2.00783713 -1.79567978]\n", "[[1.22528149 0.26797764]\n", " [0.26797764 4.95522965]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1198.3906553305167 -1195.8085918769625\n", "------------------\n", "i: 0 phi: 0.33806368210043586\n", "i: 0 mu: [0.67014677 2.30586309]\n", "[[1.95620389 0.24073229]\n", " [0.24073229 0.75456021]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1195.8085918769625 -1188.4016489316473\n", "------------------\n", "i: 1 phi: 0.6619363178995641\n", "i: 1 mu: [-2.02984992 -1.89619893]\n", "[[1.20851091 0.18971305]\n", " [0.18971305 4.66854578]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1195.8085918769625 -1193.50309500448\n", "------------------\n", "i: 0 phi: 0.3548906717816331\n", "i: 0 mu: [0.56836694 2.2927726 ]\n", "[[2.13583161 0.25125113]\n", " [0.25125113 0.75835366]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1193.50309500448 -1186.319392816898\n", "------------------\n", "i: 1 phi: 0.6451093282183668\n", "i: 1 mu: [-2.04428484 -1.99860384]\n", "[[1.19648621 0.13917175]\n", " [0.13917175 4.35791897]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1193.50309500448 -1191.2835613100706\n", "------------------\n", "i: 0 phi: 0.3726250986755314\n", "i: 0 mu: [0.45219847 2.28036067]\n", "[[2.38595218 0.26097023]\n", " [0.26097023 0.76379272]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1191.2835613100706 -1183.5496652330664\n", "------------------\n", "i: 1 phi: 0.6273749013244687\n", "i: 1 mu: [-2.04914094 -2.11253907]\n", "[[1.18091586 0.12724234]\n", " [0.12724234 3.98606409]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1191.2835613100706 -1188.7749302895982\n", "------------------\n", "i: 0 phi: 0.3941338201784214\n", "i: 0 mu: [0.29699439 2.26830117]\n", "[[2.78870608 0.26880358]\n", " [0.26880358 0.77268045]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1188.7749302895982 -1178.579831968397\n", "------------------\n", "i: 1 phi: 0.6058661798215786\n", "i: 1 mu: [-2.03697561 -2.26064538]\n", "[[1.14329163 0.1910475 ]\n", " [0.1910475 3.45649182]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1188.7749302895982 -1184.8898494427638\n", "------------------\n", "i: 0 phi: 0.42177911751517283\n", "i: 0 mu: [0.10006416 2.24873708]\n", "[[3.28153851 0.30209207]\n", " [0.30209207 0.78975088]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1184.8898494427638 -1168.4084282842948\n", "------------------\n", "i: 1 phi: 0.5782208824848272\n", "i: 1 mu: [-2.0049156 -2.46290778]\n", "[[1.0859133 0.34522789]\n", " [0.34522789 2.67976271]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1184.8898494427638 -1176.4672004481392\n", "------------------\n", "i: 0 phi: 0.4506758356189932\n", "i: 0 mu: [-0.07054161 2.20106043]\n", "[[3.5945725 0.4123989 ]\n", " [0.4123989 0.82177388]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1176.4672004481392 -1152.6685622636464\n", "------------------\n", "i: 1 phi: 0.5493241643810067\n", "i: 1 mu: [-1.97567805 -2.67164493]\n", "[[1.04503581 0.47652181]\n", " [0.47652181 1.90827658]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1176.4672004481392 -1161.086987578365\n", "------------------\n", "i: 0 phi: 0.4740689191549152\n", "i: 0 mu: [-0.17684458 2.13597779]\n", "[[3.72816176 0.54609748]\n", " [0.54609748 0.88988485]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1161.086987578365 -1135.6864859090447\n", "------------------\n", "i: 1 phi: 0.5259310808450848\n", "i: 1 mu: [-1.96459691 -2.82971497]\n", "[[1.00457128 0.52013442]\n", " [0.52013442 1.3820325 ]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1161.086987578365 -1142.5422431119364\n", "------------------\n", "i: 0 phi: 0.4880124198288961\n", "i: 0 mu: [-0.22472336 2.08549312]\n", "[[3.75413611 0.62778202]\n", " [0.62778202 0.96315115]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1142.5422431119364 -1124.51778020423\n", "------------------\n", "i: 1 phi: 0.5119875801711039\n", "i: 1 mu: [-1.96764794 -2.91683035]\n", "[[0.97957717 0.5098754 ]\n", " [0.5098754 1.12194572]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1142.5422431119364 -1128.6429638279867\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "------------------\n", "i: 0 phi: 0.49429922837376894\n", "i: 0 mu: [-0.24063619 2.05914542]\n", "[[3.73955803 0.6565557 ]\n", " [0.6565557 1.0083362 ]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1128.6429638279867 -1121.8609683929806\n", "------------------\n", "i: 1 phi: 0.505700771626231\n", "i: 1 mu: [-1.97376169 -2.95326495]\n", "[[0.97550245 0.49395577]\n", " [0.49395577 1.02431802]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1128.6429638279867 -1123.7350938008813\n", "------------------\n", "i: 0 phi: 0.49677008131405587\n", "i: 0 mu: [-0.24656374 2.04794115]\n", "[[3.73091281 0.66769409]\n", " [0.66769409 1.02953523]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1123.7350938008813 -1122.1117406318335\n", "------------------\n", "i: 1 phi: 0.5032299186859441\n", "i: 1 mu: [-1.97641986 -2.96681538]\n", "[[0.97595785 0.48790575]\n", " [0.48790575 0.99068122]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1123.7350938008813 -1122.8511437825937\n", "------------------\n", "i: 0 phi: 0.49766068195923263\n", "i: 0 mu: [-0.2487601 2.04374192]\n", "[[3.72779042 0.67199256]\n", " [0.67199256 1.03793212]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1122.8511437825937 -1122.4546447124349\n", "------------------\n", "i: 1 phi: 0.5023393180407673\n", "i: 1 mu: [-1.97731083 -2.97154596]\n", "[[0.97638404 0.48604357]\n", " [0.48604357 0.97939301]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1122.8511437825937 -1122.72158356519\n", "------------------\n", "i: 0 phi: 0.49797160068015744\n", "i: 0 mu: [-0.24954091 2.04224954]\n", "[[3.72672048 0.67355332]\n", " [0.67355332 1.04099434]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1122.72158356519 -1122.6117071997405\n", "------------------\n", "i: 1 phi: 0.5020283993198424\n", "i: 1 mu: [-1.97760687 -2.97317173]\n", "[[0.97656769 0.48545276]\n", " [0.48545276 0.97558499]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1122.72158356519 -1122.7049533727618\n", "------------------\n", "i: 0 phi: 0.498078909472362\n", "i: 0 mu: [-0.24981243 2.04173077]\n", "[[3.7263547 0.67410078]\n", " [0.67410078 1.04206991]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1122.7049533727618 -1122.6707465442037\n", "------------------\n", "i: 1 phi: 0.501921090527638\n", "i: 1 mu: [-1.97770687 -2.97372921]\n", "[[0.97663541 0.48525711]\n", " [0.48525711 0.97428906]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1122.7049533727618 -1122.7029356734224\n", "------------------\n", "i: 0 phi: 0.49811579441387305\n", "i: 0 mu: [-0.24990602 2.04155198]\n", "[[3.72622943 0.67429008]\n", " [0.67429008 1.04244202]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1122.7029356734224 -1122.6916306919634\n", "------------------\n", "i: 1 phi: 0.501884205586127\n", "i: 1 mu: [-1.97774098 -2.97392036]\n", "[[0.97665922 0.4851909 ]\n", " [0.4851909 0.97384595]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1122.7029356734224 -1122.7026957598496\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "res = expectation_maximization(x, nbclusters=2, nbiter=3, normalize=False,\\\n", " epsilon=0.001, monotony=False, datasetinit=True)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 1000 }, "executionInfo": { "elapsed": 12776, "status": "ok", "timestamp": 1579108345407, "user": { "displayName": "Anna Dawid", "photoUrl": "https://lh3.googleusercontent.com/a-/AAuE7mBMAlqIzrWbyBbGSDvCFuCvvSN7Xx3h3HRKaToc0r4=s64", "userId": "02862484648310443813" }, "user_tz": -60 }, "id": "BxEgccceiOcU", "outputId": "8fa78a72-12fc-41ca-e758-032dc2d287af" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# robimy mieszankę dwóch gaussów:\n", "\n", "#parametry rozkładu\n", "# wektor średnich:\n", "mu1 = [-2,-3] \n", "# macierz kowariancji:\n", "Sigma1 = np.array([[1, 0.5],\n", " [0.5, 1]])\n", "# generujemy dane: \n", "x1 = np.random.multivariate_normal(mu1, Sigma1, 150) #\n", "mu2 = [-0.5,2] \n", "# macierz kowariancji:\n", "Sigma2 = np.array([[3, 0.5],\n", " [0.5, 1]])\n", "# generujemy dane: \n", "x2 = np.random.multivariate_normal(mu2, Sigma2, 150) #\n", "# łączymy x1 i x2 aby otrzymac jeden zbiór\n", "x = np.vstack((x1,x2))\n", "py.plot(x[:,0],x[:,1],'g.')\n", "py.axis('equal')\n", "py.show()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 1000 }, "executionInfo": { "elapsed": 12776, "status": "ok", "timestamp": 1579108345407, "user": { "displayName": "Anna Dawid", "photoUrl": "https://lh3.googleusercontent.com/a-/AAuE7mBMAlqIzrWbyBbGSDvCFuCvvSN7Xx3h3HRKaToc0r4=s64", "userId": "02862484648310443813" }, "user_tz": -60 }, "id": "BxEgccceiOcU", "outputId": "8fa78a72-12fc-41ca-e758-032dc2d287af" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "INIT: [[1.88854544 4.4809928 ]] [[2.55334645 0. ]\n", " [0. 7.46562766]] 0.5\n", "INIT: [[-1.89597826 2.60000583]] [[2.55334645 0. ]\n", " [0. 7.46562766]] 0.5\n", "------------------\n", "i: 0 phi: 0.202080315590603\n", "i: 0 mu: [0.89676781 2.05985793]\n", "[[1.59946278 0.55159127]\n", " [0.55159127 1.95449976]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: 4.611686018427388e+18 -1635.6802886983014\n", "------------------\n", "i: 1 phi: 0.797919684409397\n", "i: 1 mu: [-1.77466472 -1.11990772]\n", "[[1.35276941 1.34951631]\n", " [1.34951631 6.81815442]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: 4.611686018427388e+18 -1513.8113066185715\n", "------------------\n", "i: 0 phi: 0.21782746997821958\n", "i: 0 mu: [0.8972999 2.23267453]\n", "[[1.50503091 0.17078672]\n", " [0.17078672 0.89287208]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1513.8113066185715 -1189.873940914717\n", "------------------\n", "i: 1 phi: 0.7821725300217803\n", "i: 1 mu: [-1.82859574 -1.23205237]\n", "[[1.22672362 1.16549925]\n", " [1.16549925 6.68120303]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1513.8113066185715 -1194.5204140186559\n", "------------------\n", "i: 0 phi: 0.24112933869633732\n", "i: 0 mu: [0.79123629 2.30856754]\n", "[[1.55606874 0.05463729]\n", " [0.05463729 0.71283042]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1194.5204140186559 -1172.7697385775327\n", "------------------\n", "i: 1 phi: 0.7588706613036628\n", "i: 1 mu: [-1.87859559 -1.36255503]\n", "[[1.15145858 0.99001138]\n", " [0.99001138 6.36157878]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1194.5204140186559 -1179.5945847061998\n", "------------------\n", "i: 0 phi: 0.26478642993740265\n", "i: 0 mu: [0.65453323 2.35017413]\n", "[[ 1.69552096 -0.00400312]\n", " [-0.00400312 0.68956795]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1179.5945847061998 -1167.5512404046667\n", "------------------\n", "i: 1 phi: 0.7352135700625974\n", "i: 1 mu: [-1.91526975 -1.49566593]\n", "[[1.11367169 0.86375343]\n", " [0.86375343 5.98969884]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1179.5945847061998 -1174.476398864926\n", "------------------\n", "i: 0 phi: 0.2904596897439035\n", "i: 0 mu: [0.49801156 2.37375007]\n", "[[ 1.88955817 -0.04331859]\n", " [-0.04331859 0.6881575 ]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1174.476398864926 -1162.868444232051\n", "------------------\n", "i: 1 phi: 0.7095403102560965\n", "i: 1 mu: [-1.94417858 -1.64447088]\n", "[[1.09269033 0.77247432]\n", " [0.77247432 5.55028342]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1174.476398864926 -1170.3636232811537\n", "------------------\n", "i: 0 phi: 0.3194225830655305\n", "i: 0 mu: [0.32457354 2.38509749]\n", "[[ 2.12165443 -0.06488232]\n", " [-0.06488232 0.69054787]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1170.3636232811537 -1157.1058474168717\n", "------------------\n", "i: 1 phi: 0.6805774169344695\n", "i: 1 mu: [-1.96670779 -1.82079752]\n", "[[1.078998 0.71072945]\n", " [0.71072945 4.99500471]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1170.3636232811537 -1165.5267346643886\n", "------------------\n", "i: 0 phi: 0.3517287204605802\n", "i: 0 mu: [0.14488841 2.3824865 ]\n", "[[ 2.36292751 -0.05794815]\n", " [-0.05794815 0.69399533]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1165.5267346643886 -1149.9178712961925\n", "------------------\n", "i: 1 phi: 0.6482712795394199\n", "i: 1 mu: [-1.98340146 -2.02897867]\n", "[[1.06346426 0.67492348]\n", " [0.67492348 4.29467081]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1165.5267346643886 -1159.2759797558444\n", "------------------\n", "i: 0 phi: 0.3852628383936533\n", "i: 0 mu: [-0.01252738 2.36260025]\n", "[[ 2.52566129 -0.02338229]\n", " [-0.02338229 0.70107087]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1159.2759797558444 -1141.4999317584577\n", "------------------\n", "i: 1 phi: 0.6147371616063467\n", "i: 1 mu: [-2.00084611 -2.25716264]\n", "[[1.04759456 0.63686491]\n", " [0.63686491 3.48269301]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1159.2759797558444 -1151.2077165900441\n", "------------------\n", "i: 0 phi: 0.4168438345329143\n", "i: 0 mu: [-0.12482992 2.32475093]\n", "[[2.56721116 0.02616388]\n", " [0.02616388 0.71890898]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1151.2077165900441 -1132.59000125163\n", "------------------\n", "i: 1 phi: 0.5831561654670857\n", "i: 1 mu: [-2.02824951 -2.48029233]\n", "[[1.03320809 0.55524864]\n", " [0.55524864 2.66395203]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1151.2077165900441 -1141.7598906971907\n", "------------------\n", "i: 0 phi: 0.4447714875714726\n", "i: 0 mu: [-0.19938018 2.27036914]\n", "[[2.55444157 0.08419112]\n", " [0.08419112 0.75388014]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1141.7598906971907 -1123.120817672416\n", "------------------\n", "i: 1 phi: 0.5552285124285273\n", "i: 1 mu: [-2.0642711 -2.67841996]\n", "[[1.00563485 0.43482703]\n", " [0.43482703 1.94945963]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1141.7598906971907 -1131.2667058411143\n", "------------------\n", "i: 0 phi: 0.4665558806136518\n", "i: 0 mu: [-0.25022242 2.21247575]\n", "[[2.54740789 0.14705069]\n", " [0.14705069 0.80557914]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1131.2667058411143 -1113.8295512348798\n", "------------------\n", "i: 1 phi: 0.5334441193863484\n", "i: 1 mu: [-2.09596096 -2.82988075]\n", "[[0.96910076 0.32439499]\n", " [0.32439499 1.42822585]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1131.2667058411143 -1120.2256092694781\n", "------------------\n", "i: 0 phi: 0.480355222685318\n", "i: 0 mu: [-0.29411663 2.16470961]\n", "[[2.59199791 0.2268595 ]\n", " [0.2268595 0.86934816]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1120.2256092694781 -1107.1639622321345\n", "------------------\n", "i: 1 phi: 0.519644777314682\n", "i: 1 mu: [-2.10439973 -2.91962761]\n", "[[0.94343331 0.29158096]\n", " [0.29158096 1.14575697]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1120.2256092694781 -1111.2474783332423\n", "------------------\n", "i: 0 phi: 0.48948488362507436\n", "i: 0 mu: [-0.33880961 2.12516076]\n", "[[2.67606604 0.32261343]\n", " [0.32261343 0.93954437]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1111.2474783332423 -1103.335430265533\n", "------------------\n", "i: 1 phi: 0.5105151163749256\n", "i: 1 mu: [-2.09392156 -2.97263233]\n", "[[0.92786416 0.32170951]\n", " [0.32170951 1.00238887]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1111.2474783332423 -1106.0493862642104\n", "------------------\n", "i: 0 phi: 0.494917933401467\n", "i: 0 mu: [-0.36788847 2.09986687]\n", "[[2.73424949 0.38703859]\n", " [0.38703859 0.98848444]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1106.0493862642104 -1100.9643420596594\n", "------------------\n", "i: 1 phi: 0.5050820665985329\n", "i: 1 mu: [-2.0843072 -3.00268322]\n", "[[0.91800947 0.35065155]\n", " [0.35065155 0.9267347 ]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1106.0493862642104 -1102.5854197511162\n", "------------------\n", "i: 0 phi: 0.4966524051788331\n", "i: 0 mu: [-0.37607903 2.09150488]\n", "[[2.74792358 0.40526717]\n", " [0.40526717 1.00575678]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1102.5854197511162 -1100.815042636074\n", "------------------\n", "i: 1 phi: 0.5033475948211668\n", "i: 1 mu: [-2.08214015 -3.01201519]\n", "[[0.91577883 0.35771194]\n", " [0.35771194 0.90380633]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1102.5854197511162 -1101.3344810803126\n", "------------------\n", "i: 0 phi: 0.4970185493683024\n", "i: 0 mu: [-0.37750547 2.08962234]\n", "[[2.74967735 0.40854888]\n", " [0.40854888 1.01007322]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1101.3344810803126 -1101.1187419674366\n", "------------------\n", "i: 1 phi: 0.5029814506316974\n", "i: 1 mu: [-2.08197254 -3.01387006]\n", "[[0.91540081 0.35846124]\n", " [0.35846124 0.89948719]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1101.3344810803126 -1101.228544902357\n", "------------------\n", "i: 0 phi: 0.4970878898755495\n", "i: 0 mu: [-0.37773916 2.08924953]\n", "[[2.74989087 0.40909997]\n", " [0.40909997 1.01098085]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1101.228544902357 -1101.2041013795933\n", "------------------\n", "i: 1 phi: 0.5029121101244505\n", "i: 1 mu: [-2.08197657 -3.01420523]\n", "[[0.91532362 0.35851704]\n", " [0.35851704 0.89874463]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1101.228544902357 -1101.22490208489\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "------------------\n", "i: 0 phi: 0.4971006247639296\n", "i: 0 mu: [-0.37777871 2.08917968]\n", "[[2.74991982 0.40919413]\n", " [0.40919413 1.01115512]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1101.22490208489 -1101.2209686903525\n", "------------------\n", "i: 1 phi: 0.5028993752360705\n", "i: 1 mu: [-2.08198063 -3.01426542]\n", "[[0.91530827 0.35851965]\n", " [0.35851965 0.89861474]]\n", "(EM) poprzednia i aktualna estymata log wiarygodności: -1101.22490208489 -1101.224789108058\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Dopasowany model: \n", "[{'mu': array([-0.37777871, 2.08917968]), 'sigma': matrix([[2.74991982, 0.40919413],\n", " [0.40919413, 1.01115512]]), 'phi': 0.4971006247639296}, {'mu': array([-2.08198063, -3.01426542]), 'sigma': matrix([[0.91530827, 0.35851965],\n", " [0.35851965, 0.89861474]]), 'phi': 0.5028993752360705}]\n" ] } ], "source": [ "py.figure()\n", "res = expectation_maximization(x, nbclusters=2, nbiter=3, normalize=False,\\\n", " epsilon=0.001, monotony=False, datasetinit=True)\n", "py.ioff()\n", "py.show()\n", "# wypisz parametry\n", "print('Dopasowany model: ')\n", "print(res['params'])" ] }, { "cell_type": "markdown", "metadata": { "id": "F6bCHBu9iUjw" }, "source": [ "Aby obliczyć gęstość prawdopodobieństwa rozkładu mieszanego dla pewnego nowego punktu \"x\" możemy zastosować poniższą funkcję:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "executionInfo": { "elapsed": 694, "status": "ok", "timestamp": 1579108353568, "user": { "displayName": "Anna Dawid", "photoUrl": "https://lh3.googleusercontent.com/a-/AAuE7mBMAlqIzrWbyBbGSDvCFuCvvSN7Xx3h3HRKaToc0r4=s64", "userId": "02862484648310443813" }, "user_tz": -60 }, "id": "vviQVJYmiWXU", "outputId": "eae76f56-a399-4ff5-d540-71ccb273642c" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "P(x=( (6, -4) )): [[1.4389512e-16]]\n" ] } ], "source": [ "def prob_mix(params, x):\n", " '''params - parametry dopasowanego gaussowskiego modelu mieszanego\n", " x - punkt wejścowy,\n", " \n", " funkcja zwraca gestość prawdopodobieństwa, dla x w rozkładzie mieszanym\n", " '''\n", " prob = 0\n", " for i in range(len(params)):\n", " prob+= pnorm(x, params[i]['mu'], params[i]['sigma']) * params[i]['phi']\n", " \n", " \n", " return prob\n", "#---------------- przykładowe użycie: ----------------\n", "x=(6,-4)\n", "print('P(x=(',str(x),')):', prob_mix(res['params'], x))" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "id": "t2MhfOfjMULv" }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# narysuj gęstość pradopodobieństwa korzystając z prob_mix() na siatce [-6,6] x [-6,6]\n", "n = 30\n", "X = np.linspace(-6,6,n)\n", "xx, yy = np.meshgrid(X, X, )\n", "Z = np.zeros((n,n))\n", "for ix, x in enumerate(xx):\n", " for iy, y in enumerate(yy):\n", " Z[ix, iy] = prob_mix( res['params'], (xx[ix,iy],yy[ix,iy]) )\n", "plt.contourf(X,X,Z, levels=15)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "colab": { "collapsed_sections": [], "name": "08M_Uczenie_bez_nadzoru.ipynb", "provenance": [] }, "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.8.6" } }, "nbformat": 4, "nbformat_minor": 2 }