diff --git a/exercise.ipynb b/exercise.ipynb index 8f4f300..8cd2a45 100644 --- a/exercise.ipynb +++ b/exercise.ipynb @@ -78,22 +78,22 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 1, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -154,7 +154,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -256,7 +256,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -273,8 +273,12 @@ " ##################\n", " ##TODO\n", " #################\n", - " identity_matrix = np.identity(y.shape[0])\n", - " weights = (Phi.transpose() * Phi + ridge_factor * identity_matrix)^-1 * np.linalg.solve(Phi.transpose(), )" + " identity_matrix = np.identity(Phi.shape[1])\n", + " #for Ax=b\n", + " A = (Phi.transpose().dot(Phi) + ridge_factor * identity_matrix)\n", + " b = (Phi.transpose().dot(y))\n", + " weights = np.linalg.solve(A,b)\n", + " return weights" ] }, { @@ -292,23 +296,9 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 10, "metadata": {}, - "outputs": [ - { - "ename": "TypeError", - "evalue": "unsupported operand type(s) for *: 'float' and 'NoneType'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 21\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mw\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mweights_ridge\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 23\u001b[0;31m \u001b[0my_training_ridge\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0meval\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnorm_train_features\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mw\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 24\u001b[0m \u001b[0my_test_ridge\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0meval\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnorm_test_features\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mw\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m\u001b[0m in \u001b[0;36meval\u001b[0;34m(Phi, w)\u001b[0m\n\u001b[1;32m 64\u001b[0m \u001b[0mEvaluates\u001b[0m \u001b[0myour\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 65\u001b[0m \"\"\"\n\u001b[0;32m---> 66\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mPhi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mw\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 67\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m<__array_function__ internals>\u001b[0m in \u001b[0;36mdot\u001b[0;34m(*args, **kwargs)\u001b[0m\n", - "\u001b[0;31mTypeError\u001b[0m: unsupported operand type(s) for *: 'float' and 'NoneType'" - ] - } - ], + "outputs": [], "source": [ "# Let's do it on polynomial degree 10 and see the results\n", "\n", @@ -345,9 +335,32 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "training_error_ridge = []\n", "test_error_ridge = []\n", @@ -374,13 +387,36 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": { "pycharm": { "name": "#%%\n" } }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAAD4CAYAAAAEhuazAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAAuu0lEQVR4nO3deXiU1d3/8ffJnslCQkggEJKgArJJgLCJqFVUFIpiVdRotY8a24qXferPR2lUrIpdtK11qQrWluKIBbS4VCtFBUUQDJvsEMhCEpYsZF8myZzfHzMJk2QmC8lktu/runIlc99nZk5YPjn5nnOfW2mtEUII4Vv8XN0BIYQQfU/CXwghfJCEvxBC+CAJfyGE8EES/kII4YMCXN2BrhowYIBOTk52dTeEEMJjbN++vVhrHWvvnMeEf3JyMpmZma7uhhBCeAylVK6jc1L2EUIIHyThL4QQPkjCXwghfJDH1PztaWhoID8/n7q6Old3RViFhISQkJBAYGCgq7sihOiAR4d/fn4+ERERJCcno5RydXd8ntaakpIS8vPzGTZsmKu7I4TogEeXferq6oiJiZHgdxNKKWJiYuQ3MSE8gEeHPyDB72bk70MIz+Dx4S+EEN7qy4On+ds32Zgazb3+2hL+Qgjhpl7bcJTlm3MI8Ov936h9K/yNRkhOBj8/y2ejsUcvV1ZWxl/+8pdzeu6LL75ITU1Nl9v//e9/Z+HChR222bBhA5s3bz6n/ggh3MvhU5VsyynltimJ+En494DRCOnpkJsLWls+p6f36AdAX4Z/V0j4C+E93tmaR5C/HzdNSnDK63v0Us9uyciAtmFbU2M5npZ2Ti/52GOPcfToUVJSUrjqqquIi4tj1apV1NfXM3/+fH79619TXV3NLbfcQn5+Pk1NTTzxxBOcOnWKwsJCfvCDHzBgwAC+/PJLu6//t7/9jd/85jdERUUxfvx4goODAfjoo4949tlnMZlMxMTEYDQaqa2t5fXXX8ff35+3336bl19+mbKysnbtBg4ceE7fqxCi79Q1NPH+jnyuGTuImPBg57yJ1tojPiZNmqTb2r9/f7tjDimltWXM3/pDqa6/RhvZ2dl6zJgxWmutP/vsM33fffdps9msm5qa9Jw5c/TGjRv1mjVr9L333tvynLKyMq211klJSbqoqMjhaxcWFuqhQ4fq06dP6/r6en3xxRfrBx54QGutdWlpqTabzVprrZctW6Z/+ctfaq21Xrx4sX7++edbXsNRO2fr1t+LEKKd1ZnHddKjH+stR4t79DpApnaQqb4z8k9MtJR67B3vBevWrWPdunVMmDABgKqqKo4cOcLMmTN5+OGHefTRR5k7dy4zZ87s0utt3bqVyy+/nNhYy26sCxYs4PDhw4Dl4rYFCxZw4sQJTCaTwwuqutpOCOFejFtzOT82jKnD+jvtPXyn5r9kCRgMrY8ZDJbjvUBrzaJFi9i1axe7du0iKyuLe+65hxEjRrBjxw7GjRvH448/ztNPP93j93rwwQdZuHAhe/bs4Y033nB4UVVX2wkh3MeBExXszCvjtimJTr1uxnfCPy0Nli6FpCRQyvJ56dJzrvcDREREUFlZCcA111zDW2+9RVVVFQAFBQWcPn2awsJCDAYDd9xxB4888gg7duxo91x7pk6dysaNGykpKaGhoYHVq1e3nCsvL2fIkCEALF++3G5/OmonhHBfxq25BAX4cdOxb3t1dWJbvlP2AUvQ9yDs24qJiWHGjBmMHTuWa6+9lttvv53p06cDEB4ezttvv01WVhaPPPIIfn5+BAYG8tprrwGQnp7O7NmzGTx4sN0J3/j4eJ566immT59OVFQUKSkpLeeeeuopbr75ZqKjo7niiivIzs4G4Ic//CE33XQTH3zwAS+//LLDdkII93Sm2sSa7flcH1FL1M/vO7tIpXl1IvRahinLnID7S01N1W3v5HXgwAFGjRrloh4JR+TvRYhz88oXR3hh3WHWffIsI/Z8275BUhLk5HT59ZRS27XWqfbO+U7ZRwgh3FhdQxN/35zL5SNjGbF3q/1GeXm99n6+VfZxU1OnTqW+vr7VsRUrVjBu3DgX9UgI0dc+2FVAcVU96TPPc/rqRJDwdwtbtzr4KS+E8Alms2bZ19mMDmlk+qxUS/ArZbkaqVkvrk4EKfsIIYTLbTxcRNbpKtI/+AuqecSvteUHAPTK6sS2ZOQvhBAupLXmtY1Hia85w5zvP297stuTvF0lI38hhHChLUdL2JZdyk+/+SeB5qb2DXpxkteWhL8QQriI1po/rT/MoMgQFpw5YL9RL07y2vKp8O/l7fzPeUvn6667jrKysg7bPPnkk6xfv/4ce9a5p556ihdeeKHDNmvXrmX//v1O64MQvm5TVjHf5ZzhgS/+Tkj20bM1/ma9PMlry2fC3wnb+TsM/8bGxg6f98knnxAVFdVhm6effppZs2ade+d6gYS/EM6jteaP72xmcGUxt2x4t/mgUyd5bflM+He0nf+5st3Pf/LkycycOZN58+YxevRoAG644QYmTZrEmDFjWLp0acvzkpOTKS4uJicnh1GjRnHfffcxZswYrr76amprawG4++67WbNmTUv7xYsXM3HiRMaNG8fBgwcBKCoq4qqrrmLMmDHce++9JCUlUVxc7LC/S5YsYcSIEVxyySUcOnSo5fiyZcuYPHky48eP50c/+hE1NTVs3ryZDz/8kEceeYSUlBSOHj1qt50Q4txsPFzEztoAFn6zkuAmmwGj7SSvk4Lf+j6u36u/Kx893c/fCdv5t9rP/8svv9QGg0EfO3as5XxJSYnWWuuamho9ZswYXVxs2Zu7eS//7Oxs7e/vr3fu3Km11vrmm2/WK1as0Fprfdddd+nVq1e3tH/ppZe01lq/+uqr+p577tFaa/3AAw/o5557Tmut9aeffqoBh/cIyMzM1GPHjtXV1dW6vLxcn3/++S17/zf3S2utMzIyWt7Ltg8dtWtL9vMXomNNTWY996Wv9cU//auu9wvo3WCyQQf7+fvMyN/RnElvzqVMmTKl1Z75L730EuPHj2fatGkcP36cI0eOtHvOsGHDWjZtmzRpEjkOlnTdeOON7dps2rSJW2+9FYDZs2cTHR3tsG9ff/018+fPx2AwEBkZybx581rO7d27l5kzZzJu3DiMRiP79u2z+xpdbSeE6Njav6xmT0E5D3/9NkFmO2ViJ03y2vKZ8Hfydv4AhIWFtXy9YcMG1q9fz5YtW9i9ezcTJkywu59+860ZAfz9/R3OFzS366jNubr77rt55ZVX2LNnD4sXL3a4739X2wkhHKtZYeR3B+sZX3iYG/ZtaN/AiZO8tnwm/J2wnX+He/KXl5cTHR2NwWDg4MGDfPutnR36emjGjBmsWrUKsNxJ7MyZMw7bXnrppaxdu5ba2loqKyv56KOPWs5VVlYSHx9PQ0MDRpsZ8Lbfn6N2Qoiue+Of33AqvD9PfrEUP9rsquzkSV5bPnWFby9v599qP//Q0NBWN0efPXs2r7/+OqNGjWLkyJFMmzat997YavHixdx2222sWLGC6dOnM2jQICIiIuy2nThxIgsWLGD8+PHExcUxefLklnPPPPMMU6dOJTY2lqlTp7YE/q233sp9993HSy+9xJo1axy2E0J0TWFZLW+MnMXcA18xqeBg65NKOeVKXkdkP38PVl9fj7+/PwEBAWzZsoWf/exn7Nq1y9Xd8vm/FyHsMhr5xUeH+SQhhS+W3U9CRVHr807YxqGj/fx9auTvbfLy8rjlllswm80EBQWxbNkyV3dJCGGP0cimZ15m7Q1P8ODmd9sHfx/V+W1J+Huw4cOHs3PnzlbHSkpKuPLKK9u1/fzzz4mJiemrrgkhbNQ++RS/mvUow0oLeGDLqtYnk5Iswd8HdX5bTg9/pVQOUAk0AY1a61SlVH/gn0AykAPcorV2PFspuiwmJsYtSj9CiLNeTLyEvOh4Vr6ziJBG09kTfVznt9VXq31+oLVOsak9PQZ8rrUeDnxufSyEEN7FaGRvyiW8OXk+C3Z/xvTje1qf74P1/I64aqnn9cBy69fLgRtc1A8hhHAOo5GGn/6MReNvIrqmgl99+Vbr8y6o89vqi/DXwDql1HalVLr12ECt9Qnr1yeBgfaeqJRKV0plKqUyi4qK7DURQgj3lJHBnybOZ0/8cJ7971/oV1999lwfrud3pC/C/xKt9UTgWuABpdSltiet+0/YXW+qtV6qtU7VWqfGxsb2QVe77+KLL+60zddff82YMWNISUlp2bhNCOHdtuhIXpt2Ewt2f8bsw1vOnmiu87sw+KEPwl9rXWD9fBr4FzAFOKWUigewfj7t7H44y+bNmzttYzQaWbRoEbt27SI0NLTT9lprzGZzb3RPCNHXjEbKRozmf+c+zLDSQp78vM0SbBfW+W05NfyVUmFKqYjmr4Grgb3Ah8Bd1mZ3AR84sx/OFB4eDlj28rn88su56aabuPDCC0lLS0NrzZtvvsmqVat44oknSLP+pH/++eeZPHkyF110EYsXLwYgJyeHkSNH8uMf/5ixY8dy/Phxh+0cbQOdlZXFrFmzGD9+PBMnTuTo0aMO308I4QRGIzo9nUVjbqDE0I8/f/Q8YQ02e2C5uM5vy9lLPQcC/1KWmxMEAO9orf+jlPoOWKWUugfIBW7p6Rv9+qN97C+s6OnLtDJ6cCSLfzimy+137tzJvn37GDx4MDNmzOCbb77h3nvvZdOmTcydO5ebbrqJdevWceTIEbZt24bWmnnz5vHVV1+RmJjIkSNHWL58OdOmTeu03cqVK1m2bBm33HIL7733HnfccQdpaWk89thjzJ8/n7q6Osxms8PXufTSSzv/hoQQ3ZORwbKx1/DpyBks+vItxp06evaci9bzO+LU8NdaHwPG2zleArS/EsnDTZkyhYSEBABSUlLIycnhkksuadVm3bp1rFu3jgkTJgBQVVXFkSNHSExMJCkpqWUPoI7a2dsGurKykoKCAubPnw9ASEhIh68j4S9E79voF8NvL7ub6w5uIn3b+2dPuHA9vyNec4Vvd0boztKV7Zm11ixatIj777+/1fGcnJxWW0J31K7t+3Q0iezodYQQvchoJOc3L/LgvP9jRHEez3/yIq3uxusmdX5bPrOls7u45ppreOutt6iqqgKgoKCA06fbz3d3tV2ziIgIEhISWLt2LWDZ9K2mpqbbryOE6CajkYqFD5E+9Sf4aTNL33/Wbev8trxm5O8prr76ag4cOMD06dMBy4Tx22+/jb+//zm1s7VixQruv/9+nnzySQIDA1m9erXD14mLi3PSdyiEb6l7YjHpsx/mWP8h/H31YhLLT5096WZ1fluypbPodfL3IryF0QgZGZCXZ6nctMpxo5Gmxx9nYcptfDpyBi9+9AI37N9w9slKgYuXbMuWzkII0U1GI6SnQ02N5XFuruUxQBqWJZ2LZ9zFpyNn8Pjny1oHP7hlnd+WhL8QQtiRkXE2+JvV1FiO304GT09P4+2Jc7j/2zXcm9nmUiU3rfPb8vgJX08pW/kK+fsQ3iIvz8Hx3CaeHHEtf0u9np9kfsBjG//euoEb7NvTFR498g8JCaGkpISYmBisF5IJF9JaU1JS0nKNgRCeLDHRUuppTZN4zVZWpMwlfet7LNrwt9ZLOp1wK0Zn8ejwT0hIID8/H9nx032EhIS0XOgmhCe77jp4/XVo/mVWBTQxcG4mjDzDA5v/yf/7ekXr4PeAUo8tjw7/wMBAhg0b5upuCCG8jNEIy5efDX6/0HrifpRJ8OAzPP7FX7nnu7Vng18pO0uB3J9Hh78QQjiD7WRvQEwlcT/KxD+8DtYmcu/htWcbelCZpy0JfyGEaKN5stcwqpCY2d+jG/w59e40Ggr7nW3kYWWetiT8hRDCltFIYsBMKi6tJDI1h7r8aIo/mEhTVQhJ5FjauPGVu10l4S+EEM2MRg4ueob4tAwY2J+K74ZxZsOFYPbDQDVL+JVb7tB5Ljx+nb8QQvSGJrPm9RVfMu+W39IQrrjjvQ1EfmFAmSGJHJZyH2msdPsrd7tKRv5CCJ+3e9m7PP5dKXtS5nPtoW949rNXiamt4FleaN3Qw+v8tiT8hRA+60y1iedf/ZiVJWHEBpp4+YPfMffg19i9ZNQL6vy2JPyFED6nrqGJt175F68d19QEBPOT7R/yv5uMRJjs3BjJYPCI7Rq6S8JfCOEz6hqaWLM9n1c+/p6TjaFcmbeN/9u4nJHF7fZxsPCy0b4tCX8hhNerrm9k5bY8ln51jNOV9UwszuHPn73B1Px9jp/kwRdwdYWEvxDCa+WWVPOPLbmsyjxOZV0j08Ma+NOXr3HxtnX26/rNvGhi1xEJfyGEV6lvbGL9/tOs3n6cjYeL8FeK2WMH8T/Vh5n4i3vab9LflheXemxJ+AshPJ7ZrMnMPcPH3xfy4e5CymoaiO8XwoNXDCetIJOBv/q5vf2ZW/PSiV1HJPyFEB7J1GhmW3Yp6w+c4tO9JzhVUU9IoB9XjR7EzZMSmHHBAPxXvgMPpMto3w4JfyGExzheWsOmrGK+PlLE14eLqaxvJDjAj0tHxDL3onhmjRpIWHCAZU/mqzM6H+2D10/sOiLhL4RwS1prjpfWsi2nlG3ZJWzNLiW3xDKCHxgZzJyL4rly1EAuuWAAoUH+Z5/Y9s7rHfGBiV1HJPyFEG6huKqevQXl7C0oZ9fxMnbmlVFSbQIgyhBIalJ/7pqezMzhA7ggLrz9rVuNRstG/F0Z7YNPlnpsSfgLIfpUjamRo6erySqq5ODJSg6eqOTgyQpOVdS3tDk/NozLR8aRkhjFlOT+DI8Lx8/PzuJM28BX6uyttzriYxO7jkj4CyF6XY2pkeOlteSV1pBbUk1OSTU5xTUcK6qisLyupV2Qvx/nx4Uz/bwYxg7px9gh/Rg9OJLIkMDO36Rteacrwe/jo31bEv5C9ILmAWhenkfezrVb6hqaOF1Rz6nKOk6WWz4Ky2spLKulsKyOgrJaSq3lmmaRIQEMGxDGlGH9uSAunPNjw7kgLpzkAWEE+ndzZ/nulndARvt2SPgL92ebrP37W46Vlvbs615M6LYD0Nxcy2PwjKxpMmsqahsorTFRWm2ipMrEmRoTJVX1FFeZKKk2UVRZR1FlPUWV9VTUNbZ7DUOQP/H9QhgSbWDskH4kRIeS2N9AYn8DQ/sbiDYEtq/Rd8e5lHeayWjfLqW784foQqmpqTozM9PV3RC9qauhXlkJJpPj1zlXzSESE2P/vbv4AyI52f4gtC9XEDY2mamqb6SyrpHy2gYq6xqpqGugoraB8toGKuoaKa8xUV7bQFltA2U1luNnrMccxUBESAAxYUHERgQTGxHMgPBg4iKCiYsMYWBkCIMiQ4iPCiEiOKBn4d6R7qzesSWjfZRS27XWqXbPuSr8lVKzgT8D/sCbWuvfdtRewt+D2Qv5kpLuj+BcoQs/IPxys9F2dopRCsxmxy+ttaa2oYmq+kaq65uoqmu0ft1ItcnydVWd5XGl9euq+saWkK+sa2j5usbU1Om3EREcQJQhiH6hgUQZAokyBBEVGki0IZDosCCiDUFEhwURExZEf+tHSKB/h6/rVOdS3mn++5LRPtBx+Luk7KOU8gdeBa4C8oHvlFIfaq33u6I/wgkc/ZpeUnK2jbsHP7TqtwbqA4KorG2iOiiUqthhVDeFknjePoqC++MX1IgKasQvsAkV1Ei/4HIe+s0JqgcnUFVvCejmcK+pb6La1Ii5C38ESkF4UABhwQFEhAQQHmL5PCQqlPDgs48jQgKJCAkgMiSQyFDL536hgUSGBhIeHIC/vdUy7kbKO33GVTX/KUCW1voYgFLqXeB6QMLfkzn6j+sGIV/vH0BlcBgVwWGWzyGWz1VBBiqCDVQFG6gKMlBp/boyyPK5Oii05Xh1UChNfvZGwrnE0np0qhv8CDNVszOnjLDD+YTrBqIb6hlaXUFYkB9hkycRPn4MYcGWUA8P9icsKKAlzMOCA4iwnjME+TuvpOJqbX8rtC3xdfXfjZR3zomrwn8IcNzmcT4w1UV9ET3Rh4GvgcogA2cMkZSGRlIWGkFZSETL5/KQcMpDwikLtXxdYQ378pBw6gODO319g6mWiPoawk01hNfXEmGqJq6qlDDr8TBTLWGmWsKtny1fW45vMP2AP5se5rgpkaGmQp7TGZabfTtgXH07GUwkj0QS/QpYYn6U+TGfWU728oS0W+hK6c/2t8LOSHmnx1xS81dK3QTM1lrfa318JzBVa72wTbt0IB0gMTFxUm53an/CeXryq3kbjcqP4rBoisKiOB3en6KwaIrDoig2RFEcFkVpaD9Kw/pREhbFmeBwGv0dj1ci6quJqq2kX2Md/eqr6Vd5hn40EmGqoV9ZMRH+EGmqIaLkFBGmGiLqqomor7YGfi3+uoMCfS8ychvpLKOGsJZjBqpZyn2tf2DYm2/wpB8KvfjvpBUJ/C5zuwlfpdR04Cmt9TXWx4sAtNa/cfQcmfB1sXP4j9yo/DgRMYDCyFgK+sVxImIAJyIGcDJiACcjYjgV3p/isCi0ar/OO8JUQ0x1GTGNtfQ/P5H+I86jf7hlMjLKEET/MNsJyyAiQwO7XNM2GiHjoSrySgwkkseSsOdIC3m/9WSuEyekk8kml+R2x5PIIYdhnb9AZ5PQTlrS2kpnK7Wc8ecn5Z1uc8fwDwAOA1cCBcB3wO1aa4f3VJPwd4EuBH5NYDDHooeQGx1PTvRg8qIGkRsVT36/OE5ExrarkUfVVTGoupRBZacZRD1x0ycRd3EqcTZLCWMjgp22ysTeqkGHmeKkpah+NKFp/wNPYcaME75v2xLJddfBJ5/07JqJvlypJeWdHnG78AdQSl0HvIhlqedbWusOt9aT8O9jbVKyOjCEg7HJHBmQyOEBiRwZkMjRmAQKI+NaPW1A1RkSy08ytOwUQ8tPkVB+iiEhisH338XgO25pvfuiCzhlTX43l7L2eOTvBozcRgbPWeYsyGMJv+pwjqPLAgMhMtLzSlxuyi3Dv7sk/PuI0UjFU8+w1xTM94OGsyf+AvbHnUdOdHxLeSbUVMcFJce5oOQ455UWcF5pPslnCkkqO0l4Q51bj9T8/OwPWDtbk39OHPxQMHI76SztvObvpro8Z9FVMrp3Ggl/0aHjpTV8e6yEHZ9/x/asUxzpn9AS9AllJxl76iijTmdbPopyGFJ+Gj90+9FfzB9J+/NUt/7P6w5X42I0YnxoKxklv7RZ7fMYac2rfdz8Arhz/s3F0yewPZCEv2jlTLWJr7OK+epwEVuOllBQVgtAZF0VEwsOMrHwICmFhxh3Movoukq7r2F39OoB83Hdqvm7khtfFd2tOQsZ1buUhL+P01pztKiKz/ad4r/7T7E7vwytIaq+imk5u5met4epeXsYUZyHHx38e7D5j5xctZfckvB2TTzhjngevQNndza5c9IPiw5H/jGpZ/vhcX+43kfC30cdLarig50FfLznBMeKqgEYPzSKH9Sf4LJXnuGinL1dX9veZuTWp7Vzce7a/qTrhdU+xpJrSFfLqNGGlrdxy9+ehPvt7SOcp6KugbU7C1idmc+egnL8FEw7L4afBBZx1WvPMujQHktyN3W8EVgLB/+rExPt184TE3vhmxC9Jy2t1xM5DcCTf3sSgIS/19hbUM7yzTl89H0hdQ1mxgyO5PE5o5g3fjBxH70Hv7ApdHc1+Duo0y5ZYr927qP3wvY5TviZIvqYhL8HM5s1Gw8XsfSrY2w5VkJYkD/zJyRw+5RExiX0s/zKf2c3t8SFLv0O33xKRn9CeCYJfw+ktWb9gdP88b+HOXCigvh+IWRcN4oFU4aevfdpd2+AcQ6rMmT0J4TnkvD3MN9kFfP7/xxkd345yTEG/nDzeOalDG5/H9SMjM6D39/fMjsrw3YhfE4375wsXCWvpIb0f2SS9uZWiqtM/P6mi1j/y8v40aSE1sFvNEJyMsbci0kmGz+aSCYbI7e1fkGDAZYvt4R/To4EvxA+Rkb+bs7UaObVL7N4beNRAvwUj1wzknsuGWZ/4zNrqcdYc32ry+9zSSadZQCWy+/lghshfJ6Evxvbk1/OI2t2c/BkJdenDGbRtaMY1C+kfcM29zrN4LlWV94C1BBGhvotaSvmSOgLIST83VFjk5mXPj/CqxuOEhMWxF/vSuXKUQPtN7YzsZuH/cX2eXqoBL8QApDwdzunK+p4cOVOtmaXcuOEISz+4Rj6GQIdP8HOxG4ieXYvv09M8tL7wAohuk0mfN3I5qPFXPfSJnbnl/HCzeP544IUx8Fvndi1t4Z/Cb/CQHWrY3IBlhDCloz83cQ7W/N44oO9JMcYMN47lZGDIhw37mQNf/Oe6hn+vyevaQiJSUrmd4UQrUj4u5jZrHl+3SFe23CUy0bE8srtE4gI6WC0n9GFK3YNBtKWziEtLaH3OyyE8AoS/i5kajTz8OrdfLS7kNunJvL0vDEEtL1Yq1lXr9iVZZxCiC6Q8HcRU6OZhe/sYN3+Uzw6+0J+etl5KNXBhGxXrtj1hM30hRBuQSZ8XcDUaObnRkvwP/XD0fzs8vMdB38HE7utyIyuEKIbZOTfxxqazPzcuJ31B07z9PVj+PH0ZMeNpdQjhHASCf8+pLVm0ft7WH/gNM9cP4Y7Owp+6LzUI7dPEkKcIyn79KE/rT/Cmu35PHTl8I6DvyulnqQkCX4hxDmTkX8feXdbHi99foSbJyXwi1nDHTfsSqlHJnaFED0kI/8+8O2xEjLW7uXSEbE8d+O4nq3qkYldIUQvkPB3stMVdSx8ZydJ/Q28evuE9jddaSsvz/E5KfUIIXqJlH2cqLHJzMKVO6mub8R471THV+7C2at3tbZ/Xko9QoheJOHvRM+vO8S27FJeXJDSo716pNQjhOhtUvZxko2Hi3hj4zHumJbIDROGdNy4ozq/lHqEEE4g4e8E5bUNPLrme4bHhfP4nNGOG3a2pFMpub+uEMIppOzjBM9+vJ+iqnreuHOS/XvtQteWdCbavyOXEEL0lIz8e9kXB0+xens+P7vsfMYPjbLbxmiE5Lsuw6+mkmSyMXJb+0ZS5xdCOJGEfy8qr2lg0ft7uHBQBA9eeYHdNs0D/tymBDR+5JJMOsta/wCQOr8QwsmcFv5KqaeUUgVKqV3Wj+tszi1SSmUppQ4ppa5xVh/62p/WH6aosp4Xbh5PcID9ck/GQ1XtKj01hJHBc5YHzUs6JfiFEE7k7Jr/n7TWL9geUEqNBm4FxgCDgfVKqRFa6yYn98WpDp6sYMW3udwxLYmxQ/rZb2Q0kldip8QD5JEopR4hRJ9xRdnneuBdrXW91jobyAKmuKAfvUZrza8/3E9ESAC/vGqE44YZGSRi/wreRP9CKfUIIfqMs8N/oVLqe6XUW0qpaOuxIcBxmzb51mPtKKXSlVKZSqnMoqIiJ3f13H269yRbjpXw8NUjiTIEOW6Yl8cSfoWB6laHDVSzZHmCBL8Qos/0KPyVUuuVUnvtfFwPvAacD6QAJ4A/dPf1tdZLtdapWuvU2NjYnnTVaWpNTSz59wFGxUdy+xQHSzOb1/NrTRorWcp9JJGDwkwSOSyNWSS5L4ToUz2q+WutZ3WlnVJqGfCx9WEBMNTmdIL1mEd665tsCspq+cMt4/H3s7Nbp531/GmsJI2VlgcGA/x5aR/1VgghLJy52ife5uF8YK/16w+BW5VSwUqpYcBwYJuz+uFMlXUNLP3qGD8YGcu082LsN5KtG4QQbsiZq31+r5RKATSQA9wPoLXep5RaBewHGoEHPHWlz1ubciivbeCXV4103MjRFs3NWzcIIYQLOC38tdZ3dnBuCeDRaxrLaxp4c9Mxrh49kHEJdpZ2drZFs2zdIIRwIdnb5xy9uekYlXWN/K+9pZ2yRbMQws3J9g7noLTaxFubspkzLp5R8ZHtG0idXwjh5mTkfw7+9k02NQ1NPOToRuxS5xdCuDkZ+XdTramJt7/NZdaogYwYaHN3rua1/H5+lg97pM4vhHATMvLvpvd35nOmpoF7Lxl29mDbGn+TncVLUucXQrgRGfl3g9ms+eumbMYN6ceUYf3PnnBU4/f3t5R6pM4vhHAzMvLvho2HizhWVM2fb01BKZureR3V+M1my4cQQrgZGfl3w5ubjjEoMoTrxsW3PuGoli81fiGEm5Lw76L9hRV8k1XCXRcnE+hv/WOzvQG7arOvj9T4hRBuTMK/i/6xJYfQQP+zO3e23I8x1/JY67M/AKTGL4Rwc1Lz74Lq+kY+2l3InIvi6WcItBy0N8mr9dnbMAohhBuTkX8X/Pv7E1Sbmrh1ss1O1I4meR0dF0IINyLh3wX/zDzOebFhTEqKPntQJnmFEB5Mwr8TWacr2Z57hgWpQy3LO2WSVwjhBST8O/HP744T4Ke4cWKCTPIKIbyGTPh2wNRo5v0dBVw5Ko7YiGCZ5BVCeA0Z+Xfgi4OnKKk2cetkax1fJnmFEF5Cwr8D7+0oYGBkMJeOiLUckEleIYSXkPB3oKKugY2HipgzbjD+K9+RSV4hhFeR8Hfgv/tOYWoyM+fE9zLJK4TwOjLh68C/95xgSFQoE597QCZ5hRBeR0b+dpTXNPD1kSLmXBSPkkleIYQXkvC347N9J2lo0sy9KF4meYUQXknC346P95wgMaiJcZekyCSvEMIrSfi3UVpt4pvDp5mz+UOUTPIKIbyUhH8b/9l7kiYUfnuCSSYbP5pIJhujvvXsJK8EvxDCw8lqnzY+3XuCmNIKnjr9O2oIByCXZNJZBrnpSOwLIbyBjPxtVNc3svVYKSVHz28J/mY1hJHh/zsX9UwIIXqXhL+NTVnFmJrMnDpynt3zeU1D+rhHQgjhHBL+Nr74eDMRphoGFlTaPZ+YpOweF0IITyPhb2V+28gX+TVcejSTJeYMDFS3Oi+rO4UQ3kTC32rfH16nKCyaK45mksZKlnIfSeSgMMvqTiGE15HVPlafhw1FaTOXH8sEII2VpLHSsr4/x+zi3gkhRO/q0chfKXWzUmqfUsqslEptc26RUipLKXVIKXWNzfHZ1mNZSqnHevL+venLUTOYUHiImNqK1idkGwchhBfqadlnL3Aj8JXtQaXUaOBWYAwwG/iLUspfKeUPvApcC4wGbrO2danTlXXsjknmirxdrU9IoV8I4aV6FP5a6wNa60N2Tl0PvKu1rtdaZwNZwBTrR5bW+pjW2gS8a23rOkYjG+b9BIArTuyDmBhLqUcK/UIIL+asCd8hwHGbx/nWY46O26WUSldKZSqlMouKinq/l0YjpKfzRdQw4iuKGHVkF9TWwooVso2DEMKrdRr+Sqn1Sqm9dj6cPmLXWi/VWqdqrVNjY2N7/w0yMmiqrWNL4kXMzNmJAsuNWzIyev+9hBDCjXS62kdrPescXrcAGGrzOMF6jA6O9728PPbHnUd5aAQzcna3Oi6EEN7MWWWfD4FblVLBSqlhwHBgG/AdMFwpNUwpFYRlUvhDJ/Whc4mJbE4aD8D0vO9bHRdCCG/W06We85VS+cB04N9Kqc8AtNb7gFXAfuA/wANa6yatdSOwEPgMOACssrZ1jSVL2HzeBC4oziOu+ozlmKzwEUL4gJ6u9vmX1jpBax2stR6otb7G5twSrfX5WuuRWutPbY5/orUeYT3nmpQ1GiE5GdNdP+G7waO4+NRhWeEjhPApvneFr3WFDzU1fD9kFDWBIVycu8uywkdCXwjhI3xvb5+MDMuKHmBz0niUNjP1yHZZ4SOE8Cm+N/K3WcmzOfEiRp86RnRdJeRVubBTQgjRt3xv5G9dyVMXEMSOIaO4uHmVj6zwEUL4EN8L/yVLwGBg+5BRmAICuTj3e1nhI4TwOb4T/tYVPtx5J4SG8s2F0/A3NzFZVcgKHyGEz/GNmr/NCh8ASkrYMnAkF4VpwrPs7UsnhBDezTdG/jYrfMBS798bN4wpO75wYaeEEMJ1fCP82+zVs2fgBTT4BzLpwDYXdUgIIVzLN8K/zUqeHUMuBGCiqnRFb4QQwuV8I/ytK3yabR8yiuSyEwx4cpELOyWEEK7jG+GflmZZ0ZOUhFaKHYljmJgcIyt8hBA+y7vDv3l5p5+fZdJ3yRLyiiopDolk4uUTXd07IYRwGe9d6tl2eWduLqSns+N3gUAYk5KiXdo9IYRwJe8d+bdZ3glATQ3bv9xOeHAAIwZGuKZfQgjhBrw3/B3cinF7ZAITEqPw91N93CEhhHAf3hv+djZqqwoK5VBsMhMSpeQjhPBt3hv+bZZ3AuxOHofZz0/q/UIIn+e94W+zvLP5Fo3b738EpSBlaJSreyeEEC7lveEPlh8AOTlgNkNODtujEhkRF0G/0EBX90wIIVzKu8PfhtaaXcfLmJAY5equCCGEy/lM+OefqaW8toFxCf1c3RUhhHA5nwn/PQXlAIwbIuEvhBA+E/57C8oJ8FNycZcQQuBL4V9YwYiBEYQE+ru6K0II4XI+Ef5aa/YWlDN2SKSruyKEEG7BJ8L/RHkdpdUmqfcLIYSVT4R/82TvGAl/IYQAfCT89xWU4++nGB0vZR8hhAAfCf89BeVcEBsuk71CCGHlE+G/t7CCsVLyEUKIFl4f/qcq6iiqrJeVPkIIYaNH4a+UulkptU8pZVZKpdocT1ZK1Sqldlk/Xrc5N0kptUcplaWUekkp5dS7quyVK3uFEKKdno789wI3Al/ZOXdUa51i/fipzfHXgPuA4daP2T3sQ4f2FJSjFIweLCN/IYRo1qPw11of0Fof6mp7pVQ8EKm1/lZrrYF/ADf0pA+d2VtQwfmx4RiCvPde9UII0V3OrPkPU0rtVEptVErNtB4bAuTbtMm3HnOavQXlUvIRQog2Oh0OK6XWA4PsnMrQWn/g4GkngEStdYlSahKwVik1prudU0qlA+kAiXbuydsZU6OZS4YP4JILBnT7uUII4c06DX+t9azuvqjWuh6ot369XSl1FBgBFAAJNk0TrMccvc5SYClAamqq7m4/ggL8eOHm8d19mhBCeD2nlH2UUrFKKX/r1+dhmdg9prU+AVQopaZZV/n8GHD024MQQggn6elSz/lKqXxgOvBvpdRn1lOXAt8rpXYBa4Cfaq1Lred+DrwJZAFHgU970gchhBDdpyyLbtxfamqqzszMdHU3hBDCYyiltmutU+2d8/orfIUQQrQn4S+EED5Iwl8IIXyQhL8QQvggCX8hhPBBHrPaRylVBOS6uh/dNAAodnUn+ph8z75BvmfPkKS1jrV3wmPC3xMppTIdLbPyVvI9+wb5nj2flH2EEMIHSfgLIYQPkvB3rqWu7oALyPfsG+R79nBS8xdCCB8kI38hhPBBEv5CCOGDJPz7iFLqYaWUVkp5/W3FlFLPK6UOKqW+V0r9SykV5eo+OYNSarZS6pBSKksp9Zir++NsSqmhSqkvlVL7lVL7lFIPubpPfUUp5W+9Le3Hru5Lb5Hw7wNKqaHA1UCeq/vSR/4LjNVaXwQcBha5uD+9znqzoleBa4HRwG1KqdGu7ZXTNQIPa61HA9OAB3zge272EHDA1Z3oTRL+feNPwP8BPjG7rrVep7VutD78lta37vQWU4AsrfUxrbUJeBe43sV9ciqt9Qmt9Q7r15VYwnCIa3vlfEqpBGAOlptQeQ0JfydTSl0PFGitd7u6Ly7yP3jn3dqGAMdtHufjA0HYTCmVDEwAtrq4K33hRSyDN7OL+9GrOr2Bu+icUmo9MMjOqQzgV1hKPl6lo+9Za/2BtU0GllKBsS/7JpxLKRUOvAf8Qmtd4er+OJNSai5wWmu9XSl1uYu706sk/HuB1nqWveNKqXHAMGC35X71JAA7lFJTtNYn+7CLvc7R99xMKXU3MBe4UnvnxSQFwFCbxwnWY15NKRWIJfiNWuv3Xd2fPjADmKeUug4IASKVUm9rre9wcb96TC7y6kNKqRwgVWvtaTsDdotSajbwR+AyrXWRq/vjDEqpACyT2VdiCf3vgNu11vtc2jEnUpYRzHKgVGv9Cxd3p89ZR/7/T2s918Vd6RVS8xfO8AoQAfxXKbVLKfW6qzvU26wT2guBz7BMfK7y5uC3mgHcCVxh/XvdZR0RCw8kI38hhPBBMvIXQggfJOEvhBA+SMJfCCF8kIS/EEL4IAl/IYTwQRL+QgjhgyT8hRDCB/1/VprG48RWS0oAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "# Let us visualize the newly fitted model with the optimal lambda value here\n", "x = np.linspace(-5, 5, 100)\n", @@ -410,6 +446,14 @@ "\n" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$\\lambda$ is regularization term such that the model cannot fit the training data perfectly anymore. Increasing $\\lambda$ strongly encourages the weight values to decay towards zero, unless supported by the data. In our case, a polynomial feature with degree 10 is highly overfitting to the training data and, therefore, with higher $\\lambda$ values (10-15), we can punish overfitting, which leads to lower MSE values. Increasing the $\\lambda$ value leads to an decrease in the error due to the higher punishment of high weight values and tackles though this the high polynomial degree. Of course, with low $\\lambda$ values, the MSE on the training data is low because there is no punishment of overfitting.
\n", + "On the other hand, if $\\lambda$ is increased too far, the introduced penalty will force the regression to become to simple and underfit the data." + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -435,13 +479,36 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": { "pycharm": { "name": "#%%\n" } }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", @@ -469,7 +536,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": { "pycharm": { "name": "#%%\n" @@ -525,7 +592,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": { "pycharm": { "name": "#%%\n" @@ -601,7 +668,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": { "pycharm": { "name": "#%%\n" @@ -639,13 +706,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "metadata": { "pycharm": { "name": "#%%\n" } }, - "outputs": [], + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "invalid syntax (, line 8)", + "output_type": "error", + "traceback": [ + "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m8\u001b[0m\n\u001b[0;31m p_c1 = # TODO\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" + ] + } + ], "source": [ "# Fit Gaussian Distributions using the maximum likelihood estimator to samples from both classes\n", "mu_c0, sigma_c0 = mvn_mle(c0_samples)\n",