Files
numethods/tutorials/polynomial_regression.ipynb

516 lines
104 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"id": "873577f7",
"metadata": {},
"source": [
"# Polynomial Regression\n",
"\n",
"In fact, the polynomial regression does not differ too much from the multiple regression, in the sense that the model we will build is again a *linear* one: we wish to fit a polynomal of some degree to the data. The model looks like this:\n",
"$$ y(w, x) = w_0 + w_1 x + w_2 x^2 + \\cdots + w_p x^p, $$\n",
"for a polynomial of degree $p$."
]
},
{
"cell_type": "markdown",
"id": "65561dbe",
"metadata": {},
"source": [
"\n",
"Thus, having a set $\\left\\{ (x_i, y_i): i = 1,\\ldots,n \\right\\}$ of $n$ samples (dataset), the $n \\times (p+1)$ *design* matrix can be constructed as\n",
"$$\n",
"X = \\begin{bmatrix}\n",
"1 & x_1 & x_1^2 & \\cdots & x_1^p \\\\\n",
"1 & x_2 & x_2^2 & \\cdots & x_2^p \\\\\n",
"\\vdots & \\vdots & \\vdots & \\ddots & \\vdots \\\\\n",
"1 & x_n & x_n^2 & \\cdots & x_n^p \\\\\n",
"\\end{bmatrix},\n",
"$$\n",
"which is also called a **Vandermonde matrix**, so that $y(w, x) = X w$.\n",
"Since the model constructed is linear, we may simply use the linear least squares to fit the coefficients (as well as the intercept) of the model to the data."
]
},
{
"cell_type": "markdown",
"id": "764c0148",
"metadata": {},
"source": [
"Therefore, for the given data $\\left\\{ (x_i, y_i): i = 1,\\ldots,n \\right\\}$, we require\n",
"$$\n",
" X w = y, \\qquad y = [y_1, \\ldots, y_n]^\\top.\n",
"$$\n",
"to be solved for $w$. Surely, this problem is to be solved by means of *least-squares*:\n",
"$$\n",
" \\text{minimise } \\tfrac{1}{2} \\Vert X w - y \\Vert^2.\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "01fd52f7",
"metadata": {},
"source": [
"### Least-Squares Solution\n",
"\n",
"Indeed, this problem has also analytically represented solution: the *first-order optimality condition* requires that we solve\n",
"$$\n",
" X^\\top X w = X^\\top y.\n",
"$$\n",
"which is known to be the so-called *normal equations*."
]
},
{
"cell_type": "markdown",
"id": "ca13436d",
"metadata": {},
"source": [
"Under the assumption that $X^\\top X$ is *non-singular* (that depends on the data, and is in general very *ill-conditioned*), the solution to the *curve-fitting* problem by means of the *least-squares* sense is\n",
"$$\n",
" w = (X^\\top X)^{-1} X^\\top y.\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "a464f110",
"metadata": {},
"source": [
"**Data Generation**\n",
"\n",
"In most cases, it will be nice to apply the methodology to our generated artificial data. So, let us generate some data from a polynomial in this part.\n",
"\n",
"In order to be able use polynomials as beneficial as possible, although this library `numethods` does not depend on [NumPy](), nevertheless, we will use NumPy's **polynomial** module:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "1adfc002",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"from numpy.polynomial import Polynomial"
]
},
{
"cell_type": "markdown",
"id": "475679f9",
"metadata": {},
"source": [
"In order to be able to use our definitions later, let us construct first the model polynomial (**true** relation): let the model be\n",
"$$ y(x) = 1 + 2x - 3x^2 + 4x^3. $$"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "cbc8e75b",
"metadata": {},
"outputs": [],
"source": [
"def poly_relation(w, x):\n",
" p = Polynomial(w) # check help(Polynomial)\n",
" return p(x)\n",
"\n",
"def true_poly_relation(x):\n",
" w = [1, 2, -3, 4]\n",
" return poly_relation(w, x)"
]
},
{
"cell_type": "markdown",
"id": "28b792fe",
"metadata": {},
"source": [
"> [!IMPORTANT]\n",
"> Even further, one can write those functions without the use of NumPy! This would be another extension of the library `numethods`, as polynomials are represented by just *vectors*."
]
},
{
"cell_type": "markdown",
"id": "f8b133e0",
"metadata": {},
"source": [
"Indeed, the above definitions of the models may be simplified a lot!\n",
"Anyway, using these functions, we may now generate our data, by using NumPy's random number generation."
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "3afcf40c",
"metadata": {},
"outputs": [],
"source": [
"np.random.seed(42)\n",
"\n",
"n_samples = 20\n",
"x = np.linspace(-3, 3, n_samples)\n",
"# generate data with random noice N(0, 144)\n",
"y = true_poly_relation(x) + 12*np.random.randn(n_samples)"
]
},
{
"cell_type": "markdown",
"id": "cdafa99c",
"metadata": {},
"source": [
"Let's see if the data produced is looking good (as we might possible guess)."
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "6bb8f3be",
"metadata": {},
"outputs": [],
"source": [
"from matplotlib import pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "58e5ea93",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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Bg0apJ07d2r06NHas2ePLr30Uud0CAAAcGrPfbtJuw4c0Zdr6+/anbNFeT0H3ZMiFGsLVE21y6LKVQe6J0U0WKYffvhB69at03XXXSdJWr58uSoqKvT888+rZ8+eatOmjfbs2VPtMf7+/icsZfXbb78pLy9PTz31lPr27at27drV6mItSbLZbGrVqpXi4+Nltf7+cUNycrIqKiq0dOlS57H9+/dr8+bNat++/dl+yyfNL0lNmzbViBEjNHv2bL344ot64403zvo1AADwFquzDuqdJTslSf8akqJAP9eaOkB5PQdWH4vGDU6WpBMKbNXtcYOTZfWpeVTxXJSWlionJ0e7d+/WypUrNXnyZF199dW68sordeutt0qSWrZsqYqKCr3yyivavn273nnnHb322mvVnicxMVGHDh3S999/r7y8PBUXFyshIUH+/v7Ox33xxRd68sknzylv69atdfXVV2vkyJFatGiR1qxZo6FDh6pZs2a6+uqrz/p5ExMTtXTpUu3YsUN5eXlyOBx64okn9Pnnn2vr1q3asGGDvvzyy3MqyAAAeIMKu0OPfrJOhiFdc34zXdjK9S52pryeo4EpsZo2NFUxtupTA2JsgZo2NLVe13mdO3euYmNjlZiYqIEDB2rBggV6+eWX9fnnnztHPLt06aIXXnhBTz/9tFJSUvTuu+9qypQp1Z6nd+/euuuuu3TjjTeqadOmeuaZZ9S0aVPNnDlTH330kZKTk/XUU0/pueeeO+fMM2bMUNeuXXXllVeqV69eMgxDX3/99QlTA87Egw8+KKvVquTkZDVt2lSZmZny9/fX2LFj1alTJ1100UWyWq16//33zzk/AACebObiHUrPLpQtyE+PXeGagz4Wo6aJiB6ksLBQNptNBQUFCgsLq3ZfSUmJMjIylJSUpMDAs5+bancYSsvIV25RiaJCK6cK1NeIK+peXf09AADAXe0+eET9X1io4jK7plzbUX/untCgr3+qvnYslsqqI1YfS4MuhwUAAFCXxn+xQcVldnVr0Vg3dos3O06NmDYAAADg5eZtyNH89L3y9bFo8rUd5ePCnx5TXgEAALzYodIKjftigyRp5EXnqU106GkeYS7KKwAAgBf79/zNyi4oUXxEkO77Q2uz45wW5RUAAMBLrd9doBm/ZEiSJl6doiB/11rT9WQorwAAAF7I7jD02Kfr5DCkKzrFql/bKLMj1QrlFQAAwAu9u3Sn1uwqUGiAr8ZdmWx2nFqjvAIAAHiZvYUlembuJknSwwPbKirMfdY4p7zC5f3444+yWCw6ePBgrR+TmJioF198sd4yAQDgzibOSdeh0gp1jg/XzT1amB3njFBe3ZDFYjnl14gRIxosy4gRI2SxWHTXXXedcN/dd9/d4HkAAMCpLdiUq6/WZcvqY9Hka1LcbkdQyqsbys7Odn69+OKLCgsLq3bspZdeqnZ+eXl5veaJj4/X+++/ryNHjjiPlZSU6L///a8SEhp2azkAAFCzI2V2Pf7ZeknSbb0T1SHOZnKiM0d5dUMxMTHOL5vNJovF4rxdUlKi8PBwffjhh7rkkksUGBio2bNna/z48erSpUu153nxxReVmJhY7diMGTPUvn17BQYGql27dpo6depp86SmpiohIUGffPKJ89gnn3yi+Ph4nX/++dXOLS0t1X333aeoqCgFBgaqT58+WrZsWbVzvv76a7Vp00ZBQUHq16+fduzYccJrLl68WBdddJGCgoIUHx+v++67T4cPHz5tVgAAvNlL32/RrgNHFGcL1P3925gd56xQXo9jGIaKyypM+TIMo86+j0ceeUT33XefNm7cqMsuu6xWj/nPf/6jxx57TJMmTdLGjRs1efJkPf7445o1a9ZpH3vbbbdpxowZzttvvfWWbr/99hPOe/jhh/Xxxx9r1qxZWrlypVq1aqXLLrtM+fn5kqSsrCxde+21uvzyy7V69Wrdeeed+sc//lHtOdatW6fLLrtM1157rdauXasPPvhAixYt0r333lur7xMAAG+0KadIb/68XZI04eoUhQT4mpzo7Lhn6np0pNyu5Ce+NeW10ydepmD/uvkjGT16tK699tozesyTTz6p559/3vm4pKQkpaen6/XXX9fw4cNP+dhhw4Zp7Nix2rFjhywWi3755Re9//77+vHHH53nHD58WNOmTdPMmTM1aNAgSZWFef78+Zo+fboeeughTZs2Teedd57+/e9/y2KxqG3btlq3bp2efvpp5/M8++yzuvnmmzV69GhJUuvWrfXyyy/r4osv1rRp0xQY6D5XTAIA0BAcDkOPfrpOFQ5DA5Kj1T852uxIZ43y6qG6det2Rufv27dPWVlZuuOOOzRy5Ejn8YqKCtlsp58PExkZqSuuuEKzZs2SYRi64oorFBkZWe2c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8X766ScNHjxYcXFxslgs+uyzz8yO5PGmTJmiCy64QKGhoYqKitKQIUO0adMms2N5vGnTpqlTp07OXbV69eqlb775xuxY1VBe61m/fv304YcfatOmTfr444+1bds2XX/99WbH8mi//fabHA6HXn/9dW3YsEH//ve/9dprr+nRRx81O5rHKysr0w033KBRo0aZHcVjffDBBxo9erQee+wxrVq1Sn379tWgQYOUmZlpdjSPdvjwYXXu3Fn/93//Z3YUr7Fw4ULdc889WrJkiebPn6+KigoNGDBAhw8fNjuaR2vevLmeeuopLV++XMuXL9cf/vAHXX311dqwYYPZ0ZxY57WBffHFFxoyZIhKS0vl5+dndhyv8eyzz2ratGnavn272VG8wsyZMzV69GgdPHjQ7Cgep0ePHkpNTdW0adOcx9q3b68hQ4ZoypQpJibzHhaLRZ9++qmGDBlidhSvsm/fPkVFRWnhwoW66KKLzI7jVSIiIvTss8/qjjvuMDuKJEZeG1R+fr7effdd9e7dm+LawAoKChQREWF2DOCclJWVacWKFRowYEC14wMGDNDixYtNSgU0jIKCAkniv+UNyG636/3339fhw4fVq1cvs+M4UV4bwCOPPKKQkBA1adJEmZmZ+vzzz82O5FW2bdumV155RXfddZfZUYBzkpeXJ7vdrujo6GrHo6OjlZOTY1IqoP4ZhqExY8aoT58+SklJMTuOx1u3bp0aNWqkgIAA3XXXXfr000+VnJxsdiwnyutZGD9+vCwWyym/li9f7jz/oYce0qpVqzRv3jxZrVbdeuutYrbGmTvT912S9uzZo4EDB+qGG27QnXfeaVJy93Y27zvql8ViqXbbMIwTjgGe5N5779XatWv13//+1+woXqFt27ZavXq1lixZolGjRmn48OFKT083O5aTr9kB3NG9996rm2666ZTnJCYmOn8fGRmpyMhItWnTRu3bt1d8fLyWLFniUkPw7uBM3/c9e/aoX79+6tWrl9544416Tue5zvR9R/2JjIyU1Wo9YZQ1Nzf3hNFYwFP87W9/0xdffKGffvpJzZs3NzuOV/D391erVq0kSd26ddOyZcv00ksv6fXXXzc5WSXK61moKqNno2rEtbS0tC4jeYUzed93796tfv36qWvXrpoxY4Z8fPiQ4Wydy9931C1/f3917dpV8+fP1zXXXOM8Pn/+fF199dUmJgPqnmEY+tvf/qZPP/1UP/74o5KSksyO5LUMw3Cp3kJ5rUdpaWlKS0tTnz591LhxY23fvl1PPPGEWrZsyahrPdqzZ48uueQSJSQk6LnnntO+ffuc98XExJiYzPNlZmYqPz9fmZmZstvtWr16tSSpVatWatSokbnhPMSYMWM0bNgwdevWzfmpQmZmJnO669mhQ4e0detW5+2MjAytXr1aERERSkhIMDGZ57rnnnv03nvv6fPPP1doaKjzEwebzaagoCCT03muRx99VIMGDVJ8fLyKior0/vvv68cff9TcuXPNjvY7A/Vm7dq1Rr9+/YyIiAgjICDASExMNO666y5j165dZkfzaDNmzDAknfQL9Wv48OEnfd8XLFhgdjSP8uqrrxotWrQw/P39jdTUVGPhwoVmR/J4CxYsOOnf7eHDh5sdzWPV9N/xGTNmmB3No91+++3O/740bdrUuPTSS4158+aZHasa1nkFAACA22AiIAAAANwG5RUAAABug/IKAAAAt0F5BQAAgNugvAIAAMBtUF4BAADgNiivAAAAcBuUVwAAALgNyisAAADcBuUVAAAAboPyCgAAALfx/8hVTL+k5EbRAAAAAElFTkSuQmCC",
"text/plain": [
"<Figure size 800x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.style.use('default')\n",
"plt.figure(figsize=(8,6))\n",
"# fig, ax = plt.subplots(figsize=(8,6))\n",
"\n",
"plt.scatter(x, y, label='Data Points')\n",
"plt.plot(x, true_poly_relation(x), label='True Model')\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "be97ec65",
"metadata": {},
"source": [
"To sum up, our data suitable for this library is (renamed to `xx` and `yy`):"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "baac1cc3",
"metadata": {},
"outputs": [],
"source": [
"import sys\n",
"sys.path.append('../')\n",
"from numethods import *"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "217dcbde",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(Vector([-3.0, -2.6842105263157894, -2.3684210526315788, -2.0526315789473686, -1.736842105263158, -1.4210526315789473, -1.105263157894737, -0.7894736842105265, -0.47368421052631593, -0.1578947368421053, 0.1578947368421053, 0.4736842105263155, 0.7894736842105261, 1.1052631578947363, 1.421052631578947, 1.7368421052631575, 2.052631578947368, 2.3684210526315788, 2.6842105263157894, 3.0]),\n",
" Vector([-134.0394301638652, -105.00134977413586, -65.93469190931741, -32.06217503699786, -35.29096019342883, -22.18856169304172, 8.674420238924386, 4.792246345985944, -6.679326105486812, 7.104393070050092, -4.304269348302689, -3.889383956387331, 5.580905474275715, -18.012869277925944, -11.43643927080956, 9.633946354167364, 14.904781476529255, 45.82141266237815, 51.21597235632019, 71.0523555839765]))"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"xx, yy = Vector(x.tolist()), Vector(y.tolist())\n",
"xx, yy"
]
},
{
"cell_type": "markdown",
"id": "c48d505d",
"metadata": {},
"source": [
"We now should construct our design matrix $X$ as an object of `Matrix` class, defined in this library `numethods`.\n",
"\n",
"As noticed in the definition of the `Matrix` class in `linalg.py`, we can initialise a *zero* matrix as follows:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "460789c1",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Matrix([[0.0, 0.0, 0.0], [0.0, 0.0, 0.0]])"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A = Matrix.zeros(2, 3) # rows - columns\n",
"A # each row is a vector of length 3"
]
},
{
"cell_type": "markdown",
"id": "e3ae5319",
"metadata": {},
"source": [
"However, in order to decide the dimensions of our design matrix, we need the *degree* of the polynomial that is going to be used in the model."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "f41f4263",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "b9ecaec8",
"metadata": {},
"source": [
"**Polynomial Regression**\n",
"\n",
"The design matrix for polynomial regression is not difficult to build. A quick-and-dirty one can be written as follows:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "6c467a7a",
"metadata": {},
"outputs": [],
"source": [
"def design_matrix_for_poly(x_data, degree):\n",
" n_samples, n_features = len(x_data), degree + 1\n",
" X = Matrix.zeros(n_samples, n_features) # `Matrix.ones` is needed\n",
" for row in range(n_samples):\n",
" for col in range(n_features):\n",
" X.data[row][col] = x_data[row] ** col\n",
"\n",
" return X"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "ed38f395",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Matrix([[1, 0, 0, 0], [1, 1, 1, 1], [1, 2, 4, 8], [1, 3, 9, 27], [1, 4, 16, 64]])\n"
]
}
],
"source": [
"# quick testing:\n",
"xx_test = range(5) # 5 observation / samples\n",
"XX_design_test = design_matrix_for_poly(xx_test, 3) # for degree = 3\n",
"print(XX_design_test)"
]
},
{
"cell_type": "markdown",
"id": "c76df359",
"metadata": {},
"source": [
"Now that we succesfully construct the design matrix, we may supply it to fit the model. \n"
]
},
{
"cell_type": "markdown",
"id": "fb05a363",
"metadata": {},
"source": [
"Let our model (of guess) is of degree 3:\n",
"$$ y(w, x) = w_0 + w_1 x + w_2 x^2 + w_3 x^3. $$"
]
},
{
"cell_type": "markdown",
"id": "8b454683",
"metadata": {},
"source": [
"The solution to the linear least-squares problem can be done using the library's `LeastSquaresSolver` in `orthogonal.py`; this is also given within the `demo.py` file."
]
},
{
"cell_type": "markdown",
"id": "20c7bb17",
"metadata": {},
"source": [
"First our desing matrix:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "f666b2e7",
"metadata": {},
"outputs": [],
"source": [
"degree = 3\n",
"X_design = design_matrix_for_poly(xx.data, degree)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "6d55d7b3",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Least squares solution: Vector([-10.60568402037466, 34.6261698157659, -1.3656800927434747, -2.5698853517929043])\n"
]
}
],
"source": [
"w_ls = LeastSquaresSolver(X_design, yy).solve()\n",
"print(\"Least squares solution:\", w_ls)"
]
},
{
"cell_type": "markdown",
"id": "4efb0ef5",
"metadata": {},
"source": [
"In order to test if the `solve` method of the `LeastSquaresSolver` class, we use NumPy:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "4186c3eb",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([-0.32196513, -5.14486803, -3.22124975, 4.56508709])"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import numpy as np\n",
"\n",
"X = np.array(X_design.data)\n",
"y = np.array(yy.data)\n",
"\n",
"w = np.linalg.solve(X.T @ X, X.T @ y)\n",
"w"
]
},
{
"cell_type": "markdown",
"id": "03df44e8",
"metadata": {},
"source": [
"> [!CAUTION]\n",
"> Seemingly, the library's functions are not working correctly! It must be checked in detail!"
]
},
{
"cell_type": "markdown",
"id": "6827dbc0",
"metadata": {},
"source": [
"In order to visualise, let us plot the regression (polynomial curve):"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "e34a6d3f",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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iLgMhVcRERERcRkKryIiIiLiMhReRURERMRlKLyKiIiIiMso1fA6bdo02rVrR4UKFahSpUqRc2w2W6HHggULCszZuXMnnTp1wt/fn9q1azN16lQMwyjN0kVERETECXmV5ovn5OTQp08foqKiWLhw4VXnLVq0iG7dujk+DwwMdHycnp7OPffcQ+fOndm6dSv79u1j0KBBBAQEMHbs2NIsX0REREScTKmG1ylTpgCwePHia86rUqUKtWrVKvK5pUuXkpWVxeLFi/H19aVZs2bs27eP1157jTFjxmCz2Uq6bBERERFxUk7R8zpq1CiCg4Np06YNCxYsIC8vz/Hc5s2b6dSpE76+vo6xrl27cvz4cY4cOVLk62VnZ5Oenl7gISIiIiKuz/Lw+sorr7By5Uq++OIL+vbty9ixY5k+fbrj+ZSUFGrWrFnga/I/T0lJKfI1Z8yYQWBgoOMRHh5een8AERERESkz19028PLLLzvaAa5m69attG7dulivN3HiRMfHt956KwBTp04tMP7b1oD8m7Wu1jIwfvx4xowZ4/g8LS2NiIgIrcCKiIiIOKn8nPZ7N+Vfd3gdNWoUffv2veacyMjI631ZhzvuuIP09HROnDhBzZo1qVWrVqEV1pMnTwIUWpHN5+vrW6DNIP9iaAVWRERExLllZGQUuHn/t647vAYHBxMcHPyHirqW+Ph4/Pz8HFtrRUVFMWHCBHJycvDx8QFgw4YNhIaGFjskh4aGkpSURKVKlcrkBq/09HTCw8NJSkqicuXKpf79xKTrbg1dd2voultD190auu7WKOvrbhgGGRkZhIaGXnNeqe42kJiYSGpqKomJidjtdhISEgCoX78+FStW5JNPPiElJYWoqCj8/f2JiYnhpZde4sknn3SsnPbr148pU6YwaNAgJkyYwP79+5k+fTqTJk0qdhD18PAgLCystP6YV1W5cmX9I7OArrs1dN2toetuDV13a+i6W6Msr/u1VlzzlWp4nTRpEkuWLHF8fttttwEQExPDnXfeibe3N/PmzWPMmDHk5eVx0003MXXqVEaOHOn4msDAQDZu3MjIkSNp3bo1QUFBjBkzpkBPq4iIiIiUDzZDR1WVuPT0dAIDA0lLS9NviGVI190auu7W0HW3hq67NXTdreGs193yrbLcka+vL5MnTy5w05iUPl13a+i6W0PX3Rq67tbQdbeGs153rbyKiIiIiMvQyquIiIiIuAyFVxERERFxGQqvIiIiIuIyFF5FRERExGUovIqIiIiIy1B4LWUPPPAAERER+Pn5ERISQv/+/Tl+/LjVZbm1I0eOMGTIEOrWrYu/vz/16tVj8uTJ5OTkWF2a25s2bRrt2rWjQoUKjiOepeTNmzePunXr4ufnR6tWrYiNjbW6JLf3zTff0KNHD0JDQ7HZbHz44YdWl+T2ZsyYQZs2bahUqRI1atSgZ8+e/Pzzz1aX5fbmz59P8+bNHadqRUVFsW7dOqvLKkDhtZR17tyZFStW8PPPP7N69WoOHjxI7969rS7Lrf3000/k5eXx5ptvsnv3bv75z3+yYMECJkyYYHVpbi8nJ4c+ffowfPhwq0txW8uXL2f06NG89NJLxMfHEx0dTffu3UlMTLS6NLeWmZlJixYteOONN6wupdzYtGkTI0eOJC4ujo0bN5Kbm0uXLl3IzMy0ujS3FhYWxsyZM9m2bRvbtm3jrrvu4sEHH2T37t1Wl+agfV7L2Mcff0zPnj3Jzs7G29vb6nLKjVmzZjF//nwOHTpkdSnlwuLFixk9ejTnzp2zuhS3c/vtt9OyZUvmz5/vGGvcuDE9e/ZkxowZFlZWfthsNtauXUvPnj2tLqVcOXXqFDVq1GDTpk107NjR6nLKlapVqzJr1iyGDBlidSmAVl7LVGpqKkuXLqVdu3YKrmUsLS2NqlWrWl2GyB+Sk5PD9u3b6dKlS4HxLl268P3331tUlUjZSEtLA9D/y8uQ3W7ngw8+IDMzk6ioKKvLcVB4LQMvvPACAQEBVKtWjcTERD766COrSypXDh48yOuvv86wYcOsLkXkDzl9+jR2u52aNWsWGK9ZsyYpKSkWVSVS+gzDYMyYMXTo0IFmzZpZXY7b27lzJxUrVsTX15dhw4axdu1amjRpYnVZDgqvN+Dll1/GZrNd87Ft2zbH/HHjxhEfH8+GDRvw9PRkwIABqFvj+l3vdQc4fvw43bp1o0+fPjzxxBMWVe7abuS6S+my2WwFPjcMo9CYiDsZNWoUO3bsYNmyZVaXUi40bNiQhIQE4uLiGD58OAMHDmTPnj1Wl+XgZXUBrmjUqFH07dv3mnMiIyMdHwcHBxMcHEyDBg1o3Lgx4eHhxMXFOdUSvCu43ut+/PhxOnfuTFRUFG+99VYpV+e+rve6S+kJDg7G09Oz0CrryZMnC63GiriLp59+mo8//phvvvmGsLAwq8spF3x8fKhfvz4ArVu3ZuvWrcydO5c333zT4spMCq83ID+M3oj8Fdfs7OySLKlcuJ7rfuzYMTp37kyrVq1YtGgRHh56k+FG/ZGfdylZPj4+tGrVio0bN/LQQw85xjdu3MiDDz5oYWUiJc8wDJ5++mnWrl3L119/Td26da0uqdwyDMOpcovCaynasmULW7ZsoUOHDgQFBXHo0CEmTZpEvXr1tOpaio4fP86dd95JREQEs2fP5tSpU47natWqZWFl7i8xMZHU1FQSExOx2+0kJCQAUL9+fSpWrGhtcW5izJgx9O/fn9atWzveVUhMTFRPdyk7f/48Bw4ccHx++PBhEhISqFq1KhERERZW5r5GjhzJf/7zHz766CMqVarkeMchMDAQf39/i6tzXxMmTKB79+6Eh4eTkZHBBx98wNdff83nn39udWmXGVJqduzYYXTu3NmoWrWq4evra0RGRhrDhg0zjh49anVpbm3RokUGUORDStfAgQOLvO4xMTFWl+ZW/vWvfxl16tQxfHx8jJYtWxqbNm2yuiS3FxMTU+TP9sCBA60uzW1d7f/jixYtsro0tzZ48GDH/1+qV69u3H333caGDRusLqsA7fMqIiIiIi5DjYAiIiIi4jIUXkVERETEZSi8ioiIiIjLUHgVEREREZeh8CoiIiIiLkPhVURERERchsKriIiIiLgMhVcRERERcRkKryIiIiLiMhReRURERMRlKLyKiIiIiMv4f542mpEMEHqjAAAAAElFTkSuQmCC",
"text/plain": [
"<Figure size 800x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.style.use('default')\n",
"plt.figure(figsize=(8,6))\n",
"# fig, ax = plt.subplots(figsize=(8,6))\n",
"\n",
"plt.scatter(xx.data, yy.data, label='Data Points')\n",
"plt.plot(xx.data, true_poly_relation(xx.data), label='True Model')\n",
"plt.plot(xx.data, poly_relation(w_ls.data, xx.data), \n",
" color='red', marker='o', label=\"Polynomial Regression (`numethods`)\")\n",
"plt.plot(xx.data, poly_relation(w, xx.data), \n",
" color='black', marker='o', label=\"Polynomial Regression (`NumPy`)\")\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "9da58ae2",
"metadata": {},
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "ouWorkspace",
"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.13.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}