{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "i_f5u2x9nn6I",
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"\n",
"\n",
"# Lecture 20: Evaluating Machine Learning Models\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 look at how to prioritize decisions to produce performant ML systems."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Part 1: Machine Learning Development Workflow\n",
"\n",
"In order to iterate and improve upon machine learning models, practitioners follow a development workflow.\n",
"\n",
"We first define it at a high-level. Afterwards, we will describe each step in more detail."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Review: Data Distribution\n",
"\n",
"In machine learning, we typically assume that data comes from a probability distribution $\\mathbb{P}$, which we will call the *data distribution*:\n",
"\n",
"$$ x, y \\sim \\mathbb{P}. $$\n",
"\n",
"The training set $\\mathcal{D} = \\{(x^{(i)}, y^{(i)}) \\mid i = 1,2,...,n\\}$ consists of *independent and identicaly distributed* (IID) samples from $\\mathbb{P}$."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Review: Hold-Out Set\n",
"\n",
"A hold-out set $\\dot{\\mathcal{D}} = \\{(\\dot{x^{(i)}}, \\dot{y^{(i)}}) \\mid i = 1,2,...,n\\}$ consists of *independent and identicaly distributed* (IID) samples from $\\mathbb{P}$ and is distinct from the training set.\n",
"\n",
"A model that __generalizes__ is accurate on a hold-out set."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"We present a workflow for developing accurate models that generalize."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# 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 our algorithms.\n",
"* __Development set__ (validation or hold-out set): Data used for tuning algorithms.\n",
"* __Test set__: Data used to evaluate the final performance of the model."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Model Development Workflow\n",
"\n",
"The typical way in which these datasets are used is:\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": "subslide"
}
},
"source": [
"A few extra notes about this procedure:\n",
"* ML development is a trial-and-error process. You need to try a lot of ideas!\n",
"* When starting on a new problem, a first step is to establish train, dev, and test sets and performance metrics.\n",
"* This workflow allows you to iterate very quickly."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Development and Test Sets\n",
"\n",
"* __Dev Set__: Its goal is to detect changes in model performance.\n",
"* __Test Set__: Its goal is confidently estimate real-world performance\n",
"* Choosing the best model on the dev set over-estimates its peformance. Hence, a clean and untouched test set is crucial!"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"source": [
"# Choosing a Test Set\n",
"\n",
"The test set is used to esimate real-world performance.\n",
"* Choosing the model that performs best on the development set over-estimates its performance.\n",
"* The test set is separate, hence proves an unbiased estimate.\n",
"* It is important that the test set is left untouched during development!"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Choosing Dev and Test Sets\n",
"\n",
"How should one choose the development and test set? We highlight two considerations."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"__Distributional Consistency__: The development and test sets should be from the data distribution we will see in production."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* This is because we want to be optimizing performance in deployment (e.g., classification accuracy on dog images).\n",
"* The training data could potentially be from a different distribution (e.g., include other types of animal images)."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"__Dataset Size__: Dev and test datasets need to estimate future performance."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* The classic advice is to save 30\\% of data for dev+test.\n",
"* In big data world, 30\\% can be too much. Using e.g. 3,000 inputs for testing out of 1M is enough."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Model Selection\n",
"\n",
"Here, we again highlight two considerations."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"__Choosing Metrics__: The model development workflow requires optimizing a single performance metric.\n",
"* If multiple metrics are important, they can be combined into one (e.g., precision + recall $\\to$ F-score).\n",
"* Other metrics (e.g., computational performance) can be incorporated as constraints."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"__Updating the Model__: We select hyperparameters based on dev set performance and:\n",
"* Inuition, e.g., if the model overfits, regularize it more.\n",
"* Hyperparameter grid search or random search.\n",
"* Sometimes, we use specialized algorithms, e.g. Bayesian hyperparameter optimization.\n",
"\n",
"We will provide much more detail on the intuition part later!"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Example: Training a Neural Net\n",
"\n",
"Consider a workflow for building a neural image classifier.\n",
"1. We start with a standard CNN that gets 90\\% dev set accuracy."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"2. We tune dropout via grid search on dev set; accuracy is 95\\% now."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"3. We try a new idea -- we add residual connections to the CNN and retrain it. This brings dev set accuracy to 99\\%!"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"4. We are happy with this performance. We measure test set accuracy: 97\\%, still quite good!"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Limitations of the ML Workflow\n",
"\n",
"You may encounter a number of issues:\n",
"1. Overfitting dev set after repeatedly choosing the best model on it.\n",
"2. Dev and test sets may no longer represent true data distribution.\n",
"3. The metric may no longer measure true performance.\n",
"\n",
"In such cases you need to collect more data and/or change the metric."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"\n",
"\n",
"# Part 2: Evaluating Classification Models\n",
"\n",
"The first step towards building better ML models is to determine how to *evaluate* them.\n",
"\n",
"We will start by talking about how to evaluate classification models."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Review: Classification\n",
"\n",
"Consider a training dataset $\\mathcal{D} = \\{(x^{(1)}, y^{(1)}), (x^{(2)}, y^{(2)}), \\ldots, (x^{(n)}, y^{(n)})\\}$.\n",
"\n",
"We distinguish between two types of supervised learning problems depnding on the targets $y^{(i)}$. \n",
"\n",
"1. __Regression__: The target variable $y \\in \\mathcal{Y}$ is continuous: $\\mathcal{Y} \\subseteq \\mathbb{R}$.\n",
"2. __Classification__: The target variable $y$ is discrete, and takes on one of $K$ possible values.\n",
"\n",
"When classification labels take $K=2$ values, we perform __binary classification__."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"An example of a classification task is the Iris flower dataset."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
"# import standard machine learning libraries\n",
"import numpy as np\n",
"import pandas as pd\n",
"from sklearn import datasets\n",
"from sklearn.model_selection import train_test_split\n",
"\n",
"iris = datasets.load_iris() # load the Iris dataset\n",
"X, y = iris.data[:120, :2], iris.target[:120] # create imbalanced classes and only use first 2 features\n",
"X, X_holdout, y, y_holdout = train_test_split(X, y, test_size=50, random_state=0)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"We may visualize this dataset in 2D."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"slideshow": {
"slide_type": "-"
}
},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 0, 'Sepal length (cm)')"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
"