{ "cells": [ { "cell_type": "markdown", "id": "54d254c1-d5dc-4dda-9baf-21f0711034e1", "metadata": {}, "source": [ "# Linear Regression\n", "\n", "Suppose we have a dependent variable $y$ and dependent variables $x = (x_1, x_2, \\dots, x_n)$. The general form for a linear regression models that predicts the dependent variable is,\n", "\n", "$$\n", "f(x) = b + w_1 x_1 + w_2 x_2 + \\dots + w_n x_n.\n", "$$\n", "\n", "Where $b$ is a bias term. Let us convert these term into matrices and vectors. Suppose we make $m$ observations so we have $m$ dependection variables,\n", "\n", "$$\n", "Y = \\begin{bmatrix}\n", " y_1 \\\\\n", " y_2 \\\\\n", " \\vdots \\\\\n", " y_m\n", "\\end{bmatrix}\n", "$$\n", "\n", "And $m$ dependent variables each comprised of $n$ features,\n", "\n", "$$\n", "X = \\begin{bmatrix}\n", " 1 && x_{11} && x_{12} && \\dots && x_{1n} \\\\\n", " 1 && x_{21} && x_{22} && \\dots && x_{2n} \\\\\n", " \\vdots && \\vdots && \\vdots && \\dots && \\vdots \\\\\n", " 1 && x_{m1} && x_{m2} && \\dots && x_{mn} \\\\\n", "\\end{bmatrix}\n", "$$\n", "\n", "The column of ones is included for the bias term $b$. We want to find a weight vector,\n", "\n", "$$\n", "W = \\begin{bmatrix}\n", " b \\\\\n", " w_1 \\\\\n", " w_2 \\\\\n", " \\vdots \\\\\n", " w_m\n", "\\end{bmatrix}\n", "$$\n", "\n", "Such that our predictions $\\hat{Y} = X W$ are as close to $Y$ as possible.\n", "\n", "We find such a $W$ using the pseudoinverse.\n", "\n", "$$\n", "\\begin{align}\n", " Y & = X W \\\\\n", " Y & = X^T X W \\\\\n", " X^T Y & = X^T X W \\\\\n", " (X^T X) ^ {-1} X^T Y & = (X^T X) ^ {-1} X^T X W \\\\\n", " (X^T X) ^ {-1} X^T Y & = W \\\\\n", "\\end{align}\n", "$$\n", "\n", "the matrix $(X^T X) ^ {-1} X^T$ is called the psuedoinverse.\n", "\n", "# Simple Linear Example\n", "\n", "Suppose we are trying to model a linear function." ] }, { "cell_type": "code", "execution_count": null, "id": "6685b5eb-bf4c-431f-9f9c-bc93030c48c3", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "m = 10\n", "X = np.vstack((np.ones(m), np.linspace(0, 1, m))).T\n", "Y = 2 * X[:, 1] + 1 + np.random.normal(scale=0.2, size=(m))\n", "\n", "plt.scatter(X[:, 1], Y, marker=\"o\")" ] }, { "cell_type": "markdown", "id": "386abee1-7bcb-4a55-9e1b-18a8b55c6edf", "metadata": {}, "source": [ "Now we have our data, let us write out model." ] }, { "cell_type": "code", "execution_count": null, "id": "93f17e89-585d-488a-af07-5d7ea0ff828b", "metadata": { "tags": [] }, "outputs": [], "source": [ "class LinearRegression:\n", " def __init__(self):\n", " self.W = None\n", "\n", " def fit(self, X, Y):\n", " self.W = np.linalg.inv(X.T @ X) @ X.T @ Y\n", "\n", " def predict(self, X):\n", " return X @ self.W" ] }, { "cell_type": "code", "execution_count": null, "id": "b0719490-d1ce-418e-9410-ec190d05cbb3", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGdCAYAAADAAnMpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA/bklEQVR4nO3dd3hUddrG8e+kkFCSoUjIIAECChKiSFWaqLSAhqK+6/vu4qK77lJFYVHBhqwFXcsCUt1FdI1ld8VQFAKodEFEQMUgKkZqYoBAEgipc94/TohEAmTCZM6U+3Nd+eM5OZN5ci5gbk75PTbDMAxERERELBJkdQMiIiIS2BRGRERExFIKIyIiImIphRERERGxlMKIiIiIWEphRERERCylMCIiIiKWUhgRERERS4VY3UBlOJ1ODh8+TEREBDabzep2REREpBIMwyA3N5fGjRsTFHT+8x8+EUYOHz5MTEyM1W2IiIhIFRw4cIAmTZqc9/s+EUYiIiIA85eJjIy0uBsRERGpjJycHGJiYso+x8/HJ8LImUszkZGRCiMiIiI+5mK3WOgGVhEREbGUwoiIiIhYSmFERERELOUT94xUhmEYFBcXU1JSYnUrfiM4OJiQkBA9Ti0iItXKL8JIYWEh6enp5OXlWd2K36lVqxYOh4MaNWpY3YqIiPgpnw8jTqeTtLQ0goODady4MTVq1ND/5N3AMAwKCws5cuQIaWlpXHnllRdcsEZERKSqfD6MFBYW4nQ6iYmJoVatWla341dq1qxJaGgo+/bto7CwkPDwcKtbEhERP+Q3/9XV/9qrh46riIhUN5c+aebOncs111xTtvhY165dWbFixQVfs27dOjp27Eh4eDgtWrRg3rx5l9SwiIiIuEeJ02Dz3mMs2XmIzXuPUeI0LOnDpcs0TZo04bnnnuOKK64A4I033mDw4MHs2LGDtm3bnrN/WloaAwcO5E9/+hNJSUls2rSJ0aNH07BhQ26//Xb3/AYiIiLispRd6Uxdlkp6dn7ZNoc9nCmJcSTEOzzai0tnRhITExk4cCCtWrWiVatWPPPMM9SpU4ctW7ZUuP+8efNo2rQp06dPp02bNtx777384Q9/4MUXX3RL84Hq9ddfp27dula3ISIiPiplVzqjkraXCyIAGdn5jEraTsqudI/2U+UbAkpKSnj33Xc5deoUXbt2rXCfzZs3069fv3Lb+vfvz7Zt2ygqKjrvzy4oKCAnJ6fclz8xDIM+ffrQv3//c743Z84c7HY7+/fvr/Y+bDYbixcvrvb3ERER71HiNJi6LJWKLsic2TZ1WapHL9m4HEa+/vpr6tSpQ1hYGCNHjiQ5OZm4uLgK983IyKBRo0bltjVq1Iji4mKOHj163veYNm0adru97CsmJsbVNr2azWZj4cKFfPbZZ8yfP79se1paGg8//DAzZsygadOmFnYoIiL+amta1jlnRM5mAOnZ+WxNy/JYTy6HkdatW7Nz5062bNnCqFGjGD58OKmpqefd/9drfhiGUeH2s02ePJns7OyyrwMHDlS+QcOAwlPWfBmVT5ExMTHMmDGDiRMnkpaWhmEY/PGPf6R3797cfffdlfoZK1eupE2bNtSpU4eEhATS0385rfb555/Tt29fLrvsMux2O7169WL79u1l32/evDkAQ4cOxWazldUiIuLfMnPPH0Sqsp87uLzOSI0aNcpuYO3UqROff/45M2bMKPc//DOio6PJyMgoty0zM5OQkBAaNGhw3vcICwsjLCzM1dZMRXnwbOOqvfZSPXIYatSu9O7Dhw8nOTmZe+65h9tvv51du3axa9euSr02Ly+PF198kTfffJOgoCCGDRvGxIkTeeuttwDIzc1l+PDhzJw5E4CXXnqJgQMH8v333xMREcHnn39OVFQUCxcuJCEhgeDgYNd/XxER8TlREZVbM6qy+7nDJS96ZhgGBQUFFX6va9euLFu2rNy2VatW0alTJ0JDQy/1rf3Cq6++Snx8PBs2bOC9994jKiqqUq8rKipi3rx5tGzZEoCxY8fy17/+tez7N998c7n958+fT7169Vi3bh233norDRs2BKBu3bpER0e76bcRERFv1yW2Pg57OBnZ+RXeN2IDou3hdImt77GeXAojjzzyCAMGDCAmJobc3Fzeffdd1q5dS0pKCmBeXjl06BD/+te/ABg5ciSzZs1iwoQJ/OlPf2Lz5s0sWLCAd955x/2/yRmhtcwzFFYIdX0F2KioKP785z+zePFihg4dWunX1apVqyyIADgcDjIzM8vqzMxMnnjiCT755BN+/vlnSkpKyMvL88iNsSIi4r2Cg2xMSYxjVNJ2bFAukJy5gWJKYhzBQZ4breJSGPn555+56667SE9Px263c80115CSkkLfvn0BSE9PL/dhFxsby/Ll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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "model = LinearRegression()\n", "model.fit(X, Y)\n", "Y_hat = model.predict(X)\n", "\n", "plt.scatter(X[:, 1], Y, marker=\"o\")\n", "plt.plot(X[:, 1], Y_hat, color=\"tab:orange\", label=\"Y_hat\")\n", "plt.legend()" ] }, { "cell_type": "markdown", "id": "3bae2e45-4983-485c-ae91-5bb97c53da2d", "metadata": {}, "source": [ "If we look at the parameters of the model, we should find they are similar to the parameters we used to generate the data." ] }, { "cell_type": "code", "execution_count": null, "id": "366b1ea7-92b6-4073-84a2-2461607a6b1f", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "array([0.98689721, 1.94516279])" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.W" ] }, { "cell_type": "markdown", "id": "5d02aaca-e26b-4e52-8e22-3ffc6adcd608", "metadata": {}, "source": [ "The first number is the intercept which was 1 and the second number is the gradient which was 2.\n", "\n", "## Fitting our model to a more complicated function\n", "\n", "Now let us fit the linear regression model to a sine function" ] }, { "cell_type": "code", "execution_count": null, "id": "c0146fa6-ceb2-4d26-aa08-0e1bcbd0f771", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "m = 50\n", "x = np.linspace(0, np.pi, m)\n", "X = np.vstack((\n", " np.ones(m),\n", " x,\n", ")).T\n", "Y = np.sin(2 * x) + np.random.normal(scale=0.1, size=m)\n", "\n", "plt.scatter(x, Y, marker='.')" ] }, { "cell_type": "code", "execution_count": null, "id": "49a2151c-6af7-47f5-b257-58edf7000e88", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "model.fit(X, Y)\n", "Y_hat = model.predict(X)\n", "\n", "plt.scatter(x, Y, marker='.')\n", "plt.plot(x, Y_hat, color='tab:orange')" ] }, { "cell_type": "markdown", "id": "96317c2c-4c1d-4e37-ad3e-3b861778abdf", "metadata": {}, "source": [ "Our models prediction is quite poor. We can try and improve it by adding higher power terms to the model." ] }, { "cell_type": "code", "execution_count": null, "id": "239c370d-7632-4cf0-a0d4-cac383ed4e52", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "for i in range(2, 5):\n", " X = np.stack([x ** p for p in range(i)]).T\n", " model.fit(X, Y)\n", " Y_hat = model.predict(X)\n", " plt.plot(x, Y_hat, label=f\"Degree {i}\")\n", "\n", "plt.scatter(x, Y, marker='.', color='tab:olive')\n", "plt.legend()" ] }, { "cell_type": "markdown", "id": "80455cdf-3680-449f-b11a-52c0b3cebd0e", "metadata": {}, "source": [ "The degree 4 model performs the best.\n", "\n", "## Gradient Descent\n", "\n", "In the previous section we looked at finding an analytic solutions for the weights, $W$, of the model. Now we look at gradient descent which the weights by iteratively improving the guess for the weights.\n", "\n", "It does this by using a loss function, in this case mean squared error, that gives us a measure of how good the prediction is.\n", "\n", "$$\n", "\\text{MSE} = \\frac{1}{m} \\sum_{i=1}^{m}(\\hat{y}_i - y_i)^2.\n", "$$\n", "\n", "Or equally\n", "\n", "$$\n", "\\begin{align}\n", "\\text{MSE} = & \\frac{1}{m} \\sum_{i=1}^{m}(X_i W - y_i)^2 \\\\\n", " = & \\frac{1}{m} \\sum_{i=1}^{m}\\left(\\sum_{j=1}^{m}x_{ij}w_j - y_i\\right)^2 \\\\\n", "\\end{align}\n", "$$\n", "\n", "We can then find the gradient of the mean squared error with respect to each weight $w_j$. We find the gradient using the chain rule.\n", "\n", "$$\n", "\\begin{align}\n", "\\frac{\\partial \\text{MSE}}{\\partial w_k} = & \\frac{1}{m} \\sum_i x_{ij} \\left(\\sum_j x_{ij} w_j - y_i\\right) \\\\\n", " = & \\frac{1}{m} \\sum_i x_{ik} \\left(X_i W - y_i\\right) \\\\\n", " = & \\frac{1}{m} \\sum_i x_{ik} X_i W - \\frac{1}{m} \\sum_i x_{ik} y_i \\\\\n", " = & \\frac{1}{m} (X_{,k} X W - X_{,k} Y)\n", "\\end{align}\n", "$$\n", "\n", "Now let us implement this.\n" ] }, { "cell_type": "code", "execution_count": null, "id": "beabe0cb-2c70-410b-ad15-ffe64795ad75", "metadata": { "tags": [] }, "outputs": [], "source": [ "class GradientDescent():\n", " def __init__(self, n_iter=500, learning_rate=0.01):\n", " self.n_iter = n_iter\n", " self.W = None\n", " self.W_hist = None\n", " self.loss_hist = None\n", " self.learning_rate = learning_rate\n", "\n", " def fit(self, X, Y):\n", " m, n = X.shape\n", " self.W = np.random.normal(size=n)\n", " self.loss_hist = np.zeros(self.n_iter)\n", " self.W_hist = np.zeros((self.n_iter, n))\n", "\n", " for i in range(self.n_iter):\n", " loss = np.mean((X @ self.W - Y) ** 2)\n", " grad = (2 / m) * (X.T @ X @ self.W - X.T @ Y)\n", " self.W -= self.learning_rate * grad\n", "\n", " self.loss_hist[i] = loss\n", " self.W_hist[i] = self.W\n", "\n", " def predict(self, X):\n", " return X @ self.W" ] }, { "cell_type": "code", "execution_count": null, "id": "522bb28b-609d-4132-94f7-c80610fb7d7b", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 0, 'Iteration')" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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4rZ48WJ3H8D44IMP3G2n02mMHj3aiI6ONgIDA43u3bsbW7Zs8Xje06dPG48//rgRERFh1KlTxxgwYICRkpLi9fzHjh0z7rnnHiMsLMwICwsz7rnnnhLb75yb3zAM49133zXq1KlT6t7HKSkpRvfu3Y2IiAgjICDAaNGihfHkk0+W2AvajPw5OTlG3759jYYNGxr+/v5GkyZNjPvvv7/E2Prq+CcnJ5f6/Xb291xlj/+ECROMpk2bGgEBAUb79u3d234YhuvnoUePHh79lyxZYrRr184ICAgwmjVrVuovYj7//HOjZcuWhr+/v9GqVSuPos/bypO/R48epY71/fff7+7z1FNPGU2aNDECAgKMhg0bGn379jWWL1/uE/lfffVVo0WLFkZQUJBRr14949prrzXmzZtX4jl9dfwNw7UlRZ06dYz33nuv1OerqvEv3p7sfN8L1eF7XyrPhb6va5uL/az40mcgX3C+93Rf/dzoCx566CH3z1vDhg2NXr16uQtqw9B4ldW5RbXGzVPxvtP+/v5GbGyscdtttxnbtm1z32/2eFkM48yVWkRERERERESkXKrFOdUiIiIiIiIivkhFtYiIiIiIiEgFqagWERERERERqSAV1SIiIiIiIiIVpKJaREREREREpIJUVIuIiIiIiIhUkIpqERERERERkQpSUS0iIiIiUss0a9aM8ePHmx1DpEZQUS0iIiIiUokeeOABBg0aBEDPnj156qmnquy1p02bRt26dUscX7NmDY8++miV5RCpyfzMDiAiIiIiIuWTn59PQEBAhR/fsGFDL6YRqd00Uy0iIiIiUgUeeOABli5dyptvvonFYsFisbB//34Atm/fzk033URoaChRUVHcd999HD161P3Ynj178vjjjzNixAgaNGhAnz59AHjjjTdo06YNISEhxMXF8dhjj3Hy5EkAlixZwoMPPojD4XC/3pgxY4CSy79TUlK49dZbCQ0NJTw8nDvuuIMjR4647x8zZgxXX301H3/8Mc2aNcNut3PXXXeRnZ1duYMmUg2oqBYRERERqQJvvvkmSUlJPPLII6SlpZGWlkZcXBxpaWn06NGDq6++mrVr17JgwQKOHDnCHXfc4fH4Dz/8ED8/P37++WfeffddAKxWK2+99RZbt27lww8/5IcffuCvf/0rAN26dWP8+PGEh4e7X2/kyJElchmGwaBBg8jMzGTp0qUsWrSIvXv3cuedd3r027t3L19++SVff/01X3/9NUuXLuWVV16ppNESqT60/FtEREREpArY7XYCAgIIDg4mOjrafXzSpEm0b9+el19+2X1s6tSpxMXF8csvv3DFFVcAcNlll/HPf/7T4znPPj87Pj6eF154gaFDhzJx4kQCAgKw2+1YLBaP1zvXd999x+bNm0lOTiYuLg6Ajz/+mNatW7NmzRo6deoEgNPpZNq0aYSFhQFw33338f333/PSSy9d2sCIVHOaqRYRERERMdG6detYvHgxoaGh7lurVq0A1+xwsY4dO5Z47OLFi+nTpw+NGjUiLCyMwYMHc+zYMU6dOlXm19+xYwdxcXHughogISGBunXrsmPHDvexZs2auQtqgJiYGDIyMsr1dxWpiTRTLSIiIiJiIqfTycCBA3n11VdL3BcTE+P+OiQkxOO+AwcOcNNNNzFkyBBeeOEFIiIi+Omnn3j44YcpKCgo8+sbhoHFYrnocX9/f4/7LRYLTqezzK8jUlOpqBYRERERqSIBAQEUFRV5HGvfvj2zZs2iWbNm+PmV/eP52rVrKSws5F//+hdWq2sB6n//+9+Lvt65EhISSElJITU11T1bvX37dhwOB1deeWWZ84jUVlr+LSIiIiJSRZo1a8aqVavYv38/R48exel0MmzYMDIzM7n77rtZvXo1+/btY+HChTz00EMXLIhbtGhBYWEhb7/9Nvv27ePjjz9m8uTJJV7v5MmTfP/99xw9epScnJwSz9O7d2/atm3LPffcw/r161m9ejWDBw+mR48epS45FxFPKqpFRERERKrIyJEjsdlsJCQk0LBhQ1JSUoiNjeXnn3+mqKiIG2+8kcTERIYPH47dbnfPQJfm6quv5o033uDVV18lMTGRTz75hHHjxnn06datG0OGDOHOO++kYcOGJS50Bq5l3F9++SX16tWje/fu9O7dm+bNmzNz5kyv//1FaiKLYRiG2SFEREREREREqiPNVIuIiIiIiIhUkIpqERERERERkQpSUS0iIiIiIiJSQSqqRURERERERCpIRbWIiIiIiIhIBamoFhEREREREakgFdUiIiIiIiIiFaSiWkRERERERKSCVFSLiIiIiIiIVJCKahEREREREZEKUlEtIiIiIiIiUkEqqkVEREREREQq6P8DYjlR0Zqom/EAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "m = 10\n", "x = np.linspace(-1, 1, m)\n", "X = np.vstack((\n", " np.ones(m),\n", " x,\n", ")).T\n", "\n", "Y = 1 * x + 1 + np.random.normal(scale=0.2, size=(m))\n", "\n", "model = GradientDescent()\n", "model.fit(X, Y)\n", "Y_hat = model.predict(X)\n", "\n", "fig, ax = plt.subplots(1, 2, figsize=(12, 4))\n", "ax[0].scatter(x, Y)\n", "ax[0].plot(x, Y_hat, color=\"tab:orange\")\n", "ax[1].plot(model.loss_hist)\n", "\n", "ax[1].set_ylabel(\"MSE\")\n", "ax[1].set_xlabel(\"Iteration\")" ] }, { "cell_type": "markdown", "id": "ccfe48d9-a26a-4cfa-8433-cc2e8a200760", "metadata": {}, "source": [ "On the left we have the fit of the model and on the right we have the loss curve." ] } ], "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.11.3" } }, "nbformat": 4, "nbformat_minor": 5 }