{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Machine Learning \"By Hand\"\n", "\n", "Recall from the previous lecture that the machine learning task has four major components: \n", "\n", "1. The predictor variables $X$. \n", "2. The target variable $Y$, which we aim to predict using $X$. \n", "3. The model $f$ . We treat $\\color{blue}{f}(\\color{green}{X})$ as our estimate of $\\color{gold}{Y}$. \n", "1. The loss function $\\mathcal{L}$. The quantity $\\color{red}{\\mathcal{L}}(\\color{blue}{f}(\\color{green}{X}), \\color{gold}{Y})$ is a measure of how well the model $\\color{blue}{f}$ \"fits\" the data $(\\color{green}{X}, \\color{gold}{Y})$. \n", "\n", "In this lecture, we will explore each of these components in an interpretable setting -- linear regression. This will help us understand what's really going on when we start using more complicated models from Python packages. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Linear Regression\n", "\n", "In linear regression, we use a *linear* model for the data. In the 1-dimensional case, this means that our model $\\color{blue}{f}$ has the form \n", "\n", "$$\\color{blue}{f}(\\color{green}{x}) = a\\color{green}{x}+b \\approx \\color{gold}{y}\\;.$$\n", "\n", "There are two parameters: the slope $a$ and the intercept $b$. By changing the slope and intercept, we get different models. We say that $\\color{blue}{f}$ belongs to a *family* of models $\\color{blue}{\\mathcal{M}}$, with each model corresponding to a different choice of $a$ and $b$. Our learning task now is to find good choices for $a$ and $b$, given some data. \n", "\n", "## Predictor and Target Data\n", "\n", "Let's now generate some synthetic data to use as our example." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from matplotlib import pyplot as plt" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# controls random number generation\n", "# always get the same data\n", "np.random.seed(1234) \n", "\n", "# true model is linear with a = 1 and b = 1\n", "a = 1\n", "b = 1\n", "\n", "n_points = 100\n", "\n", "X = np.random.rand(n_points)\n", "Y = a*X + b + 0.2*np.random.randn(n_points) # final term is random noise" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(1)\n", "\n", "ax.plot([0,1], [1, 2], color = \"black\", label = \"true model\")\n", "ax.scatter(X,Y, label = \"data\")\n", "plt.legend()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When generating synthetic data, we know the \"true\" model. In practice, we don't have access to the true model, so our situation looks more like this: " ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(1)\n", "ax.scatter(X,Y)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So, let's see if we can learn some good parameters for the data. First, let's formalize the model as a function. " ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "def f(X, a, b): \n", " return a*X + b" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ok, that was fun! Now let's visualize some models against our data: " ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "for i in range(10):\n", " # a and b both random between 0 and 2\n", " a = 2*np.random.rand()\n", " b = 2*np.random.rand()\n", " \n", " ax.plot(X, f(X, a, b), color = \"black\", linewidth = .2)\n", "fig" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Some of these models look better than others! How do we pick, systematically? Well, that's where the loss function $\\mathcal{L}$ comes in. The most common choice in linear regression is the mean-square error, which is defined as follows: \n", "\n", "$$\\color{red}{\\mathcal{L}}(\\color{blue}{f}(\\color{green}{X}),\\color{gold}{Y}) = \\frac{1}{n}\\left[ (\\color{gold}{y}_1 - \\color{blue}{f}(\\color{green}{x}_1))^2 + (\\color{gold}{y}_2 - \\color{blue}{f}(\\color{green}{x}_2))^2 + \\cdots + (\\color{gold}{y}_n - \\color{blue}{f}(\\color{green}{x}_n))^2\\right]$$\n", "\n", "A term like $(\\color{gold}{y}_i - \\color{blue}{f}(\\color{green}{x}_i))^2$ is large when $\\color{blue}{f}(\\color{green}{x}_i)$ is very different from $\\color{gold}{y}_i$ -- that is, when our prediction is off! So, if a model has a low mean-square error $\\color{red}{\\mathcal{L}}$, then this indicates that the model \"fits the data\" well. \n", "\n", "Let's implement the mean-square error for linear regression. The error depends on the parameters $a$ and $b$. `numpy` array operations make this very easy. " ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "def linear_MSE(X, Y, a, b):\n", " preds = f(X, a, b)\n", " return ((Y - preds)**2).mean()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's go back to our plot of the data, and show how all those candidate models fare with regards to the MSE loss function. We're going to tune our visualization so that the models with lower MSE are drawn thicker: " ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(1)\n", "ax.scatter(X,Y)\n", "\n", "for i in range(10):\n", " # a and b both random between 0 and 2\n", " a = 2*np.random.rand()\n", " b = 2*np.random.rand()\n", " \n", " ax.plot(X, \n", " f(X, a, b), \n", " color = \"black\", \n", " alpha = 1 - min(linear_MSE(X, Y, a, b), 1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hey, this looks pretty good! The models that have lower MSE (darker lines) \"look close\" to the data. \n", "\n", "Let's see if we can estimate $a$ and $b$. One way to do this is by simply generating a lot of random possibilities and picking the best one. Let's plot a number of models and highlight the best one in a different color." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(1)\n", "ax.scatter(X,Y)\n", "\n", "best_a, best_b = 0, 0\n", "best_error = np.inf\n", "for i in range(100):\n", " a = 2*np.random.rand()\n", " b = 2*np.random.rand()\n", " \n", " error = linear_MSE(X, Y, a, b)\n", " if error < best_error:\n", " best_error = error\n", " best_a, best_b = a,b\n", " preds = f(X, a, b)\n", " ax.plot(X, preds, color = \"black\", alpha = 0.2, linewidth = .1)\n", "\n", "best_preds = f(X, best_a, best_b)\n", "ax.plot(X, best_preds, color = \"red\")" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(0.8636016969818487, 1.1484688275661288)" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# true parameters were a = b = 1\n", "best_a, best_b" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Of course, in real life we wouldn't determine the parameters this way. Instead, we'd minimize the function. " ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(0.9765299071953119, 1.015261733328459)" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from scipy.optimize import minimize\n", "res = minimize(lambda z: linear_MSE(X, Y, z[0], z[1]), np.array([0,0]))\n", "best_a, best_b = res.x\n", "best_a, best_b" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is exactly what is going on \"under the hood\" of most prepackaged machine learning algorithms, which we'll begin to see in the next few lectures. \n", "\n", "Having obtained the optimal parameters, we are now able to make predictions on unseen data. For example: " ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1.69883267])" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f(np.array([0.7]), best_a, best_b) # model prediction when X = 0.7" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Recap\n", "\n", "In this lecture, we did linear regression \"by hand.\" We generated some synthetic predictor data and target data. We then modeled the data using a family of one-dimensional linear models, and selected from among the many possibilities using the mean square error loss function. Choosing the model that minimized the loss function led to a good \"fit\" to the data. \n", "\n", "This pattern applies to essentially all problems in (supervised) machine learning: \n", "\n", "1. Collect some predictor data and target data. \n", "2. Define a family of models and loss function. \n", "3. Find the element of the model family that minimizes the loss function. \n", "\n", "There are a few outstanding issues that we haven't covered here. The biggest one is that \"fitting the data\" is not actually what we usually care about -- we care about *predicting* unseen data. It turns out that fitting the data too closely can actually be counter productive in this case. This is the problem of *overfitting*, which we'll consider in a future lecture. " ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.8.3" } }, "nbformat": 4, "nbformat_minor": 4 }