{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "view-in-github"
},
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "zReeXVyPfjR-"
},
"source": [
"\n",
"# Polynomial regression with NumPy and Matplotlib\n",
"\n",
"This tutorial provides a comprehensive, step-by-step example of polynomial regression using NumPy, with Matplotlib for visualizing the results."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-13T21:47:50.879029Z",
"iopub.status.busy": "2024-10-13T21:47:50.878463Z",
"iopub.status.idle": "2024-10-13T21:47:51.578391Z",
"shell.execute_reply": "2024-10-13T21:47:51.577563Z"
},
"id": "RvLYGsnGfjSA"
},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "lI5rHD3lfjSA"
},
"source": [
"Set a random seed"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-13T21:47:51.581277Z",
"iopub.status.busy": "2024-10-13T21:47:51.580762Z",
"iopub.status.idle": "2024-10-13T21:47:51.584014Z",
"shell.execute_reply": "2024-10-13T21:47:51.583492Z"
},
"id": "EYS_y6wmfjSB"
},
"outputs": [],
"source": [
"np.random.seed(12)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "qbbG3wlPfjSB"
},
"source": [
"Set the number of data points `N` and the degree `D` of the polynomial that is going to fit to the data.\n",
"\n",
"**Note:** for `D = 1` this is _linear regression_."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-13T21:47:51.586244Z",
"iopub.status.busy": "2024-10-13T21:47:51.585848Z",
"iopub.status.idle": "2024-10-13T21:47:51.588642Z",
"shell.execute_reply": "2024-10-13T21:47:51.588115Z"
},
"id": "kVDeLm0AfjSB"
},
"outputs": [],
"source": [
"N = 100 # number of points\n",
"D = 2 # degree of polynomial"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "pG4yUYOmfjSB"
},
"source": [
"### Generate some random data\n",
"\n",
"To generate some random data that is suitable for polynomial regression we're going to use the following functions:\n",
"- [`np.random.uniform`](https://docs.scipy.org/doc/numpy-1.16.0/reference/generated/numpy.random.uniform.html) draws samples from a uniform distribution\n",
"- [`np.random.sample`](https://docs.scipy.org/doc/numpy-1.16.0/reference/generated/numpy.random.sample.html) returns random floats in the half-open interval $[0.0, 1.0)$.\n",
"- [`np.random.normal`](https://docs.scipy.org/doc/numpy-1.16.0/reference/generated/numpy.random.normal.html) draws random samples from a normal (Gaussian) distribution.\n",
"- [`np.polyval`](https://docs.scipy.org/doc/numpy/reference/generated/numpy.polyval.html) evaluates a polynomial (defined by its coefficients) at the given points"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Ti-Egk5VfjSC"
},
"source": [
"We are first going to generate a set of $x$ values taken at random in a given range ($[-N, N[$).\n",
"\n",
"The array `c` is used to store the coefficients of a random polynomial. To generate a random polynomial of degree $D$ we're going to generate $D$ random coefficients and set the coefficient of the leading term to $1$."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 430
},
"execution": {
"iopub.execute_input": "2024-10-13T21:47:51.590848Z",
"iopub.status.busy": "2024-10-13T21:47:51.590468Z",
"iopub.status.idle": "2024-10-13T21:47:51.758073Z",
"shell.execute_reply": "2024-10-13T21:47:51.757344Z"
},
"id": "ZujnBWOEfjSC",
"outputId": "8ae083fb-90a9-412f-c44c-f2be4fe52d1d"
},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"