{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "i_f5u2x9nn6I",
"slideshow": {
"slide_type": "slide"
}
},
"source": [
" \n",
"\n",
"# Lecture 21: Model Iteration and Improvement\n",
"\n",
"### Applied Machine Learning\n",
"\n",
"__Volodymyr Kuleshov__ Cornell Tech"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Practical Considerations When Applying Machine Learning\n",
"\n",
"Suppose you trained an image classifier with 80% accuracy. What's next?"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* Add more data?\n",
"* Train the algorithm for longer?\n",
"* Use a bigger model?\n",
"* Add regularization?\n",
"* Add new features?"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"We will next learn how to prioritize these decisions when applying ML."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Fast & Data-Driven Model Iteration\n",
"\n",
"The key to building great ML systems is to be *data-driven*:\n",
"* First, establish train, dev, and test sets and performance metrics.\n",
"* Then, build a quick prototype and look at its performance.\n",
"* Quickly iterate on the model, fixing the *actual errors* you see.\n",
"\n",
"This process can compensate for an initial lack of domain expertise."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Part 1: Error Analysis\n",
"\n",
"A crucial part of understanding model performance is to systematically examine its errors.\n",
"\n",
"Error analysis is a formal process by which this can be done."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Review: Model Development Workflow\n",
"\n",
"The machine learning development workflow has three steps:\n",
"1. __Training:__ Try a new model and fit it on the training set."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"2. __Model Selection__: Estimate performance on the development set using metrics. Based on results, try a new model idea in step #1."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"3. __Evaluation__: Finally, estimate real-world performance on test set."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"source": [
"# Review: Datasets for Model Development\n",
"\n",
"When developing machine learning models, it is customary to work with three datasets:\n",
"* __Training set__: Data on which we train the models.\n",
"* __Development set__ (validation or hold-out set): Data used for tuning models.\n",
"* __Test set__: Data for evaluating the final performance of our model."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"source": [
"# How to Analyze Models\n",
"\n",
"How do we iterate on a model given its results on the develoment set?"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"source": [
"* Error analysis (this presentation)\n",
"* Analyzing overfitting and underfitting (later)\n",
"* Analyzing distributional changes (next lecture)\n",
"\n",
"And many more types of analyses!"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Prioritizng Model Improvements: An Example\n",
"\n",
"Suppose you trained an image classifier over animal photos.\n",
"* You hear anecdotes that some dogs are misclassified as cats.\n",
"* You have the option to integrate with a commercial dog classifier, which will take a month to implement.\n",
"* Should you move forward with the integration?"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"The key to this decision is to closely examine *actual performance*."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Suppose you need to decide if it's worth fixing a certain type of error.\n",
"\n",
"* First, collect ~100 random dev set examples that were *misclassified*.\n",
"* Look at these examples, and count how many have that error.\n",
"\n",
"If 5% of misclassified examples have that problem, it's probably not important. If 50% do, then it's important."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Error Analysis\n",
"\n",
"Error analysis systematically identifies the most common errors made by the model."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"1. Collect a random subset of misclassified dev set examples.\n",
"2. Manually examine them; identify the most common types or *categories* of errors.\n",
"3. Count \\% of points affected by each error categories.\n",
"\n",
"You should prioritize the most common error categories."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"source": [
"# Error Categories\n",
"\n",
"Error analysis involves classifying errors into *categories*.\n",
"* A category is a systematic error made by the model.\n",
"* Categories can come from intuition, but ideally they are constructed by manually examining the data."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Error Analysis: An Example\n",
"\n",
"Suppose you just trained a new image classifier.\n",
"* After looking at the first 20-30 errors, you realize they are all due to images being either *blurry*, *flipped*, or *mislabeled*.\n",
"* These become the error categories."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"We then go through through the random subset of errors and assign them to categories.\n",
"\n",
"$ $ | Blurry | Flipped | Mislabeled\n",
"--------|--------|---------|-----------\n",
"Image 1 | X | X | \n",
"Image 2 | | X | \n",
"Image 3 | | | X \n",
"... | | | \n",
"__Total__ | 20% | 50% | 30%\n",
"\n",
"We know that the most important fix is to correct for flipped images."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"source": [
"# Mislabeled Data\n",
"\n",
"Real-world data is often messy, and labels are not always correct.\n",
"* __Scenario 1__: 10% error, of which 0.4% is due to labeling and 9.6% to other causes. No need to relabel.\n",
"* __Scenario 2__: 2% error, of which 0.4% is due to labeling and 1.6% to other causes. Important to relabel!\n",
"* These errors can be identified as part of error analysis\n",
"* The prevalence of these errors tells us if we should fix them\n",
"\n",
"It's important to fix labeling issues if they prevent us from measuring model error."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Development Set Size\n",
"\n",
"How big should the dev set size be? Error analysis suggests a lower bound.\n",
"* You should have at least ~50-100 mislabeled errors to analyze.\n",
"* If model has error of $\\epsilon$, we want a dev size of ~$100/\\epsilon$.\n",
" * e.g., for 5% error, we want a dev set of size ~2,000.\n",
"\n",
"Also, remember to periodically update the dev set to minimize overfitting."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Error Analysis on the Training Set\n",
"\n",
"Should we perform error analysis on the dev set or the training set?"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* Ultimately, we are interested in errors that will occur in production. This is best estimated on the dev set."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* However, if a model makes errors on the training set, it will make them on the dev set as well. \n",
"\n",
"Hence, analyzing and fixing training set errors is also important."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Error Analysis: Another Example\n",
"\n",
"Let's look at another example of error analysis on a small toy dataset."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"We will use the `sklearn` digits dataset, a downscaled version of MNIST."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"source": [
"from sklearn.datasets import load_digits\n",
"digits = load_digits()"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"We can visualize these digits as follows:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAADOCAYAAACdDdHuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAAsTAAALEwEAmpwYAAAR+0lEQVR4nO3df8xddX3A8fcHUZwiTwvbYorKU2RLmMRWUOLmlDYpiUxJSzKJk4xSx1pdjFA3badxPizGtf6hVDNH/3B96sx0dFG6xh8RtpZJiEGNdMjmorQ1sCLqSivgj0347o9zmY997vme9tx7v+c86fuV3KT3+Zx7fnx6zuf53ns/z/dESglJUhmndb0DknQqsehKUkEWXUkqyKIrSQVZdCWpIIuuJBVUrOhGxC0R8d5xL7uQmZPhzMt85mS+BZuTlNLID+AQ8BPgMeAocDfwFuC0Max7BfBQwzIBbAX+e/DYCsQ4jm0B52QlsBc4BhzqMhc9y8s7gW8Otn8QeKc5YSNwAPgRcBj4MHD6qZyTOcs+C/iPE13+RB7jHOlemVJ6HnAesAXYBHx8jOvPWQ+sAZYBLwWuBDYU2nZOlzl5AvhbqiLTN13mJYBrgcXAa4G3RcQbC207p8uc/BNwcUrpLOAiquvo7YW2ndNlTp72TuAHY13jGH8rrTruZ5cCTwEXDZ7PAu+fE38X8DDVb9brgQRcMHdZ4LlUv+2eAh4fPJYM2f7dwPo5z/8I+EoPflN3lpM561xF/0a6nedlzro/AnzUnPz/es8B7gA+dqrnBFhKNcq9gp6OdH9JSuke4CHg1cfHIuK1wDuoCsIFVMP9Yet4YnDAh1NKZw4eh4cs+hJg/5zn+wc/65XCOVkwuspLRMRgm/ePdAATUDonEfGmiPgR8EOqke72cRzHOHVwnnwUeDdVkR6bSX+Rdhg4e8jPrwZ2pJTuTyn9GJgZcTtnUn12+bRjwJmDi6pvSuVkoekiLzNU18COMa5znIrlJKX096n6eOE3gVuAR0Zd54QUyUlEXAU8I6X02VHWM8yki+65wJEhP18CPDjn+YNDljkZjwNnzXl+FvB4GrxH6JlSOVloiuYlIt5G9dnu61JKPxvHOieg+LmSUvo21cj/Y+Na55hNPCcR8Vzgg0zoc+3TJ7FSgIh4BVWC7hoSfhh4wZznL8ys6kQK5/1Ub4nuGTxfRg/fMhbOyYJROi8R8WZgM/CalNJDJ7qfJXV8rpwOvLjF6yaqYE5+A5gGvjx4s/wsYCoivge8MqV06AR3eaixj3Qj4qyIeD3waeCTKaX7hix2K7AuIi6MiOcAuf65R4BzImIqs8wngHdExLkRsQT4U6oPznuhi5xExGkR8WzgmdXTeHZEPGuEwxi7jvJyDfAB4PKU0oERdn8iOsrJ9RHx64N//xbw58A/tz6IMesgJ9+kKtrLB4/rB69ZzhjeVYyz6O6JiMeoduo9wIeAdcMWTCl9gepb473Ad4CvDELz3uallL4FfAo4EBFHB0X1eNuBPcB9VAn7HP34IqDLnLyG6guAzwMvGvz7SyMdzfh0mZf3U31D/9WIeHzwuGXUAxqDLnPyKuC+iHiC6nz5PNUXSF3rJCcppZ+nlL739IPq44ynBs+fHPWgog8fe0bEhVTF8oyU0s+73p8+MCfDmZf5zMl8fc5JZ3MvRMRVEXFGRCym+guyPX1LTmnmZDjzMp85mW+h5KTLCW82AN8HHgCeBN7a4b70hTkZzrzMZ07mWxA56cXHC5J0qnBqR0kqqKlPt9UweNeuXdn4pk2bamOXX355bWzLli21scWLFzfvWL2T+cu1ibw1WLFiRW3s6NGjtbGbbrqpNrZ69eoR9uikcgITysu+fftqY2vWrKmNLV++vNU6T8DEz5WtW7dm45s3b66NLV26tDb29a9/vTa20K+f3DVy3XXX1cZuu+22se/LQG1OHOlKUkEWXUkqyKIrSQVZdCWpIIuuJBVk0ZWkgiYytWOuJQzg4MGDtbFHH320Nnb22cPmLq7ceuut2W2+4Q1vyMa7tmjRotrYnXfeWRvbu3dvbWzElrEi7r333mx85cqVtbGpqfqJ5w4dOtRyj8rItX01ncvbt9fP5bRhQ/2tAXMtY6tWrcpus+9mZ2drY7n2wS440pWkgiy6klSQRVeSCrLoSlJBFl1JKsiiK0kFtW4Zy7Wf5FrCAB544IHa2Pnnn18by81Altsf6L5lrKk1qu3MV31rhzlZTbM8LVu2rDaWm2UsN/taH6xfv7421tRyeckll9TGcrOMLeS2sNwsYpBvGbvxxhtrY6O0Fk5PT7d6nSNdSSrIoitJBVl0Jakgi64kFWTRlaSCLLqSVJBFV5IKat2nm5uC8eKLL86+NteLm5PrT+yDm2++uTY2MzOTfe2xY8dabTN3F+GFINdDCfleyNxr+z6tZe4aOHDgQPa1uT74XC9u7pod8W7AE5frw4V8v23ubsC5cyg33So0X9N1HOlKUkEWXUkqyKIrSQVZdCWpIIuuJBVk0ZWkgibSMpabgnEUfW95ybWf5NpWoP3+N0151we5fcy12UHz1I91mlqM+qyppfLIkSO1sVzLWC52xx13ZLdZ4vravXt3bWzjxo3Z165du7bVNrdt21Yb27FjR6t1NnGkK0kFWXQlqSCLriQVZNGVpIIsupJUkEVXkgpq3TKWayFpujNvTq4t7Gtf+1pt7Oqrr269zYUsd5fhvtwpODcbU65lp0munaxphqiFLHft5Vq/NmzYUBvbunVrdptbtmxp3rERTU1NtYoB7Ny5szbWdCfuOrm7TY/Cka4kFWTRlaSCLLqSVJBFV5IKsuhKUkEWXUkqqHXLWG4mpFxrF8CuXbtaxXI2bdrU6nWavNwMa/v27cu+dv/+/bWxXEtP7saU69aty26z65tabt68ORtve/PJ22+/vTbWh5bL3E1Wm2bTy7WF5dabm51sUm2HjnQlqSCLriQVZNGVpIIsupJUkEVXkgqy6EpSQRZdSSpoIn26TdPE5XpqX/7yl9fGRpkysmtNPX+53tDcXVJzfa5NdyAuJTfFZNO0e7l4bsrIXM6mp6ez2+y6T7fpzrvr169vtd5cL+727dtbrbMvctfXsWPHamNdXCOOdCWpIIuuJBVk0ZWkgiy6klSQRVeSCrLoSlJBkVLqeh8k6ZThSFeSCrLoSlJBFl1JKsiiK0kFWXQlqSCLriQVZNGVpIIsupJUkEVXkgqy6EpSQRZdSSrIoitJBVl0Jakgi64kFWTRlaSCLLqSVJBFV5IKsuhKUkEWXUkqyKIrSQVZdCWpIIuuJBVk0ZWkgiy6klSQRVeSCrLoSlJBFl1JKsiiK0kFWXQlqSCLriQVZNGVpIIsupJUkEVXkgqy6EpSQRZdSSrIoitJBVl0Jakgi64kFWTRlaSCLLqSVJBFV5IKsuhKUkEWXUkqyKIrSQVZdCWpoGJFNyJuiYj3jnvZhcycDGde5jMn8y3YnKSURn4Ah4CfAI8BR4G7gbcAp41h3SuAhxqWmQH+F3h8zuP8cRzbQs3JYLmLgX8d5OMR4IYuc9KHvABfOO48+R/gvlM8J2cAtwzOkSPAHuDcUzwni4CdwPcHj5lxHds4R7pXppSeB5wHbAE2AR8f4/qb/ENK6cw5jwMFt12ns5xExK8CXwS2A+cAFwBfKrHtE9BZXlJKV8w9T6gu5l0ltt2gy+vnBuC3gZcCS4BHgY8W2nZOlzn5MPAcYBq4FPjDiFg3ljWP8bfSquN+dinwFHDR4Pks8P458XcBDwOHgeuBBFwwd1nguVS/7Z7iFyOTJUO2PwN8ssvfzD3MyQeAv+s6D33Ly3HbnQaeBKZP5ZwAfwN8cM7z1wH/eYrn5IfAK+Y8fzfw5XEc28Q+000p3QM8BLz6+FhEvBZ4B7CKagS2omYdTwBXAIfTL0Ynh2s2eWVEHImI+yPireM4hnErnJNXAkci4u6I+H5E7ImIF43pUMaqg3PladdSXUiH2u/9ZBTOyceBV0XEkoh4DnAN1ccwvdLBeRLH/fui9nv/C5P+Iu0wcPaQn18N7Egp3Z9S+jHVSHUUtwIXAr8G/DHwFxHxByOuc1JK5eQFwFqqt44vAg4CnxpxnZNUKi9zXUs1AuqrUjn5NvAg8F/Aj6iupb8ccZ2TUionXwQ2R8TzIuIC4M1UHzeMbNJF91yqD+aPt4TqP/lpDw5Z5oSllP49pXQ4pfRkSuluYBvw+6Osc4KK5ITqLdRnU0pfTSn9FLgJ+J2ImBpxvZNSKi8ARMTvAs8H/nEc65uQUjn5a6ov086hevv9GXo40h0olZO3U11D3wZ2Uw1YHhpxncAEi25EvIIqQXcNCT9MNRJ72gszq0otNp/45bcGvVA4J/923HJt8lhER+fKWuAzKaXHT+I1xRTOyXJgNqV0JKX0M6ov0S4dfBnbGyVzMsjFNSml56eUXkJVK+85mf2tM/aiGxFnRcTrgU9Tfbl135DFbgXWRcSFg8+Qcv1zjwDn5EZoEbE6IhZH5VKq31K7RziMseoiJ8AO4KqIWB4Rzxys766U0rGWhzF2HeWFiPgVqrejs+32fHI6yslXgWsjYmpwrvwJ1WeeP2x5GGPVUU15cUScExHPiIgrgPVUX8SNbJxFd09EPEY1rH8P8CFgaItFSukLwEeAvcB3gK8MQj8bsuy3qIb2ByLiaEQsGbLKNw7W8xjwCWBrSmnnaIczFp3lJKX0L1TfuH6Oqs/wAuBNox7QmHR5rgCsoer93Nv+EMauy5z8GfBTqrfSPwB+D7hqpKMZjy5zcglwH1VN+SvgmpTS/aMdTiUG7RCdiogLgW8CZ6SUft71/vSBORnOvMxnTubrc046m3shIq6KiDMiYjGwFdjTt+SUZk6GMy/zmZP5FkpOupzwZgPV294HqBrUe9lbW5g5Gc68zGdO5lsQOenFxwuSdKpwakdJKuj0hnirYfCKFSuy8enp6drY7Oxsm02O6mR6eify1iCXs6NHj9bG7r333rHvy8DJ9jm3ysvNN9+cjeeO/bbbbquN7d+/vzY2NZX/+5BDhw7VxhYtWjTxc+XGG2/MxnPHfd1117Va76JFi7LbbDDxnKxZsyYbz50n+/bta7PJUdXmxJGuJBVk0ZWkgiy6klSQRVeSCrLoSlJBFl1JKqjpjyNatXfkWsIAvvvd77ZZLeedd15tLNfmcwIm3vKye3d+0rNcS8z73ve+2tjMzEyb3TkRvWgZy1m+fHmr9ebai6CxxWji50pTy2Xbcz13XY7YVjWWnOSOa+nSpSexiRO3bNmy2tiI7Zi2jElSH1h0Jakgi64kFWTRlaSCLLqSVJBFV5IKapplrJWmGYtyLWO5GaDazsR1Ivs0abm2ryZNMywtZE0zauXk2uVy7UcdzTp1wnKtcNB+lr7cNdCUk6Y2tnFouoZzLrvsstrYBFvlWnGkK0kFWXQlqSCLriQVZNGVpIIsupJUkEVXkgqy6EpSQRPp022a2jF3p9Zjx47VxnL9i1334TZp6kHMTTHX1LfZd7leyFH6JNtOC5m7my7k76hbQtP2X/ayl9XGGu5kXBtrumZLGGUfcv+nuT73UXqD23KkK0kFWXQlqSCLriQVZNGVpIIsupJUkEVXkgqaSMtYU0tOrk0odwfOjRs3ttshRptCcByaWlNy7TK51qhcO0wf2oAgvx9Nd1xt21KWOwdLTFM4ilHamO68887a2MGDB2tjfThXci1tuZZKgMWLF9fGbrjhhtpY7vxruuty25w50pWkgiy6klSQRVeSCrLoSlJBFl1JKsiiK0kFTaRlrMkkWnaa2ju61tRekmv1ybUQ5drovvGNb2S3WWr2styxN7UXRkSr1/a9LSzXqrRy5crsa3N3ls5dB7n2wqb/h65byppaC3Pxtud5U5tpU87qONKVpIIsupJUkEVXkgqy6EpSQRZdSSrIoitJBU2kZWz37t3Z+NTUVG1sZmam1TZz7TB90HSzwVzrV65dJ9ci1NTS0ocbXja15eTOlcsuu2zMe1NO7v80d8yQz1nufMjd0HJ2dja7zbbXZSm5czmXr9xxt20Ja+JIV5IKsuhKUkEWXUkqyKIrSQVZdCWpIIuuJBVk0ZWkgibSp7t3795sfNu2ba3Wu3bt2tpY36fya+rTzfVX5noJc8fd995laL7b786dO2tjubvH9l1u35vO5dydb3M9vqtXr66NdX237CZN+5eb2jE3NWru/JtUH7sjXUkqyKIrSQVZdCWpIIuuJBVk0ZWkgiy6klRQpJS63gdJOmU40pWkgiy6klSQRVeSCrLoSlJBFl1JKsiiK0kF/R9/hHPrLnYC9gAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from matplotlib import pyplot as plt\n",
"\n",
"plt.figure(figsize=(8,16))\n",
"_, axes = plt.subplots(2, 5)\n",
"images_and_labels = list(zip(digits.images, digits.target))\n",
"for ax, (image, label) in zip(axes.flatten(), images_and_labels[:10]):\n",
" ax.set_axis_off()\n",
" ax.imshow(image, cmap=plt.cm.gray_r, interpolation='nearest')\n",
" ax.set_title('Digit %i' % label)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Let's separate this data into two equal-sized training and dev sets."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"source": [
"# https://scikit-learn.org/stable/auto_examples/classification/plot_digits_classification.html\n",
"from sklearn.model_selection import train_test_split\n",
"\n",
"# Split data into train and test subsets\n",
"n_samples = len(digits.images)\n",
"data = digits.images.reshape((n_samples, -1))\n",
"X_train, X_dev, y_train, y_dev = train_test_split(\n",
" data, digits.target, test_size=0.5, shuffle=False)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"We can train a simple Softmax model on this data."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"source": [
"# https://scikit-learn.org/stable/auto_examples/classification/plot_digits_classification.html\n",
"from sklearn.linear_model import LogisticRegression\n",
"classifier = LogisticRegression(max_iter=1e7)\n",
"\n",
"# We learn the digits on the first half of the digits\n",
"classifier.fit(X_train, y_train)\n",
"\n",
"# Now predict the value of the digit on the second half:\n",
"predicted = classifier.predict(X_dev)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"It achieves the following accuracy."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"0.9332591768631813"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(predicted == y_dev).mean()"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"We hypothesize that certain digits are misclassified more than others."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"(array([ 3., 11., 2., 14., 7., 4., 1., 4., 9., 5.]),\n",
" array([0. , 0.9, 1.8, 2.7, 3.6, 4.5, 5.4, 6.3, 7.2, 8.1, 9. ]),\n",
" )"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# these dev set digits are classified incorrectly\n",
"X_error = X_dev[predicted != y_dev]\n",
"y_error = y_dev[predicted != y_dev]\n",
"p_error = predicted[predicted != y_dev]\n",
"\n",
"# these dev set digits are classified correctly\n",
"X_corr = X_dev[predicted == y_dev]\n",
"y_corr = y_dev[predicted == y_dev]\n",
"p_corr = predicted[predicted == y_dev]\n",
"\n",
"# show the histogram\n",
"plt.xticks(range(10))\n",
"plt.hist(y_error)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"The most common misclassified digit is a 3.\n",
"\n",
"We can investigate the issue by looking at a subset of misclassified 3's (top row) and compare them to correctly classified 3's (bottom row)."
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(8,16))\n",
"_, axes = plt.subplots(2, 8)\n",
"\n",
"# these images are classified incorrectly\n",
"images_and_labels = list(zip(X_error[y_error==3], p_error[y_error==3]))\n",
"for ax, (image, label) in zip(axes[0,:], images_and_labels[:8]):\n",
" ax.set_axis_off()\n",
" ax.imshow(image.reshape((8,8)), cmap=plt.cm.gray_r, interpolation='nearest')\n",
" ax.set_title('f(x)=%i' % label)\n",
"\n",
"# these images are classified correctly\n",
"images_and_labels = list(zip(X_corr[y_corr==3], p_corr[y_corr==3])) \n",
"for ax, (image, label) in zip(axes[1,:], images_and_labels[:8]):\n",
" ax.set_axis_off()\n",
" ax.imshow(image.reshape((8,8)), cmap=plt.cm.gray_r, interpolation='nearest')\n",
" ax.set_title('f(x)=%i' % label) "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"We discover that the model is misclassifying a particular stlye of 3, and we can focus our efforts on this type of error."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Limitations of Error Analysis\n",
"\n",
"The main limitations of error analysis include:\n",
"1. It is particularly easy to overfit the dev set, since we prioritize fixing dev set errors.\n",
"2. It can be laborious (but still important!)\n",
"3. Certain bigger trends (e.g. overfitting the data) may be less obvious.\n",
"\n",
"Hence, we perform other analyses to explain and diagnose errors."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
" \n",
"\n",
"# Part 2: Bias/Variance Analysis\n",
"\n",
"Another way to understand the performance of the model is to examine the extent to which it's overfitting or underfitting the data. \n",
"\n",
"We refer to this as bias/variance analysis."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"source": [
"# Review: Error Analysis\n",
"\n",
"Error analysis systematically identifies the most common errors made by the model."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"source": [
"1. Collect a random subset of misclassified dev set examples.\n",
"2. Manually examine them; identify the most common types or *categories* of errors.\n",
"3. Count \\% of points affected by each error categories.\n",
"\n",
"You should prioritize the most common error categories."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Review: Overfitting (Variance)\n",
"\n",
"Overfitting is one of the most common failure modes of machine learning.\n",
"* A very expressive model (a high degree polynomial) fits the training dataset perfectly.\n",
"* The model also makes wildly incorrect prediction outside this dataset, and doesn't generalize."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Recall this example, where we randomly sample around a true function."
]
},
{
"cell_type": "code",
"execution_count": 108,
"metadata": {
"slideshow": {
"slide_type": "-"
}
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 108,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import numpy as np\n",
"np.random.seed(1)\n",
"n_samples = 40\n",
"true_fn = lambda X: np.cos(1.5 * np.pi * X)\n",
"\n",
"X = np.sort(np.random.rand(n_samples))\n",
"y = true_fn(X) + np.random.randn(n_samples) * 0.1\n",
"\n",
"X_line = np.linspace(0, 1, 100)\n",
"plt.plot(X_line, true_fn(X_line), label=\"True function\")\n",
"plt.scatter(X, y, edgecolor='b', s=20, label=\"Samples\")"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Below, we fit a high degree polynomial on random samples of 30 points from this dataset.\n",
"\n",
"Each small subset of the data that we train on results is a very different model."
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"slideshow": {
"slide_type": "-"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from sklearn.pipeline import Pipeline\n",
"from sklearn.preprocessing import PolynomialFeatures\n",
"from sklearn.linear_model import LinearRegression\n",
"\n",
"n_plots, X_line = 3, np.linspace(0,1,20)\n",
"plt.figure(figsize=(14, 5))\n",
"for i in range(n_plots):\n",
" ax = plt.subplot(1, n_plots, i + 1)\n",
" random_idx = np.random.randint(0, 30, size=(30,))\n",
" X_random, y_random = X[random_idx], y[random_idx]\n",
"\n",
" polynomial_features = PolynomialFeatures(degree= z, include_bias=False)\n",
" linear_regression = LinearRegression()\n",
" pipeline = Pipeline([(\"pf\", polynomial_features), (\"lr\", linear_regression)])\n",
" pipeline.fit(X_random[:, np.newaxis], y_random)\n",
"\n",
" ax.plot(X_line, true_fn(X_line), label=\"True function\") \n",
" ax.plot(X_line, pipeline.predict(X_line[:, np.newaxis]), label=\"Model\")\n",
" ax.scatter(X_random, y_random, edgecolor='b', s=20, label=\"Samples\", alpha=0.2)\n",
" ax.set_xlim((0, 1))\n",
" ax.set_ylim((-2, 2))\n",
" ax.legend(loc=\"best\")\n",
" ax.set_title('Random sample %d' % i)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"An algorithm that has a tendency to overfit is also called __high variance__, because it outputs a predictive model that varies a lot if we slightly perturb the dataset."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Review: Underfitting (Bias)\n",
"\n",
"Underfitting is another common problem in machine learning.\n",
"* The model is too simple to fit the data well (e.g., approximating a high degree polynomial with linear regression).\n",
"* As a result, the model is not accurate on training data and is not accurate on new data.\n",
"\n",
"Because the model cannot fit the data, we say it's __high bias__."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"We may compare overfitting vs underfitting on our polynomial dataset."
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"degrees = [1, 20, 5]\n",
"titles = ['Underfitting', 'Overfitting', 'A Good Fit']\n",
"plt.figure(figsize=(14, 5))\n",
"for i in range(len(degrees)):\n",
" ax = plt.subplot(1, len(degrees), i + 1)\n",
"\n",
" polynomial_features = PolynomialFeatures(degree=degrees[i], include_bias=False)\n",
" linear_regression = LinearRegression()\n",
" pipeline = Pipeline([(\"pf\", polynomial_features), (\"lr\", linear_regression)])\n",
" pipeline.fit(X[:, np.newaxis], y)\n",
"\n",
" ax.plot(X_test, true_fn(X_test), label=\"True function\") \n",
" ax.plot(X_test, pipeline.predict(X_test[:, np.newaxis]), label=\"Model\")\n",
" ax.scatter(X, y, edgecolor='b', s=20, label=\"Samples\", alpha=0.2)\n",
" ax.set_xlim((0, 1))\n",
" ax.set_ylim((-2, 2))\n",
" ax.legend(loc=\"best\")\n",
" ax.set_title(\"{} (Degree {})\".format(titles[i], degrees[i]))"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# On the Signficance of Bias and Variance\n",
"\n",
"Every error in machine learning is either underfitting (bias) or overfitting (variance).\n",
"* __Bias__: Our model is not able to extract signal from data.\n",
"* __Variance__: The signal doesn't generalize to new data.\n",
"\n",
"By definition, if we have no bias and variance, we have a perfect model. Hence, bias/variance is important to understand."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Quantifying Bias and Variance\n",
"\n",
"We approximately quantify the bias and the variance of a model as follows.\n",
"\n",
"$$\\text{dev error} = (\\underbrace{\\text{dev error} - \\text{train error}}_\\text{variance}) + \\underbrace{\\text{train error}}_\\text{bias}$$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* The bias is simply the training error (can we even fit training data?)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* Variance is the extra error on the dev set (do we generalize to it?)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"source": [
"It's important to consider both types of errors.\n",
"* If a model has high training error, it will certainly have high generalization error.\n",
"* As we fix training error, we need to ensure that it generalizes to new data.\n",
"\n",
"We can make different changes to the algorithm to address both of these issues."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Diagnosing Bias and Variance\n",
"\n",
"We may use this observation to diagnose bias/variance in practice.\n",
"* If the training error is high, we have high bias.\n",
"* If dev error is much higher than training error, we have high variance."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Consider the following example:\n",
"* Our training set error is 15%.\n",
"* Our dev set error is 16%.\n",
"* Human error is 2%.\n",
"\n",
"This is a typical example of __high bias__ (underfitting)."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Next, consider another example:\n",
"* Our training set error is 4%.\n",
"* Our dev set error is 12%.\n",
"* Human error is 2%.\n",
"\n",
"This is an example of __high variance__ (overfitting)."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Finally, suppose you see the following:\n",
"* Our training set error is 2.5%.\n",
"* Our dev set error is 3%.\n",
"* Human error is 2%.\n",
"\n",
"This is a model that seems to work quite well!"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Addressing Variance\n",
"\n",
"The best way to reduce variance is to __give the model more data__. \n",
"* Overfitting occurs because we don't have enough data to fit an expressive model.\n",
"* Hence, we add data and the memorized solution is no longer good.\n",
"\n",
"However, this may be not be feasible because of high costs for compute or data acquisition."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Alternative options for reducing variance include:\n",
"* __Add Regularization__: L2 regularization, dropout, early stopping (increases bias)\n",
"* __Drop or Change Features__: Ideally, drop irrelevant ones (needs manual analysis)\n",
"* __Reduce Model Size__: Decrease layer size, kernel complexity, etc. Regularization often works better."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Addressing Bias\n",
"\n",
"The best way to reduce bias is to __increase the expressivity of the model__. \n",
"* e.g., add more neural net layers, decrease kernel bandwidth, increase polynomial degree.\n",
"* A bigger (more expressive) model will fit the data better.\n",
"\n",
"However, this may be not be feasible because of high costs for compute."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Alternative options for reducing bias include:\n",
"\n",
"* __Add or Change Features__: Often based on manual analysis.\n",
"* __Reduce Regularization__: Change dropout, train model longer (incrases variance).\n",
"* __Adjust Model Architecture__: e.g., switch to ConvNets for image classification, which are more parameter-efficient than fully-connected networks (can also improve variance)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"For both bias and variance reduction, we can use error analysis to guide our changes, e.g.:\n",
"* To determine which features to add/remove.\n",
"* To determine which additional data to collect."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Bias/Variance Analysis: An Example\n",
"\n",
"Let's use our earlier example with the sklearn digits dataset to illustrate this approach."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Recall our digits dataset from earlier:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from matplotlib import pyplot as plt\n",
"\n",
"plt.figure(figsize=(8,16))\n",
"_, axes = plt.subplots(2, 5)\n",
"images_and_labels = list(zip(digits.images, digits.target))\n",
"for ax, (image, label) in zip(axes.flatten(), images_and_labels[:10]):\n",
" ax.set_axis_off()\n",
" ax.imshow(image, cmap=plt.cm.gray_r, interpolation='nearest')\n",
" ax.set_title('Digit %i' % label)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"We can train a small fully-connected neural network on this data."
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"source": [
"# https://scikit-learn.org/stable/auto_examples/classification/plot_digits_classification.html\n",
"from sklearn.neural_network import MLPClassifier\n",
"classifier = MLPClassifier()\n",
"\n",
"# We learn the digits on the first half of the digits\n",
"classifier.fit(X_train, y_train)\n",
"\n",
"# Now predict the value of the digit:\n",
"predicted = classifier.predict(X_dev)\n",
"predicted_train = classifier.predict(X_train)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"It achieves the following accuracy."
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training set accuracy: 1.000 \n",
"Development set accuracy: 0.937 \n"
]
}
],
"source": [
"print('Training set accuracy: %.3f ' % (predicted_train == y_train).mean())\n",
"print('Development set accuracy: %.3f ' % (predicted == y_dev).mean())"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"We have clearly memorized our dataset, and are overfitting. Let's increase regularization."
]
},
{
"cell_type": "code",
"execution_count": 103,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"source": [
"classifier = MLPClassifier(max_iter=1000, alpha=1)\n",
"\n",
"# We learn the digits on the first half of the digits\n",
"classifier.fit(X_train, y_train)\n",
"\n",
"# Now predict the value of the digit:\n",
"predicted = classifier.predict(X_dev)\n",
"predicted_train = classifier.predict(X_train)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"By increasing L2 regularization (`alpha`), we improve performance by 1%.\n",
"(Although we still somewhat overfit)"
]
},
{
"cell_type": "code",
"execution_count": 105,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training set accuracy: 1.000 \n",
"Development set accuracy: 0.947 \n"
]
}
],
"source": [
"print('Training set accuracy: %.3f ' % (predicted_train == y_train).mean())\n",
"print('Development set accuracy: %.3f ' % (predicted == y_dev).mean())"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Error vs. Bias/Variance Analyses\n",
"\n",
"These two analyses reveal different types of problems:\n",
"* __Systematic errors__ are found by error analysis (e.g., frequent errors on dog images because we lack training images of dogs)\n",
"* __General errors__ are found by bias/variance analysis (e.g., we memorized the training set and don't generalize)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"These two analyses also complement each other.\n",
"* Bias/variance suggests which errors categories and which datasets (train, dev) are useful for error analysis.\n",
"* Error analysis identifies specific ways of fixing high bias or high variance (e.g., which new features to add)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Bias/Variance Analysis vs Hyperparameter Search\n",
"\n",
"Bias/variance analyses also helps guide hyperparameter search\n",
"* Hyperparamters are often chosen by grid or random search.\n",
"* Bias/variance analysis provides intuition for where to search.\n",
"* For example, if we're overfitting, we need to search larger regularization values."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Model Iteration Cycle\n",
"\n",
"In summary, ML model development can be seen as alternating between the following two steps:\n",
"* __Reduce underfitting__ (e.g., increase model size)\n",
"* __Reduce overfitting__ (e.g., give it more data)\n",
"\n",
"Error analysis guides specific changes in this process."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
" \n",
"\n",
"# Part 3: Baselines\n",
"\n",
"In order to understand model performance, we need to put it in context.\n",
"\n",
"Baselines represent a benchmark against which we compare performance."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Motivation\n",
"\n",
"Suppose you train a regression model with a mean L1 error of 20.\n",
"* If we simply output the average $y$ on every input and this gives us an error of 20, then we haven't learned anything.\n",
"* In other cases, an error of 20 can be very good.\n",
"\n",
"Thus, we need to put our results in context by comparing to other models."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Baselines\n",
"\n",
"A baseline is a another model against which we compare ourselves.\n",
"* These are often simple toy models that serve as a sanity check\n",
"* They also help us to interpret performance"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Examples of baselines include:\n",
"* Random guessing, constant or average predictions.\n",
"* Simple models, such as interpretable trees or linear regression.\n",
"* Older, previous-generation ML models.\n",
"* Any classical approach that does not involve machine learning."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Optimal Performance\n",
"\n",
"In practice, we also want to set a target upper bound on our performance.\n",
"* The optimal error is often non-zero, e.g. even humans can't understand noisy speech.\n",
"* It tells us whether the model can be further improved."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Estimating the Optimal Error Rate\n",
"\n",
"There are different ways to compute an upper bound:\n",
"* Manually ask human annotators to label some data.\n",
"* Label data using crowdsourcing.\n",
"* Use the expected performance levels of downstream applications."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Quantifying Bias Using Optimal Error\n",
"\n",
"Our target optimal error helps us better quantify bias and variance:\n",
"\n",
"$$\\text{dev error} = (\\underbrace{\\text{dev error} - \\text{train error}}_\\text{variance}) + (\\underbrace{\\text{train error} - \\text{opt error}}_\\text{avoidable bias}) + \\underbrace{\\text{opt error}}_\\text{unavoidable bias}$$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Consider the following example:\n",
"* Our training set error is 15%.\n",
"* Our dev set error is 20%.\n",
"* Ideal error is 14%.\n",
"\n",
"The bias is almost ideal. We have a variance problem."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Next, consider this scenario:\n",
"* Our training set error is 5%.\n",
"* Our dev set error is 10%.\n",
"* Ideal error is 7%.\n",
"\n",
"Training error is less than the ideal error! This means that we have overfit the training set. We have a variance problem."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Finally, consider another example:\n",
"* Our training set error is 8%.\n",
"* Our dev set error is 9%.\n",
"* Ideal error is 7%.\n",
"\n",
"We are close to being optimal!"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"accelerator": "GPU",
"celltoolbar": "Slideshow",
"colab": {
"collapsed_sections": [],
"name": "neural-ode.ipynb",
"provenance": []
},
"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.7.11"
},
"rise": {
"controlsTutorial": false,
"height": 900,
"help": false,
"margin": 0,
"maxScale": 2,
"minScale": 0.2,
"progress": true,
"scroll": true,
"theme": "simple",
"width": 1200
}
},
"nbformat": 4,
"nbformat_minor": 1
}