diff --git a/big-data/.ipynb_checkpoints/tp1-checkpoint.ipynb b/big-data/.ipynb_checkpoints/tp1-checkpoint.ipynb new file mode 100644 index 0000000..3427760 --- /dev/null +++ b/big-data/.ipynb_checkpoints/tp1-checkpoint.ipynb @@ -0,0 +1,131 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "bae3ebf0", + "metadata": {}, + "outputs": [], + "source": [ + "import random\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "9321da00", + "metadata": {}, + "outputs": [], + "source": [ + "# Génération des données d'entraînement\n", + "data = [\n", + " (np.array([random.random() * 10, random.random() * 10]), 1) for _ in range(100)\n", + "] + [\n", + " (np.array([random.random() * -10, random.random() * -10]), 0) for _ in range(100)\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "36ad1dc5", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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RpmZmViwYAEyMzO9bopjgv4eg/7+AL7HoAj6ewz6+wP4Hp0WyiRjIiIiCjb24BAREVHgMMAhIiKiwGGAQ0RERIHDAIeIiIgChwGOBYsXL8aYMWNw1lln4eyzz9bcZv/+/ZgyZQp69eqFnJwc3HXXXWhtbU34vC0tLbjzzjuRk5ODXr164ZprrsHBgwcdeAfW1NTUIBKJaN527Nihu19paWmX7UeNGuViy60pLi7u0t4HHngg4T5CCCxcuBCFhYXo2bMnxo8fjw8//NClFluzb98+3HzzzRg0aBB69uyJwYMHY8GCBYafS9nP469//WsMGjQIPXr0wMiRI7Fly5aE22/evBkjR45Ejx49cO6552LFihUutdSaJUuW4Dvf+Q569+6N3NxcXHvttdi9e3fCffT+X/3kk09carU1Cxcu7NLW/Pz8hPv45fyptL5XIpEI7rjjDs3t/XAO3377bUyZMgWFhYWIRCJ4/fXXYx5P9nuxsrIS5513HjIzM3Heeedh7dq1trSXAY4Fra2tmD59On7yk59oPt7e3o6rrroKJ0+exNatW7FmzRpUVlbinnvuSfi8ZWVlWLt2LdasWYOtW7fixIkTuPrqq9He3u7E2zBtzJgxaGhoiLndcsstKC4uxsUXX5xw38svvzxmv9///vcutTo5jzzySEx7H3744YTbL126FE8//TSeeeYZ7NixA/n5+fj+97/fsc6ZTD755BOcPn0av/nNb/Dhhx9i2bJlWLFiBR588EHDfWU9jy+//DLKysrw0EMPoba2FmPHjsUVV1yB/fv3a25fV1eHK6+8EmPHjkVtbS0efPBB3HXXXaisrHS55cY2b96MO+64A++88w42btyItrY2TJo0CSdPnjTcd/fu3THna8iQIS60ODnnn39+TFt37dqlu62fzp9qx44dMe9v48aNAIDp06cn3E/mc3jy5ElceOGFeOaZZzQfT+Z7cfv27Zg5cyZmzZqFv/zlL5g1axZmzJiBd999N/UGC7KsvLxcZGVldbn/97//vejWrZuor6/vuG/16tUiMzNTNDU1aT7XV199JdLT08WaNWs67quvrxfdunUTf/jDH2xveypaW1tFbm6ueOSRRxJuN3v2bDF16lR3GmWDgQMHimXLlpne/vTp0yI/P1889thjHfd9/fXXIisrS6xYscKBFtpv6dKlYtCgQQm3kfk8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lZWVXrwFQ/fcc4+oqakRe/fuFe+88464+uqrRe/evQNx/jprb28X55xzjrj//vu7PObHc3j8+PGO6x6Aju/Ozz77TAhh7ntx1qxZMbMd//u//1ukpaWJxx57THz88cfiscceE927dxfvvPNOyu1lgGPB7NmzBYAut+rq6o5tPvvsM3HVVVeJnj17in79+ok5c+aIr7/+uuPxurq6Lvv8/e9/F3PmzBH9+vUTPXv2FFdffbXYv3+/i+8ssRtuuEGMGTNG93EAory8XAghxN/+9jcxadIk0b9/f5Geni7OOeccMXv2bKneT2c7d+4Ul1xyicjKyhI9evQQQ4cOFQsWLBAnT56M2a7zexRCmRK5YMECkZ+fLzIzM8Wll14qdu3a5XLrzSkvL9f83Mb/vvHbefzVr34lBg4cKDIyMsRFF10UM4169uzZYty4cTHb19TUiBEjRoiMjAxRXFwsnn32WZdbbI7euer8+Yt/f48//rgYPHiw6NGjh+jbt6/47ne/K9544w33G2/SzJkzRUFBgUhPTxeFhYWipKREfPjhhx2P+/n8dfbmm28KAGL37t1dHvPjOVSnssffZs+eLYQw9704bty4ju1Vr776qhg6dKhIT08Xw4YNsy2oiwjxf5laRERERAHBaeJEREQUOAxwiIiIKHAY4BAREVHgMMAhIiKiwGGAQ0RERIHDAIeIiIgChwEOERERBQ4DHCIiIgocBjhEREQUOAxwiIiIKHAY4BAREVHgMMAhIiKiwPn/2wdQSeB92CcAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "xpoints_1 = [item[0][0] for item in data if item[1] == 1]\n", + "ypoints_1 = [item[0][1] for item in data if item[1] == 1]\n", + "xpoints_0 = [item[0][0] for item in data if item[1] == 0]\n", + "ypoints_0 = [item[0][1] for item in data if item[1] == 0]\n", + "\n", + "plt.plot(xpoints_1, ypoints_1, 'or')\n", + "plt.plot(xpoints_0, ypoints_0, 'ob')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "e30494c9", + "metadata": {}, + "outputs": [], + "source": [ + "# Initialisation\n", + "alpha = 0.1\n", + "w = [np.array([0, 0])] * 200\n", + "b = 0.5" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "5a20d539", + "metadata": {}, + "outputs": [], + "source": [ + "def threshold(z):\n", + " if z >= 0:\n", + " return 1\n", + " return 0\n", + "\n", + "def h_w(x, w):\n", + " return threshold(sum(w * x))" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "ae5b684a", + "metadata": {}, + "outputs": [], + "source": [ + "# tant que (nombre maximal d'itérations atteint ou nombre d'erreurs == 0):\n", + "has_errors = True\n", + "while has_errors:\n", + " has_errors = False\n", + " # Pour chaque paire (X_t, y_t):\n", + " for i, (x, y) in enumerate(data):\n", + " # a. calculer h_w(x)\n", + " predicted = h_w(x, w[i])\n", + " # b. si y != h_w(x):\n", + " if predicted != y:\n", + " has_errors = True\n", + " # w = w + alpha(p.y - h_w(x)) * x\n", + " w[i] = w[i] + alpha * (y - predicted) * x" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.10.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/big-data/tp1.ipynb b/big-data/tp1.ipynb new file mode 100644 index 0000000..3427760 --- /dev/null +++ b/big-data/tp1.ipynb @@ -0,0 +1,131 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "bae3ebf0", + "metadata": {}, + "outputs": [], + "source": [ + "import random\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "9321da00", + "metadata": {}, + "outputs": [], + "source": [ + "# Génération des données d'entraînement\n", + "data = [\n", + " (np.array([random.random() * 10, random.random() * 10]), 1) for _ in range(100)\n", + "] + [\n", + " (np.array([random.random() * -10, random.random() * -10]), 0) for _ in range(100)\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "36ad1dc5", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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RpmZmViwYAEyMzO9bopjgv4eg/7+AL7HoAj6ewz6+wP4Hp0WyiRjIiIiCjb24BAREVHgMMAhIiKiwGGAQ0RERIHDAIeIiIgChwGOBYsXL8aYMWNw1lln4eyzz9bcZv/+/ZgyZQp69eqFnJwc3HXXXWhtbU34vC0tLbjzzjuRk5ODXr164ZprrsHBgwcdeAfW1NTUIBKJaN527Nihu19paWmX7UeNGuViy60pLi7u0t4HHngg4T5CCCxcuBCFhYXo2bMnxo8fjw8//NClFluzb98+3HzzzRg0aBB69uyJwYMHY8GCBYafS9nP469//WsMGjQIPXr0wMiRI7Fly5aE22/evBkjR45Ejx49cO6552LFihUutdSaJUuW4Dvf+Q569+6N3NxcXHvttdi9e3fCffT+X/3kk09carU1Cxcu7NLW/Pz8hPv45fyptL5XIpEI7rjjDs3t/XAO3377bUyZMgWFhYWIRCJ4/fXXYx5P9nuxsrIS5513HjIzM3Heeedh7dq1trSXAY4Fra2tmD59On7yk59oPt7e3o6rrroKJ0+exNatW7FmzRpUVlbinnvuSfi8ZWVlWLt2LdasWYOtW7fixIkTuPrqq9He3u7E2zBtzJgxaGhoiLndcsstKC4uxsUXX5xw38svvzxmv9///vcutTo5jzzySEx7H3744YTbL126FE8//TSeeeYZ7NixA/n5+fj+97/fsc6ZTD755BOcPn0av/nNb/Dhhx9i2bJlWLFiBR588EHDfWU9jy+//DLKysrw0EMPoba2FmPHjsUVV1yB/fv3a25fV1eHK6+8EmPHjkVtbS0efPBB3HXXXaisrHS55cY2b96MO+64A++88w42btyItrY2TJo0CSdPnjTcd/fu3THna8iQIS60ODnnn39+TFt37dqlu62fzp9qx44dMe9v48aNAIDp06cn3E/mc3jy5ElceOGFeOaZZzQfT+Z7cfv27Zg5cyZmzZqFv/zlL5g1axZmzJiBd999N/UGC7KsvLxcZGVldbn/97//vejWrZuor6/vuG/16tUiMzNTNDU1aT7XV199JdLT08WaNWs67quvrxfdunUTf/jDH2xveypaW1tFbm6ueOSRRxJuN3v2bDF16lR3GmWDgQMHimXLlpne/vTp0yI/P1889thjHfd9/fXXIisrS6xYscKBFtpv6dKlYtCgQQm3kfk8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lZWVXrwFQ/fcc4+oqakRe/fuFe+88464+uqrRe/evQNx/jprb28X55xzjrj//vu7PObHc3j8+PGO6x6Aju/Ozz77TAhh7ntx1qxZMbMd//u//1ukpaWJxx57THz88cfiscceE927dxfvvPNOyu1lgGPB7NmzBYAut+rq6o5tPvvsM3HVVVeJnj17in79+ok5c+aIr7/+uuPxurq6Lvv8/e9/F3PmzBH9+vUTPXv2FFdffbXYv3+/i+8ssRtuuEGMGTNG93EAory8XAghxN/+9jcxadIk0b9/f5Geni7OOeccMXv2bKneT2c7d+4Ul1xyicjKyhI9evQQQ4cOFQsWLBAnT56M2a7zexRCmRK5YMECkZ+fLzIzM8Wll14qdu3a5XLrzSkvL9f83Mb/vvHbefzVr34lBg4cKDIyMsRFF10UM4169uzZYty4cTHb19TUiBEjRoiMjAxRXFwsnn32WZdbbI7euer8+Yt/f48//rgYPHiw6NGjh+jbt6/47ne/K9544w33G2/SzJkzRUFBgUhPTxeFhYWipKREfPjhhx2P+/n8dfbmm28KAGL37t1dHvPjOVSnssffZs+eLYQw9704bty4ju1Vr776qhg6dKhIT08Xw4YNsy2oiwjxf5laRERERAHBaeJEREQUOAxwiIiIKHAY4BAREVHgMMAhIiKiwGGAQ0RERIHDAIeIiIgChwEOERERBQ4DHCIiIgocBjhEREQUOAxwiIiIKHAY4BAREVHgMMAhIiKiwPn/2wdQSeB92CcAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "xpoints_1 = [item[0][0] for item in data if item[1] == 1]\n", + "ypoints_1 = [item[0][1] for item in data if item[1] == 1]\n", + "xpoints_0 = [item[0][0] for item in data if item[1] == 0]\n", + "ypoints_0 = [item[0][1] for item in data if item[1] == 0]\n", + "\n", + "plt.plot(xpoints_1, ypoints_1, 'or')\n", + "plt.plot(xpoints_0, ypoints_0, 'ob')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "e30494c9", + "metadata": {}, + "outputs": [], + "source": [ + "# Initialisation\n", + "alpha = 0.1\n", + "w = [np.array([0, 0])] * 200\n", + "b = 0.5" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "5a20d539", + "metadata": {}, + "outputs": [], + "source": [ + "def threshold(z):\n", + " if z >= 0:\n", + " return 1\n", + " return 0\n", + "\n", + "def h_w(x, w):\n", + " return threshold(sum(w * x))" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "ae5b684a", + "metadata": {}, + "outputs": [], + "source": [ + "# tant que (nombre maximal d'itérations atteint ou nombre d'erreurs == 0):\n", + "has_errors = True\n", + "while has_errors:\n", + " has_errors = False\n", + " # Pour chaque paire (X_t, y_t):\n", + " for i, (x, y) in enumerate(data):\n", + " # a. calculer h_w(x)\n", + " predicted = h_w(x, w[i])\n", + " # b. si y != h_w(x):\n", + " if predicted != y:\n", + " has_errors = True\n", + " # w = w + alpha(p.y - h_w(x)) * x\n", + " w[i] = w[i] + alpha * (y - predicted) * x" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.10.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}