LinearRegressionClosedForm.ipynb (47957B)
1 { 2 "cells": [ 3 { 4 "cell_type": "code", 5 "execution_count": 2, 6 "metadata": {}, 7 "outputs": [ 8 { 9 "data": { 10 "text/plain": [ 11 "(0.0, 11.715194521705058)" 12 ] 13 }, 14 "execution_count": 2, 15 "metadata": {}, 16 "output_type": "execute_result" 17 }, 18 { 19 "data": { 20 "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAGdCAYAAACyzRGfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA1k0lEQVR4nO3dfXSU5Z3/8c8QSYL8kgFESKgRI/UpoCBVKGLrEwiWZeH3O6cVVjyUrXaXxa2U3RbZs8hmbYu0HnW7ZbF6fOoiULsWqW1Na0HgYINYArumWAs0dakSaEEyPEikmev3B51pJpmH+565H2fer3M4msmdmfuaO5Pre1/X9/peEWOMEQAAgEf6+H0CAACgtBB8AAAATxF8AAAATxF8AAAATxF8AAAATxF8AAAATxF8AAAATxF8AAAAT53j9wn0FI/H9d5776mqqkqRSMTv0wEAABYYY3T8+HENGzZMffpkH9sIXPDx3nvvqa6uzu/TAAAAeThw4IAuuOCCrMcELvioqqqSdPbkq6urfT4bAABgRSwWU11dXbIfzyZwwUdiqqW6uprgAwCAkLGSMkHCKQAA8BTBBwAA8BTBBwAA8BTBBwAA8BTBBwAA8FTgVrsAAICzuuJGO9qO6vDx0xpSValx9YNU1if8BTgJPgAACKCm1oNqfGmPDnacTj5WG63UsukNmjqq1sczKxzTLgAABExT60HNX92SEnhIUnvHac1f3aKm1oM+nZkzCD4AAAiQrrhR40t7ZNJ8L/FY40t71BVPd0Q4EHwAABAgO9qO9hrx6M5IOthxWjvajnp3Ug4j+AAAIEAOH88ceORzXBARfAAAECBDqiodPS6ICD4AAAiQcfWDVButVKYFtRGdXfUyrn6Ql6flKIIPAAACpKxPRMumN0hSrwAk8fWy6Q2hrvdB8AEAQMBMHVWrVXPGqiaaOrVSE63UqjljQ1/ngyJjAAAE0NRRtZrcUEOFUwAA4J2yPhFNGHGe36fhOKZdAACApwg+AACApwg+AACApwg+AACApwg+AACApwg+AACApwg+AACAp6jzAQCAS7ripiiLhBWK4AMAABc0tR5U40t7dLDjdPKx2millk1vCH159EIx7QIAgMOaWg9q/uqWlMBDkto7Tmv+6hY1tR705Dy64kbN+49ow+531bz/iLrixpPXzYWRDwAAHNQVN2p8aY/SdfNGZ3embXxpjyY31Lg6BRPkkRdGPgAAcNCOtqO9Rjy6M5IOdpzWjrajrp1DUEZeMiH4AADAQYePZw488jnOrlwjL9LZkRc/p2AIPgAAcNCQqkpHj7MrCCMvuRB8AADgoHH1g1QbrVSmbI6IzuZejKsf5Mrr+z3yYgXBBwAADirrE9Gy6Q2S1CsASXy9bHqDa8mmfo+8WEHwAQCAw6aOqtWqOWNVE03t4GuilVo1Z6yrq038HnmxgqW2AAC4YOqoWk1uqPG8wmli5GX+6hZFpJTEUy9GXqyIGGOCUXHkT2KxmKLRqDo6OlRdXe336QAAEEpe1/mw038z8gEAQBHya+TFCoIPAACKVFmfiCaMOM/v0+iFhFMAAOApRj4AAPBIV9wEchrEawQfAAB4IMgbvXmNaRcAAFwW9I3evEbwAQCAi/za6K0rbtS8/4g27H5XzfuP+LqRXE9MuwAA4CI7G705tTIl6FM8jHwAAOAirzd6C8MUD8EHAAAu8nKjN7+meOwi+AAAwEVebvRmZ4rHT7aDj61bt2r69OkaNmyYIpGIXnzxxZTvG2N0//33q7a2Vv369dOkSZO0d+9ep84XAIBQSWz0JqlXAOL0Rm9eT/Hky3bwcfLkSY0ePVorV65M+/2vf/3r+uY3v6nHHntMr7/+uvr3768pU6bo9Gl/GwoAgF+mjqrVqjljVRNNnVqpiVZq1ZyxjiWBejnFUwjbq11uu+023XbbbWm/Z4zRo48+qn/+53/WjBkzJEnf+c53NHToUL344ouaNWtWYWcLAEBIebHRW2KKp73jdNq8j4jOBjxOTPEUwtGcj7a2NrW3t2vSpEnJx6LRqMaPH6/m5ua0P9PZ2alYLJbyDwCAYpTY6G3GmI9owojzHC+t7uUUTyEcDT7a29slSUOHDk15fOjQocnv9bR8+XJFo9Hkv7q6OidPCQAAT/ld3MurKZ5C+F5kbMmSJVq0aFHy61gsRgACAAiloBT38mKKpxCOBh81NTWSpEOHDqm29s9v8qFDhzRmzJi0P1NRUaGKigonTwMAAM8linv1HOdIFPfyetQhMcUTRI5Ou9TX16umpkYbN25MPhaLxfT6669rwoQJTr4UACAk/J6G8EJYinsFhe2RjxMnTmjfvn3Jr9va2rR7924NGjRIF154oRYuXKivfOUruuSSS1RfX6+lS5dq2LBhmjlzppPnDQAIgaBMQ7jNj/1bwsx28PGLX/xCN910U/LrRL7G3Llz9cwzz+jLX/6yTp48qc9//vM6duyYrr/+ejU1Namy0t81xQAAbwVtGsJNYSnuFRQRY0ygxoBisZii0ag6OjpUXV3t9+kAAPLQFTe6fsWmjKMBiXoT2xbfHJgkyEI07z+i2U9sz3nc2rs/XrQjH3b6b/Z2AQA4Lix7jDjFy/1bigHBBwDAcaU2DRGW4l5BQfABAHBcWPYYscrKip0wFPcKCt+LjAEAik9Y9hixws6KnaAX9woKRj4AAI4rlmmIxIqdnvkriRU7Ta0He/2M2/u3FAOCDwCAK8IwDZFtOoXCYe5h2gUA4JogT0Pkmk6hcJh7CD4AAK4K4h4jVgqgdf4xbum5imXFjpeYdgEAlBSr0ymD/4+1TU/DsmInSAg+AAAlxep0ioyyFg6TKByWL4IPAEDo2dk51+o0yR9OdmZcsZPwwZkuvbKn3e7pljxyPgAAoWZ351w7BdAmjDhPq+aM1X3ff1PHTp3pdUzHqTNFt0meFxj5AACEVj51OOzuwzK5oUaV56TvLllymx+CDwBAKOVbh8NuAbQdbUfVHuvMeB7FtkmeFwg+AAChVMjOuXYKoJXaJnleIOcDABBKhQYFVgugFdsmeUFA8AEACCUnggIrBdCKaZO8oGDaBQAQSomgIJf3T2bO17CiWDbJCxKCDwBAKJX1iWjptIacxz3wo7cKXokShk3ywoRpFwBAaA3sX57zGKc2fwvyJnlhQ/ABAAgtr1eiBHGTvDAi+AAAhJZXK1G64oYRDwcRfAAAQsuLlSh2y7cjNxJOAQChlBiN+NSomoyBh1TYSpR8yrcjN0Y+AAChk240ok9E6r6opabA0Ylc5dsjOlu+fXJDDVMwNhF8AABCJTEa0TMoMH964K8nXqTJDTUF52XYKd9OEqo9TLsAAELDymjEy63tjiSEFuOeLl1xo+b9R7Rh97tq3n/Et514GfkAAISGl6MRxbanS5ASZxn5AACERnvMu9GIxEqaTOMnEZ3tvMOwp0vQEmcJPgAgh6AMVZe6ptaDeuCHv7R0rBOjEcWyp0uuqSrpbOKsl7/XTLsAQBZBGqoOA7eKcWVKMu3J6R1mE3u69PwdKHQljZeCmDhL8AEEBBUUgydTh5cYqmZDsVRuBWrZ7ty7c2s0Iux7ugQxcZbgAwgA7q6DhxoP9rgZqOW6c08Y1L9cX/2/o1z5zIR5T5cgJs6S8wH4LGiJYEHnVf6FnaHqUud2ToHVO/J/nnYFwXoaQUycZeQD8BF31/Z4OUIUxKHqoHI7p8DqHXlNtJ/t5y4FicTZ+atbFJFS/t74lTjLyAfgI+6urfN6hCiIQ9VB5XagFsQ797BJJM7WRFN/X2uilb7kLjHyAfiIu2tr/BghcmO31GJNKnY7UAvinXsYBSlxluAD8BF319b4sVSw0A6vZ6Dx/skP9cCPijOp2Itt7YthyWsQBCVxluAD8JEXf7SLgV8jRPl2eOlyU9IpliW7Xo1MBOnOHYUh+AAscGu4nOFka/wcIbLb4VkthiUVV1KxVyMTQblzR2EIPoAc3F5hwXBybvmOEDkVNFrt8KwWw+qumLZlZ2QCVhF8AFl4VeGSP9rZ5TNC5EfhNqvFsNIJc1JxsSbSwj0EH0AGXq+wYDg5OzsjRH6VRS8kgAhrUjHVeZEPgg8gg3xWWHAH6C4rI0R+Fm7LJ4AIc1KxF0Een6niRPABZGB3hQV3gN7INULk5w6euXJTenIqqdiPDtqLII/PVPGiwimQgZ0VFuzPEhx+Fm5L5KZIyliNs7tEdcnJDTV571fT1HpQ16/YpNlPbNe963Zr9hPbdf2KTa7/zrldnZfPVHFj5APIwOoKi48NH6gbvvEq+7MEhN+F2zLlptRGK7V02hUa2L8iZYTilT3tun7Fprzu7v3KbZHcDfLY86j4EXwAGVhdYbHznfd9G+ZHb0Eo3GZ19VIhwYPfHbSbQZ6fU2fwBtMuQBZWNmNif5ZgyTb1kW+ORVfc2J4WSeSmzBjzEU0YcV6v1yt0G3q/NyV0c7M3PlPFj5EPIIdcd7F+D/OjNycLt7mV9Fjo3b3fHbSb1Xn5TBU/gg/AgmwrLIIwzI/eCi3c1hU3+tamvXrkZ3t7fc+JnIpCgwenO+h8Vsy4VZ2Xz1TxI/gACsT+LMGVb+G2ptaD+pcf7FF7LH3H70RORaHBg5MddCGjO25U5+UzVfwcz/no6urS0qVLVV9fr379+mnEiBF64IEHZIyd3Q6AcLGSG4JwSCSBZgo8EgrNqSg0Z8Kp3BYnlrTmym/JB5+p4ub4yMeKFSu0atUqPfvssxo5cqR+8YtfaN68eYpGo/rCF77g9MsBnss0PM3+LOGXz8Zw+eZUOHF3X+i0h98rZnLhM1W8HA8+fv7zn2vGjBmaNm2aJOmiiy7S2rVrtWPHDqdfCvBcruFp9mdxhl8ltfPZGK6QpEcnciYK6aDDsKSVz1Rxcjz4uO666/T444/r17/+tS699FL993//t7Zt26aHH3447fGdnZ3q7OxMfh2LxZw+JcARfhZ0KiV+ltS2M4rhVNKjE3f3+XbQfq+YQelyPPi47777FIvFdPnll6usrExdXV366le/qjvuuCPt8cuXL1djY6PTpwE4KujD08XC7wDP7iiGU0mPft3ds6QVfnE84fT555/Xc889pzVr1qilpUXPPvusHnroIT377LNpj1+yZIk6OjqS/w4cOOD0KQEF87ugUykotOiWE3IlgSbUVFcUxUiXm4XC4I58Ct4FkeMjH1/60pd03333adasWZKkK6+8Uu+8846WL1+uuXPn9jq+oqJCFRUVTp8G4CiGp90XhPyDbEmgCV+cdKnuufmjRTHC5daSVq9ydvzKDfJLMe3y63jwcerUKfXpkzqgUlZWpng87vRLAZ5heNp9QQnwsm0MV8gf+aB2lPkmvWZqj1cdZDF1xFb4PSXpNMeDj+nTp+urX/2qLrzwQo0cOVK7du3Sww8/rL/+6792+qUAz1Bx0TmZOq0gBXhOL/EMekdpt72Z2vOXo2v1+NY21zvIYuuIcynGnLOIcbj61/Hjx7V06VKtX79ehw8f1rBhwzR79mzdf//9Ki8vz/nzsVhM0WhUHR0dqq6udvLUgIIk/uBJ6Yeni+0PnhuydcI3Xz5UH1++UUdPfpj2ZxMB3rbFN4fmD6yUuaMM6+9Npvbk4tT164obXb9iU8YpurD+nmTTvP+IZj+xPedxa+/+uK/Lku30344nnFZVVenRRx/VO++8ow8++ED79+/XV77yFUuBBxBkVFwsTLZKmn+7ukXjvvazrIGHFL6S2kFIonVSPkXYEpxKyi7F5O+gTEk6ib1dABuouJgfK53wsVNnMv58oRuV+SUISbROyqcIW0+FdpDF2BHnEqQpSacQfAA2UXHRvkI6rUH9+2rLl25S+TmOD9S6rtg6SifOs9AOshg74lyKMecsfJ9mAKFTSKd19OQZ7Xzn/YzfD3Ldg2LrKAs5T6dqhpRibRKnNhEMEkY+ALiu0M41U/AS9FUkxXbHmqs9CU7WDOnJrdokQefEPkBB4vhql0Kx2gUoPokVCrk6rUzSZfGHZRVJkFdJ5VN7JFd7Pv/Jev3gvw9S58MlQa0XI9nrvwk+AHgiU6eVS5+I9KsHbkvJ+QjbcssgdpSFnFOun6XCaWki+AAQSOk6LSt6jnyEpe5Bd0HqKJ0YNQpSexAMdvpvcj4AeKbnUuW9h07oW6/uy/lzPXM+wriKJCirpJyqlhmU9iCcWO0CwFOJTmvGmI9o4kcHW/qZngmrxbaKxEulWKQLwUPwAcA3+S6bLMXllk4J46gRig/BBwDf5Fu/oBjrHlhVaF0TRo0QBOR8APBVvvULglL3IJF42d7xgY6e/FCD/k+FaqrdScB0YtVMsdUeQTix2gVAIHz4x7j+s/m3eufoKQ0fdK7unHCRpZLqfq66yLZ6x+mltE7WNQly7RGEF0ttAYRKEOtg5GJla/mInOnI3ahrEsb3HMHGUlsAoZGpE2/vOK35q1sCeRduZ2t5K8tWc3Fjd1x2aIafCD4A+MapmhNes7pLbz5BQTpurVChVgf8QvCBkkaVRn+5cUefiZPX2m4nX+iyVVaooNgQfKBkMeftrXSdv1c1J5y+1nY7+UKDAlaooNgQfKAkhTHPIMwydf6zrr3Q0s9b6bwzjWy4ca0TwUCuqRengoJS3UYexYvVLig5YdsRNexyLRGNnttXHafOZL2jz3UtMgU3S6ddoQd+9JYr19rL1S7dX5PROgQVq12ALLzMMyh1VhJKI93+P587+mwjG3+3ZlfW8yvkWmcqcpbgRlDAChUUC4IPlBz2tvCOlUDv/VNn9MVJl2jdGwdsVyrNFdxYle+17h4MeFHhVGKFCooDwQdKjpMrB1gtk53VTv2iwf21bfHNtt9Lq0tecykkIZRgALCP4AMlx6mVA8y/52Yn0MunEy90dIpVIoA/2NUWJceJHVETeQY977oTKyiaWg86eMbhlQj0Mr2TEZ0N2PLt/O2MWJTa7rdAkBF8oCQlkgVroqmdV020MufqBCt5Bo0v7bG91XkxciLQy8ZqcPMff5XftQbgDpbaoqTlk7PRvP+IZj+xPedzr7374+QC/ImbU1RWd2glPwdwF0ttAYvczDNgtcyfublENNOS156rZUgMBYKD4AOwiX028uNm50/9CyBcCD4Am7zcZ4OpAusY2QDCg+ADsMmrfTZYygugWLHaBaHRFTdq3n9EG3a/q+b9R3xdTVLIahkrWMoLoJgx8oFQcHoUwInpDLfyDKzsh9L40h5NbqhhCgZAKBF8IPCc3hLdyUDGjTwDNr4DUOyYdkGgOV3QKwzTGSzlBVDsCD4QaHZGAXIJS2VSt5fyBil3BkBpYtoFgebkKEBYpjPcXMqbacpp6bQrNLB/BUt6AXiC4AMpglZXwslRgLBMZ7i1lDdT7szBjtP6uzW7Uh5jSS8ANxF8ICmIdSWcHAUIU2VSqyXDrco25ZROvsm8AGAFG8tBUua74p6bc/nB6sZhuXTFja5fsSljICNJA8/tq78af6EikiZcPFgfH3GeryM/To1EWd0Mr7tEYLdt8c1MwQDIyU7/TfCBZKecKR8iCJ2QU6MymQKZTAb0O0fzJtbrosH9AzENla8Nu9/Vvet25/Wzz901Xn0ikcBMxQEIJoIP2BKWLeKdGgVIF8hY5fc0VL7yGflIGNCvr459cCb5dVjfAwDustN/s9QWoUrEnDDiPM0Y8xFNKGA6ZOqoWm1bfLPW3v1xPfKZ0RrUv9zyzwapHogdidyZfN6x7oGHFN73AEBwEHzAt0RMP+tNJAKZmmg/HT35oeWfC1I9EDsSK2gk5RWAdBfW9wBAcLDaBZ5uEZ8QlJU1+YzmBKUeiF2ZVtDkI6zvAYBgYOQDWe+KndwiPiFIJc4LGc3JJ3Dxu7ro1FG1WjrtCseez++pOADhxMgHJDlfVyKToO3YOq5+kGqqK9Ues9+J2g1cgjDa0xU3euBHbzn2fEGoiQIgfAg+kOTWFvHdOV3ivNAVMGV9Ipoxplbf3tpm+WfymYZyemfefOV6/61yYyoOQOkg+EAKN7aI787JlTVOjCQ0tR7U4zYDD8neNFSQRnucmCZxYyoOQGkh5wOesrOyJlt+hBN5I1ZKjvfsW2uilbZHKZzembeQnBE70yS10Ur9zSfrVRtN/Zl83gMA6I6RD3jK6sqa909+2KvqamJUY3JDjSMjCVamIOJGWjrtCg2uqsh7Gsqp0R4nRnpyvf+SNODcvlo5e2yytPyXp14RqM0GAYQfIx/wlJWVNX85ulYL1mQe1fjWpn2OjCRYDQoGV1UUVNjMiToq+Yz0pBslyfX+RyQ9+P+u1MRLBifb6lRxt2Lg92oloFi4MvLx7rvvavHixXr55Zd16tQpffSjH9XTTz+ta665xo2XQ8hkW1mzdNoVeuBHb2Ud1Xj659ZyNHIFF14VVyu0jko+OSO5Rkm8WNlUbIKwWgkoFo4HH++//74mTpyom266SS+//LLOP/987d27VwMHDnT6pXzl1D4jbj1f0GVaWWMlP+LYqTMZv99drqDBq+JqidGG+atbFFH6nXmzJW/aXSFkdWWN2yubikmm9/Rgx2n97eoW/cdfXa1PXTXMl3MDwsjx4GPFihWqq6vT008/nXysvr7e6ZfxldN3QKV6R5VuZY3VqZAB/fqq44MzBQUNhQYFdhQy2mAnZ8TuKAnVSXOzkph8z9pd+pYi+tRVxft5BZzkeM7HD37wA11zzTX69Kc/rSFDhujqq6/WE088kfH4zs5OxWKxlH9B5nR1ziBV+wwCq1Mc8yZeJKnwiqyJoKDGgxUd3Te0+7dZY7T27o9r2+Kbc76GnekhJ1fW4Cyricl/t6b0Pq9Avhwf+fjNb36jVatWadGiRfqnf/onvfHGG/rCF76g8vJyzZ07t9fxy5cvV2Njo9On4Qqn6zUEqf5DunPzY0je6lTIPTdfostqqhzJW/ByCiKf0QY700M//J/3LD0nZdGts/Ne+fV5BcLG8eAjHo/rmmuu0de+9jVJ0tVXX63W1lY99thjaYOPJUuWaNGiRcmvY7GY6urqnD4tRzhdndPp53OKn9NAdqZCnAwagjwFYec98WuHYjcEJQ/KznvFZnuANY4HH7W1tWpoaEh57IorrtALL7yQ9viKigpVVFQ4fRqucLI6pxvHOSEIZcDt5EcEOWhwktX3xI8dit0QpDyoxHtqtSw9o0pAbo4HHxMnTtTbb7+d8tivf/1rDR8+3OmX8pzTd5VBu0sN0jQQqzF6s/KeeJlE65YgBMDdJd7Tv13dYun4MIwqAX5zPOH0i1/8orZv366vfe1r2rdvn9asWaPHH39cCxYscPqlPJe4A8r0Zzuis3dnVu8q83k+N4scBS1ZkeJWvVl5T7xMonVargBYOhsAe13ca+qoWv3HX13dq9x+d3Y//0Apc3zk49prr9X69eu1ZMkS/eu//qvq6+v16KOP6o477nD6pTzn9F2l3edzeyg6iNNAyE9YR46CmgclSZ+6api+pYj+bk3vEZCwjCoBQeFKefW/+Iu/0JtvvqnTp0/rrbfe0t133+3Gy/jC6btKq8/nxZLcoE0DoTBhHDkKegD8qatq9dicsWy2lwdK06M7NpbLg9N3lbmez6tcjGJJVkR4hSEADuuokp+ClECMYCD4yJPTqyyyPZ9XQ9HFkKyIcAtLAFwqq6ycELQEYgQDu9qGgJdD0WFOVkT4Wdn1mAA4PIKaQAz/MfIRAl4PRTOsDD+x627xCHICMfxF8BECfgxFM6ycKijVNksFAXBxCHoCMfxD8GGRn50PuRj+IlnOHwTA4ReGBGL4g+DDgiB0PgxF+4NkOWsYGUI6YUkghvcixphAZfrEYjFFo1F1dHSourra79PJ2Pkk/qx63fnwR947XXGj61dsyjhnnfjDuW3xzSV9DYIQnCO4En9DpfSjtgTwxcNO/81qlyyCmKkdxsJRYRW0cvNB5EXxO4QbK+iQDtMuWZCpXdpIlssuSBsRIthIIEZPBB9Z0PmUNpLlsiM4hx0kEKM7pl2yoPMpbU7vYlxsCM4B5IvgIws6n9JGtc3sCM4B5IvgIws6H5AslxnBOYB8sdTWApYSgiXO6bGMEkCCnf6b4MMiOh8gPYJzABLBBwCPEZwDsNN/s9QWJalnZ/mx4QO185336TzzxDJKAHYQfKDkpJsm6BORuheqZdoAANzDaheUlEzlwHtWyKc8OAC4h+ADJSNbOfCe/Nq7BwBKAcEHSkaucuA9sXEcALiDnA+XkP0fPPmW+aY8OAA4i+DDBdQ9CKZ8y3wXWh6cQBQAUhF8OCyR0NgzSyCRwEjFR/8kyoG3d5y2lPcR0dky6oWUBycQBYDeyPlwULaERhIY/Zdtr56enNi7J9PKGlbSACh1BB8OypXQSAKj/zJtFNczvih04zgCUQDIjGkXB1lNTCSB0V9TR9VqckONqxVO7QSiVAYFUGoIPhxkNTGx0ARGFC5dOXAngwACUQDIjODDQbkSGp1IYAwyVnX8GYEoAGRG8OGgRELj/NUtikgpAYgTCYxBxqqOVKUeiAJANiScOixTQmOhCYxBxqqO3rKtrCn2QBQAcokYYwKVbh+LxRSNRtXR0aHq6mq/TydvpTIF0RU3un7FpozJlYk7/G2Lby7K9ufCiBCAUmGn/2baxSXpEhqLEas6sku3sqZYA1EAsIrgAwVhVUdupRKIAoBV5HygIKzqAADYRfCBgoyrH6QB5/bNesyAc/uyqgMAkETwAdeR3QAA6I7gowR1xY2a9x/Rht3vqnn/kYL2F9nRdlTHTp3Jesz7p86wnw0AIImE0z8p5qWx3dv22z+c0tod/6v2mDNLP0k4BQDYRfCh4q7FkK5tPSWKgeVTBI2EUwCAXSU/7VLM1Tkzta2nQrZ4T5QRzzRGFNHZQI6EUwBAQkkHH11xo8aX9qTde6OQDjkIsrUtne7FwOygjDgAwK6SDj7sVOcMm1xtyySf3IxS3M8GAJC/ks75KOZkyXzPOd/cDMqIAwCsKungo5iTJe2esxNbvFNGHABgRUlPuxRzsmSutnVHbgYAwEslHXwUc7Jktrb1RG4GAMBLEWNMoJZyxGIxRaNRdXR0qLq62pPXLLU6HzXVFZo97kJdNLg/uRkAAEfY6b8JPv6kVCqcFlvbAADBYKf/LumE0+6KOVmymNsGAAgfgg+LGD0AAMAZriecPvjgg4pEIlq4cKHbL+WaptaDun7FJs1+YrvuXbdbs5/YrutXbAp16XUAAPziavDxxhtv6Nvf/rauuuoqN1/GVcW89wsAAH5wLfg4ceKE7rjjDj3xxBMaOHCgWy/jqmLe+wUAAL+4FnwsWLBA06ZN06RJk7Ie19nZqVgslvLPT11xo+b9R7Rh97t65rW2ot37BQAAv7iScLpu3Tq1tLTojTfeyHns8uXL1djY6MZp2JauJoYVYdz7BQAAvzg+8nHgwAHde++9eu6551RZmXt/kSVLlqijoyP578CBA06fkiWZcjusCOPeLwAA+MXxkY+dO3fq8OHDGjt2bPKxrq4ubd26Vd/61rfU2dmpsrKy5PcqKipUUVHh9GnYki23I5t8N2Nj2W5p4DoDQHqOBx+33HKL3nzzzZTH5s2bp8svv1yLFy9OCTyCYkfbUdsjHvnu/VLMpdzxZ1xnAMjM8WmXqqoqjRo1KuVf//79dd5552nUqFFOv5wj8snZyGczNpbtlgauMwBkR4VTWc/ZWDrtCg2uqshrCD3Xst2Izi7bndxQw9B8iHGdASA3T4KPzZs3e/EyeRtXP0i10Uq1d5xO22kkcjs+O7E+7w4j19RO92W77MMSXlxnAMjN9fLqYVDWJ6Jl0xsk/TmXIyHf3I6erE7tsGw33LjOAJAbwcefTB1Vq1VzxqommjoFk09uRzpWp3ZYthtuXGcAyI2cj26mjqrV5IYaV5ZHWp3asbtsF8HCdQaA3Bj56KGsT0QTRpynGWM+ogkjznMsKdCLqR34j+sMALkRfHjI7akdBAPXGQCyixhjArUlaywWUzQaVUdHh6qrq/0+HVdQ+bI0cJ0BlBI7/Tc5Hz5ITO2guHGdASA9pl0AAICnCD4AAICnCD4AAICnCD4AAICnCD4AAICnCD4AAICnWGobINSFAACUAoKPgGhqPajGl/akbMdeG63UsukNVMQEABQVpl0CoKn1oOavbkkJPCSpveO05q9uUVPrQZ/ODAAA55VM8NEVN2ref0Qbdr+r5v1H1BUPRlX5rrhR40t70u6Amnis8aU9gTlfAAAKVRLTLkGe0tjRdrTXiEd3RtLBjtPa0XaUUt0AgKJQ9CMfTk9pOD2Ccvh45sAjn+MAAAi6oh75yDWlEdHZKY3JDTWWVpW4MYIypKoy90E2jgMAIOiKeuTDzpRGLm4lhY6rH6TaaKUyhT4RnQ1wxtUPyuv5AQAImqIOPpya0nAzKbSsT0TLpjdIUq8AJPH1sukN1PsAABSNog4+nJrScHIEJZ2po2q1as5Y1URTz6MmWqlVc8b6nhQLAICTijrnIzGl0d5xOu2oRURnO/hcUxpeJIVOHVWryQ01VDgFABS9og4+ElMa81e3KCKlBCB2pjS8Sgot6xNhOS0AoOgV9bSL5MyUBkmhAAA4p6hHPhIKndJwagQFAABIEWNMoOp2x2IxRaNRdXR0qLq62u/TSRHkSqkAAPjJTv9dEiMfTiEpFACAwhF82ERSKAAAhSn6hFMAABAsBB8AAMBTBB8AAMBT5HwEQFfckMQKACgZBB8+Y/kuAKDUMO3io6bWg5q/uqXXpnXtHac1f3WLmloP+nRmAAC4h+DDJ11xo8aX9qTd8C7xWONLe9QVD1QNOAAACkbw4ZMdbUd7jXh0ZyQd7DitHW1HvTspAAA8QPDhk8PHMwce+RwHAEBYEHz4ZEhVZe6DbBwHAEBYEHz4ZFz9INVGK5VpQW1EZ1e9jKsf5OVpAQDgOoIPn5T1iWjZ9AZJ6hWAJL5eNr2Beh8AgKJD8OGjqaNqtWrOWNVEU6dWaqKVWjVnLHU+AABFiSJjPps6qlaTG2qocAoAKBkEHwFQ1ieiCSPO8/s0AADwBNMuAADAUwQfAADAUwQfAADAUwQfAADAUwQfAADAUwQfAADAUwQfAADAU44HH8uXL9e1116rqqoqDRkyRDNnztTbb7/t9MsAAICQcjz42LJlixYsWKDt27frlVde0ZkzZ3Trrbfq5MmTTr8UAAAIoYgxxrj5Ar///e81ZMgQbdmyRZ/85CdzHh+LxRSNRtXR0aHq6mo3Tw0AADjETv/tenn1jo4OSdKgQem3hu/s7FRnZ2fy61gs5vYpAQAAH7macBqPx7Vw4UJNnDhRo0aNSnvM8uXLFY1Gk//q6urcPCUAAOAzV6dd5s+fr5dfflnbtm3TBRdckPaYdCMfdXV1TLsAABAigZh2ueeee/TDH/5QW7duzRh4SFJFRYUqKircOg0AABAwjgcfxhj9/d//vdavX6/Nmzervr7e6ZcAAAAh5njwsWDBAq1Zs0YbNmxQVVWV2tvbJUnRaFT9+vVz+uUAAEDIOJ7zEYlE0j7+9NNP67Of/WzOn2epLQAA4eNrzofLZUMAAEDIsbcLAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwFMEHAADwlGvBx8qVK3XRRRepsrJS48eP144dO9x6KQAAECKuBB/f/e53tWjRIi1btkwtLS0aPXq0pkyZosOHD7vxcgAAIERcCT4efvhh3X333Zo3b54aGhr02GOP6dxzz9VTTz3lxssBAIAQOcfpJ/zwww+1c+dOLVmyJPlYnz59NGnSJDU3N/c6vrOzU52dncmvOzo6JEmxWMzpUwMAAC5J9NvGmJzHOh58/OEPf1BXV5eGDh2a8vjQoUP1q1/9qtfxy5cvV2NjY6/H6+rqnD41AADgsuPHjysajWY9xvHgw64lS5Zo0aJFya/j8biOHj2q8847T5FIxJHXiMViqqur04EDB1RdXe3IcwZNKbRRKo120sbiUQrtpI3FwYk2GmN0/PhxDRs2LOexjgcfgwcPVllZmQ4dOpTy+KFDh1RTU9Pr+IqKClVUVKQ8NmDAAKdPS5JUXV1dtL84CaXQRqk02kkbi0cptJM2FodC25hrxCPB8YTT8vJyfexjH9PGjRuTj8XjcW3cuFETJkxw+uUAAEDIuDLtsmjRIs2dO1fXXHONxo0bp0cffVQnT57UvHnz3Hg5AAAQIq4EH7fffrt+//vf6/7771d7e7vGjBmjpqamXkmoXqmoqNCyZct6Te8Uk1Joo1Qa7aSNxaMU2kkbi4PXbYwYK2tiAAAAHMLeLgAAwFMEHwAAwFMEHwAAwFMEHwAAwFOhDT5Wrlypiy66SJWVlRo/frx27NiR9fjvfe97uvzyy1VZWakrr7xSP/7xj1O+b4zR/fffr9raWvXr10+TJk3S3r173WxCTnba+MQTT+gTn/iEBg4cqIEDB2rSpEm9jv/sZz+rSCSS8m/q1KluNyMrO2185plnep1/ZWVlyjFBvI6SvXbeeOONvdoZiUQ0bdq05DFBupZbt27V9OnTNWzYMEUiEb344os5f2bz5s0aO3asKioq9NGPflTPPPNMr2PsfsbdZred3//+9zV58mSdf/75qq6u1oQJE/STn/wk5Zh/+Zd/6XUdL7/8chdbkZ3dNm7evDnt72p7e3vKcUG6lnbbmO6zFolENHLkyOQxQbuOy5cv17XXXquqqioNGTJEM2fO1Ntvv53z57zsJ0MZfHz3u9/VokWLtGzZMrW0tGj06NGaMmWKDh8+nPb4n//855o9e7Y+97nPadeuXZo5c6Zmzpyp1tbW5DFf//rX9c1vflOPPfaYXn/9dfXv319TpkzR6dOnvWpWCrtt3Lx5s2bPnq1XX31Vzc3Nqqur06233qp333035bipU6fq4MGDyX9r1671ojlp2W2jdLb6Xvfzf+edd1K+H7TrKNlv5/e///2UNra2tqqsrEyf/vSnU44LyrU8efKkRo8erZUrV1o6vq2tTdOmTdNNN92k3bt3a+HChbrrrrtSOuZ8fjfcZredW7du1eTJk/XjH/9YO3fu1E033aTp06dr165dKceNHDky5Tpu27bNjdO3xG4bE95+++2UNgwZMiT5vaBdS7tt/Ld/+7eUth04cECDBg3q9XkM0nXcsmWLFixYoO3bt+uVV17RmTNndOutt+rkyZMZf8bzftKE0Lhx48yCBQuSX3d1dZlhw4aZ5cuXpz3+M5/5jJk2bVrKY+PHjzd/8zd/Y4wxJh6Pm5qaGvONb3wj+f1jx46ZiooKs3btWhdakJvdNvb0xz/+0VRVVZlnn302+djcuXPNjBkznD7VvNlt49NPP22i0WjG5wvidTSm8Gv5yCOPmKqqKnPixInkY0G7lgmSzPr167Me8+Uvf9mMHDky5bHbb7/dTJkyJfl1oe+Z26y0M52GhgbT2NiY/HrZsmVm9OjRzp2Yg6y08dVXXzWSzPvvv5/xmCBfy3yu4/r1600kEjG//e1vk48F+ToaY8zhw4eNJLNly5aMx3jdT4Zu5OPDDz/Uzp07NWnSpORjffr00aRJk9Tc3Jz2Z5qbm1OOl6QpU6Ykj29ra1N7e3vKMdFoVOPHj8/4nG7Kp409nTp1SmfOnNGgQYNSHt+8ebOGDBmiyy67TPPnz9eRI0ccPXer8m3jiRMnNHz4cNXV1WnGjBn65S9/mfxe0K6j5My1fPLJJzVr1iz1798/5fGgXEu7cn0enXjPgigej+v48eO9PpN79+7VsGHDdPHFF+uOO+7Q//7v//p0hvkbM2aMamtrNXnyZL322mvJx4vxWj755JOaNGmShg8fnvJ4kK9jR0eHJPX63evO634ydMHHH/7wB3V1dfWqljp06NBe84wJ7e3tWY9P/NfOc7opnzb2tHjxYg0bNizlF2Xq1Kn6zne+o40bN2rFihXasmWLbrvtNnV1dTl6/lbk08bLLrtMTz31lDZs2KDVq1crHo/ruuuu0+9+9ztJwbuOUuHXcseOHWptbdVdd92V8niQrqVdmT6PsVhMH3zwgSO//0H00EMP6cSJE/rMZz6TfGz8+PF65pln1NTUpFWrVqmtrU2f+MQndPz4cR/P1Lra2lo99thjeuGFF/TCCy+orq5ON954o1paWiQ587csSN577z29/PLLvT6PQb6O8XhcCxcu1MSJEzVq1KiMx3ndT7pSXh3+evDBB7Vu3Tpt3rw5JSFz1qxZyf+/8sorddVVV2nEiBHavHmzbrnlFj9O1ZYJEyakbE543XXX6YorrtC3v/1tPfDAAz6emXuefPJJXXnllRo3blzK42G/lqVmzZo1amxs1IYNG1LyIW677bbk/1911VUaP368hg8frueff16f+9zn/DhVWy677DJddtllya+vu+467d+/X4888oj+8z//08czc8ezzz6rAQMGaObMmSmPB/k6LliwQK2trb7moKQTupGPwYMHq6ysTIcOHUp5/NChQ6qpqUn7MzU1NVmPT/zXznO6KZ82Jjz00EN68MEH9dOf/lRXXXVV1mMvvvhiDR48WPv27Sv4nO0qpI0Jffv21dVXX508/6BdR6mwdp48eVLr1q2z9MfLz2tpV6bPY3V1tfr16+fI70aQrFu3TnfddZeef/75XsPaPQ0YMECXXnppKK5jJuPGjUuefzFdS2OMnnrqKd15550qLy/PemxQruM999yjH/7wh3r11Vd1wQUXZD3W634ydMFHeXm5Pvaxj2njxo3Jx+LxuDZu3JhyV9zdhAkTUo6XpFdeeSV5fH19vWpqalKOicViev311zM+p5vyaaN0NhP5gQceUFNTk6655pqcr/O73/1OR44cUW1trSPnbUe+beyuq6tLb775ZvL8g3YdpcLa+b3vfU+dnZ2aM2dOztfx81ralevz6MTvRlCsXbtW8+bN09q1a1OWSmdy4sQJ7d+/PxTXMZPdu3cnz7+YruWWLVu0b98+SzcDfl9HY4zuuecerV+/Xps2bVJ9fX3On/G8n7SdohoA69atMxUVFeaZZ54xe/bsMZ///OfNgAEDTHt7uzHGmDvvvNPcd999yeNfe+01c84555iHHnrIvPXWW2bZsmWmb9++5s0330we8+CDD5oBAwaYDRs2mP/5n/8xM2bMMPX19eaDDz7wvH3G2G/jgw8+aMrLy81//dd/mYMHDyb/HT9+3BhjzPHjx80//uM/mubmZtPW1mZ+9rOfmbFjx5pLLrnEnD59OhRtbGxsND/5yU/M/v37zc6dO82sWbNMZWWl+eUvf5k8JmjX0Rj77Uy4/vrrze23397r8aBdy+PHj5tdu3aZXbt2GUnm4YcfNrt27TLvvPOOMcaY++67z9x5553J43/zm9+Yc88913zpS18yb731llm5cqUpKyszTU1NyWNyvWd+sNvO5557zpxzzjlm5cqVKZ/JY8eOJY/5h3/4B7N582bT1tZmXnvtNTNp0iQzePBgc/jwYc/bZ4z9Nj7yyCPmxRdfNHv37jVvvvmmuffee02fPn3Mz372s+QxQbuWdtuYMGfOHDN+/Pi0zxm06zh//nwTjUbN5s2bU373Tp06lTzG734ylMGHMcb8+7//u7nwwgtNeXm5GTdunNm+fXvyezfccIOZO3duyvHPP/+8ufTSS015ebkZOXKk+dGPfpTy/Xg8bpYuXWqGDh1qKioqzC233GLefvttL5qSkZ02Dh8+3Ejq9W/ZsmXGGGNOnTplbr31VnP++eebvn37muHDh5u7777b1z/mxthr48KFC5PHDh061HzqU58yLS0tKc8XxOtojP3f11/96ldGkvnpT3/a67mCdi0Tyy17/ku0ae7cueaGG27o9TNjxowx5eXl5uKLLzZPP/10r+fN9p75wW47b7jhhqzHG3N2iXFtba0pLy83H/nIR8ztt99u9u3b523DurHbxhUrVpgRI0aYyspKM2jQIHPjjTeaTZs29XreIF3LfH5fjx07Zvr162cef/zxtM8ZtOuYrn2SUj5nfveTkT+dKAAAgCdCl/MBAADCjeADAAB4iuADAAB4iuADAAB4iuADAAB4iuADAAB4iuADAAB4iuADAAB4iuADAAB4iuADAAB4iuADAAB4iuADAAB46v8DkbnQO9JXxYgAAAAASUVORK5CYII=", 21 "text/plain": [ 22 "<Figure size 640x480 with 1 Axes>" 23 ] 24 }, 25 "metadata": {}, 26 "output_type": "display_data" 27 } 28 ], 29 "source": [ 30 "import numpy as np\n", 31 "import matplotlib.pyplot as plt\n", 32 "\n", 33 "np.random.seed(10)\n", 34 "m = 100\n", 35 "X = 2*np.random.rand(m,1)\n", 36 "y = 4+3 * X + np.random.randn(m,1)\n", 37 "\n", 38 "plt.scatter(x=X, y=y)\n", 39 "plt.ylim(bottom=0)" 40 ] 41 }, 42 { 43 "cell_type": "code", 44 "execution_count": 20, 45 "metadata": {}, 46 "outputs": [ 47 { 48 "data": { 49 "text/plain": [ 50 "(100, 1)" 51 ] 52 }, 53 "execution_count": 20, 54 "metadata": {}, 55 "output_type": "execute_result" 56 } 57 ], 58 "source": [ 59 "y.shape" 60 ] 61 }, 62 { 63 "cell_type": "code", 64 "execution_count": 21, 65 "metadata": {}, 66 "outputs": [ 67 { 68 "data": { 69 "text/plain": [ 70 "(100, 1)" 71 ] 72 }, 73 "execution_count": 21, 74 "metadata": {}, 75 "output_type": "execute_result" 76 } 77 ], 78 "source": [ 79 "X.shape" 80 ] 81 }, 82 { 83 "cell_type": "code", 84 "execution_count": 12, 85 "metadata": {}, 86 "outputs": [], 87 "source": [ 88 "# @ in python is matrix multiplication which works the same way\n", 89 "# as using np.dot()\n", 90 "\n", 91 "from sklearn.preprocessing import add_dummy_feature\n", 92 "\n", 93 "X_b = add_dummy_feature(X)\n", 94 "theta_best = np.linalg.inv(X_b.T @ X_b) @ X_b.T @ y" 95 ] 96 }, 97 { 98 "cell_type": "code", 99 "execution_count": 13, 100 "metadata": {}, 101 "outputs": [ 102 { 103 "data": { 104 "text/plain": [ 105 "array([[4.24963579],\n", 106 " [2.81740108]])" 107 ] 108 }, 109 "execution_count": 13, 110 "metadata": {}, 111 "output_type": "execute_result" 112 } 113 ], 114 "source": [ 115 "theta_best" 116 ] 117 }, 118 { 119 "cell_type": "code", 120 "execution_count": 14, 121 "metadata": {}, 122 "outputs": [ 123 { 124 "data": { 125 "image/png": "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zUMiIiIinana7TJp0iR8/vnn+Oqrr3D77bd73MdTy0daWhq7XYiIiEzEEN0uzzzzDD755BNs377da/AAgPj4eMTHx6t1GERERGQwiocPIQR++9vfYs2aNcjJyUF6errSb0FEREQmpnj4mDx5MpYuXYp169YhKSkJRUVFAACr1YrExESl346IiIhMRvGaD4vF4nH7/PnzMXbsWL/P51BbIiIi89G15kPlaUOIiIjI5Li2CxEREWmK4YOIiIg0xfBBREREmmL4ICIiIk0xfBAREZGmGD6IiIhIUwwfREREpCmGDyIiItIUwwcRERFpiuGDiIiINMXwQURERJpi+CAiIiJNMXwQERGRphg+iIiISFMMH0RERKQphg8iIiLSFMMHERERaYrhg4iIiDTF8EFERESaYvggIiIiTTF8EBERkaYYPoiIiEhTDB9ERESkKYYPIiIi0hTDBxEREWmK4YOIiIg0xfBBREREmmL4ICIiIk0xfBAREZGmGD6IiIhIUwwfREREpCmGDyIiItIUwwcRERFpiuGDiIiINMXwQURERJpi+CAiIiJNMXwQERGRphg+iIiISFMMH0RERKQphg8iIiLSFMMHERERaYrhg4iIiDTF8EFERESaYvggIiIiTTF8EBERkaYYPoiIiEhTDB9ERESkKYYPIiIi0hTDBxEREWmK4YOIiIg0xfBBREREmmL4ICIiIk2pFj5mz56Npk2bIiEhAZ07d8bOnTvVeisiIiIyEVXCx4oVK/Dcc89h2rRpyMvLQ9u2bdGvXz+cOXNGjbcjIiIiE1ElfLz++ut46qmnMG7cOGRkZODtt99GrVq1MG/ePDXejoiIiEykhtIveO3aNezatQtTpkxxbYuJiUFWVhZyc3Or7V9WVoaysjLX98XFxQAAu92u9KERERGRSpz3bSGE330VDx+//PILysvL0bBhQ7ftDRs2xPfff19t/xkzZmD69OnVtqelpSl9aERERKSykpISWK1Wn/soHj6CNWXKFDz33HOu7x0OB86fP4969erBYrEo8h52ux1paWk4ceIEkpOTFXlNo4mGcwSi4zx5jpEjGs6T5xgZlDhHIQRKSkrQqFEjv/sqHj7q16+P2NhYnD592m376dOnkZqaWm3/+Ph4xMfHu22rU6eO0ocFAEhOTo7YXxynaDhHIDrOk+cYOaLhPHmOkSHcc/TX4uGk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OUenmjVr4p577nEdv9GuIxDeeV6+fBnLly8P6B8vPa9lsLz9PSYnJyMxMVGR3w0jWb58OSZOnIiVK1dWa9auqk6dOmjRooUprqM3nTp1ch1/JF1LIQTmzZuH0aNHIy4uzue+RrmOzzzzDD755BNs3boVt99+u899tb5Pmi58xMXF4d5778XmzZtd2xwOBzZv3uz2qbiyLl26uO0PAJs2bXLtn56ejtTUVLd97HY7vv32W6+vqaZQzhGQlcivvvoqsrOz0aFDB7/v8/PPP+PcuXOw2WyKHHcwQj3HysrLy7F//37X8RvtOgLhneeqVatQVlaGUaNG+X0fPa9lsPz9PSrxu2EUy5Ytw7hx47Bs2TK3odLeXLp0CceOHTPFdfRmz549ruOPpGu5bds2HD16NKAPA3pfRyEEnnnmGaxZswZbtmxBenq63+dofp8MukTVAJYvXy7i4+PFggULxMGDB8VvfvMbUadOHVFUVCSEEGL06NHipZdecu3/9ddfixo1aojXXntNHDp0SEybNk3UrFlT7N+/37XPzJkzRZ06dcS6devEvn37xKBBg0R6erq4evWq5ucnRPDnOHPmTBEXFyc+/PBDUVhY6PoqKSkRQghRUlIi/vjHP4rc3FxRUFAgvvjiC9G+fXvRvHlzUVpaaopznD59utiwYYM4duyY2LVrlxg+fLhISEgQBw4ccO1jtOsoRPDn6dS9e3cxbNiwatuNdi1LSkrE7t27xe7duwUA8frrr4vdu3eL48ePCyGEeOmll8To0aNd+//444+iVq1a4vnnnxeHDh0Ss2fPFrGxsSI7O9u1j7+fmR6CPc8lS5aIGjVqiNmzZ7v9TV68eNG1z3/913+JnJwcUVBQIL7++muRlZUl6tevL86cOaP5+QkR/Dm+8cYbYu3ateLIkSNi//794ve//72IiYkRX3zxhWsfo13LYM/RadSoUaJz584eX9No13HSpEnCarWKnJwct9+9K1euuPbR+z5pyvAhhBD/93//Jxo3bizi4uJEp06dxI4dO1yP9ejRQ4wZM8Zt/5UrV4oWLVqIuLg40apVK/Hpp5+6Pe5wOMTUqVNFw4YNRXx8vOjdu7c4fPiwFqfiVTDn2KRJEwGg2te0adOEEEJcuXJF9O3bV9x6662iZs2aokmTJuKpp57S9R9zIYI7x2effda1b8OGDcXDDz8s8vLy3F7PiNdRiOB/X7///nsBQGzcuLHaaxntWjqHW1b9cp7TmDFjRI8ePao9p127diIuLk7ccccdYv78+dVe19fPTA/BnmePHj187i+EHGJss9lEXFycuO2228SwYcPE0aNHtT2xSoI9x1mzZolmzZqJhIQEkZKSInr27Cm2bNlS7XWNdC1D+X29ePGiSExMFO+++67H1zTadfR0fgDc/s70vk9abh4oERERkSZMV/NBRERE5sbwQURERJpi+CAiIiJNMXwQERGRphg+iIiISFMMH0RERKQphg8iIiLSFMMHERERaYrhg4iIiDTF8EFERESaYvggIiIiTTF8EBERkab+f5UTwGeSk/u3AAAAAElFTkSuQmCC", 126 "text/plain": [ 127 "<Figure size 640x480 with 1 Axes>" 128 ] 129 }, 130 "metadata": {}, 131 "output_type": "display_data" 132 } 133 ], 134 "source": [ 135 "# Interesting, plt.plot() interpolates so you could just pass in whatever you\n", 136 "# want and it would give you the same line.\n", 137 "\n", 138 "import matplotlib.pyplot as plt\n", 139 "\n", 140 "slope = theta_best[1][0]\n", 141 "intercept = theta_best[0][0]\n", 142 "\n", 143 "x_values = np.linspace(min(X), max(X), 2)\n", 144 "y_values = slope * x_values + intercept\n", 145 "\n", 146 "plt.scatter(x=X, y=y)\n", 147 "plt.plot(x_values, y_values, color='red')\n", 148 "plt.ylim(0)\n", 149 "# Show the plot\n", 150 "plt.show()\n" 151 ] 152 }, 153 { 154 "cell_type": "code", 155 "execution_count": 15, 156 "metadata": {}, 157 "outputs": [ 158 { 159 "data": { 160 "text/plain": [ 161 "(array([4.24963579]), array([[2.81740108]]))" 162 ] 163 }, 164 "execution_count": 15, 165 "metadata": {}, 166 "output_type": "execute_result" 167 } 168 ], 169 "source": [ 170 "from sklearn.linear_model import LinearRegression\n", 171 "\n", 172 "lin_reg = LinearRegression()\n", 173 "\n", 174 "lin_reg.fit(X,y)\n", 175 "lin_reg.intercept_,lin_reg.coef_" 176 ] 177 } 178 ], 179 "metadata": { 180 "kernelspec": { 181 "display_name": ".venv", 182 "language": "python", 183 "name": "python3" 184 }, 185 "language_info": { 186 "codemirror_mode": { 187 "name": "ipython", 188 "version": 3 189 }, 190 "file_extension": ".py", 191 "mimetype": "text/x-python", 192 "name": "python", 193 "nbconvert_exporter": "python", 194 "pygments_lexer": "ipython3", 195 "version": "3.11.2" 196 } 197 }, 198 "nbformat": 4, 199 "nbformat_minor": 2 200 }